diff --git a/package.json b/package.json index fb4605a0c..3b2506db1 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "lazy-value": "^3.0.0", "npm-user": "^5.0.1", "octokit": "^3.1.0", + "parse-author": "^2.0.0", "prettier": "^3.0.2", "replace-in-file": "^7.0.1", "title-case": "^4.0.0", @@ -66,6 +67,7 @@ "@types/git-url-parse": "^9.0.1", "@types/js-yaml": "^4.0.5", "@types/node": "^20.5.6", + "@types/parse-author": "^2.0.1", "@types/prettier": "^2.7.3", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8798856ef..e3f8a8f1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,9 @@ dependencies: octokit: specifier: ^3.1.0 version: 3.1.0 + parse-author: + specifier: ^2.0.0 + version: 2.0.0 prettier: specifier: ^3.0.2 version: 3.0.2 @@ -70,6 +73,9 @@ devDependencies: '@types/node': specifier: ^20.5.6 version: 20.5.6 + '@types/parse-author': + specifier: ^2.0.1 + version: 2.0.1 '@types/prettier': specifier: ^2.7.3 version: 2.7.3 @@ -1738,6 +1744,10 @@ packages: /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + /@types/parse-author@2.0.1: + resolution: {integrity: sha512-2RNXvvDY+7ITl/Q3znDpW9DxyAckKgLCXpoiBHN9BeLH1aV7z/W657P2+PK3wVUgGWXtc99ZQy3LkJTGlxLsvA==} + dev: true + /@types/prettier@2.7.3: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true @@ -2224,6 +2234,11 @@ packages: retry: 0.13.1 dev: true + /author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + dev: false + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -5971,6 +5986,13 @@ packages: callsites: 3.1.0 dev: true + /parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + dependencies: + author-regex: 1.0.0 + dev: false + /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: diff --git a/src/shared/options/createOptionDefaults/parsePackageAuthor.ts b/src/shared/options/createOptionDefaults/parsePackageAuthor.ts index 88c271074..5fa833d19 100644 --- a/src/shared/options/createOptionDefaults/parsePackageAuthor.ts +++ b/src/shared/options/createOptionDefaults/parsePackageAuthor.ts @@ -1,13 +1,19 @@ +import parse from "parse-author"; + import { PartialPackageData } from "../../types.js"; export function parsePackageAuthor(packageData: PartialPackageData) { - const [packageAuthor, packageEmail] = - typeof packageData.author === "string" - ? [ - packageData.author.split("<")[0].trim(), - packageData.author.split(/<|>/)[1]?.trim(), - ] - : [packageData.author?.name, packageData.author?.email]; + let packageAuthor: string | undefined; + let packageEmail: string | undefined; + + if (typeof packageData.author === "string") { + const parsedAuthor = parse(packageData.author); + packageAuthor = parsedAuthor.name; + packageEmail = parsedAuthor.email; + } else if (packageData.author) { + packageAuthor = packageData.author.name; + packageEmail = packageData.author.email; + } return { author: packageAuthor,