license-cop 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "license-cop",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
4
4
  "type": "commonjs",
5
5
  "bin": {
6
6
  "license-cop": "./src/bin/license-cop"
@@ -31,13 +31,13 @@
31
31
  "oss"
32
32
  ],
33
33
  "dependencies": {
34
- "@commander-js/extra-typings": "^11.0.0",
34
+ "@commander-js/extra-typings": "^12.0.0",
35
35
  "@npmcli/arborist": "^7.0.0",
36
36
  "axios": "^1.6.0",
37
37
  "compare-versions": "^6.0.0-rc.1",
38
38
  "cosmiconfig": "^9.0.0",
39
39
  "deepmerge": "^4.3.1",
40
- "git-filesystem": "^0.0.4",
40
+ "git-filesystem": "^0.0.6",
41
41
  "json5": "^2.2.3",
42
42
  "zod": "^3.22.3"
43
43
  },
@@ -2,7 +2,16 @@ import { z } from "zod";
2
2
  declare const packageJsonValidator: z.ZodObject<{
3
3
  name: z.ZodString;
4
4
  version: z.ZodString;
5
- license: z.ZodOptional<z.ZodString>;
5
+ license: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
6
+ type: z.ZodString;
7
+ url: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ type: string;
10
+ url?: string | undefined;
11
+ }, {
12
+ type: string;
13
+ url?: string | undefined;
14
+ }>]>>;
6
15
  licenses: z.ZodOptional<z.ZodArray<z.ZodObject<{
7
16
  type: z.ZodString;
8
17
  url: z.ZodOptional<z.ZodString>;
@@ -16,7 +25,10 @@ declare const packageJsonValidator: z.ZodObject<{
16
25
  }, "strip", z.ZodTypeAny, {
17
26
  name: string;
18
27
  version: string;
19
- license?: string | undefined;
28
+ license?: string | {
29
+ type: string;
30
+ url?: string | undefined;
31
+ } | undefined;
20
32
  licenses?: {
21
33
  type: string;
22
34
  url?: string | undefined;
@@ -24,7 +36,10 @@ declare const packageJsonValidator: z.ZodObject<{
24
36
  }, {
25
37
  name: string;
26
38
  version: string;
27
- license?: string | undefined;
39
+ license?: string | {
40
+ type: string;
41
+ url?: string | undefined;
42
+ } | undefined;
28
43
  licenses?: {
29
44
  type: string;
30
45
  url?: string | undefined;
@@ -17,14 +17,18 @@ const _promises = require("fs/promises");
17
17
  const _zod = require("zod");
18
18
  const _json5 = require("./config/parsers/json5");
19
19
  const _logger = require("./logger");
20
+ const licenseSectionValidator = _zod.z.object({
21
+ type: _zod.z.string(),
22
+ url: _zod.z.string().optional()
23
+ });
20
24
  const packageJsonValidator = _zod.z.object({
21
25
  name: _zod.z.string(),
22
26
  version: _zod.z.string(),
23
- license: _zod.z.string().optional(),
24
- licenses: _zod.z.object({
25
- type: _zod.z.string(),
26
- url: _zod.z.string().optional()
27
- }).array().optional()
27
+ license: _zod.z.union([
28
+ _zod.z.string(),
29
+ licenseSectionValidator
30
+ ]).optional(),
31
+ licenses: licenseSectionValidator.array().optional()
28
32
  });
29
33
  const readPackageJson = async (pathToPackageJson)=>{
30
34
  const doesPackageJsonExist = await doesFileExist(pathToPackageJson);
@@ -43,9 +47,12 @@ const readPackageJson = async (pathToPackageJson)=>{
43
47
  return packageJson.data;
44
48
  };
45
49
  const getLicenseExpression = (packageJson)=>{
46
- if (packageJson.license) {
50
+ if (packageJson.license && typeof packageJson.license === "string") {
47
51
  return packageJson.license;
48
52
  }
53
+ if (packageJson.license && typeof packageJson.license === "object") {
54
+ return packageJson.license.type;
55
+ }
49
56
  if (packageJson.licenses) {
50
57
  const licenses = packageJson.licenses.map((license)=>license.type);
51
58
  if (licenses.length === 1) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/license-cop/src/lib/package-json.ts"],"sourcesContent":["import { Stats } from \"fs\";\nimport { readFile, stat } from \"fs/promises\";\nimport { z } from \"zod\";\nimport { json5Parse } from \"./config/parsers/json5\";\nimport logger from \"./logger\";\n\nconst packageJsonValidator = z.object({\n name: z.string(),\n version: z.string(),\n license: z.string().optional(),\n licenses: z\n .object({\n type: z.string(),\n url: z.string().optional()\n })\n .array()\n .optional()\n});\n\ntype PackageJson = z.infer<typeof packageJsonValidator>;\n\nexport const readPackageJson = async (pathToPackageJson: string): Promise<PackageJson> => {\n const doesPackageJsonExist = await doesFileExist(pathToPackageJson);\n if (!doesPackageJsonExist) {\n logger.verbose(`Cannot find the package.json: '${pathToPackageJson}'`);\n throw new Error(`Cannot find the file: '${pathToPackageJson}'`);\n }\n\n const packageJsonAsString: string = await readFile(pathToPackageJson, { encoding: \"utf8\" });\n\n const parsedFile = json5Parse<unknown>(packageJsonAsString);\n\n const packageJson = packageJsonValidator.safeParse(parsedFile);\n\n if (!packageJson.success) {\n throw new Error(\n `Unable to parse package.json: ${pathToPackageJson}: ${packageJson.error.message}`\n );\n }\n\n return packageJson.data;\n};\n\nexport const getLicenseExpression = (packageJson: PackageJson): string => {\n if (packageJson.license) {\n return packageJson.license;\n }\n\n if (packageJson.licenses) {\n const licenses = packageJson.licenses.map<string>(license => license.type);\n\n if (licenses.length === 1) {\n return licenses[0];\n }\n\n return `(${licenses.join(\" AND \")})`;\n }\n\n return \"UNLICENSED\";\n};\n\nconst doesFileExist = async (path: string): Promise<boolean> => {\n try {\n const stats: Stats = await stat(path);\n return stats.isFile();\n } catch {\n return false;\n }\n};\n"],"names":["getLicenseExpression","readPackageJson","packageJsonValidator","z","object","name","string","version","license","optional","licenses","type","url","array","pathToPackageJson","doesPackageJsonExist","doesFileExist","logger","verbose","Error","packageJsonAsString","readFile","encoding","parsedFile","json5Parse","packageJson","safeParse","success","error","message","data","map","length","join","path","stats","stat","isFile"],"mappings":";;;;;;;;IA2CaA,oBAAoB;eAApBA;;IAtBAC,eAAe;eAAfA;;;0BApBkB;qBACb;uBACS;wBACR;AAEnB,MAAMC,uBAAuBC,MAAC,CAACC,MAAM,CAAC;IACpCC,MAAMF,MAAC,CAACG,MAAM;IACdC,SAASJ,MAAC,CAACG,MAAM;IACjBE,SAASL,MAAC,CAACG,MAAM,GAAGG,QAAQ;IAC5BC,UAAUP,MAAC,CACRC,MAAM,CAAC;QACNO,MAAMR,MAAC,CAACG,MAAM;QACdM,KAAKT,MAAC,CAACG,MAAM,GAAGG,QAAQ;IAC1B,GACCI,KAAK,GACLJ,QAAQ;AACb;AAIO,MAAMR,kBAAkB,OAAOa;IACpC,MAAMC,uBAAuB,MAAMC,cAAcF;IACjD,IAAI,CAACC,sBAAsB;QACzBE,eAAM,CAACC,OAAO,CAAC,CAAC,+BAA+B,EAAEJ,kBAAkB,CAAC,CAAC;QACrE,MAAM,IAAIK,MAAM,CAAC,uBAAuB,EAAEL,kBAAkB,CAAC,CAAC;IAChE;IAEA,MAAMM,sBAA8B,MAAMC,IAAAA,kBAAQ,EAACP,mBAAmB;QAAEQ,UAAU;IAAO;IAEzF,MAAMC,aAAaC,IAAAA,iBAAU,EAAUJ;IAEvC,MAAMK,cAAcvB,qBAAqBwB,SAAS,CAACH;IAEnD,IAAI,CAACE,YAAYE,OAAO,EAAE;QACxB,MAAM,IAAIR,MACR,CAAC,8BAA8B,EAAEL,kBAAkB,EAAE,EAAEW,YAAYG,KAAK,CAACC,OAAO,CAAC,CAAC;IAEtF;IAEA,OAAOJ,YAAYK,IAAI;AACzB;AAEO,MAAM9B,uBAAuB,CAACyB;IACnC,IAAIA,YAAYjB,OAAO,EAAE;QACvB,OAAOiB,YAAYjB,OAAO;IAC5B;IAEA,IAAIiB,YAAYf,QAAQ,EAAE;QACxB,MAAMA,WAAWe,YAAYf,QAAQ,CAACqB,GAAG,CAASvB,CAAAA,UAAWA,QAAQG,IAAI;QAEzE,IAAID,SAASsB,MAAM,KAAK,GAAG;YACzB,OAAOtB,QAAQ,CAAC,EAAE;QACpB;QAEA,OAAO,CAAC,CAAC,EAAEA,SAASuB,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC;IAEA,OAAO;AACT;AAEA,MAAMjB,gBAAgB,OAAOkB;IAC3B,IAAI;QACF,MAAMC,QAAe,MAAMC,IAAAA,cAAI,EAACF;QAChC,OAAOC,MAAME,MAAM;IACrB,EAAE,UAAM;QACN,OAAO;IACT;AACF"}
1
+ {"version":3,"sources":["../../../../../packages/license-cop/src/lib/package-json.ts"],"sourcesContent":["import { Stats } from \"fs\";\nimport { readFile, stat } from \"fs/promises\";\nimport { z } from \"zod\";\nimport { json5Parse } from \"./config/parsers/json5\";\nimport logger from \"./logger\";\n\nconst licenseSectionValidator = z.object({\n type: z.string(),\n url: z.string().optional()\n});\n\nconst packageJsonValidator = z.object({\n name: z.string(),\n version: z.string(),\n license: z.union([z.string(), licenseSectionValidator]).optional(),\n licenses: licenseSectionValidator.array().optional()\n});\n\ntype PackageJson = z.infer<typeof packageJsonValidator>;\n\nexport const readPackageJson = async (pathToPackageJson: string): Promise<PackageJson> => {\n const doesPackageJsonExist = await doesFileExist(pathToPackageJson);\n if (!doesPackageJsonExist) {\n logger.verbose(`Cannot find the package.json: '${pathToPackageJson}'`);\n throw new Error(`Cannot find the file: '${pathToPackageJson}'`);\n }\n\n const packageJsonAsString: string = await readFile(pathToPackageJson, { encoding: \"utf8\" });\n\n const parsedFile = json5Parse<unknown>(packageJsonAsString);\n\n const packageJson = packageJsonValidator.safeParse(parsedFile);\n\n if (!packageJson.success) {\n throw new Error(\n `Unable to parse package.json: ${pathToPackageJson}: ${packageJson.error.message}`\n );\n }\n\n return packageJson.data;\n};\n\nexport const getLicenseExpression = (packageJson: PackageJson): string => {\n if (packageJson.license && typeof packageJson.license === \"string\") {\n return packageJson.license;\n }\n\n if (packageJson.license && typeof packageJson.license === \"object\") {\n return packageJson.license.type;\n }\n\n if (packageJson.licenses) {\n const licenses = packageJson.licenses.map<string>(license => license.type);\n\n if (licenses.length === 1) {\n return licenses[0];\n }\n\n return `(${licenses.join(\" AND \")})`;\n }\n\n return \"UNLICENSED\";\n};\n\nconst doesFileExist = async (path: string): Promise<boolean> => {\n try {\n const stats: Stats = await stat(path);\n return stats.isFile();\n } catch {\n return false;\n }\n};\n"],"names":["getLicenseExpression","readPackageJson","licenseSectionValidator","z","object","type","string","url","optional","packageJsonValidator","name","version","license","union","licenses","array","pathToPackageJson","doesPackageJsonExist","doesFileExist","logger","verbose","Error","packageJsonAsString","readFile","encoding","parsedFile","json5Parse","packageJson","safeParse","success","error","message","data","map","length","join","path","stats","stat","isFile"],"mappings":";;;;;;;;IA0CaA,oBAAoB;eAApBA;;IAtBAC,eAAe;eAAfA;;;0BAnBkB;qBACb;uBACS;wBACR;AAEnB,MAAMC,0BAA0BC,MAAC,CAACC,MAAM,CAAC;IACvCC,MAAMF,MAAC,CAACG,MAAM;IACdC,KAAKJ,MAAC,CAACG,MAAM,GAAGE,QAAQ;AAC1B;AAEA,MAAMC,uBAAuBN,MAAC,CAACC,MAAM,CAAC;IACpCM,MAAMP,MAAC,CAACG,MAAM;IACdK,SAASR,MAAC,CAACG,MAAM;IACjBM,SAAST,MAAC,CAACU,KAAK,CAAC;QAACV,MAAC,CAACG,MAAM;QAAIJ;KAAwB,EAAEM,QAAQ;IAChEM,UAAUZ,wBAAwBa,KAAK,GAAGP,QAAQ;AACpD;AAIO,MAAMP,kBAAkB,OAAOe;IACpC,MAAMC,uBAAuB,MAAMC,cAAcF;IACjD,IAAI,CAACC,sBAAsB;QACzBE,eAAM,CAACC,OAAO,CAAC,CAAC,+BAA+B,EAAEJ,kBAAkB,CAAC,CAAC;QACrE,MAAM,IAAIK,MAAM,CAAC,uBAAuB,EAAEL,kBAAkB,CAAC,CAAC;IAChE;IAEA,MAAMM,sBAA8B,MAAMC,IAAAA,kBAAQ,EAACP,mBAAmB;QAAEQ,UAAU;IAAO;IAEzF,MAAMC,aAAaC,IAAAA,iBAAU,EAAUJ;IAEvC,MAAMK,cAAclB,qBAAqBmB,SAAS,CAACH;IAEnD,IAAI,CAACE,YAAYE,OAAO,EAAE;QACxB,MAAM,IAAIR,MACR,CAAC,8BAA8B,EAAEL,kBAAkB,EAAE,EAAEW,YAAYG,KAAK,CAACC,OAAO,CAAC,CAAC;IAEtF;IAEA,OAAOJ,YAAYK,IAAI;AACzB;AAEO,MAAMhC,uBAAuB,CAAC2B;IACnC,IAAIA,YAAYf,OAAO,IAAI,OAAOe,YAAYf,OAAO,KAAK,UAAU;QAClE,OAAOe,YAAYf,OAAO;IAC5B;IAEA,IAAIe,YAAYf,OAAO,IAAI,OAAOe,YAAYf,OAAO,KAAK,UAAU;QAClE,OAAOe,YAAYf,OAAO,CAACP,IAAI;IACjC;IAEA,IAAIsB,YAAYb,QAAQ,EAAE;QACxB,MAAMA,WAAWa,YAAYb,QAAQ,CAACmB,GAAG,CAASrB,CAAAA,UAAWA,QAAQP,IAAI;QAEzE,IAAIS,SAASoB,MAAM,KAAK,GAAG;YACzB,OAAOpB,QAAQ,CAAC,EAAE;QACpB;QAEA,OAAO,CAAC,CAAC,EAAEA,SAASqB,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC;IAEA,OAAO;AACT;AAEA,MAAMjB,gBAAgB,OAAOkB;IAC3B,IAAI;QACF,MAAMC,QAAe,MAAMC,IAAAA,cAAI,EAACF;QAChC,OAAOC,MAAME,MAAM;IACrB,EAAE,UAAM;QACN,OAAO;IACT;AACF"}