From 3697f8da6fff5a98af768c36864ac5ad32be1c43 Mon Sep 17 00:00:00 2001 From: Christophe Hurpeau Date: Fri, 30 Dec 2022 17:28:29 +0100 Subject: [PATCH] feat: allow duplicate devdep and dep when pkg is library and dep is range BREAKING CHANGE: isLibrary is now an option on createCheckPackage instead of checkRecommended --- .../check-package-with-workspaces.d.ts | 8 ++- .../check-package-with-workspaces.d.ts.map | 2 +- dist/definitions/check-package.d.ts | 8 ++- dist/definitions/check-package.d.ts.map | 2 +- .../checkDirectDuplicateDependencies.d.ts | 4 +- .../checkDirectDuplicateDependencies.d.ts.map | 2 +- .../checks/checkDirectPeerDependencies.d.ts | 2 +- .../checkDirectPeerDependencies.d.ts.map | 2 +- .../checks/checkDuplicateDependencies.d.ts | 2 +- .../checkDuplicateDependencies.d.ts.map | 2 +- dist/index-node16.mjs | 67 +++++++++++-------- dist/index-node16.mjs.map | 2 +- scripts/check-package.js | 5 +- src/.eslintrc.json | 3 + src/check-package-with-workspaces.ts | 35 ++++++---- src/check-package.ts | 30 +++++---- .../checkDirectDuplicateDependencies.ts | 4 +- src/checks/checkDirectPeerDependencies.ts | 2 +- src/checks/checkDuplicateDependencies.test.ts | 56 ++++++++++++++++ src/checks/checkDuplicateDependencies.ts | 29 +++++++- tsconfig.json | 3 +- 21 files changed, 192 insertions(+), 78 deletions(-) diff --git a/dist/definitions/check-package-with-workspaces.d.ts b/dist/definitions/check-package-with-workspaces.d.ts index b20835b3..60c88537 100644 --- a/dist/definitions/check-package-with-workspaces.d.ts +++ b/dist/definitions/check-package-with-workspaces.d.ts @@ -1,5 +1,7 @@ +import type { Except } from 'type-fest'; import type { CreateCheckPackageOptions, CheckPackageApi, OnlyWarnsForInDependenciesCheckPackageRecommendedOption, OnlyWarnsForInDependencyCheckPackageRecommendedOption, OnlyWarnsForInPackageCheckPackageRecommendedOption } from './check-package'; import type { CheckResolutionMessage } from './checks/checkResolutionsHasExplanation'; +import type { PackageJson } from './utils/packageTypes'; import type { OnlyWarnsForOptionalDependencyMapping } from './utils/warnForUtils'; interface OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption extends OnlyWarnsForInPackageCheckPackageRecommendedOption { duplicateDirectDependency: OnlyWarnsForInDependencyCheckPackageRecommendedOption['duplicateDirectDependency']; @@ -7,7 +9,6 @@ interface OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption extends Onl type OnlyWarnsForInMonorepoPackagesCheckPackageRecommendedOption = Record<'*' | string, OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption>; type OnlyWarnsForInMonorepoPackagesDependenciesCheckPackageRecommendedOption = Record; export interface CheckPackageWithWorkspacesRecommendedOptions { - isLibrary?: (pkgName: string) => boolean; allowRangeVersionsInLibraries?: boolean; monorepoDirectDuplicateDependenciesOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping; onlyWarnsForInRootPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption; @@ -23,6 +24,9 @@ export interface CheckPackageWithWorkspacesApi { forEach: (callback: (checkPackage: CheckPackageApi) => void) => CheckPackageWithWorkspacesApi; for: (id: string, callback: (checkPackage: CheckPackageApi) => void) => CheckPackageWithWorkspacesApi; } -export declare function createCheckPackageWithWorkspaces(pkgDirectoryPath?: string, createCheckPackageOptions?: CreateCheckPackageOptions): CheckPackageWithWorkspacesApi; +interface CreateCheckPackageWithWorkspacesOptions extends Except { + isLibrary?: (pkg: PackageJson) => boolean; +} +export declare function createCheckPackageWithWorkspaces(createCheckPackageOptions?: CreateCheckPackageWithWorkspacesOptions): CheckPackageWithWorkspacesApi; export {}; //# sourceMappingURL=check-package-with-workspaces.d.ts.map \ No newline at end of file diff --git a/dist/definitions/check-package-with-workspaces.d.ts.map b/dist/definitions/check-package-with-workspaces.d.ts.map index c9f37641..dcd0c36c 100644 --- a/dist/definitions/check-package-with-workspaces.d.ts.map +++ b/dist/definitions/check-package-with-workspaces.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"check-package-with-workspaces.d.ts","sourceRoot":"","sources":["../../src/check-package-with-workspaces.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,yBAAyB,EACzB,eAAe,EACf,uDAAuD,EACvD,qDAAqD,EACrD,kDAAkD,EACnD,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAKtF,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,sBAAsB,CAAC;AAGlF,UAAU,0DACR,SAAQ,kDAAkD;IAC1D,yBAAyB,EAAE,qDAAqD,CAAC,2BAA2B,CAAC,CAAC;CAC/G;AAED,KAAK,2DAA2D,GAAG,MAAM,CAEvE,GAAG,GAAG,MAAM,EACZ,0DAA0D,CAC3D,CAAC;AAEF,KAAK,uEAAuE,GAC1E,MAAM,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;AAE1E,MAAM,WAAW,4CAA4C;IAC3D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,+CAA+C,CAAC,EAAE,qCAAqC,CAAC;IACxF,yBAAyB,CAAC,EAAE,kDAAkD,CAAC;IAC/E,8BAA8B,CAAC,EAAE,2DAA2D,CAAC;IAC7F,8BAA8B,CAAC,EAAE,uDAAuD,CAAC;IACzF,0CAA0C,CAAC,EAAE,uEAAuE,CAAC;IACrH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,gBAAgB,EAAE,CAChB,OAAO,CAAC,EAAE,4CAA4C,KACnD,6BAA6B,CAAC;IAEnC,OAAO,EAAE,CACP,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,KAC9C,6BAA6B,CAAC;IACnC,OAAO,EAAE,CACP,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,KAC9C,6BAA6B,CAAC;IACnC,GAAG,EAAE,CACH,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,KAC9C,6BAA6B,CAAC;CACpC;AAED,wBAAgB,gCAAgC,CAC9C,gBAAgB,SAAM,EACtB,yBAAyB,GAAE,yBAA8B,GACxD,6BAA6B,CAuL/B"} \ No newline at end of file +{"version":3,"file":"check-package-with-workspaces.d.ts","sourceRoot":"","sources":["../../src/check-package-with-workspaces.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EACV,yBAAyB,EACzB,eAAe,EACf,uDAAuD,EACvD,qDAAqD,EACrD,kDAAkD,EACnD,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAKtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,sBAAsB,CAAC;AAGlF,UAAU,0DACR,SAAQ,kDAAkD;IAC1D,yBAAyB,EAAE,qDAAqD,CAAC,2BAA2B,CAAC,CAAC;CAC/G;AAED,KAAK,2DAA2D,GAAG,MAAM,CAEvE,GAAG,GAAG,MAAM,EACZ,0DAA0D,CAC3D,CAAC;AAEF,KAAK,uEAAuE,GAC1E,MAAM,CAAC,MAAM,EAAE,uDAAuD,CAAC,CAAC;AAE1E,MAAM,WAAW,4CAA4C;IAC3D,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,+CAA+C,CAAC,EAAE,qCAAqC,CAAC;IACxF,yBAAyB,CAAC,EAAE,kDAAkD,CAAC;IAC/E,8BAA8B,CAAC,EAAE,2DAA2D,CAAC;IAC7F,8BAA8B,CAAC,EAAE,uDAAuD,CAAC;IACzF,0CAA0C,CAAC,EAAE,uEAAuE,CAAC;IACrH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,gBAAgB,EAAE,CAChB,OAAO,CAAC,EAAE,4CAA4C,KACnD,6BAA6B,CAAC;IAEnC,OAAO,EAAE,CACP,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,KAC9C,6BAA6B,CAAC;IACnC,OAAO,EAAE,CACP,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,KAC9C,6BAA6B,CAAC;IACnC,GAAG,EAAE,CACH,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,KAC9C,6BAA6B,CAAC;CACpC;AAED,UAAU,uCACR,SAAQ,MAAM,CAAC,yBAAyB,EAAE,WAAW,CAAC;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC;CAC3C;AAED,wBAAgB,gCAAgC,CAC9C,yBAAyB,GAAE,uCAA4C,GACtE,6BAA6B,CAyL/B"} \ No newline at end of file diff --git a/dist/definitions/check-package.d.ts b/dist/definitions/check-package.d.ts index 52e483eb..8a6eaa0b 100644 --- a/dist/definitions/check-package.d.ts +++ b/dist/definitions/check-package.d.ts @@ -3,11 +3,12 @@ import type { GetDependencyPackageJson } from './utils/createGetDependencyPackag import type { DependenciesRanges, DependencyName, DependencyTypes, PackageJson } from './utils/packageTypes'; import type { OnlyWarnsForOptionalDependencyMapping, OnlyWarnsFor } from './utils/warnForUtils'; export interface CreateCheckPackageOptions { + packageDirectoryPath?: string; + isLibrary?: boolean | ((pkg: PackageJson) => boolean); /** @internal */ internalWorkspacePkgDirectoryPath?: string; } export interface CheckDirectPeerDependenciesOptions { - isLibrary?: boolean; missingOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping; invalidOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping; internalMissingConfigName?: string; @@ -27,7 +28,6 @@ export interface OnlyWarnsForInDependencyCheckPackageRecommendedOption { } export type OnlyWarnsForInDependenciesCheckPackageRecommendedOption = Record<'*' | string, OnlyWarnsForInDependencyCheckPackageRecommendedOption>; export interface CheckRecommendedOptions { - isLibrary?: boolean; /** default is true for libraries, false otherwise */ allowRangeVersionsInDependencies?: boolean; onlyWarnsForInPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption; @@ -52,6 +52,8 @@ export interface CheckPackageApi { /** @internal */ pkgPathName: string; /** @internal */ + isPkgLibrary: boolean; + /** @internal */ getDependencyPackageJson: GetDependencyPackageJson; checkExactVersions: (options?: CheckExactVersionsOptions) => CheckPackageApi; checkResolutionsVersionsMatch: () => CheckPackageApi; @@ -173,5 +175,5 @@ export interface CheckPackageApi { */ checkSatisfiesVersionsInDependency: (depName: string, dependenciesRanges: DependenciesRanges) => CheckPackageApi; } -export declare function createCheckPackage(pkgDirectoryPath?: string, { internalWorkspacePkgDirectoryPath }?: CreateCheckPackageOptions): CheckPackageApi; +export declare function createCheckPackage({ packageDirectoryPath, internalWorkspacePkgDirectoryPath, isLibrary, }?: CreateCheckPackageOptions): CheckPackageApi; //# sourceMappingURL=check-package.d.ts.map \ No newline at end of file diff --git a/dist/definitions/check-package.d.ts.map b/dist/definitions/check-package.d.ts.map index 4b8c521e..00b9388a 100644 --- a/dist/definitions/check-package.d.ts.map +++ b/dist/definitions/check-package.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"check-package.d.ts","sourceRoot":"","sources":["../../src/check-package.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"check-package.d.ts","sourceRoot":"","sources":["../../src/check-package.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts b/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts index 9a1ab0ad..2ac08e36 100644 --- a/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts +++ b/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts @@ -1,6 +1,6 @@ -import type { GetDependencyPackageJson } from 'utils/createGetDependencyPackageJson'; +import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson'; import { createReportError } from '../utils/createReportError'; import type { PackageJson, DependencyTypes } from '../utils/packageTypes'; import type { OnlyWarnsForMappingCheck } from '../utils/warnForUtils'; -export declare function checkDirectDuplicateDependencies(pkg: PackageJson, pkgPathName: string, depType: DependencyTypes, getDependencyPackageJson: GetDependencyPackageJson, onlyWarnsForCheck: OnlyWarnsForMappingCheck, reportErrorNamePrefix?: string, customCreateReportError?: typeof createReportError): Promise; +export declare function checkDirectDuplicateDependencies(pkg: PackageJson, pkgPathName: string, isPackageALibrary: boolean, depType: DependencyTypes, getDependencyPackageJson: GetDependencyPackageJson, onlyWarnsForCheck: OnlyWarnsForMappingCheck, reportErrorNamePrefix?: string, customCreateReportError?: typeof createReportError): Promise; //# sourceMappingURL=checkDirectDuplicateDependencies.d.ts.map \ No newline at end of file diff --git a/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts.map b/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts.map index e2a220c6..f492f298 100644 --- a/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts.map +++ b/dist/definitions/checks/checkDirectDuplicateDependencies.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"checkDirectDuplicateDependencies.d.ts","sourceRoot":"","sources":["../../../src/checks/checkDirectDuplicateDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAEL,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGtE,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,EACxB,wBAAwB,EAAE,wBAAwB,EAClD,iBAAiB,EAAE,wBAAwB,EAC3C,qBAAqB,SAAK,EAC1B,uBAAuB,2BAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAqCf"} \ No newline at end of file +{"version":3,"file":"checkDirectDuplicateDependencies.d.ts","sourceRoot":"","sources":["../../../src/checks/checkDirectDuplicateDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAEL,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGtE,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,OAAO,EAC1B,OAAO,EAAE,eAAe,EACxB,wBAAwB,EAAE,wBAAwB,EAClD,iBAAiB,EAAE,wBAAwB,EAC3C,qBAAqB,SAAK,EAC1B,uBAAuB,2BAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAsCf"} \ No newline at end of file diff --git a/dist/definitions/checks/checkDirectPeerDependencies.d.ts b/dist/definitions/checks/checkDirectPeerDependencies.d.ts index d229c4e0..d2f1636c 100644 --- a/dist/definitions/checks/checkDirectPeerDependencies.d.ts +++ b/dist/definitions/checks/checkDirectPeerDependencies.d.ts @@ -1,4 +1,4 @@ -import type { GetDependencyPackageJson } from 'utils/createGetDependencyPackageJson'; +import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson'; import { createReportError } from '../utils/createReportError'; import type { PackageJson } from '../utils/packageTypes'; import type { OnlyWarnsForMappingCheck } from '../utils/warnForUtils'; diff --git a/dist/definitions/checks/checkDirectPeerDependencies.d.ts.map b/dist/definitions/checks/checkDirectPeerDependencies.d.ts.map index 5bb7f805..99de4e12 100644 --- a/dist/definitions/checks/checkDirectPeerDependencies.d.ts.map +++ b/dist/definitions/checks/checkDirectPeerDependencies.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"checkDirectPeerDependencies.d.ts","sourceRoot":"","sources":["../../../src/checks/checkDirectPeerDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EACL,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAEV,WAAW,EAEZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AA2BtE,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,wBAAwB,EAAE,wBAAwB,EAClD,wBAAwB,EAAE,wBAAwB,EAClD,wBAAwB,EAAE,wBAAwB,EAClD,uBAAuB,2BAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CA6Bf"} \ No newline at end of file +{"version":3,"file":"checkDirectPeerDependencies.d.ts","sourceRoot":"","sources":["../../../src/checks/checkDirectPeerDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EACL,iBAAiB,EAElB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAEV,WAAW,EAEZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AA2BtE,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,wBAAwB,EAAE,wBAAwB,EAClD,wBAAwB,EAAE,wBAAwB,EAClD,wBAAwB,EAAE,wBAAwB,EAClD,uBAAuB,2BAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CA6Bf"} \ No newline at end of file diff --git a/dist/definitions/checks/checkDuplicateDependencies.d.ts b/dist/definitions/checks/checkDuplicateDependencies.d.ts index 32b6620a..fbe38522 100644 --- a/dist/definitions/checks/checkDuplicateDependencies.d.ts +++ b/dist/definitions/checks/checkDuplicateDependencies.d.ts @@ -1,5 +1,5 @@ import type { ReportError } from '../utils/createReportError'; import type { PackageJson, DependencyTypes } from '../utils/packageTypes'; import type { OnlyWarnsForCheck } from '../utils/warnForUtils'; -export declare function checkDuplicateDependencies(reportError: ReportError, pkg: PackageJson, depType: DependencyTypes, searchIn: DependencyTypes[], depPkg: PackageJson, onlyWarnsForCheck: OnlyWarnsForCheck): void; +export declare function checkDuplicateDependencies(reportError: ReportError, pkg: PackageJson, isPkgLibrary: boolean, depType: DependencyTypes, searchIn: DependencyTypes[], depPkg: PackageJson, onlyWarnsForCheck: OnlyWarnsForCheck): void; //# sourceMappingURL=checkDuplicateDependencies.d.ts.map \ No newline at end of file diff --git a/dist/definitions/checks/checkDuplicateDependencies.d.ts.map b/dist/definitions/checks/checkDuplicateDependencies.d.ts.map index 957b60ad..111048c1 100644 --- a/dist/definitions/checks/checkDuplicateDependencies.d.ts.map +++ b/dist/definitions/checks/checkDuplicateDependencies.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"checkDuplicateDependencies.d.ts","sourceRoot":"","sources":["../../../src/checks/checkDuplicateDependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,WAAW,EACnB,iBAAiB,EAAE,iBAAiB,GACnC,IAAI,CAoDN"} \ No newline at end of file +{"version":3,"file":"checkDuplicateDependencies.d.ts","sourceRoot":"","sources":["../../../src/checks/checkDuplicateDependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,WAAW,EACnB,iBAAiB,EAAE,iBAAiB,GACnC,IAAI,CA4EN"} \ No newline at end of file diff --git a/dist/index-node16.mjs b/dist/index-node16.mjs index 91968805..ccffcc3c 100644 --- a/dist/index-node16.mjs +++ b/dist/index-node16.mjs @@ -43,14 +43,24 @@ function reportNotWarnedForMapping(reportError, onlyWarnsForMappingCheck) { }); } -function checkDuplicateDependencies(reportError, pkg, depType, searchIn, depPkg, onlyWarnsForCheck) { +function checkDuplicateDependencies(reportError, pkg, isPkgLibrary, depType, searchIn, depPkg, onlyWarnsForCheck) { const dependencies = depPkg[depType]; if (!dependencies) return; const searchInExisting = searchIn.filter(type => pkg[type]); for (const [depKey, range] of Object.entries(dependencies)) { const versionsIn = searchInExisting.filter(type => pkg[type][depKey]); - if (versionsIn.length > 1) { - reportError(`${depKey} is present in both devDependencies and dependencies, please place it only in dependencies`); + let allowDuplicated = false; + if (versionsIn.length === 2 && isPkgLibrary && versionsIn.includes('dependencies') && versionsIn.includes('devDependencies')) { + const depVersion = pkg.dependencies[depKey]; + const devDepVersion = pkg.devDependencies[depKey]; + if (depVersion && depVersion === devDepVersion) { + reportError(`Invalid "${depKey}" has same version in dependencies and devDependencies`, 'please place it only in dependencies or use range in dependencies'); + continue; + } + allowDuplicated = true; + } + if (versionsIn.length > 2 || versionsIn.length === 2 && !allowDuplicated) { + reportError(`Invalid "${depKey}" present in ${versionsIn.join(' and ')}`, 'please place it only in dependencies'); } else { const versions = versionsIn.map(type => pkg[type][depKey]); versions.forEach((version, index) => { @@ -78,7 +88,7 @@ function checkDuplicateDependencies(reportError, pkg, depType, searchIn, depPkg, } } -async function checkDirectDuplicateDependencies(pkg, pkgPathName, depType, getDependencyPackageJson, onlyWarnsForCheck, reportErrorNamePrefix = '', customCreateReportError = createReportError) { +async function checkDirectDuplicateDependencies(pkg, pkgPathName, isPackageALibrary, depType, getDependencyPackageJson, onlyWarnsForCheck, reportErrorNamePrefix = '', customCreateReportError = createReportError) { const reportError = customCreateReportError(`${reportErrorNamePrefix}Direct Duplicate Dependencies`, pkgPathName); await Promise.all([{ type: 'devDependencies', @@ -94,7 +104,7 @@ async function checkDirectDuplicateDependencies(pkg, pkgPathName, depType, getDe if (!dependencies) return; for (const depName of getKeys(dependencies)) { const depPkg = await getDependencyPackageJson(depName); - checkDuplicateDependencies(reportError, pkg, depType, searchIn, depPkg, onlyWarnsForCheck.createFor(depName)); + checkDuplicateDependencies(reportError, pkg, isPackageALibrary, depType, searchIn, depPkg, onlyWarnsForCheck.createFor(depName)); } })); reportNotWarnedForMapping(reportError, onlyWarnsForCheck); @@ -504,14 +514,17 @@ const createOnlyWarnsForMappingCheck = (configName, onlyWarnsFor) => { }; /* eslint-disable max-lines */ -function createCheckPackage(pkgDirectoryPath = '.', { - internalWorkspacePkgDirectoryPath +function createCheckPackage({ + packageDirectoryPath = '.', + internalWorkspacePkgDirectoryPath, + isLibrary = false } = {}) { - const pkgDirname = path.resolve(pkgDirectoryPath); + const pkgDirname = path.resolve(packageDirectoryPath); const pkgPath = `${pkgDirname}/package.json`; - const pkgPathName = `${pkgDirectoryPath}/package.json`; + const pkgPathName = `${packageDirectoryPath}/package.json`; const pkg = readPkgJson(pkgPath); const copyPkg = JSON.parse(JSON.stringify(pkg)); + const isPkgLibrary = typeof isLibrary === 'function' ? isLibrary(pkg) : isLibrary; let tryToAutoFix = false; if (process.argv.slice(2).includes('--fix')) { tryToAutoFix = true; @@ -558,6 +571,7 @@ function createCheckPackage(pkgDirectoryPath = '.', { pkg, pkgDirname, pkgPathName, + isPkgLibrary, getDependencyPackageJson, checkExactVersions({ onlyWarnsFor, @@ -599,7 +613,6 @@ function createCheckPackage(pkgDirectoryPath = '.', { return this; }, checkDirectPeerDependencies({ - isLibrary = false, missingOnlyWarnsFor, invalidOnlyWarnsFor, internalMissingConfigName = 'missingOnlyWarnsFor', @@ -608,7 +621,7 @@ function createCheckPackage(pkgDirectoryPath = '.', { jobs.push(new Job(this.checkDirectPeerDependencies.name, async () => { const missingOnlyWarnsForCheck = createOnlyWarnsForMappingCheck(internalMissingConfigName, missingOnlyWarnsFor); const invalidOnlyWarnsForCheck = internalInvalidConfigName === internalMissingConfigName ? missingOnlyWarnsForCheck : createOnlyWarnsForMappingCheck(internalInvalidConfigName, invalidOnlyWarnsFor); - await checkDirectPeerDependencies(isLibrary, pkg, pkgPathName, getDependencyPackageJson, missingOnlyWarnsForCheck, invalidOnlyWarnsForCheck); + await checkDirectPeerDependencies(isPkgLibrary, pkg, pkgPathName, getDependencyPackageJson, missingOnlyWarnsForCheck, invalidOnlyWarnsForCheck); })); return this; }, @@ -617,7 +630,7 @@ function createCheckPackage(pkgDirectoryPath = '.', { internalConfigName = 'onlyWarnsFor' } = {}) { jobs.push(new Job(this.checkDirectDuplicateDependencies.name, async () => { - await checkDirectDuplicateDependencies(pkg, pkgPathName, 'dependencies', getDependencyPackageJson, createOnlyWarnsForMappingCheck(internalConfigName, onlyWarnsFor)); + await checkDirectDuplicateDependencies(pkg, pkgPathName, isPkgLibrary, 'dependencies', getDependencyPackageJson, createOnlyWarnsForMappingCheck(internalConfigName, onlyWarnsFor)); })); return this; }, @@ -626,10 +639,9 @@ function createCheckPackage(pkgDirectoryPath = '.', { return this; }, checkRecommended({ - isLibrary = false, onlyWarnsForInPackage, onlyWarnsForInDependencies, - allowRangeVersionsInDependencies = isLibrary, + allowRangeVersionsInDependencies = isPkgLibrary, internalExactVersionsIgnore, checkResolutionMessage } = {}) { @@ -661,7 +673,6 @@ function createCheckPackage(pkgDirectoryPath = '.', { this.checkResolutionsVersionsMatch(); this.checkResolutionsHasExplanation(checkResolutionMessage); this.checkDirectPeerDependencies({ - isLibrary, missingOnlyWarnsFor: internalMissingPeerDependenciesOnlyWarnsFor, invalidOnlyWarnsFor: internalInvalidPeerDependenciesOnlyWarnsFor, internalMissingConfigName: 'onlyWarnsForInDependencies.missingPeerDependency', @@ -797,8 +808,11 @@ function createCheckPackage(pkgDirectoryPath = '.', { } /* eslint-disable max-lines */ -function createCheckPackageWithWorkspaces(pkgDirectoryPath = '.', createCheckPackageOptions = {}) { - const checkPackage = createCheckPackage(pkgDirectoryPath, createCheckPackageOptions); +function createCheckPackageWithWorkspaces(createCheckPackageOptions = {}) { + const checkPackage = createCheckPackage({ + ...createCheckPackageOptions, + isLibrary: false + }); const { pkg, pkgDirname @@ -822,9 +836,10 @@ function createCheckPackageWithWorkspaces(pkgDirectoryPath = '.', createCheckPac }); } const checksWorkspaces = new Map(workspacePackagesPaths.map(subPkgDirectoryPath => { - const checkPkg = createCheckPackage(subPkgDirectoryPath, { + const checkPkg = createCheckPackage({ ...createCheckPackageOptions, - internalWorkspacePkgDirectoryPath: pkgDirectoryPath + packageDirectoryPath: subPkgDirectoryPath, + internalWorkspacePkgDirectoryPath: createCheckPackageOptions.packageDirectoryPath }); return [checkPkg.pkg.name, checkPkg]; })); @@ -835,7 +850,6 @@ function createCheckPackageWithWorkspaces(pkgDirectoryPath = '.', createCheckPac } }, checkRecommended({ - isLibrary = () => false, allowRangeVersionsInLibraries = true, onlyWarnsForInRootPackage, onlyWarnsForInMonorepoPackages, @@ -846,7 +860,6 @@ function createCheckPackageWithWorkspaces(pkgDirectoryPath = '.', createCheckPac } = {}) { checkPackage.checkNoDependencies(); checkPackage.checkRecommended({ - isLibrary: false, onlyWarnsForInPackage: onlyWarnsForInRootPackage, onlyWarnsForInDependencies: onlyWarnsForInRootDependencies, checkResolutionMessage @@ -854,10 +867,8 @@ function createCheckPackageWithWorkspaces(pkgDirectoryPath = '.', createCheckPac const monorepoDirectDuplicateDependenciesOnlyWarnsForCheck = createOnlyWarnsForMappingCheck('monorepoDirectDuplicateDependenciesOnlyWarnsFor', monorepoDirectDuplicateDependenciesOnlyWarnsFor); const previousCheckedWorkspaces = new Map(); checksWorkspaces.forEach((checkSubPackage, id) => { - const isPackageALibrary = isLibrary(id); checkSubPackage.checkRecommended({ - isLibrary: isPackageALibrary, - allowRangeVersionsInDependencies: isPackageALibrary ? allowRangeVersionsInLibraries : false, + allowRangeVersionsInDependencies: checkSubPackage.isPkgLibrary ? allowRangeVersionsInLibraries : false, onlyWarnsForInPackage: onlyWarnsForInMonorepoPackages ? { ...onlyWarnsForInMonorepoPackages['*'], ...onlyWarnsForInMonorepoPackages[checkSubPackage.pkg.name] @@ -868,12 +879,12 @@ function createCheckPackageWithWorkspaces(pkgDirectoryPath = '.', createCheckPac }); const reportMonorepoDDDError = createReportError('Monorepo Direct Duplicate Dependencies', checkSubPackage.pkgPathName); // Root - checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, 'devDependencies', ['dependencies', 'devDependencies'], pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); + checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, checkSubPackage.isPkgLibrary, 'devDependencies', ['dependencies', 'devDependencies'], pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); // previous packages previousCheckedWorkspaces.forEach(previousCheckSubPackage => { - checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, 'devDependencies', ['dependencies', 'devDependencies'], previousCheckSubPackage.pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); - checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, 'dependencies', ['dependencies', 'devDependencies'], previousCheckSubPackage.pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); - checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, 'peerDependencies', ['peerDependencies'], previousCheckSubPackage.pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); + checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, checkSubPackage.isPkgLibrary, 'devDependencies', ['dependencies', 'devDependencies'], previousCheckSubPackage.pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); + checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, checkSubPackage.isPkgLibrary, 'dependencies', ['dependencies', 'devDependencies'], previousCheckSubPackage.pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); + checkDuplicateDependencies(reportMonorepoDDDError, checkSubPackage.pkg, checkSubPackage.isPkgLibrary, 'peerDependencies', ['peerDependencies'], previousCheckSubPackage.pkg, monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(checkSubPackage.pkg.name)); }); previousCheckedWorkspaces.set(id, checkSubPackage); }); diff --git a/dist/index-node16.mjs.map b/dist/index-node16.mjs.map index 1d42b607..28fa5292 100644 --- a/dist/index-node16.mjs.map +++ b/dist/index-node16.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index-node16.mjs","sources":["../src/utils/object.ts","../src/utils/createReportError.ts","../src/checks/checkDuplicateDependencies.ts","../src/checks/checkDirectDuplicateDependencies.ts","../src/checks/checkPeerDependencies.ts","../src/checks/checkDirectPeerDependencies.ts","../src/checks/checkExactVersions.ts","../src/checks/checkIdenticalVersions.ts","../src/checks/checkIdenticalVersionsThanDependency.ts","../src/checks/checkNoDependencies.ts","../src/checks/checkResolutionsHasExplanation.ts","../src/checks/checkResolutionsVersionsMatch.ts","../src/checks/checkSatisfiesVersions.ts","../src/checks/checkSatisfiesVersionsFromDependency.ts","../src/checks/checkSatisfiesVersionsInDependency.ts","../src/utils/pkgJsonUtils.ts","../src/utils/createGetDependencyPackageJson.ts","../src/utils/warnForUtils.ts","../src/check-package.ts","../src/check-package-with-workspaces.ts"],"sourcesContent":["export const getKeys = (o: T): (keyof T)[] =>\n Object.keys(o) as (keyof T)[];\n\nexport const getEntries = (o: T): [keyof T, T[keyof T]][] =>\n Object.entries(o) as unknown as [keyof T, T[keyof T]][];\n","/* eslint-disable no-console */\n\nimport chalk from 'chalk';\nimport { getEntries } from './object';\nimport type {\n OnlyWarnsForCheck,\n OnlyWarnsForMappingCheck,\n} from './warnForUtils';\n\nexport type ReportError = (\n msgTitle: string,\n msgInfo?: string,\n onlyWarns?: boolean,\n) => void;\n\nlet titleDisplayed: string | null = null;\nlet pkgPathDisplayed: string | null = null;\n\nexport function logMessage(\n msgTitle: string,\n msgInfo?: string,\n onlyWarns?: boolean,\n): void {\n console.error(\n `${\n onlyWarns ? chalk.yellow(`⚠ ${msgTitle}`) : chalk.red(`❌ ${msgTitle}`)\n }${msgInfo ? `: ${msgInfo}` : ''}`,\n );\n}\n\nexport function createReportError(\n title: string,\n pkgPathName: string,\n): ReportError {\n return function reportError(msgTitle, msgInfo, onlyWarns): void {\n if (titleDisplayed !== title || pkgPathName !== pkgPathDisplayed) {\n if (titleDisplayed) console.error();\n console.error(chalk.cyan(`== ${title} in ${pkgPathName} ==`));\n titleDisplayed = title;\n pkgPathDisplayed = pkgPathName;\n }\n logMessage(msgTitle, msgInfo, onlyWarns);\n\n if (!onlyWarns) {\n // console.trace();\n process.exitCode = 1;\n }\n };\n}\n\nexport function reportNotWarnedFor(\n reportError: ReportError,\n onlyWarnsForCheck: OnlyWarnsForCheck,\n): void {\n const notWarnedFor = onlyWarnsForCheck.getNotWarnedFor();\n if (notWarnedFor.length > 0) {\n reportError(\n `Invalid config in \"${onlyWarnsForCheck.configName}\"`,\n `no warning was raised for ${notWarnedFor\n .map((depName) => `\"${depName}\"`)\n .join(', ')}`,\n false,\n );\n }\n}\n\nexport function reportNotWarnedForMapping(\n reportError: ReportError,\n onlyWarnsForMappingCheck: OnlyWarnsForMappingCheck,\n): void {\n const notWarnedForMapping = onlyWarnsForMappingCheck.getNotWarnedFor();\n getEntries(notWarnedForMapping).forEach(([depNameOrStar, notWarnedFor]) => {\n reportError(\n `Invalid config in \"${onlyWarnsForMappingCheck.configName}\" for \"${depNameOrStar}\"`,\n `no warning was raised for ${notWarnedFor\n .map((depName) => `\"${depName}\"`)\n .join(', ')}`,\n );\n });\n}\n","import semver from 'semver';\nimport type { ReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkDuplicateDependencies(\n reportError: ReportError,\n pkg: PackageJson,\n depType: DependencyTypes,\n searchIn: DependencyTypes[],\n depPkg: PackageJson,\n onlyWarnsForCheck: OnlyWarnsForCheck,\n): void {\n const dependencies = depPkg[depType];\n if (!dependencies) return;\n\n const searchInExisting = searchIn.filter((type) => pkg[type]);\n\n for (const [depKey, range] of Object.entries(dependencies)) {\n const versionsIn = searchInExisting.filter((type) => pkg[type]![depKey]);\n\n if (versionsIn.length > 1) {\n reportError(\n `${depKey} is present in both devDependencies and dependencies, please place it only in dependencies`,\n );\n } else {\n const versions = versionsIn.map((type) => pkg[type]![depKey]);\n\n versions.forEach((version, index) => {\n if (version.startsWith('file:') || range.startsWith('file:')) return;\n // https://yarnpkg.com/features/workspaces#workspace-ranges-workspace\n if (\n version.startsWith('workspace:') ||\n range.startsWith('workspace:')\n ) {\n return;\n }\n\n if (\n semver.satisfies(version, range, {\n includePrerelease: true,\n }) ||\n semver.intersects(version, range, {\n includePrerelease: true,\n })\n ) {\n return;\n }\n\n // Ignore reporting duplicate when there's a resolution for it\n if (pkg.resolutions?.[depKey]) {\n return;\n }\n\n const versionInType = versionsIn[index];\n\n reportError(\n `Invalid duplicate dependency \"${depKey}\"`,\n `\"${versions[0]}\" (in ${versionInType}) should satisfies \"${range}\" from \"${depPkg.name}\" ${depType}.`,\n onlyWarnsForCheck.shouldWarnsFor(depKey),\n );\n });\n }\n }\n}\n","import type { GetDependencyPackageJson } from 'utils/createGetDependencyPackageJson';\nimport {\n reportNotWarnedForMapping,\n createReportError,\n} from '../utils/createReportError';\nimport { getKeys } from '../utils/object';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForMappingCheck } from '../utils/warnForUtils';\nimport { checkDuplicateDependencies } from './checkDuplicateDependencies';\n\nexport async function checkDirectDuplicateDependencies(\n pkg: PackageJson,\n pkgPathName: string,\n depType: DependencyTypes,\n getDependencyPackageJson: GetDependencyPackageJson,\n onlyWarnsForCheck: OnlyWarnsForMappingCheck,\n reportErrorNamePrefix = '',\n customCreateReportError = createReportError,\n): Promise {\n const reportError = customCreateReportError(\n `${reportErrorNamePrefix}Direct Duplicate Dependencies`,\n pkgPathName,\n );\n\n const checks: {\n type: DependencyTypes;\n searchIn: DependencyTypes[];\n }[] = [\n {\n type: 'devDependencies',\n searchIn: ['devDependencies', 'dependencies'],\n },\n { type: 'dependencies', searchIn: ['devDependencies', 'dependencies'] },\n ];\n\n await Promise.all(\n checks.map(async ({ type, searchIn }) => {\n const dependencies = pkg[type];\n\n if (!dependencies) return;\n for (const depName of getKeys(dependencies)) {\n const depPkg = await getDependencyPackageJson(depName);\n checkDuplicateDependencies(\n reportError,\n pkg,\n depType,\n searchIn,\n depPkg,\n onlyWarnsForCheck.createFor(depName),\n );\n }\n }),\n );\n\n reportNotWarnedForMapping(reportError, onlyWarnsForCheck);\n}\n","import semver from 'semver';\nimport type { ReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkPeerDependencies(\n pkg: PackageJson,\n reportError: ReportError,\n type: DependencyTypes,\n allowedPeerIn: DependencyTypes[],\n depPkg: PackageJson,\n missingOnlyWarnsForCheck: OnlyWarnsForCheck,\n invalidOnlyWarnsForCheck: OnlyWarnsForCheck,\n): void {\n const { peerDependencies, peerDependenciesMeta } = depPkg;\n if (!peerDependencies) return;\n\n const allowedPeerInExisting = allowedPeerIn.filter(\n (allowedPeerInType) => pkg[allowedPeerInType],\n );\n\n for (const [peerDepName, range] of Object.entries(peerDependencies)) {\n const versionsIn = allowedPeerInExisting.filter(\n (allowedPeerInExistingType) =>\n pkg[allowedPeerInExistingType]?.[peerDepName],\n );\n if (versionsIn.length === 0) {\n const peerDependenciesMetaPeerDep = peerDependenciesMeta?.[peerDepName];\n if (peerDependenciesMetaPeerDep?.optional) {\n continue;\n }\n reportError(\n `Missing \"${peerDepName}\" peer dependency from \"${depPkg.name}\" in ${type}`,\n `it should satisfies \"${range}\" and be in ${allowedPeerIn.join(\n ' or ',\n )}`,\n missingOnlyWarnsForCheck.shouldWarnsFor(peerDepName),\n );\n } else {\n const versions = versionsIn.map(\n (versionsInType) => pkg[versionsInType]![peerDepName],\n );\n\n versions.forEach((version, index) => {\n if (version.startsWith('npm:')) {\n return;\n }\n\n const minVersionOfVersion = semver.minVersion(version);\n if (\n !minVersionOfVersion ||\n !semver.satisfies(minVersionOfVersion, range, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${peerDepName}\" peer dependency`,\n `\"${version}\" (in ${allowedPeerInExisting[index]}) should satisfies \"${range}\" from \"${depPkg.name}\" ${type}`,\n invalidOnlyWarnsForCheck.shouldWarnsFor(peerDepName),\n );\n }\n });\n }\n }\n}\n","import type { GetDependencyPackageJson } from 'utils/createGetDependencyPackageJson';\nimport {\n createReportError,\n reportNotWarnedForMapping,\n} from '../utils/createReportError';\nimport { getKeys } from '../utils/object';\nimport type {\n DependencyTypes,\n PackageJson,\n RegularDependencyTypes,\n} from '../utils/packageTypes';\nimport type { OnlyWarnsForMappingCheck } from '../utils/warnForUtils';\nimport { checkPeerDependencies } from './checkPeerDependencies';\n\nconst regularDependencyTypes: RegularDependencyTypes[] = [\n 'devDependencies',\n 'dependencies',\n 'optionalDependencies',\n];\n\nconst getAllowedPeerInFromType = (\n depPkgType: RegularDependencyTypes,\n isLibrary: boolean,\n): DependencyTypes[] => {\n switch (depPkgType) {\n case 'devDependencies':\n return ['devDependencies', 'dependencies'];\n case 'dependencies':\n return isLibrary\n ? ['dependencies', 'peerDependencies']\n : ['devDependencies', 'dependencies'];\n case 'optionalDependencies':\n return isLibrary\n ? ['dependencies', 'optionalDependencies', 'peerDependencies']\n : ['devDependencies', 'dependencies'];\n }\n};\n\nexport async function checkDirectPeerDependencies(\n isLibrary: boolean,\n pkg: PackageJson,\n pkgPathName: string,\n getDependencyPackageJson: GetDependencyPackageJson,\n missingOnlyWarnsForCheck: OnlyWarnsForMappingCheck,\n invalidOnlyWarnsForCheck: OnlyWarnsForMappingCheck,\n customCreateReportError = createReportError,\n): Promise {\n const reportError = customCreateReportError('Peer Dependencies', pkgPathName);\n\n await Promise.all(\n regularDependencyTypes.map(async (depType) => {\n const dependencies = pkg[depType];\n if (!dependencies) return;\n for (const depName of getKeys(dependencies)) {\n const depPkg = await getDependencyPackageJson(depName);\n\n if (depPkg.peerDependencies) {\n checkPeerDependencies(\n pkg,\n reportError,\n depType,\n getAllowedPeerInFromType(depType, isLibrary),\n depPkg,\n missingOnlyWarnsForCheck.createFor(depName),\n invalidOnlyWarnsForCheck.createFor(depName),\n );\n }\n }\n }),\n );\n\n reportNotWarnedForMapping(reportError, missingOnlyWarnsForCheck);\n if (missingOnlyWarnsForCheck !== invalidOnlyWarnsForCheck) {\n reportNotWarnedForMapping(reportError, invalidOnlyWarnsForCheck);\n }\n}\n","/* eslint-disable complexity */\nimport semver from 'semver';\nimport type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson';\nimport {\n createReportError,\n reportNotWarnedFor,\n} from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsFor, OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport interface CheckExactVersionsOptions {\n getDependencyPackageJson?: GetDependencyPackageJson;\n onlyWarnsForCheck: OnlyWarnsForCheck;\n internalExactVersionsIgnore?: OnlyWarnsFor;\n tryToAutoFix?: boolean;\n customCreateReportError?: typeof createReportError;\n}\n\nconst isVersionRange = (version: string): boolean =>\n version.startsWith('^') || version.startsWith('~');\n\nexport async function checkExactVersions(\n pkg: PackageJson,\n pkgPathName: string,\n types: DependencyTypes[],\n {\n getDependencyPackageJson,\n onlyWarnsForCheck,\n internalExactVersionsIgnore,\n tryToAutoFix = false,\n customCreateReportError = createReportError,\n }: CheckExactVersionsOptions,\n): Promise {\n const reportError = customCreateReportError('Exact versions', pkgPathName);\n\n for (const type of types) {\n const pkgDependencies = pkg[type];\n if (!pkgDependencies) continue;\n\n for (const [dependencyName, versionConst] of Object.entries(\n pkgDependencies,\n )) {\n let version = versionConst;\n if (version.startsWith('npm:')) {\n const match = /^npm:.*@(.*)$/.exec(version);\n if (!match) throw new Error(`Invalid version match: ${version}`);\n const [, realVersion] = match;\n version = realVersion;\n }\n\n if (isVersionRange(version)) {\n if (internalExactVersionsIgnore?.includes(dependencyName)) {\n continue;\n }\n const shouldOnlyWarn = onlyWarnsForCheck.shouldWarnsFor(dependencyName);\n if (!shouldOnlyWarn && tryToAutoFix && getDependencyPackageJson) {\n let resolvedDep;\n try {\n resolvedDep = await getDependencyPackageJson(dependencyName);\n } catch {\n resolvedDep = null;\n }\n if (!resolvedDep || !resolvedDep.version) {\n reportError(\n `Unexpected range dependency in \"${type}\" for \"${dependencyName}\"`,\n `expecting \"${version}\" to be exact, autofix failed to resolve \"${dependencyName}\".`,\n shouldOnlyWarn,\n );\n } else if (\n !semver.satisfies(resolvedDep.version, version, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Unexpected range dependency in \"${type}\" for \"${dependencyName}\"`,\n `expecting \"${version}\" to be exact, autofix failed as \"${dependencyName}\"'s resolved version is \"${resolvedDep.version}\" and doesn't satisfies \"${version}\".`,\n shouldOnlyWarn,\n );\n } else {\n pkgDependencies[dependencyName] = resolvedDep.version;\n }\n } else {\n reportError(\n `Unexpected range dependency in \"${type}\" for \"${dependencyName}\"`,\n `expecting \"${version}\" to be exact \"${version.slice(1)}\".`,\n shouldOnlyWarn,\n );\n }\n }\n }\n }\n\n reportNotWarnedFor(reportError, onlyWarnsForCheck);\n}\n","import { createReportError } from '../utils/createReportError';\nimport { getKeys } from '../utils/object';\nimport type { DependencyTypes, PackageJson } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkIdenticalVersions(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n deps: Record>>,\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n 'Identical Versions',\n pkgPathName,\n );\n\n getKeys(deps).forEach((depKey) => {\n const version = pkgDependencies[depKey];\n if (!version) {\n reportError(`Unexpected missing ${type} for \"${depKey}\".`);\n return;\n }\n\n const depConfigArrayOrObject = deps[depKey];\n const depConfig = Array.isArray(depConfigArrayOrObject)\n ? { [type]: depConfigArrayOrObject }\n : depConfigArrayOrObject;\n\n getKeys(depConfig).forEach((depKeyType) => {\n const pkgDependenciesType = pkg[depKeyType] || {};\n depConfig[depKeyType]?.forEach((depKeyIdentical) => {\n const value = pkgDependenciesType[depKeyIdentical];\n if (!value) {\n reportError(\n `Missing \"${depKeyIdentical}\" in ${depKeyType}`,\n `it should be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n\n if (value !== version) {\n reportError(\n `Invalid \"${depKeyIdentical}\" in ${depKeyType}`,\n `expecting \"${value}\" be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n });\n });\n });\n}\n","import { createReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkIdenticalVersionsThanDependency(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n depKeys: string[],\n depPkg: PackageJson,\n dependencies: PackageJson[DependencyTypes] = {},\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n `Same Versions than ${depPkg.name}`,\n pkgPathName,\n );\n\n depKeys.forEach((depKey) => {\n const version = dependencies[depKey];\n if (!version) {\n reportError(\n `Unexpected missing dependency \"${depKey}\" in \"${depPkg.name}\".`,\n );\n return;\n }\n\n if (version.startsWith('^') || version.startsWith('~')) {\n reportError(\n `Unexpected range dependency in \"${depPkg.name}\" for \"${depKey}\"`,\n 'perhaps use checkSatisfiesVersionsFromDependency() instead.',\n );\n return;\n }\n\n const value = pkgDependencies[depKey];\n\n if (!value) {\n reportError(\n `Missing \"${depKey}\" in ${type}`,\n `expecting to be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n\n if (value !== version) {\n reportError(\n `Invalid \"${depKey}\" in ${type}`,\n `expecting \"${value}\" to be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n });\n}\n","import { createReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\n\nexport function checkNoDependencies(\n pkg: PackageJson,\n pkgPath: string,\n type: DependencyTypes = 'dependencies',\n moveToSuggestion: DependencyTypes = 'devDependencies',\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type];\n if (!pkgDependencies) return;\n\n const reportError = customCreateReportError('No dependencies', pkgPath);\n reportError(\n `Unexpected ${type}`,\n `you should move them in ${moveToSuggestion}`,\n );\n}\n","import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson';\nimport { createReportError } from '../utils/createReportError';\nimport type { PackageJson } from '../utils/packageTypes';\n\nexport type CheckResolutionMessage = (\n depKey: string,\n resolutionExplainedMessage: string,\n checkMessageHelpers: {\n getDependencyPackageJson: GetDependencyPackageJson;\n },\n) => string | undefined;\n\nexport function checkResolutionsHasExplanation(\n pkg: PackageJson,\n pkgPathName: string,\n checkMessage: CheckResolutionMessage,\n getDependencyPackageJson: GetDependencyPackageJson,\n customCreateReportError = createReportError,\n): void {\n const pkgResolutions = pkg.resolutions || {};\n const pkgResolutionsExplained = pkg.resolutionsExplained || {};\n const reportError = customCreateReportError(\n 'Resolutions has explanation',\n pkgPathName,\n );\n\n Object.keys(pkgResolutions).forEach((depKey) => {\n if (!pkgResolutionsExplained[depKey]) {\n reportError(`Missing \"${depKey}\" in resolutionsExplained.`);\n }\n });\n\n Object.keys(pkgResolutionsExplained).forEach((depKey) => {\n if (!pkgResolutions[depKey]) {\n reportError(\n `Found \"${depKey}\" in resolutionsExplained but not in resolutions.`,\n );\n } else {\n const error = checkMessage(depKey, pkgResolutionsExplained[depKey], {\n getDependencyPackageJson,\n });\n if (error) {\n reportError(\n `Invalid message for \"${depKey}\" in resolutionsExplained`,\n `${error}.`,\n );\n }\n }\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport type { PackageJson } from '../utils/packageTypes';\n\nexport interface CheckResolutionsVersionsMatchOptions {\n tryToAutoFix?: boolean;\n customCreateReportError?: typeof createReportError;\n}\n\nexport function checkResolutionsVersionsMatch(\n pkg: PackageJson,\n pkgPathName: string,\n {\n tryToAutoFix,\n customCreateReportError = createReportError,\n }: CheckResolutionsVersionsMatchOptions = {},\n): void {\n const pkgResolutions = pkg.resolutions || {};\n const reportError = customCreateReportError(\n 'Resolutions match other dependencies',\n pkgPathName,\n );\n\n Object.entries(pkgResolutions).forEach(([depName, resolutionDepVersion]) => {\n (['dependencies', 'devDependencies'] as const).forEach((depType) => {\n const range = pkg?.[depType]?.[depName];\n\n if (!range) return;\n\n if (\n !semver.satisfies(resolutionDepVersion, range, {\n includePrerelease: true,\n })\n ) {\n if (tryToAutoFix) {\n pkg[depType]![depName] = resolutionDepVersion;\n } else {\n reportError(\n `Invalid \"${depName}\" in ${depType}`,\n `expecting \"${range}\" be \"${resolutionDepVersion}\" from resolutions.`,\n );\n }\n }\n });\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport type { DependencyTypes, PackageJson } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport interface CheckSatisfiesVersionsOptions {\n customCreateReportError?: typeof createReportError;\n}\n\nexport function checkSatisfiesVersions(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n dependenciesRanges: Record,\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n {\n customCreateReportError = createReportError,\n }: CheckSatisfiesVersionsOptions = {},\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n 'Satisfies Versions',\n pkgPathName,\n );\n\n Object.entries(dependenciesRanges).forEach(([depKey, range]) => {\n const version = pkgDependencies[depKey];\n\n if (!version) {\n reportError(\n `Missing \"${depKey}\" in ${type}`,\n `should satisfies \"${range}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n } else {\n const minVersionOfVersion = semver.minVersion(version);\n if (\n !minVersionOfVersion ||\n !semver.satisfies(minVersionOfVersion, range, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${depKey}\" in ${type}`,\n `\"${version}\" (in \"${depKey}\") should satisfies \"${range}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n }\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport type { DependencyTypes, PackageJson } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkSatisfiesVersionsFromDependency(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n depKeys: string[],\n depPkg: PackageJson,\n dependencies: PackageJson[DependencyTypes] = {},\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n `Satisfies Versions from ${depPkg.name}`,\n pkgPathName,\n );\n\n depKeys.forEach((depKey) => {\n const range = dependencies[depKey];\n if (!range) {\n reportError(\n `Unexpected missing dependency \"${depKey}\" in \"${depPkg.name}\".`,\n );\n return;\n }\n\n const version = pkgDependencies[depKey];\n\n if (!version) {\n reportError(\n `Missing \"${depKey}\" in ${type}`,\n `should satisfies \"${range}\" from \"${depPkg.name}\" ${depKey}.`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n } else {\n const minVersionOfVersion = semver.minVersion(version);\n if (\n !minVersionOfVersion ||\n !semver.satisfies(minVersionOfVersion, range, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${depKey}\" in ${type}`,\n `\"${version}\" (in \"${depKey}\") should satisfies \"${range}\" from \"${depPkg.name}\" ${depKey}.`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n }\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport { getEntries } from '../utils/object';\nimport type { DependenciesRanges, PackageJson } from '../utils/packageTypes';\n\ninterface CheckSatisfiesVersionsInDependencyOptions {\n customCreateReportError?: typeof createReportError;\n}\n\nexport function checkSatisfiesVersionsInDependency(\n pkgPathName: string,\n depPkg: PackageJson,\n dependenciesRanges: DependenciesRanges,\n {\n customCreateReportError = createReportError,\n }: CheckSatisfiesVersionsInDependencyOptions = {},\n): void {\n const reportError = customCreateReportError(\n `Satisfies Versions In Dependency \"${depPkg.name}\"`,\n pkgPathName,\n );\n\n for (const [dependenciesType, dependenciesTypeRanges] of getEntries(\n dependenciesRanges,\n )) {\n if (!dependenciesTypeRanges) return;\n const dependencies = depPkg[dependenciesType];\n\n for (const [dependencyName, dependencyRange] of getEntries(\n dependenciesTypeRanges,\n )) {\n if (dependencyRange == null) {\n if (dependencies?.[dependencyName]) {\n reportError(\n `Invalid \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n 'it should not be present',\n );\n }\n } else if (!dependencies) {\n reportError(\n `Missing \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n `\"${dependenciesType}\" is missing in \"${depPkg.name}\"`,\n );\n } else if (!dependencies[dependencyName]) {\n reportError(\n `Missing \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n `\"${dependencyName}\" is missing in ${dependenciesType}`,\n );\n } else if (\n !semver.satisfies(dependencies[dependencyName], dependencyRange, {\n includePrerelease: true,\n }) &&\n !semver.intersects(dependencies[dependencyName], dependencyRange, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n `\"${dependencies[dependencyName]}\" does not satisfies \"${dependencyRange}\"`,\n );\n }\n }\n }\n}\n","import { readFileSync, writeFileSync } from 'fs';\nimport { resolve as importResolve } from 'import-meta-resolve';\nimport type { PackageJson } from './packageTypes';\n\nexport function readPkgJson(packagePath: string): PackageJson {\n return JSON.parse(readFileSync(packagePath, 'utf8')) as PackageJson;\n}\n\nexport function writePkgJson(packagePath: string, pkg: PackageJson): void {\n writeFileSync(packagePath, JSON.stringify(pkg, null, 2));\n}\n\n/** @internal */\nexport async function internalLoadPackageJsonFromNodeModules(\n pkgDepName: string,\n pkgDirname: string,\n): Promise {\n const packageUrl = await importResolve(\n `${pkgDepName}/package.json`,\n `file://${pkgDirname}/package.json`,\n );\n return readPkgJson(\n packageUrl.replace(\n process.platform === 'win32' ? /^file:\\/{3}/ : /^file:\\/\\//,\n '',\n ),\n );\n}\n","import type { PackageJson } from './packageTypes';\nimport {\n internalLoadPackageJsonFromNodeModules,\n readPkgJson,\n} from './pkgJsonUtils';\n\nexport type GetDependencyPackageJson = (\n pkgDepName: string,\n) => Promise;\n\ntype NodeModulesPackagePathCache = Map;\n\ninterface CreateGetDependencyPackageJsonOptions {\n pkgDirname: string;\n nodeModulesPackagePathCache?: NodeModulesPackagePathCache;\n /** @internal */\n internalCustomLoadPackageJsonFromNodeModules?: typeof internalLoadPackageJsonFromNodeModules;\n /** @internal */\n internalReadPkgJson?: typeof readPkgJson;\n}\n\nexport function createGetDependencyPackageJson({\n pkgDirname,\n nodeModulesPackagePathCache = new Map(),\n internalCustomLoadPackageJsonFromNodeModules = internalLoadPackageJsonFromNodeModules,\n internalReadPkgJson = readPkgJson,\n}: CreateGetDependencyPackageJsonOptions): GetDependencyPackageJson {\n return async (pkgDepName) => {\n const existing = nodeModulesPackagePathCache.get(pkgDepName);\n if (existing) return existing;\n let pkg: PackageJson;\n if (pkgDepName.startsWith('.')) {\n const packagePath = `${pkgDirname}/${pkgDepName}/package.json`;\n pkg = internalReadPkgJson(packagePath);\n } else {\n try {\n pkg = await internalCustomLoadPackageJsonFromNodeModules(\n pkgDepName,\n pkgDirname,\n );\n } catch (err: unknown) {\n if (!(err instanceof Error)) throw err;\n\n if (\n (err as NodeJS.ErrnoException).code !==\n 'ERR_PACKAGE_PATH_NOT_EXPORTED'\n ) {\n throw err;\n }\n\n const match = / in (.*[/\\\\]package\\.json)\\s+imported from/.exec(\n err.message,\n );\n\n if (match) {\n const [, matchPackageJson] = match;\n pkg = internalReadPkgJson(matchPackageJson);\n } else {\n throw err;\n }\n }\n }\n nodeModulesPackagePathCache.set(pkgDepName, pkg);\n return pkg;\n };\n}\n","import { getEntries } from './object';\n\nexport type OnlyWarnsFor = string[];\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type OnlyWarnsForDependencyMapping = Record;\nexport type OnlyWarnsForOptionalDependencyMapping =\n | undefined\n | OnlyWarnsFor\n | OnlyWarnsForDependencyMapping;\n\nexport interface OnlyWarnsForCheck {\n configName: string;\n getNotWarnedFor: () => string[];\n shouldWarnsFor: (dependencyName: string) => boolean;\n}\n\nexport interface OnlyWarnsForMappingCheck {\n configName: string;\n getNotWarnedFor: () => Record;\n createFor: (dependencyName: string) => OnlyWarnsForCheck;\n}\n\nexport const createOnlyWarnsForArrayCheck = (\n configName: string,\n onlyWarnsFor: OnlyWarnsFor = [],\n): OnlyWarnsForCheck => {\n const notWarnedFor = new Set(onlyWarnsFor);\n return {\n configName,\n getNotWarnedFor: () => [...notWarnedFor],\n shouldWarnsFor(dependencyName) {\n if (onlyWarnsFor.includes(dependencyName)) {\n notWarnedFor.delete(dependencyName);\n return true;\n }\n return false;\n },\n };\n};\n\nconst isMapping = (\n onlyWarnsFor: OnlyWarnsForOptionalDependencyMapping,\n): onlyWarnsFor is OnlyWarnsForDependencyMapping => {\n return typeof onlyWarnsFor === 'object' && !Array.isArray(onlyWarnsFor);\n};\n\nexport const createOnlyWarnsForMappingCheck = (\n configName: string,\n onlyWarnsFor: OnlyWarnsForOptionalDependencyMapping,\n): OnlyWarnsForMappingCheck => {\n if (isMapping(onlyWarnsFor)) {\n const notWarnedFor = Object.fromEntries(\n getEntries(onlyWarnsFor).map(([entryKey, entryValue]) => [\n entryKey,\n new Set(entryValue),\n ]),\n );\n return {\n configName,\n getNotWarnedFor: () =>\n Object.fromEntries(\n getEntries(notWarnedFor)\n .filter(([key, set]) => set.size > 0)\n .map(([key, set]) => [key, [...set]]),\n ),\n createFor(dependencyNameLevel1) {\n return {\n configName,\n getNotWarnedFor() {\n throw new Error('Invalid call to getNotWarnedFor()');\n },\n shouldWarnsFor(dependencyName) {\n if (onlyWarnsFor['*']?.includes(dependencyName)) {\n notWarnedFor['*'].delete(dependencyName);\n return true;\n }\n if (onlyWarnsFor[dependencyNameLevel1]?.includes(dependencyName)) {\n notWarnedFor[dependencyNameLevel1].delete(dependencyName);\n return true;\n }\n return false;\n },\n };\n },\n };\n }\n\n const arrayOnlyWarnsForCheck = createOnlyWarnsForArrayCheck(\n configName,\n onlyWarnsFor,\n );\n return {\n configName,\n getNotWarnedFor: (): Record => {\n const notWarnedFor = arrayOnlyWarnsForCheck.getNotWarnedFor();\n if (notWarnedFor.length > 0) {\n return { '*': notWarnedFor };\n }\n return {};\n },\n createFor() {\n return {\n configName,\n getNotWarnedFor() {\n throw new Error('Invalid call to getNotWarnedFor()');\n },\n shouldWarnsFor(dependencyName) {\n return arrayOnlyWarnsForCheck.shouldWarnsFor(dependencyName);\n },\n };\n },\n };\n};\n","/* eslint-disable max-lines */\nimport path from 'path';\nimport util from 'util';\nimport { checkDirectDuplicateDependencies } from './checks/checkDirectDuplicateDependencies';\nimport { checkDirectPeerDependencies } from './checks/checkDirectPeerDependencies';\nimport { checkExactVersions } from './checks/checkExactVersions';\nimport { checkIdenticalVersions } from './checks/checkIdenticalVersions';\nimport { checkIdenticalVersionsThanDependency } from './checks/checkIdenticalVersionsThanDependency';\nimport { checkNoDependencies } from './checks/checkNoDependencies';\nimport type { CheckResolutionMessage } from './checks/checkResolutionsHasExplanation';\nimport { checkResolutionsHasExplanation } from './checks/checkResolutionsHasExplanation';\nimport { checkResolutionsVersionsMatch } from './checks/checkResolutionsVersionsMatch';\nimport { checkSatisfiesVersions } from './checks/checkSatisfiesVersions';\nimport { checkSatisfiesVersionsFromDependency } from './checks/checkSatisfiesVersionsFromDependency';\nimport { checkSatisfiesVersionsInDependency } from './checks/checkSatisfiesVersionsInDependency';\nimport type { GetDependencyPackageJson } from './utils/createGetDependencyPackageJson';\nimport { createGetDependencyPackageJson } from './utils/createGetDependencyPackageJson';\nimport { getEntries } from './utils/object';\nimport type {\n DependenciesRanges,\n DependencyName,\n DependencyTypes,\n PackageJson,\n} from './utils/packageTypes';\nimport { readPkgJson, writePkgJson } from './utils/pkgJsonUtils';\nimport type {\n OnlyWarnsForOptionalDependencyMapping,\n OnlyWarnsFor,\n OnlyWarnsForDependencyMapping,\n} from './utils/warnForUtils';\nimport {\n createOnlyWarnsForArrayCheck,\n createOnlyWarnsForMappingCheck,\n} from './utils/warnForUtils';\n\nexport interface CreateCheckPackageOptions {\n /** @internal */\n internalWorkspacePkgDirectoryPath?: string;\n}\n\nexport interface CheckDirectPeerDependenciesOptions {\n isLibrary?: boolean;\n missingOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n invalidOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n internalMissingConfigName?: string;\n internalInvalidConfigName?: string;\n}\n\nexport interface CheckDirectDuplicateDependenciesOptions {\n onlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n internalConfigName?: string;\n}\n\nexport interface OnlyWarnsForInPackageCheckPackageRecommendedOption {\n exactVersions: OnlyWarnsFor;\n}\n\nexport interface OnlyWarnsForInDependencyCheckPackageRecommendedOption {\n duplicateDirectDependency: OnlyWarnsFor;\n missingPeerDependency: OnlyWarnsFor;\n invalidPeerDependencyVersion: OnlyWarnsFor;\n}\n\nexport type OnlyWarnsForInDependenciesCheckPackageRecommendedOption = Record<\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n '*' | string,\n OnlyWarnsForInDependencyCheckPackageRecommendedOption\n>;\n\nexport interface CheckRecommendedOptions {\n isLibrary?: boolean;\n /** default is true for libraries, false otherwise */\n allowRangeVersionsInDependencies?: boolean;\n onlyWarnsForInPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption;\n onlyWarnsForInDependencies?: OnlyWarnsForInDependenciesCheckPackageRecommendedOption;\n /** @internal */\n internalExactVersionsIgnore?: OnlyWarnsFor;\n /** function to check the value in the \"resolutionExplained\" key in package.json */\n checkResolutionMessage?: CheckResolutionMessage;\n}\n\nexport interface CheckExactVersionsOptions {\n allowRangeVersionsInDependencies?: boolean;\n onlyWarnsFor?: OnlyWarnsFor;\n /** @internal */\n internalExactVersionsIgnore?: OnlyWarnsFor;\n}\n\nexport interface CheckPackageApi {\n run: () => Promise;\n\n /** @internal */\n pkg: PackageJson;\n /** @internal */\n pkgDirname: string;\n /** @internal */\n pkgPathName: string;\n /** @internal */\n getDependencyPackageJson: GetDependencyPackageJson;\n\n checkExactVersions: (options?: CheckExactVersionsOptions) => CheckPackageApi;\n\n checkResolutionsVersionsMatch: () => CheckPackageApi;\n\n checkExactDevVersions: (\n options?: CheckExactVersionsOptions,\n ) => CheckPackageApi;\n\n checkNoDependencies: (\n type?: DependencyTypes,\n moveToSuggestion?: DependencyTypes,\n ) => CheckPackageApi;\n\n /**\n * @example\n * ```\n * .checkDirectPeerDependencies({\n * invalidOnlyWarnsFor: ['semver'],\n * })\n * ```\n */\n checkDirectPeerDependencies: (\n options?: CheckDirectPeerDependenciesOptions,\n ) => CheckPackageApi;\n\n /**\n * @example\n * ```\n * .checkDirectDuplicateDependencies({\n * invalidOnlyWarnsFor: { '*': 'type-fest' },\n * })\n * ```\n */\n checkDirectDuplicateDependencies: (\n options?: CheckDirectDuplicateDependenciesOptions,\n ) => CheckPackageApi;\n\n checkResolutionsHasExplanation: (\n checkMessage?: CheckResolutionMessage,\n ) => CheckPackageApi;\n\n checkRecommended: (options?: CheckRecommendedOptions) => CheckPackageApi;\n\n /**\n * @example\n * Check that your package.json contains the same version of @babel/core than react-scripts, both in resolutions and devDependencies\n * ```\n * .checkIdenticalVersionsThanDependency('react-scripts', {\n * resolutions: ['@babel/core'],\n * devDependencies: ['@babel/core'],\n * })\n * ```\n */\n checkIdenticalVersionsThanDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n checkIdenticalVersionsThanDevDependencyOfDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n /**\n * Check that your package.json dependencies specifically satisfies the range passed in config\n *\n * @example\n * ```\n * .checkSatisfiesVersions({\n * devDependencies: {\n * eslint: '^8.0.0'\n * },\n * })\n * ```\n */\n checkSatisfiesVersions: (\n dependencies: Partial<\n Record>\n >,\n ) => CheckPackageApi;\n\n /**\n * Check that your package.json dependencies specifically satisfies the range set in another dependencies\n * @example\n * ```\n * .checkSatisfiesVersionsFromDependency('@pob/eslint-config-typescript', {\n * devDependencies: [\n * '@typescript-eslint/eslint-plugin',\n * '@typescript-eslint/parser',\n * ],\n * })\n * ```\n */\n checkSatisfiesVersionsFromDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n checkSatisfiesVersionsInDevDependenciesOfDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n /**\n * Check that your package.json dependencies have the exact same version that another dependency also present in your package.json\n * @example\n * The react-dom version should match react, so this check will ensure it does\n * ```\n * .checkIdenticalVersions({\n * dependencies: {\n * react: {\n * dependencies: ['react-dom'],\n * devDependencies: ['react-test-renderer'],\n * },\n * },\n * })\n * ```\n */\n checkIdenticalVersions: (dependencies: {\n resolutions?: Record;\n dependencies?: Record;\n devDependencies?: Record;\n }) => CheckPackageApi;\n\n checkSatisfiesVersionsBetweenDependencies: (\n depName1: string,\n depName2: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n /**\n * Check versions in a dependency\n * Also useable to check if a dependency is not present\n *\n * @example\n * Checking if `@lerna/version` has no dependency `@nrwl/devkit`\n * ```\n * .checkSatisfiesVersionsInDependency('@lerna/version', {\n * dependencies: {\n * '@nrwl/devkit': null,\n * },\n * })\n * ```\n */\n checkSatisfiesVersionsInDependency: (\n depName: string,\n dependenciesRanges: DependenciesRanges,\n ) => CheckPackageApi;\n}\n\nexport function createCheckPackage(\n pkgDirectoryPath = '.',\n { internalWorkspacePkgDirectoryPath }: CreateCheckPackageOptions = {},\n): CheckPackageApi {\n const pkgDirname = path.resolve(pkgDirectoryPath);\n const pkgPath = `${pkgDirname}/package.json`;\n const pkgPathName = `${pkgDirectoryPath}/package.json`;\n const pkg = readPkgJson(pkgPath);\n const copyPkg: PackageJson = JSON.parse(JSON.stringify(pkg)) as PackageJson;\n\n let tryToAutoFix = false;\n\n if (process.argv.slice(2).includes('--fix')) {\n tryToAutoFix = true;\n }\n\n const writePackageIfChanged = (): void => {\n if (!tryToAutoFix) return;\n if (util.isDeepStrictEqual(pkg, copyPkg)) return;\n writePkgJson(pkgPath, pkg);\n };\n\n const getDependencyPackageJson = createGetDependencyPackageJson({\n pkgDirname,\n });\n\n let runCalled = false;\n\n if (!internalWorkspacePkgDirectoryPath) {\n process.on('beforeExit', () => {\n if (!runCalled) {\n throw new Error('Call .run() and await the result.');\n }\n });\n }\n\n class Job {\n name: string;\n\n fn: () => Promise;\n\n constructor(name: string, fn: () => Promise) {\n this.name = name;\n this.fn = fn;\n }\n\n async run(): Promise {\n try {\n await this.fn();\n } catch (err) {\n throw new Error(`${this.name} failed: ${(err as Error).message}`);\n }\n }\n }\n\n const jobs: Job[] = [];\n\n return {\n async run() {\n runCalled = true;\n // TODO parallel\n for (const job of jobs) {\n await job.run();\n }\n writePackageIfChanged();\n },\n\n pkg,\n pkgDirname,\n pkgPathName,\n getDependencyPackageJson,\n checkExactVersions({\n onlyWarnsFor,\n internalExactVersionsIgnore,\n allowRangeVersionsInDependencies = true,\n } = {}) {\n jobs.push(\n new Job(this.checkExactVersions.name, async () => {\n const onlyWarnsForCheck = createOnlyWarnsForArrayCheck(\n 'checkExactVersions.onlyWarnsFor',\n onlyWarnsFor,\n );\n await checkExactVersions(\n pkg,\n pkgPathName,\n !allowRangeVersionsInDependencies\n ? ['dependencies', 'devDependencies', 'resolutions']\n : ['devDependencies', 'resolutions'],\n {\n onlyWarnsForCheck,\n internalExactVersionsIgnore,\n getDependencyPackageJson,\n tryToAutoFix,\n },\n );\n }),\n );\n return this;\n },\n\n checkResolutionsVersionsMatch() {\n checkResolutionsVersionsMatch(pkg, pkgPathName, {\n tryToAutoFix,\n });\n return this;\n },\n\n checkExactDevVersions({ onlyWarnsFor } = {}) {\n jobs.push(\n new Job(this.checkExactDevVersions.name, async () => {\n const onlyWarnsForCheck = createOnlyWarnsForArrayCheck(\n 'checkExactDevVersions.onlyWarnsFor',\n onlyWarnsFor,\n );\n await checkExactVersions(pkg, pkgPathName, ['devDependencies'], {\n onlyWarnsForCheck,\n tryToAutoFix,\n getDependencyPackageJson,\n });\n }),\n );\n return this;\n },\n\n checkNoDependencies(\n type = 'dependencies',\n moveToSuggestion = 'devDependencies',\n ) {\n checkNoDependencies(pkg, pkgPathName, type, moveToSuggestion);\n return this;\n },\n\n checkDirectPeerDependencies({\n isLibrary = false,\n missingOnlyWarnsFor,\n invalidOnlyWarnsFor,\n internalMissingConfigName = 'missingOnlyWarnsFor',\n internalInvalidConfigName = 'invalidOnlyWarnsFor',\n } = {}) {\n jobs.push(\n new Job(this.checkDirectPeerDependencies.name, async () => {\n const missingOnlyWarnsForCheck = createOnlyWarnsForMappingCheck(\n internalMissingConfigName,\n missingOnlyWarnsFor,\n );\n const invalidOnlyWarnsForCheck =\n internalInvalidConfigName === internalMissingConfigName\n ? missingOnlyWarnsForCheck\n : createOnlyWarnsForMappingCheck(\n internalInvalidConfigName,\n invalidOnlyWarnsFor,\n );\n await checkDirectPeerDependencies(\n isLibrary,\n pkg,\n pkgPathName,\n getDependencyPackageJson,\n missingOnlyWarnsForCheck,\n invalidOnlyWarnsForCheck,\n );\n }),\n );\n return this;\n },\n\n checkDirectDuplicateDependencies({\n onlyWarnsFor,\n internalConfigName = 'onlyWarnsFor',\n } = {}) {\n jobs.push(\n new Job(this.checkDirectDuplicateDependencies.name, async () => {\n await checkDirectDuplicateDependencies(\n pkg,\n pkgPathName,\n 'dependencies',\n getDependencyPackageJson,\n createOnlyWarnsForMappingCheck(internalConfigName, onlyWarnsFor),\n );\n }),\n );\n return this;\n },\n\n checkResolutionsHasExplanation(\n checkMessage: CheckResolutionMessage = (depKey, message) => undefined,\n ) {\n checkResolutionsHasExplanation(\n pkg,\n pkgPathName,\n checkMessage,\n getDependencyPackageJson,\n );\n return this;\n },\n\n checkRecommended({\n isLibrary = false,\n onlyWarnsForInPackage,\n onlyWarnsForInDependencies,\n allowRangeVersionsInDependencies = isLibrary,\n internalExactVersionsIgnore,\n checkResolutionMessage,\n } = {}) {\n let internalMissingPeerDependenciesOnlyWarnsFor: OnlyWarnsForOptionalDependencyMapping =\n {};\n let internalInvalidPeerDependenciesOnlyWarnsFor: OnlyWarnsForOptionalDependencyMapping =\n {};\n let internalDirectDuplicateDependenciesOnlyWarnsFor: OnlyWarnsForOptionalDependencyMapping =\n {};\n\n const exactVersionsOnlyWarnsFor =\n onlyWarnsForInPackage?.exactVersions || [];\n\n if (onlyWarnsForInDependencies) {\n internalDirectDuplicateDependenciesOnlyWarnsFor = {};\n internalMissingPeerDependenciesOnlyWarnsFor = {};\n internalInvalidPeerDependenciesOnlyWarnsFor = {};\n\n getEntries(onlyWarnsForInDependencies).forEach(\n ([dependencyNameOrSpecialKey, onlyWarnsForValue]) => {\n if (onlyWarnsForValue.duplicateDirectDependency) {\n (\n internalDirectDuplicateDependenciesOnlyWarnsFor as OnlyWarnsForDependencyMapping\n )[dependencyNameOrSpecialKey] =\n onlyWarnsForValue.duplicateDirectDependency;\n }\n if (onlyWarnsForValue.missingPeerDependency) {\n (\n internalMissingPeerDependenciesOnlyWarnsFor as OnlyWarnsForDependencyMapping\n )[dependencyNameOrSpecialKey] =\n onlyWarnsForValue.missingPeerDependency;\n }\n if (onlyWarnsForValue.invalidPeerDependencyVersion) {\n (\n internalInvalidPeerDependenciesOnlyWarnsFor as OnlyWarnsForDependencyMapping\n )[dependencyNameOrSpecialKey] =\n onlyWarnsForValue.invalidPeerDependencyVersion;\n }\n },\n );\n }\n\n this.checkExactVersions({\n allowRangeVersionsInDependencies,\n onlyWarnsFor: exactVersionsOnlyWarnsFor,\n internalExactVersionsIgnore,\n });\n\n this.checkResolutionsVersionsMatch();\n this.checkResolutionsHasExplanation(checkResolutionMessage);\n\n this.checkDirectPeerDependencies({\n isLibrary,\n missingOnlyWarnsFor: internalMissingPeerDependenciesOnlyWarnsFor,\n invalidOnlyWarnsFor: internalInvalidPeerDependenciesOnlyWarnsFor,\n internalMissingConfigName:\n 'onlyWarnsForInDependencies.missingPeerDependency',\n internalInvalidConfigName:\n 'onlyWarnsForInDependencies.invalidPeerDependencyVersion',\n });\n\n this.checkDirectDuplicateDependencies({\n onlyWarnsFor: internalDirectDuplicateDependenciesOnlyWarnsFor,\n internalConfigName:\n 'onlyWarnsForInDependencies.duplicateDirectDependency',\n });\n\n return this;\n },\n\n checkIdenticalVersionsThanDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(this.checkIdenticalVersionsThanDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (dependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (devDependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n }),\n );\n return this;\n },\n\n checkIdenticalVersionsThanDevDependencyOfDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(this.checkSatisfiesVersionsFromDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (dependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (devDependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n }),\n );\n return this;\n },\n\n checkSatisfiesVersions(dependencies) {\n Object.entries(dependencies).forEach(\n ([dependencyType, dependenciesRanges]) => {\n checkSatisfiesVersions(\n pkg,\n pkgPathName,\n dependencyType as DependencyTypes,\n dependenciesRanges,\n );\n },\n );\n return this;\n },\n\n checkSatisfiesVersionsFromDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(this.checkSatisfiesVersionsFromDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (dependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (devDependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n }),\n );\n return this;\n },\n\n checkSatisfiesVersionsInDevDependenciesOfDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(\n this.checkSatisfiesVersionsInDevDependenciesOfDependency.name,\n async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (dependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (devDependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n },\n ),\n );\n return this;\n },\n\n checkIdenticalVersions({ resolutions, dependencies, devDependencies }) {\n if (resolutions) {\n checkIdenticalVersions(pkg, pkgPathName, 'resolutions', resolutions);\n }\n if (dependencies) {\n checkIdenticalVersions(pkg, pkgPathName, 'dependencies', dependencies);\n }\n if (devDependencies) {\n checkIdenticalVersions(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n );\n }\n return this;\n },\n\n checkSatisfiesVersionsBetweenDependencies(\n depName1,\n depName2,\n { dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(\n this.checkSatisfiesVersionsBetweenDependencies.name,\n async () => {\n const [depPkg1, depPkg2] = await Promise.all([\n getDependencyPackageJson(depName1),\n getDependencyPackageJson(depName2),\n ]);\n\n if (dependencies) {\n checkSatisfiesVersionsFromDependency(\n depPkg2,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg1,\n depPkg1.dependencies,\n );\n }\n if (devDependencies) {\n checkSatisfiesVersionsFromDependency(\n depPkg2,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg1,\n depPkg1.dependencies,\n );\n }\n },\n ),\n );\n return this;\n },\n\n checkSatisfiesVersionsInDependency(depName, dependenciesRanges) {\n jobs.push(\n new Job(this.checkSatisfiesVersionsInDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n checkSatisfiesVersionsInDependency(\n pkgPathName,\n depPkg,\n dependenciesRanges,\n );\n }),\n );\n return this;\n },\n };\n}\n","/* eslint-disable max-lines */\nimport fs from 'fs';\nimport path from 'path';\nimport glob from 'glob';\nimport type {\n CreateCheckPackageOptions,\n CheckPackageApi,\n OnlyWarnsForInDependenciesCheckPackageRecommendedOption,\n OnlyWarnsForInDependencyCheckPackageRecommendedOption,\n OnlyWarnsForInPackageCheckPackageRecommendedOption,\n} from './check-package';\nimport { createCheckPackage } from './check-package';\nimport { checkDuplicateDependencies } from './checks/checkDuplicateDependencies';\nimport type { CheckResolutionMessage } from './checks/checkResolutionsHasExplanation';\nimport {\n createReportError,\n reportNotWarnedForMapping,\n} from './utils/createReportError';\nimport type { OnlyWarnsForOptionalDependencyMapping } from './utils/warnForUtils';\nimport { createOnlyWarnsForMappingCheck } from './utils/warnForUtils';\n\ninterface OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption\n extends OnlyWarnsForInPackageCheckPackageRecommendedOption {\n duplicateDirectDependency: OnlyWarnsForInDependencyCheckPackageRecommendedOption['duplicateDirectDependency'];\n}\n\ntype OnlyWarnsForInMonorepoPackagesCheckPackageRecommendedOption = Record<\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n '*' | string,\n OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption\n>;\n\ntype OnlyWarnsForInMonorepoPackagesDependenciesCheckPackageRecommendedOption =\n Record;\n\nexport interface CheckPackageWithWorkspacesRecommendedOptions {\n isLibrary?: (pkgName: string) => boolean;\n allowRangeVersionsInLibraries?: boolean;\n monorepoDirectDuplicateDependenciesOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n onlyWarnsForInRootPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption;\n onlyWarnsForInMonorepoPackages?: OnlyWarnsForInMonorepoPackagesCheckPackageRecommendedOption;\n onlyWarnsForInRootDependencies?: OnlyWarnsForInDependenciesCheckPackageRecommendedOption;\n onlyWarnsForInMonorepoPackagesDependencies?: OnlyWarnsForInMonorepoPackagesDependenciesCheckPackageRecommendedOption;\n checkResolutionMessage?: CheckResolutionMessage;\n}\n\nexport interface CheckPackageWithWorkspacesApi {\n run: () => Promise;\n\n checkRecommended: (\n options?: CheckPackageWithWorkspacesRecommendedOptions,\n ) => CheckPackageWithWorkspacesApi;\n\n forRoot: (\n callback: (checkPackage: CheckPackageApi) => void,\n ) => CheckPackageWithWorkspacesApi;\n forEach: (\n callback: (checkPackage: CheckPackageApi) => void,\n ) => CheckPackageWithWorkspacesApi;\n for: (\n id: string,\n callback: (checkPackage: CheckPackageApi) => void,\n ) => CheckPackageWithWorkspacesApi;\n}\n\nexport function createCheckPackageWithWorkspaces(\n pkgDirectoryPath = '.',\n createCheckPackageOptions: CreateCheckPackageOptions = {},\n): CheckPackageWithWorkspacesApi {\n const checkPackage = createCheckPackage(\n pkgDirectoryPath,\n createCheckPackageOptions,\n );\n const { pkg, pkgDirname } = checkPackage;\n\n const pkgWorkspaces: string[] | undefined =\n pkg.workspaces && !Array.isArray(pkg.workspaces)\n ? pkg.workspaces.packages\n : pkg.workspaces;\n\n if (!pkgWorkspaces) {\n throw new Error('Package is missing \"workspaces\"');\n }\n\n const workspacePackagesPaths: string[] = [];\n\n if (pkgWorkspaces) {\n pkgWorkspaces.forEach((pattern) => {\n const match = glob.sync(pattern, { cwd: pkgDirname });\n match.forEach((pathMatch) => {\n const stat = fs.statSync(pathMatch);\n if (!stat.isDirectory()) return;\n const subPkgDirectoryPath = path.relative(process.cwd(), pathMatch);\n workspacePackagesPaths.push(subPkgDirectoryPath);\n });\n });\n }\n\n const checksWorkspaces = new Map(\n workspacePackagesPaths.map((subPkgDirectoryPath) => {\n const checkPkg = createCheckPackage(subPkgDirectoryPath, {\n ...createCheckPackageOptions,\n internalWorkspacePkgDirectoryPath: pkgDirectoryPath,\n });\n return [checkPkg.pkg.name, checkPkg];\n }),\n );\n\n return {\n async run() {\n for (const checksWorkspace of [\n checkPackage,\n ...checksWorkspaces.values(),\n ]) {\n await checksWorkspace.run();\n }\n },\n\n checkRecommended({\n isLibrary = () => false,\n allowRangeVersionsInLibraries = true,\n onlyWarnsForInRootPackage,\n onlyWarnsForInMonorepoPackages,\n onlyWarnsForInRootDependencies,\n onlyWarnsForInMonorepoPackagesDependencies = {},\n monorepoDirectDuplicateDependenciesOnlyWarnsFor,\n checkResolutionMessage,\n } = {}) {\n checkPackage.checkNoDependencies();\n checkPackage.checkRecommended({\n isLibrary: false,\n onlyWarnsForInPackage: onlyWarnsForInRootPackage,\n onlyWarnsForInDependencies: onlyWarnsForInRootDependencies,\n checkResolutionMessage,\n });\n\n const monorepoDirectDuplicateDependenciesOnlyWarnsForCheck =\n createOnlyWarnsForMappingCheck(\n 'monorepoDirectDuplicateDependenciesOnlyWarnsFor',\n monorepoDirectDuplicateDependenciesOnlyWarnsFor,\n );\n\n const previousCheckedWorkspaces = new Map();\n checksWorkspaces.forEach((checkSubPackage, id) => {\n const isPackageALibrary = isLibrary(id);\n checkSubPackage.checkRecommended({\n isLibrary: isPackageALibrary,\n allowRangeVersionsInDependencies: isPackageALibrary\n ? allowRangeVersionsInLibraries\n : false,\n onlyWarnsForInPackage: onlyWarnsForInMonorepoPackages\n ? {\n ...onlyWarnsForInMonorepoPackages['*'],\n ...onlyWarnsForInMonorepoPackages[checkSubPackage.pkg.name],\n }\n : undefined,\n onlyWarnsForInDependencies:\n onlyWarnsForInMonorepoPackagesDependencies[\n checkSubPackage.pkg.name\n ],\n internalExactVersionsIgnore: [...checksWorkspaces.keys()],\n checkResolutionMessage,\n });\n\n const reportMonorepoDDDError = createReportError(\n 'Monorepo Direct Duplicate Dependencies',\n checkSubPackage.pkgPathName,\n );\n // Root\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n 'devDependencies',\n ['dependencies', 'devDependencies'],\n pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n // previous packages\n previousCheckedWorkspaces.forEach((previousCheckSubPackage) => {\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n 'devDependencies',\n ['dependencies', 'devDependencies'],\n previousCheckSubPackage.pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n 'dependencies',\n ['dependencies', 'devDependencies'],\n previousCheckSubPackage.pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n 'peerDependencies',\n ['peerDependencies'],\n previousCheckSubPackage.pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n });\n\n previousCheckedWorkspaces.set(id, checkSubPackage);\n });\n reportNotWarnedForMapping(\n createReportError(\n 'Monorepo Direct Duplicate Dependencies',\n checkPackage.pkgPathName,\n ),\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck,\n );\n\n return this;\n },\n\n forRoot(callback) {\n callback(checkPackage);\n return this;\n },\n\n forEach(callback) {\n checksWorkspaces.forEach((checkSubPackage) => {\n callback(checkSubPackage);\n });\n return this;\n },\n\n for(id, callback) {\n const packageCheck = checksWorkspaces.get(id);\n if (!packageCheck) {\n throw new Error(\n `Invalid package name: ${id}. Known package names: \"${[\n ...checksWorkspaces.keys(),\n ].join('\",\"')}\"`,\n );\n }\n callback(packageCheck);\n return this;\n },\n };\n}\n"],"names":["getKeys","o","Object","keys","getEntries","entries","titleDisplayed","pkgPathDisplayed","logMessage","msgTitle","msgInfo","onlyWarns","console","error","chalk","yellow","red","createReportError","title","pkgPathName","reportError","cyan","process","exitCode","reportNotWarnedFor","onlyWarnsForCheck","notWarnedFor","getNotWarnedFor","length","configName","map","depName","join","reportNotWarnedForMapping","onlyWarnsForMappingCheck","notWarnedForMapping","forEach","depNameOrStar","checkDuplicateDependencies","pkg","depType","searchIn","depPkg","dependencies","searchInExisting","filter","type","depKey","range","versionsIn","versions","version","index","startsWith","semver","satisfies","includePrerelease","intersects","resolutions","versionInType","name","shouldWarnsFor","checkDirectDuplicateDependencies","getDependencyPackageJson","reportErrorNamePrefix","customCreateReportError","Promise","all","createFor","checkPeerDependencies","allowedPeerIn","missingOnlyWarnsForCheck","invalidOnlyWarnsForCheck","peerDependencies","peerDependenciesMeta","allowedPeerInExisting","allowedPeerInType","peerDepName","allowedPeerInExistingType","peerDependenciesMetaPeerDep","optional","versionsInType","minVersionOfVersion","minVersion","regularDependencyTypes","getAllowedPeerInFromType","depPkgType","isLibrary","checkDirectPeerDependencies","isVersionRange","checkExactVersions","types","internalExactVersionsIgnore","tryToAutoFix","pkgDependencies","dependencyName","versionConst","match","exec","Error","realVersion","includes","shouldOnlyWarn","resolvedDep","slice","checkIdenticalVersions","deps","depConfigArrayOrObject","depConfig","Array","isArray","depKeyType","pkgDependenciesType","depKeyIdentical","value","checkIdenticalVersionsThanDependency","depKeys","checkNoDependencies","pkgPath","moveToSuggestion","checkResolutionsHasExplanation","checkMessage","pkgResolutions","pkgResolutionsExplained","resolutionsExplained","checkResolutionsVersionsMatch","resolutionDepVersion","checkSatisfiesVersions","dependenciesRanges","checkSatisfiesVersionsFromDependency","checkSatisfiesVersionsInDependency","dependenciesType","dependenciesTypeRanges","dependencyRange","readPkgJson","packagePath","JSON","parse","readFileSync","writePkgJson","writeFileSync","stringify","internalLoadPackageJsonFromNodeModules","pkgDepName","pkgDirname","packageUrl","importResolve","replace","platform","createGetDependencyPackageJson","nodeModulesPackagePathCache","Map","internalCustomLoadPackageJsonFromNodeModules","internalReadPkgJson","existing","get","err","code","message","matchPackageJson","set","createOnlyWarnsForArrayCheck","onlyWarnsFor","Set","delete","isMapping","createOnlyWarnsForMappingCheck","fromEntries","entryKey","entryValue","key","size","dependencyNameLevel1","arrayOnlyWarnsForCheck","createCheckPackage","pkgDirectoryPath","internalWorkspacePkgDirectoryPath","path","resolve","copyPkg","argv","writePackageIfChanged","util","isDeepStrictEqual","runCalled","on","Job","constructor","fn","run","jobs","job","allowRangeVersionsInDependencies","push","checkExactDevVersions","missingOnlyWarnsFor","invalidOnlyWarnsFor","internalMissingConfigName","internalInvalidConfigName","internalConfigName","undefined","checkRecommended","onlyWarnsForInPackage","onlyWarnsForInDependencies","checkResolutionMessage","internalMissingPeerDependenciesOnlyWarnsFor","internalInvalidPeerDependenciesOnlyWarnsFor","internalDirectDuplicateDependenciesOnlyWarnsFor","exactVersionsOnlyWarnsFor","exactVersions","dependencyNameOrSpecialKey","onlyWarnsForValue","duplicateDirectDependency","missingPeerDependency","invalidPeerDependencyVersion","devDependencies","checkIdenticalVersionsThanDevDependencyOfDependency","dependencyType","checkSatisfiesVersionsInDevDependenciesOfDependency","checkSatisfiesVersionsBetweenDependencies","depName1","depName2","depPkg1","depPkg2","createCheckPackageWithWorkspaces","createCheckPackageOptions","checkPackage","pkgWorkspaces","workspaces","packages","workspacePackagesPaths","pattern","glob","sync","cwd","pathMatch","stat","fs","statSync","isDirectory","subPkgDirectoryPath","relative","checksWorkspaces","checkPkg","checksWorkspace","values","allowRangeVersionsInLibraries","onlyWarnsForInRootPackage","onlyWarnsForInMonorepoPackages","onlyWarnsForInRootDependencies","onlyWarnsForInMonorepoPackagesDependencies","monorepoDirectDuplicateDependenciesOnlyWarnsFor","monorepoDirectDuplicateDependenciesOnlyWarnsForCheck","previousCheckedWorkspaces","checkSubPackage","id","isPackageALibrary","reportMonorepoDDDError","previousCheckSubPackage","forRoot","callback","for","packageCheck"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index-node16.mjs","sources":["../src/utils/object.ts","../src/utils/createReportError.ts","../src/checks/checkDuplicateDependencies.ts","../src/checks/checkDirectDuplicateDependencies.ts","../src/checks/checkPeerDependencies.ts","../src/checks/checkDirectPeerDependencies.ts","../src/checks/checkExactVersions.ts","../src/checks/checkIdenticalVersions.ts","../src/checks/checkIdenticalVersionsThanDependency.ts","../src/checks/checkNoDependencies.ts","../src/checks/checkResolutionsHasExplanation.ts","../src/checks/checkResolutionsVersionsMatch.ts","../src/checks/checkSatisfiesVersions.ts","../src/checks/checkSatisfiesVersionsFromDependency.ts","../src/checks/checkSatisfiesVersionsInDependency.ts","../src/utils/pkgJsonUtils.ts","../src/utils/createGetDependencyPackageJson.ts","../src/utils/warnForUtils.ts","../src/check-package.ts","../src/check-package-with-workspaces.ts"],"sourcesContent":["export const getKeys = (o: T): (keyof T)[] =>\n Object.keys(o) as (keyof T)[];\n\nexport const getEntries = (o: T): [keyof T, T[keyof T]][] =>\n Object.entries(o) as unknown as [keyof T, T[keyof T]][];\n","/* eslint-disable no-console */\n\nimport chalk from 'chalk';\nimport { getEntries } from './object';\nimport type {\n OnlyWarnsForCheck,\n OnlyWarnsForMappingCheck,\n} from './warnForUtils';\n\nexport type ReportError = (\n msgTitle: string,\n msgInfo?: string,\n onlyWarns?: boolean,\n) => void;\n\nlet titleDisplayed: string | null = null;\nlet pkgPathDisplayed: string | null = null;\n\nexport function logMessage(\n msgTitle: string,\n msgInfo?: string,\n onlyWarns?: boolean,\n): void {\n console.error(\n `${\n onlyWarns ? chalk.yellow(`⚠ ${msgTitle}`) : chalk.red(`❌ ${msgTitle}`)\n }${msgInfo ? `: ${msgInfo}` : ''}`,\n );\n}\n\nexport function createReportError(\n title: string,\n pkgPathName: string,\n): ReportError {\n return function reportError(msgTitle, msgInfo, onlyWarns): void {\n if (titleDisplayed !== title || pkgPathName !== pkgPathDisplayed) {\n if (titleDisplayed) console.error();\n console.error(chalk.cyan(`== ${title} in ${pkgPathName} ==`));\n titleDisplayed = title;\n pkgPathDisplayed = pkgPathName;\n }\n logMessage(msgTitle, msgInfo, onlyWarns);\n\n if (!onlyWarns) {\n // console.trace();\n process.exitCode = 1;\n }\n };\n}\n\nexport function reportNotWarnedFor(\n reportError: ReportError,\n onlyWarnsForCheck: OnlyWarnsForCheck,\n): void {\n const notWarnedFor = onlyWarnsForCheck.getNotWarnedFor();\n if (notWarnedFor.length > 0) {\n reportError(\n `Invalid config in \"${onlyWarnsForCheck.configName}\"`,\n `no warning was raised for ${notWarnedFor\n .map((depName) => `\"${depName}\"`)\n .join(', ')}`,\n false,\n );\n }\n}\n\nexport function reportNotWarnedForMapping(\n reportError: ReportError,\n onlyWarnsForMappingCheck: OnlyWarnsForMappingCheck,\n): void {\n const notWarnedForMapping = onlyWarnsForMappingCheck.getNotWarnedFor();\n getEntries(notWarnedForMapping).forEach(([depNameOrStar, notWarnedFor]) => {\n reportError(\n `Invalid config in \"${onlyWarnsForMappingCheck.configName}\" for \"${depNameOrStar}\"`,\n `no warning was raised for ${notWarnedFor\n .map((depName) => `\"${depName}\"`)\n .join(', ')}`,\n );\n });\n}\n","import semver from 'semver';\nimport type { ReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkDuplicateDependencies(\n reportError: ReportError,\n pkg: PackageJson,\n isPkgLibrary: boolean,\n depType: DependencyTypes,\n searchIn: DependencyTypes[],\n depPkg: PackageJson,\n onlyWarnsForCheck: OnlyWarnsForCheck,\n): void {\n const dependencies = depPkg[depType];\n if (!dependencies) return;\n\n const searchInExisting = searchIn.filter((type) => pkg[type]);\n\n for (const [depKey, range] of Object.entries(dependencies)) {\n const versionsIn = searchInExisting.filter((type) => pkg[type]![depKey]);\n\n let allowDuplicated = false;\n if (\n versionsIn.length === 2 &&\n isPkgLibrary &&\n versionsIn.includes('dependencies') &&\n versionsIn.includes('devDependencies')\n ) {\n const depVersion = pkg.dependencies![depKey];\n const devDepVersion = pkg.devDependencies![depKey];\n\n if (depVersion && depVersion === devDepVersion) {\n reportError(\n `Invalid \"${depKey}\" has same version in dependencies and devDependencies`,\n 'please place it only in dependencies or use range in dependencies',\n );\n continue;\n }\n allowDuplicated = true;\n }\n\n if (\n versionsIn.length > 2 ||\n (versionsIn.length === 2 && !allowDuplicated)\n ) {\n reportError(\n `Invalid \"${depKey}\" present in ${versionsIn.join(' and ')}`,\n 'please place it only in dependencies',\n );\n } else {\n const versions = versionsIn.map((type) => pkg[type]![depKey]);\n\n versions.forEach((version, index) => {\n if (version.startsWith('file:') || range.startsWith('file:')) return;\n // https://yarnpkg.com/features/workspaces#workspace-ranges-workspace\n if (\n version.startsWith('workspace:') ||\n range.startsWith('workspace:')\n ) {\n return;\n }\n\n if (\n semver.satisfies(version, range, {\n includePrerelease: true,\n }) ||\n semver.intersects(version, range, {\n includePrerelease: true,\n })\n ) {\n return;\n }\n\n // Ignore reporting duplicate when there's a resolution for it\n if (pkg.resolutions?.[depKey]) {\n return;\n }\n\n const versionInType = versionsIn[index];\n\n reportError(\n `Invalid duplicate dependency \"${depKey}\"`,\n `\"${versions[0]}\" (in ${versionInType}) should satisfies \"${range}\" from \"${depPkg.name}\" ${depType}.`,\n onlyWarnsForCheck.shouldWarnsFor(depKey),\n );\n });\n }\n }\n}\n","import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson';\nimport {\n reportNotWarnedForMapping,\n createReportError,\n} from '../utils/createReportError';\nimport { getKeys } from '../utils/object';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForMappingCheck } from '../utils/warnForUtils';\nimport { checkDuplicateDependencies } from './checkDuplicateDependencies';\n\nexport async function checkDirectDuplicateDependencies(\n pkg: PackageJson,\n pkgPathName: string,\n isPackageALibrary: boolean,\n depType: DependencyTypes,\n getDependencyPackageJson: GetDependencyPackageJson,\n onlyWarnsForCheck: OnlyWarnsForMappingCheck,\n reportErrorNamePrefix = '',\n customCreateReportError = createReportError,\n): Promise {\n const reportError = customCreateReportError(\n `${reportErrorNamePrefix}Direct Duplicate Dependencies`,\n pkgPathName,\n );\n\n const checks: {\n type: DependencyTypes;\n searchIn: DependencyTypes[];\n }[] = [\n {\n type: 'devDependencies',\n searchIn: ['devDependencies', 'dependencies'],\n },\n { type: 'dependencies', searchIn: ['devDependencies', 'dependencies'] },\n ];\n\n await Promise.all(\n checks.map(async ({ type, searchIn }) => {\n const dependencies = pkg[type];\n\n if (!dependencies) return;\n for (const depName of getKeys(dependencies)) {\n const depPkg = await getDependencyPackageJson(depName);\n checkDuplicateDependencies(\n reportError,\n pkg,\n isPackageALibrary,\n depType,\n searchIn,\n depPkg,\n onlyWarnsForCheck.createFor(depName),\n );\n }\n }),\n );\n\n reportNotWarnedForMapping(reportError, onlyWarnsForCheck);\n}\n","import semver from 'semver';\nimport type { ReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkPeerDependencies(\n pkg: PackageJson,\n reportError: ReportError,\n type: DependencyTypes,\n allowedPeerIn: DependencyTypes[],\n depPkg: PackageJson,\n missingOnlyWarnsForCheck: OnlyWarnsForCheck,\n invalidOnlyWarnsForCheck: OnlyWarnsForCheck,\n): void {\n const { peerDependencies, peerDependenciesMeta } = depPkg;\n if (!peerDependencies) return;\n\n const allowedPeerInExisting = allowedPeerIn.filter(\n (allowedPeerInType) => pkg[allowedPeerInType],\n );\n\n for (const [peerDepName, range] of Object.entries(peerDependencies)) {\n const versionsIn = allowedPeerInExisting.filter(\n (allowedPeerInExistingType) =>\n pkg[allowedPeerInExistingType]?.[peerDepName],\n );\n if (versionsIn.length === 0) {\n const peerDependenciesMetaPeerDep = peerDependenciesMeta?.[peerDepName];\n if (peerDependenciesMetaPeerDep?.optional) {\n continue;\n }\n reportError(\n `Missing \"${peerDepName}\" peer dependency from \"${depPkg.name}\" in ${type}`,\n `it should satisfies \"${range}\" and be in ${allowedPeerIn.join(\n ' or ',\n )}`,\n missingOnlyWarnsForCheck.shouldWarnsFor(peerDepName),\n );\n } else {\n const versions = versionsIn.map(\n (versionsInType) => pkg[versionsInType]![peerDepName],\n );\n\n versions.forEach((version, index) => {\n if (version.startsWith('npm:')) {\n return;\n }\n\n const minVersionOfVersion = semver.minVersion(version);\n if (\n !minVersionOfVersion ||\n !semver.satisfies(minVersionOfVersion, range, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${peerDepName}\" peer dependency`,\n `\"${version}\" (in ${allowedPeerInExisting[index]}) should satisfies \"${range}\" from \"${depPkg.name}\" ${type}`,\n invalidOnlyWarnsForCheck.shouldWarnsFor(peerDepName),\n );\n }\n });\n }\n }\n}\n","import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson';\nimport {\n createReportError,\n reportNotWarnedForMapping,\n} from '../utils/createReportError';\nimport { getKeys } from '../utils/object';\nimport type {\n DependencyTypes,\n PackageJson,\n RegularDependencyTypes,\n} from '../utils/packageTypes';\nimport type { OnlyWarnsForMappingCheck } from '../utils/warnForUtils';\nimport { checkPeerDependencies } from './checkPeerDependencies';\n\nconst regularDependencyTypes: RegularDependencyTypes[] = [\n 'devDependencies',\n 'dependencies',\n 'optionalDependencies',\n];\n\nconst getAllowedPeerInFromType = (\n depPkgType: RegularDependencyTypes,\n isLibrary: boolean,\n): DependencyTypes[] => {\n switch (depPkgType) {\n case 'devDependencies':\n return ['devDependencies', 'dependencies'];\n case 'dependencies':\n return isLibrary\n ? ['dependencies', 'peerDependencies']\n : ['devDependencies', 'dependencies'];\n case 'optionalDependencies':\n return isLibrary\n ? ['dependencies', 'optionalDependencies', 'peerDependencies']\n : ['devDependencies', 'dependencies'];\n }\n};\n\nexport async function checkDirectPeerDependencies(\n isLibrary: boolean,\n pkg: PackageJson,\n pkgPathName: string,\n getDependencyPackageJson: GetDependencyPackageJson,\n missingOnlyWarnsForCheck: OnlyWarnsForMappingCheck,\n invalidOnlyWarnsForCheck: OnlyWarnsForMappingCheck,\n customCreateReportError = createReportError,\n): Promise {\n const reportError = customCreateReportError('Peer Dependencies', pkgPathName);\n\n await Promise.all(\n regularDependencyTypes.map(async (depType) => {\n const dependencies = pkg[depType];\n if (!dependencies) return;\n for (const depName of getKeys(dependencies)) {\n const depPkg = await getDependencyPackageJson(depName);\n\n if (depPkg.peerDependencies) {\n checkPeerDependencies(\n pkg,\n reportError,\n depType,\n getAllowedPeerInFromType(depType, isLibrary),\n depPkg,\n missingOnlyWarnsForCheck.createFor(depName),\n invalidOnlyWarnsForCheck.createFor(depName),\n );\n }\n }\n }),\n );\n\n reportNotWarnedForMapping(reportError, missingOnlyWarnsForCheck);\n if (missingOnlyWarnsForCheck !== invalidOnlyWarnsForCheck) {\n reportNotWarnedForMapping(reportError, invalidOnlyWarnsForCheck);\n }\n}\n","/* eslint-disable complexity */\nimport semver from 'semver';\nimport type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson';\nimport {\n createReportError,\n reportNotWarnedFor,\n} from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsFor, OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport interface CheckExactVersionsOptions {\n getDependencyPackageJson?: GetDependencyPackageJson;\n onlyWarnsForCheck: OnlyWarnsForCheck;\n internalExactVersionsIgnore?: OnlyWarnsFor;\n tryToAutoFix?: boolean;\n customCreateReportError?: typeof createReportError;\n}\n\nconst isVersionRange = (version: string): boolean =>\n version.startsWith('^') || version.startsWith('~');\n\nexport async function checkExactVersions(\n pkg: PackageJson,\n pkgPathName: string,\n types: DependencyTypes[],\n {\n getDependencyPackageJson,\n onlyWarnsForCheck,\n internalExactVersionsIgnore,\n tryToAutoFix = false,\n customCreateReportError = createReportError,\n }: CheckExactVersionsOptions,\n): Promise {\n const reportError = customCreateReportError('Exact versions', pkgPathName);\n\n for (const type of types) {\n const pkgDependencies = pkg[type];\n if (!pkgDependencies) continue;\n\n for (const [dependencyName, versionConst] of Object.entries(\n pkgDependencies,\n )) {\n let version = versionConst;\n if (version.startsWith('npm:')) {\n const match = /^npm:.*@(.*)$/.exec(version);\n if (!match) throw new Error(`Invalid version match: ${version}`);\n const [, realVersion] = match;\n version = realVersion;\n }\n\n if (isVersionRange(version)) {\n if (internalExactVersionsIgnore?.includes(dependencyName)) {\n continue;\n }\n const shouldOnlyWarn = onlyWarnsForCheck.shouldWarnsFor(dependencyName);\n if (!shouldOnlyWarn && tryToAutoFix && getDependencyPackageJson) {\n let resolvedDep;\n try {\n resolvedDep = await getDependencyPackageJson(dependencyName);\n } catch {\n resolvedDep = null;\n }\n if (!resolvedDep || !resolvedDep.version) {\n reportError(\n `Unexpected range dependency in \"${type}\" for \"${dependencyName}\"`,\n `expecting \"${version}\" to be exact, autofix failed to resolve \"${dependencyName}\".`,\n shouldOnlyWarn,\n );\n } else if (\n !semver.satisfies(resolvedDep.version, version, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Unexpected range dependency in \"${type}\" for \"${dependencyName}\"`,\n `expecting \"${version}\" to be exact, autofix failed as \"${dependencyName}\"'s resolved version is \"${resolvedDep.version}\" and doesn't satisfies \"${version}\".`,\n shouldOnlyWarn,\n );\n } else {\n pkgDependencies[dependencyName] = resolvedDep.version;\n }\n } else {\n reportError(\n `Unexpected range dependency in \"${type}\" for \"${dependencyName}\"`,\n `expecting \"${version}\" to be exact \"${version.slice(1)}\".`,\n shouldOnlyWarn,\n );\n }\n }\n }\n }\n\n reportNotWarnedFor(reportError, onlyWarnsForCheck);\n}\n","import { createReportError } from '../utils/createReportError';\nimport { getKeys } from '../utils/object';\nimport type { DependencyTypes, PackageJson } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkIdenticalVersions(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n deps: Record>>,\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n 'Identical Versions',\n pkgPathName,\n );\n\n getKeys(deps).forEach((depKey) => {\n const version = pkgDependencies[depKey];\n if (!version) {\n reportError(`Unexpected missing ${type} for \"${depKey}\".`);\n return;\n }\n\n const depConfigArrayOrObject = deps[depKey];\n const depConfig = Array.isArray(depConfigArrayOrObject)\n ? { [type]: depConfigArrayOrObject }\n : depConfigArrayOrObject;\n\n getKeys(depConfig).forEach((depKeyType) => {\n const pkgDependenciesType = pkg[depKeyType] || {};\n depConfig[depKeyType]?.forEach((depKeyIdentical) => {\n const value = pkgDependenciesType[depKeyIdentical];\n if (!value) {\n reportError(\n `Missing \"${depKeyIdentical}\" in ${depKeyType}`,\n `it should be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n\n if (value !== version) {\n reportError(\n `Invalid \"${depKeyIdentical}\" in ${depKeyType}`,\n `expecting \"${value}\" be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n });\n });\n });\n}\n","import { createReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkIdenticalVersionsThanDependency(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n depKeys: string[],\n depPkg: PackageJson,\n dependencies: PackageJson[DependencyTypes] = {},\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n `Same Versions than ${depPkg.name}`,\n pkgPathName,\n );\n\n depKeys.forEach((depKey) => {\n const version = dependencies[depKey];\n if (!version) {\n reportError(\n `Unexpected missing dependency \"${depKey}\" in \"${depPkg.name}\".`,\n );\n return;\n }\n\n if (version.startsWith('^') || version.startsWith('~')) {\n reportError(\n `Unexpected range dependency in \"${depPkg.name}\" for \"${depKey}\"`,\n 'perhaps use checkSatisfiesVersionsFromDependency() instead.',\n );\n return;\n }\n\n const value = pkgDependencies[depKey];\n\n if (!value) {\n reportError(\n `Missing \"${depKey}\" in ${type}`,\n `expecting to be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n\n if (value !== version) {\n reportError(\n `Invalid \"${depKey}\" in ${type}`,\n `expecting \"${value}\" to be \"${version}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n });\n}\n","import { createReportError } from '../utils/createReportError';\nimport type { PackageJson, DependencyTypes } from '../utils/packageTypes';\n\nexport function checkNoDependencies(\n pkg: PackageJson,\n pkgPath: string,\n type: DependencyTypes = 'dependencies',\n moveToSuggestion: DependencyTypes = 'devDependencies',\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type];\n if (!pkgDependencies) return;\n\n const reportError = customCreateReportError('No dependencies', pkgPath);\n reportError(\n `Unexpected ${type}`,\n `you should move them in ${moveToSuggestion}`,\n );\n}\n","import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson';\nimport { createReportError } from '../utils/createReportError';\nimport type { PackageJson } from '../utils/packageTypes';\n\nexport type CheckResolutionMessage = (\n depKey: string,\n resolutionExplainedMessage: string,\n checkMessageHelpers: {\n getDependencyPackageJson: GetDependencyPackageJson;\n },\n) => string | undefined;\n\nexport function checkResolutionsHasExplanation(\n pkg: PackageJson,\n pkgPathName: string,\n checkMessage: CheckResolutionMessage,\n getDependencyPackageJson: GetDependencyPackageJson,\n customCreateReportError = createReportError,\n): void {\n const pkgResolutions = pkg.resolutions || {};\n const pkgResolutionsExplained = pkg.resolutionsExplained || {};\n const reportError = customCreateReportError(\n 'Resolutions has explanation',\n pkgPathName,\n );\n\n Object.keys(pkgResolutions).forEach((depKey) => {\n if (!pkgResolutionsExplained[depKey]) {\n reportError(`Missing \"${depKey}\" in resolutionsExplained.`);\n }\n });\n\n Object.keys(pkgResolutionsExplained).forEach((depKey) => {\n if (!pkgResolutions[depKey]) {\n reportError(\n `Found \"${depKey}\" in resolutionsExplained but not in resolutions.`,\n );\n } else {\n const error = checkMessage(depKey, pkgResolutionsExplained[depKey], {\n getDependencyPackageJson,\n });\n if (error) {\n reportError(\n `Invalid message for \"${depKey}\" in resolutionsExplained`,\n `${error}.`,\n );\n }\n }\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport type { PackageJson } from '../utils/packageTypes';\n\nexport interface CheckResolutionsVersionsMatchOptions {\n tryToAutoFix?: boolean;\n customCreateReportError?: typeof createReportError;\n}\n\nexport function checkResolutionsVersionsMatch(\n pkg: PackageJson,\n pkgPathName: string,\n {\n tryToAutoFix,\n customCreateReportError = createReportError,\n }: CheckResolutionsVersionsMatchOptions = {},\n): void {\n const pkgResolutions = pkg.resolutions || {};\n const reportError = customCreateReportError(\n 'Resolutions match other dependencies',\n pkgPathName,\n );\n\n Object.entries(pkgResolutions).forEach(([depName, resolutionDepVersion]) => {\n (['dependencies', 'devDependencies'] as const).forEach((depType) => {\n const range = pkg?.[depType]?.[depName];\n\n if (!range) return;\n\n if (\n !semver.satisfies(resolutionDepVersion, range, {\n includePrerelease: true,\n })\n ) {\n if (tryToAutoFix) {\n pkg[depType]![depName] = resolutionDepVersion;\n } else {\n reportError(\n `Invalid \"${depName}\" in ${depType}`,\n `expecting \"${range}\" be \"${resolutionDepVersion}\" from resolutions.`,\n );\n }\n }\n });\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport type { DependencyTypes, PackageJson } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport interface CheckSatisfiesVersionsOptions {\n customCreateReportError?: typeof createReportError;\n}\n\nexport function checkSatisfiesVersions(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n dependenciesRanges: Record,\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n {\n customCreateReportError = createReportError,\n }: CheckSatisfiesVersionsOptions = {},\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n 'Satisfies Versions',\n pkgPathName,\n );\n\n Object.entries(dependenciesRanges).forEach(([depKey, range]) => {\n const version = pkgDependencies[depKey];\n\n if (!version) {\n reportError(\n `Missing \"${depKey}\" in ${type}`,\n `should satisfies \"${range}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n } else {\n const minVersionOfVersion = semver.minVersion(version);\n if (\n !minVersionOfVersion ||\n !semver.satisfies(minVersionOfVersion, range, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${depKey}\" in ${type}`,\n `\"${version}\" (in \"${depKey}\") should satisfies \"${range}\".`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n }\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport type { DependencyTypes, PackageJson } from '../utils/packageTypes';\nimport type { OnlyWarnsForCheck } from '../utils/warnForUtils';\n\nexport function checkSatisfiesVersionsFromDependency(\n pkg: PackageJson,\n pkgPathName: string,\n type: DependencyTypes,\n depKeys: string[],\n depPkg: PackageJson,\n dependencies: PackageJson[DependencyTypes] = {},\n onlyWarnsForCheck?: OnlyWarnsForCheck,\n customCreateReportError = createReportError,\n): void {\n const pkgDependencies = pkg[type] || {};\n const reportError = customCreateReportError(\n `Satisfies Versions from ${depPkg.name}`,\n pkgPathName,\n );\n\n depKeys.forEach((depKey) => {\n const range = dependencies[depKey];\n if (!range) {\n reportError(\n `Unexpected missing dependency \"${depKey}\" in \"${depPkg.name}\".`,\n );\n return;\n }\n\n const version = pkgDependencies[depKey];\n\n if (!version) {\n reportError(\n `Missing \"${depKey}\" in ${type}`,\n `should satisfies \"${range}\" from \"${depPkg.name}\" ${depKey}.`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n } else {\n const minVersionOfVersion = semver.minVersion(version);\n if (\n !minVersionOfVersion ||\n !semver.satisfies(minVersionOfVersion, range, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${depKey}\" in ${type}`,\n `\"${version}\" (in \"${depKey}\") should satisfies \"${range}\" from \"${depPkg.name}\" ${depKey}.`,\n onlyWarnsForCheck?.shouldWarnsFor(depKey),\n );\n }\n }\n });\n}\n","import semver from 'semver';\nimport { createReportError } from '../utils/createReportError';\nimport { getEntries } from '../utils/object';\nimport type { DependenciesRanges, PackageJson } from '../utils/packageTypes';\n\ninterface CheckSatisfiesVersionsInDependencyOptions {\n customCreateReportError?: typeof createReportError;\n}\n\nexport function checkSatisfiesVersionsInDependency(\n pkgPathName: string,\n depPkg: PackageJson,\n dependenciesRanges: DependenciesRanges,\n {\n customCreateReportError = createReportError,\n }: CheckSatisfiesVersionsInDependencyOptions = {},\n): void {\n const reportError = customCreateReportError(\n `Satisfies Versions In Dependency \"${depPkg.name}\"`,\n pkgPathName,\n );\n\n for (const [dependenciesType, dependenciesTypeRanges] of getEntries(\n dependenciesRanges,\n )) {\n if (!dependenciesTypeRanges) return;\n const dependencies = depPkg[dependenciesType];\n\n for (const [dependencyName, dependencyRange] of getEntries(\n dependenciesTypeRanges,\n )) {\n if (dependencyRange == null) {\n if (dependencies?.[dependencyName]) {\n reportError(\n `Invalid \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n 'it should not be present',\n );\n }\n } else if (!dependencies) {\n reportError(\n `Missing \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n `\"${dependenciesType}\" is missing in \"${depPkg.name}\"`,\n );\n } else if (!dependencies[dependencyName]) {\n reportError(\n `Missing \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n `\"${dependencyName}\" is missing in ${dependenciesType}`,\n );\n } else if (\n !semver.satisfies(dependencies[dependencyName], dependencyRange, {\n includePrerelease: true,\n }) &&\n !semver.intersects(dependencies[dependencyName], dependencyRange, {\n includePrerelease: true,\n })\n ) {\n reportError(\n `Invalid \"${dependencyName}\" in ${dependenciesType} of \"${depPkg.name}\"`,\n `\"${dependencies[dependencyName]}\" does not satisfies \"${dependencyRange}\"`,\n );\n }\n }\n }\n}\n","import { readFileSync, writeFileSync } from 'fs';\nimport { resolve as importResolve } from 'import-meta-resolve';\nimport type { PackageJson } from './packageTypes';\n\nexport function readPkgJson(packagePath: string): PackageJson {\n return JSON.parse(readFileSync(packagePath, 'utf8')) as PackageJson;\n}\n\nexport function writePkgJson(packagePath: string, pkg: PackageJson): void {\n writeFileSync(packagePath, JSON.stringify(pkg, null, 2));\n}\n\n/** @internal */\nexport async function internalLoadPackageJsonFromNodeModules(\n pkgDepName: string,\n pkgDirname: string,\n): Promise {\n const packageUrl = await importResolve(\n `${pkgDepName}/package.json`,\n `file://${pkgDirname}/package.json`,\n );\n return readPkgJson(\n packageUrl.replace(\n process.platform === 'win32' ? /^file:\\/{3}/ : /^file:\\/\\//,\n '',\n ),\n );\n}\n","import type { PackageJson } from './packageTypes';\nimport {\n internalLoadPackageJsonFromNodeModules,\n readPkgJson,\n} from './pkgJsonUtils';\n\nexport type GetDependencyPackageJson = (\n pkgDepName: string,\n) => Promise;\n\ntype NodeModulesPackagePathCache = Map;\n\ninterface CreateGetDependencyPackageJsonOptions {\n pkgDirname: string;\n nodeModulesPackagePathCache?: NodeModulesPackagePathCache;\n /** @internal */\n internalCustomLoadPackageJsonFromNodeModules?: typeof internalLoadPackageJsonFromNodeModules;\n /** @internal */\n internalReadPkgJson?: typeof readPkgJson;\n}\n\nexport function createGetDependencyPackageJson({\n pkgDirname,\n nodeModulesPackagePathCache = new Map(),\n internalCustomLoadPackageJsonFromNodeModules = internalLoadPackageJsonFromNodeModules,\n internalReadPkgJson = readPkgJson,\n}: CreateGetDependencyPackageJsonOptions): GetDependencyPackageJson {\n return async (pkgDepName) => {\n const existing = nodeModulesPackagePathCache.get(pkgDepName);\n if (existing) return existing;\n let pkg: PackageJson;\n if (pkgDepName.startsWith('.')) {\n const packagePath = `${pkgDirname}/${pkgDepName}/package.json`;\n pkg = internalReadPkgJson(packagePath);\n } else {\n try {\n pkg = await internalCustomLoadPackageJsonFromNodeModules(\n pkgDepName,\n pkgDirname,\n );\n } catch (err: unknown) {\n if (!(err instanceof Error)) throw err;\n\n if (\n (err as NodeJS.ErrnoException).code !==\n 'ERR_PACKAGE_PATH_NOT_EXPORTED'\n ) {\n throw err;\n }\n\n const match = / in (.*[/\\\\]package\\.json)\\s+imported from/.exec(\n err.message,\n );\n\n if (match) {\n const [, matchPackageJson] = match;\n pkg = internalReadPkgJson(matchPackageJson);\n } else {\n throw err;\n }\n }\n }\n nodeModulesPackagePathCache.set(pkgDepName, pkg);\n return pkg;\n };\n}\n","import { getEntries } from './object';\n\nexport type OnlyWarnsFor = string[];\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type OnlyWarnsForDependencyMapping = Record;\nexport type OnlyWarnsForOptionalDependencyMapping =\n | undefined\n | OnlyWarnsFor\n | OnlyWarnsForDependencyMapping;\n\nexport interface OnlyWarnsForCheck {\n configName: string;\n getNotWarnedFor: () => string[];\n shouldWarnsFor: (dependencyName: string) => boolean;\n}\n\nexport interface OnlyWarnsForMappingCheck {\n configName: string;\n getNotWarnedFor: () => Record;\n createFor: (dependencyName: string) => OnlyWarnsForCheck;\n}\n\nexport const createOnlyWarnsForArrayCheck = (\n configName: string,\n onlyWarnsFor: OnlyWarnsFor = [],\n): OnlyWarnsForCheck => {\n const notWarnedFor = new Set(onlyWarnsFor);\n return {\n configName,\n getNotWarnedFor: () => [...notWarnedFor],\n shouldWarnsFor(dependencyName) {\n if (onlyWarnsFor.includes(dependencyName)) {\n notWarnedFor.delete(dependencyName);\n return true;\n }\n return false;\n },\n };\n};\n\nconst isMapping = (\n onlyWarnsFor: OnlyWarnsForOptionalDependencyMapping,\n): onlyWarnsFor is OnlyWarnsForDependencyMapping => {\n return typeof onlyWarnsFor === 'object' && !Array.isArray(onlyWarnsFor);\n};\n\nexport const createOnlyWarnsForMappingCheck = (\n configName: string,\n onlyWarnsFor: OnlyWarnsForOptionalDependencyMapping,\n): OnlyWarnsForMappingCheck => {\n if (isMapping(onlyWarnsFor)) {\n const notWarnedFor = Object.fromEntries(\n getEntries(onlyWarnsFor).map(([entryKey, entryValue]) => [\n entryKey,\n new Set(entryValue),\n ]),\n );\n return {\n configName,\n getNotWarnedFor: () =>\n Object.fromEntries(\n getEntries(notWarnedFor)\n .filter(([key, set]) => set.size > 0)\n .map(([key, set]) => [key, [...set]]),\n ),\n createFor(dependencyNameLevel1) {\n return {\n configName,\n getNotWarnedFor() {\n throw new Error('Invalid call to getNotWarnedFor()');\n },\n shouldWarnsFor(dependencyName) {\n if (onlyWarnsFor['*']?.includes(dependencyName)) {\n notWarnedFor['*'].delete(dependencyName);\n return true;\n }\n if (onlyWarnsFor[dependencyNameLevel1]?.includes(dependencyName)) {\n notWarnedFor[dependencyNameLevel1].delete(dependencyName);\n return true;\n }\n return false;\n },\n };\n },\n };\n }\n\n const arrayOnlyWarnsForCheck = createOnlyWarnsForArrayCheck(\n configName,\n onlyWarnsFor,\n );\n return {\n configName,\n getNotWarnedFor: (): Record => {\n const notWarnedFor = arrayOnlyWarnsForCheck.getNotWarnedFor();\n if (notWarnedFor.length > 0) {\n return { '*': notWarnedFor };\n }\n return {};\n },\n createFor() {\n return {\n configName,\n getNotWarnedFor() {\n throw new Error('Invalid call to getNotWarnedFor()');\n },\n shouldWarnsFor(dependencyName) {\n return arrayOnlyWarnsForCheck.shouldWarnsFor(dependencyName);\n },\n };\n },\n };\n};\n","/* eslint-disable max-lines */\nimport path from 'path';\nimport util from 'util';\nimport { checkDirectDuplicateDependencies } from './checks/checkDirectDuplicateDependencies';\nimport { checkDirectPeerDependencies } from './checks/checkDirectPeerDependencies';\nimport { checkExactVersions } from './checks/checkExactVersions';\nimport { checkIdenticalVersions } from './checks/checkIdenticalVersions';\nimport { checkIdenticalVersionsThanDependency } from './checks/checkIdenticalVersionsThanDependency';\nimport { checkNoDependencies } from './checks/checkNoDependencies';\nimport type { CheckResolutionMessage } from './checks/checkResolutionsHasExplanation';\nimport { checkResolutionsHasExplanation } from './checks/checkResolutionsHasExplanation';\nimport { checkResolutionsVersionsMatch } from './checks/checkResolutionsVersionsMatch';\nimport { checkSatisfiesVersions } from './checks/checkSatisfiesVersions';\nimport { checkSatisfiesVersionsFromDependency } from './checks/checkSatisfiesVersionsFromDependency';\nimport { checkSatisfiesVersionsInDependency } from './checks/checkSatisfiesVersionsInDependency';\nimport type { GetDependencyPackageJson } from './utils/createGetDependencyPackageJson';\nimport { createGetDependencyPackageJson } from './utils/createGetDependencyPackageJson';\nimport { getEntries } from './utils/object';\nimport type {\n DependenciesRanges,\n DependencyName,\n DependencyTypes,\n PackageJson,\n} from './utils/packageTypes';\nimport { readPkgJson, writePkgJson } from './utils/pkgJsonUtils';\nimport type {\n OnlyWarnsForOptionalDependencyMapping,\n OnlyWarnsFor,\n OnlyWarnsForDependencyMapping,\n} from './utils/warnForUtils';\nimport {\n createOnlyWarnsForArrayCheck,\n createOnlyWarnsForMappingCheck,\n} from './utils/warnForUtils';\n\nexport interface CreateCheckPackageOptions {\n packageDirectoryPath?: string;\n isLibrary?: boolean | ((pkg: PackageJson) => boolean);\n /** @internal */\n internalWorkspacePkgDirectoryPath?: string;\n}\n\nexport interface CheckDirectPeerDependenciesOptions {\n missingOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n invalidOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n internalMissingConfigName?: string;\n internalInvalidConfigName?: string;\n}\n\nexport interface CheckDirectDuplicateDependenciesOptions {\n onlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n internalConfigName?: string;\n}\n\nexport interface OnlyWarnsForInPackageCheckPackageRecommendedOption {\n exactVersions: OnlyWarnsFor;\n}\n\nexport interface OnlyWarnsForInDependencyCheckPackageRecommendedOption {\n duplicateDirectDependency: OnlyWarnsFor;\n missingPeerDependency: OnlyWarnsFor;\n invalidPeerDependencyVersion: OnlyWarnsFor;\n}\n\nexport type OnlyWarnsForInDependenciesCheckPackageRecommendedOption = Record<\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n '*' | string,\n OnlyWarnsForInDependencyCheckPackageRecommendedOption\n>;\n\nexport interface CheckRecommendedOptions {\n /** default is true for libraries, false otherwise */\n allowRangeVersionsInDependencies?: boolean;\n onlyWarnsForInPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption;\n onlyWarnsForInDependencies?: OnlyWarnsForInDependenciesCheckPackageRecommendedOption;\n /** @internal */\n internalExactVersionsIgnore?: OnlyWarnsFor;\n /** function to check the value in the \"resolutionExplained\" key in package.json */\n checkResolutionMessage?: CheckResolutionMessage;\n}\n\nexport interface CheckExactVersionsOptions {\n allowRangeVersionsInDependencies?: boolean;\n onlyWarnsFor?: OnlyWarnsFor;\n /** @internal */\n internalExactVersionsIgnore?: OnlyWarnsFor;\n}\n\nexport interface CheckPackageApi {\n run: () => Promise;\n\n /** @internal */\n pkg: PackageJson;\n /** @internal */\n pkgDirname: string;\n /** @internal */\n pkgPathName: string;\n /** @internal */\n isPkgLibrary: boolean;\n /** @internal */\n getDependencyPackageJson: GetDependencyPackageJson;\n\n checkExactVersions: (options?: CheckExactVersionsOptions) => CheckPackageApi;\n\n checkResolutionsVersionsMatch: () => CheckPackageApi;\n\n checkExactDevVersions: (\n options?: CheckExactVersionsOptions,\n ) => CheckPackageApi;\n\n checkNoDependencies: (\n type?: DependencyTypes,\n moveToSuggestion?: DependencyTypes,\n ) => CheckPackageApi;\n\n /**\n * @example\n * ```\n * .checkDirectPeerDependencies({\n * invalidOnlyWarnsFor: ['semver'],\n * })\n * ```\n */\n checkDirectPeerDependencies: (\n options?: CheckDirectPeerDependenciesOptions,\n ) => CheckPackageApi;\n\n /**\n * @example\n * ```\n * .checkDirectDuplicateDependencies({\n * invalidOnlyWarnsFor: { '*': 'type-fest' },\n * })\n * ```\n */\n checkDirectDuplicateDependencies: (\n options?: CheckDirectDuplicateDependenciesOptions,\n ) => CheckPackageApi;\n\n checkResolutionsHasExplanation: (\n checkMessage?: CheckResolutionMessage,\n ) => CheckPackageApi;\n\n checkRecommended: (options?: CheckRecommendedOptions) => CheckPackageApi;\n\n /**\n * @example\n * Check that your package.json contains the same version of @babel/core than react-scripts, both in resolutions and devDependencies\n * ```\n * .checkIdenticalVersionsThanDependency('react-scripts', {\n * resolutions: ['@babel/core'],\n * devDependencies: ['@babel/core'],\n * })\n * ```\n */\n checkIdenticalVersionsThanDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n checkIdenticalVersionsThanDevDependencyOfDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n /**\n * Check that your package.json dependencies specifically satisfies the range passed in config\n *\n * @example\n * ```\n * .checkSatisfiesVersions({\n * devDependencies: {\n * eslint: '^8.0.0'\n * },\n * })\n * ```\n */\n checkSatisfiesVersions: (\n dependencies: Partial<\n Record>\n >,\n ) => CheckPackageApi;\n\n /**\n * Check that your package.json dependencies specifically satisfies the range set in another dependencies\n * @example\n * ```\n * .checkSatisfiesVersionsFromDependency('@pob/eslint-config-typescript', {\n * devDependencies: [\n * '@typescript-eslint/eslint-plugin',\n * '@typescript-eslint/parser',\n * ],\n * })\n * ```\n */\n checkSatisfiesVersionsFromDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n checkSatisfiesVersionsInDevDependenciesOfDependency: (\n depName: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n /**\n * Check that your package.json dependencies have the exact same version that another dependency also present in your package.json\n * @example\n * The react-dom version should match react, so this check will ensure it does\n * ```\n * .checkIdenticalVersions({\n * dependencies: {\n * react: {\n * dependencies: ['react-dom'],\n * devDependencies: ['react-test-renderer'],\n * },\n * },\n * })\n * ```\n */\n checkIdenticalVersions: (dependencies: {\n resolutions?: Record;\n dependencies?: Record;\n devDependencies?: Record;\n }) => CheckPackageApi;\n\n checkSatisfiesVersionsBetweenDependencies: (\n depName1: string,\n depName2: string,\n dependencies: {\n resolutions?: string[];\n dependencies?: string[];\n devDependencies?: string[];\n },\n ) => CheckPackageApi;\n\n /**\n * Check versions in a dependency\n * Also useable to check if a dependency is not present\n *\n * @example\n * Checking if `@lerna/version` has no dependency `@nrwl/devkit`\n * ```\n * .checkSatisfiesVersionsInDependency('@lerna/version', {\n * dependencies: {\n * '@nrwl/devkit': null,\n * },\n * })\n * ```\n */\n checkSatisfiesVersionsInDependency: (\n depName: string,\n dependenciesRanges: DependenciesRanges,\n ) => CheckPackageApi;\n}\n\nexport function createCheckPackage({\n packageDirectoryPath = '.',\n internalWorkspacePkgDirectoryPath,\n isLibrary = false,\n}: CreateCheckPackageOptions = {}): CheckPackageApi {\n const pkgDirname = path.resolve(packageDirectoryPath);\n const pkgPath = `${pkgDirname}/package.json`;\n const pkgPathName = `${packageDirectoryPath}/package.json`;\n const pkg = readPkgJson(pkgPath);\n const copyPkg: PackageJson = JSON.parse(JSON.stringify(pkg)) as PackageJson;\n const isPkgLibrary =\n typeof isLibrary === 'function' ? isLibrary(pkg) : isLibrary;\n\n let tryToAutoFix = false;\n\n if (process.argv.slice(2).includes('--fix')) {\n tryToAutoFix = true;\n }\n\n const writePackageIfChanged = (): void => {\n if (!tryToAutoFix) return;\n if (util.isDeepStrictEqual(pkg, copyPkg)) return;\n writePkgJson(pkgPath, pkg);\n };\n\n const getDependencyPackageJson = createGetDependencyPackageJson({\n pkgDirname,\n });\n\n let runCalled = false;\n\n if (!internalWorkspacePkgDirectoryPath) {\n process.on('beforeExit', () => {\n if (!runCalled) {\n throw new Error('Call .run() and await the result.');\n }\n });\n }\n\n class Job {\n name: string;\n\n fn: () => Promise;\n\n constructor(name: string, fn: () => Promise) {\n this.name = name;\n this.fn = fn;\n }\n\n async run(): Promise {\n try {\n await this.fn();\n } catch (err) {\n throw new Error(`${this.name} failed: ${(err as Error).message}`);\n }\n }\n }\n\n const jobs: Job[] = [];\n\n return {\n async run() {\n runCalled = true;\n // TODO parallel\n for (const job of jobs) {\n await job.run();\n }\n writePackageIfChanged();\n },\n\n pkg,\n pkgDirname,\n pkgPathName,\n isPkgLibrary,\n getDependencyPackageJson,\n checkExactVersions({\n onlyWarnsFor,\n internalExactVersionsIgnore,\n allowRangeVersionsInDependencies = true,\n } = {}) {\n jobs.push(\n new Job(this.checkExactVersions.name, async () => {\n const onlyWarnsForCheck = createOnlyWarnsForArrayCheck(\n 'checkExactVersions.onlyWarnsFor',\n onlyWarnsFor,\n );\n await checkExactVersions(\n pkg,\n pkgPathName,\n !allowRangeVersionsInDependencies\n ? ['dependencies', 'devDependencies', 'resolutions']\n : ['devDependencies', 'resolutions'],\n {\n onlyWarnsForCheck,\n internalExactVersionsIgnore,\n getDependencyPackageJson,\n tryToAutoFix,\n },\n );\n }),\n );\n return this;\n },\n\n checkResolutionsVersionsMatch() {\n checkResolutionsVersionsMatch(pkg, pkgPathName, {\n tryToAutoFix,\n });\n return this;\n },\n\n checkExactDevVersions({ onlyWarnsFor } = {}) {\n jobs.push(\n new Job(this.checkExactDevVersions.name, async () => {\n const onlyWarnsForCheck = createOnlyWarnsForArrayCheck(\n 'checkExactDevVersions.onlyWarnsFor',\n onlyWarnsFor,\n );\n await checkExactVersions(pkg, pkgPathName, ['devDependencies'], {\n onlyWarnsForCheck,\n tryToAutoFix,\n getDependencyPackageJson,\n });\n }),\n );\n return this;\n },\n\n checkNoDependencies(\n type = 'dependencies',\n moveToSuggestion = 'devDependencies',\n ) {\n checkNoDependencies(pkg, pkgPathName, type, moveToSuggestion);\n return this;\n },\n\n checkDirectPeerDependencies({\n missingOnlyWarnsFor,\n invalidOnlyWarnsFor,\n internalMissingConfigName = 'missingOnlyWarnsFor',\n internalInvalidConfigName = 'invalidOnlyWarnsFor',\n } = {}) {\n jobs.push(\n new Job(this.checkDirectPeerDependencies.name, async () => {\n const missingOnlyWarnsForCheck = createOnlyWarnsForMappingCheck(\n internalMissingConfigName,\n missingOnlyWarnsFor,\n );\n const invalidOnlyWarnsForCheck =\n internalInvalidConfigName === internalMissingConfigName\n ? missingOnlyWarnsForCheck\n : createOnlyWarnsForMappingCheck(\n internalInvalidConfigName,\n invalidOnlyWarnsFor,\n );\n await checkDirectPeerDependencies(\n isPkgLibrary,\n pkg,\n pkgPathName,\n getDependencyPackageJson,\n missingOnlyWarnsForCheck,\n invalidOnlyWarnsForCheck,\n );\n }),\n );\n return this;\n },\n\n checkDirectDuplicateDependencies({\n onlyWarnsFor,\n internalConfigName = 'onlyWarnsFor',\n } = {}) {\n jobs.push(\n new Job(this.checkDirectDuplicateDependencies.name, async () => {\n await checkDirectDuplicateDependencies(\n pkg,\n pkgPathName,\n isPkgLibrary,\n 'dependencies',\n getDependencyPackageJson,\n createOnlyWarnsForMappingCheck(internalConfigName, onlyWarnsFor),\n );\n }),\n );\n return this;\n },\n\n checkResolutionsHasExplanation(\n checkMessage: CheckResolutionMessage = (depKey, message) => undefined,\n ) {\n checkResolutionsHasExplanation(\n pkg,\n pkgPathName,\n checkMessage,\n getDependencyPackageJson,\n );\n return this;\n },\n\n checkRecommended({\n onlyWarnsForInPackage,\n onlyWarnsForInDependencies,\n allowRangeVersionsInDependencies = isPkgLibrary,\n internalExactVersionsIgnore,\n checkResolutionMessage,\n } = {}) {\n let internalMissingPeerDependenciesOnlyWarnsFor: OnlyWarnsForOptionalDependencyMapping =\n {};\n let internalInvalidPeerDependenciesOnlyWarnsFor: OnlyWarnsForOptionalDependencyMapping =\n {};\n let internalDirectDuplicateDependenciesOnlyWarnsFor: OnlyWarnsForOptionalDependencyMapping =\n {};\n\n const exactVersionsOnlyWarnsFor =\n onlyWarnsForInPackage?.exactVersions || [];\n\n if (onlyWarnsForInDependencies) {\n internalDirectDuplicateDependenciesOnlyWarnsFor = {};\n internalMissingPeerDependenciesOnlyWarnsFor = {};\n internalInvalidPeerDependenciesOnlyWarnsFor = {};\n\n getEntries(onlyWarnsForInDependencies).forEach(\n ([dependencyNameOrSpecialKey, onlyWarnsForValue]) => {\n if (onlyWarnsForValue.duplicateDirectDependency) {\n (\n internalDirectDuplicateDependenciesOnlyWarnsFor as OnlyWarnsForDependencyMapping\n )[dependencyNameOrSpecialKey] =\n onlyWarnsForValue.duplicateDirectDependency;\n }\n if (onlyWarnsForValue.missingPeerDependency) {\n (\n internalMissingPeerDependenciesOnlyWarnsFor as OnlyWarnsForDependencyMapping\n )[dependencyNameOrSpecialKey] =\n onlyWarnsForValue.missingPeerDependency;\n }\n if (onlyWarnsForValue.invalidPeerDependencyVersion) {\n (\n internalInvalidPeerDependenciesOnlyWarnsFor as OnlyWarnsForDependencyMapping\n )[dependencyNameOrSpecialKey] =\n onlyWarnsForValue.invalidPeerDependencyVersion;\n }\n },\n );\n }\n\n this.checkExactVersions({\n allowRangeVersionsInDependencies,\n onlyWarnsFor: exactVersionsOnlyWarnsFor,\n internalExactVersionsIgnore,\n });\n\n this.checkResolutionsVersionsMatch();\n this.checkResolutionsHasExplanation(checkResolutionMessage);\n\n this.checkDirectPeerDependencies({\n missingOnlyWarnsFor: internalMissingPeerDependenciesOnlyWarnsFor,\n invalidOnlyWarnsFor: internalInvalidPeerDependenciesOnlyWarnsFor,\n internalMissingConfigName:\n 'onlyWarnsForInDependencies.missingPeerDependency',\n internalInvalidConfigName:\n 'onlyWarnsForInDependencies.invalidPeerDependencyVersion',\n });\n\n this.checkDirectDuplicateDependencies({\n onlyWarnsFor: internalDirectDuplicateDependenciesOnlyWarnsFor,\n internalConfigName:\n 'onlyWarnsForInDependencies.duplicateDirectDependency',\n });\n\n return this;\n },\n\n checkIdenticalVersionsThanDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(this.checkIdenticalVersionsThanDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (dependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (devDependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n }),\n );\n return this;\n },\n\n checkIdenticalVersionsThanDevDependencyOfDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(this.checkSatisfiesVersionsFromDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (dependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (devDependencies) {\n checkIdenticalVersionsThanDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n }),\n );\n return this;\n },\n\n checkSatisfiesVersions(dependencies) {\n Object.entries(dependencies).forEach(\n ([dependencyType, dependenciesRanges]) => {\n checkSatisfiesVersions(\n pkg,\n pkgPathName,\n dependencyType as DependencyTypes,\n dependenciesRanges,\n );\n },\n );\n return this;\n },\n\n checkSatisfiesVersionsFromDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(this.checkSatisfiesVersionsFromDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (dependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n if (devDependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.dependencies,\n );\n }\n }),\n );\n return this;\n },\n\n checkSatisfiesVersionsInDevDependenciesOfDependency(\n depName,\n { resolutions, dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(\n this.checkSatisfiesVersionsInDevDependenciesOfDependency.name,\n async () => {\n const depPkg = await getDependencyPackageJson(depName);\n if (resolutions) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'resolutions',\n resolutions,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (dependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n if (devDependencies) {\n checkSatisfiesVersionsFromDependency(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg,\n depPkg.devDependencies,\n );\n }\n },\n ),\n );\n return this;\n },\n\n checkIdenticalVersions({ resolutions, dependencies, devDependencies }) {\n if (resolutions) {\n checkIdenticalVersions(pkg, pkgPathName, 'resolutions', resolutions);\n }\n if (dependencies) {\n checkIdenticalVersions(pkg, pkgPathName, 'dependencies', dependencies);\n }\n if (devDependencies) {\n checkIdenticalVersions(\n pkg,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n );\n }\n return this;\n },\n\n checkSatisfiesVersionsBetweenDependencies(\n depName1,\n depName2,\n { dependencies, devDependencies },\n ) {\n jobs.push(\n new Job(\n this.checkSatisfiesVersionsBetweenDependencies.name,\n async () => {\n const [depPkg1, depPkg2] = await Promise.all([\n getDependencyPackageJson(depName1),\n getDependencyPackageJson(depName2),\n ]);\n\n if (dependencies) {\n checkSatisfiesVersionsFromDependency(\n depPkg2,\n pkgPathName,\n 'dependencies',\n dependencies,\n depPkg1,\n depPkg1.dependencies,\n );\n }\n if (devDependencies) {\n checkSatisfiesVersionsFromDependency(\n depPkg2,\n pkgPathName,\n 'devDependencies',\n devDependencies,\n depPkg1,\n depPkg1.dependencies,\n );\n }\n },\n ),\n );\n return this;\n },\n\n checkSatisfiesVersionsInDependency(depName, dependenciesRanges) {\n jobs.push(\n new Job(this.checkSatisfiesVersionsInDependency.name, async () => {\n const depPkg = await getDependencyPackageJson(depName);\n checkSatisfiesVersionsInDependency(\n pkgPathName,\n depPkg,\n dependenciesRanges,\n );\n }),\n );\n return this;\n },\n };\n}\n","/* eslint-disable max-lines */\nimport fs from 'fs';\nimport path from 'path';\nimport glob from 'glob';\nimport type { Except } from 'type-fest';\nimport type {\n CreateCheckPackageOptions,\n CheckPackageApi,\n OnlyWarnsForInDependenciesCheckPackageRecommendedOption,\n OnlyWarnsForInDependencyCheckPackageRecommendedOption,\n OnlyWarnsForInPackageCheckPackageRecommendedOption,\n} from './check-package';\nimport { createCheckPackage } from './check-package';\nimport { checkDuplicateDependencies } from './checks/checkDuplicateDependencies';\nimport type { CheckResolutionMessage } from './checks/checkResolutionsHasExplanation';\nimport {\n createReportError,\n reportNotWarnedForMapping,\n} from './utils/createReportError';\nimport type { PackageJson } from './utils/packageTypes';\nimport type { OnlyWarnsForOptionalDependencyMapping } from './utils/warnForUtils';\nimport { createOnlyWarnsForMappingCheck } from './utils/warnForUtils';\n\ninterface OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption\n extends OnlyWarnsForInPackageCheckPackageRecommendedOption {\n duplicateDirectDependency: OnlyWarnsForInDependencyCheckPackageRecommendedOption['duplicateDirectDependency'];\n}\n\ntype OnlyWarnsForInMonorepoPackagesCheckPackageRecommendedOption = Record<\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n '*' | string,\n OnlyWarnsForInMonorepoPackageCheckPackageRecommendedOption\n>;\n\ntype OnlyWarnsForInMonorepoPackagesDependenciesCheckPackageRecommendedOption =\n Record;\n\nexport interface CheckPackageWithWorkspacesRecommendedOptions {\n allowRangeVersionsInLibraries?: boolean;\n monorepoDirectDuplicateDependenciesOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping;\n onlyWarnsForInRootPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption;\n onlyWarnsForInMonorepoPackages?: OnlyWarnsForInMonorepoPackagesCheckPackageRecommendedOption;\n onlyWarnsForInRootDependencies?: OnlyWarnsForInDependenciesCheckPackageRecommendedOption;\n onlyWarnsForInMonorepoPackagesDependencies?: OnlyWarnsForInMonorepoPackagesDependenciesCheckPackageRecommendedOption;\n checkResolutionMessage?: CheckResolutionMessage;\n}\n\nexport interface CheckPackageWithWorkspacesApi {\n run: () => Promise;\n\n checkRecommended: (\n options?: CheckPackageWithWorkspacesRecommendedOptions,\n ) => CheckPackageWithWorkspacesApi;\n\n forRoot: (\n callback: (checkPackage: CheckPackageApi) => void,\n ) => CheckPackageWithWorkspacesApi;\n forEach: (\n callback: (checkPackage: CheckPackageApi) => void,\n ) => CheckPackageWithWorkspacesApi;\n for: (\n id: string,\n callback: (checkPackage: CheckPackageApi) => void,\n ) => CheckPackageWithWorkspacesApi;\n}\n\ninterface CreateCheckPackageWithWorkspacesOptions\n extends Except {\n isLibrary?: (pkg: PackageJson) => boolean;\n}\n\nexport function createCheckPackageWithWorkspaces(\n createCheckPackageOptions: CreateCheckPackageWithWorkspacesOptions = {},\n): CheckPackageWithWorkspacesApi {\n const checkPackage = createCheckPackage({\n ...createCheckPackageOptions,\n isLibrary: false,\n });\n const { pkg, pkgDirname } = checkPackage;\n\n const pkgWorkspaces: string[] | undefined =\n pkg.workspaces && !Array.isArray(pkg.workspaces)\n ? pkg.workspaces.packages\n : pkg.workspaces;\n\n if (!pkgWorkspaces) {\n throw new Error('Package is missing \"workspaces\"');\n }\n\n const workspacePackagesPaths: string[] = [];\n\n if (pkgWorkspaces) {\n pkgWorkspaces.forEach((pattern) => {\n const match = glob.sync(pattern, { cwd: pkgDirname });\n match.forEach((pathMatch) => {\n const stat = fs.statSync(pathMatch);\n if (!stat.isDirectory()) return;\n const subPkgDirectoryPath = path.relative(process.cwd(), pathMatch);\n workspacePackagesPaths.push(subPkgDirectoryPath);\n });\n });\n }\n\n const checksWorkspaces = new Map(\n workspacePackagesPaths.map((subPkgDirectoryPath) => {\n const checkPkg = createCheckPackage({\n ...createCheckPackageOptions,\n packageDirectoryPath: subPkgDirectoryPath,\n internalWorkspacePkgDirectoryPath:\n createCheckPackageOptions.packageDirectoryPath,\n });\n return [checkPkg.pkg.name, checkPkg];\n }),\n );\n\n return {\n async run() {\n for (const checksWorkspace of [\n checkPackage,\n ...checksWorkspaces.values(),\n ]) {\n await checksWorkspace.run();\n }\n },\n\n checkRecommended({\n allowRangeVersionsInLibraries = true,\n onlyWarnsForInRootPackage,\n onlyWarnsForInMonorepoPackages,\n onlyWarnsForInRootDependencies,\n onlyWarnsForInMonorepoPackagesDependencies = {},\n monorepoDirectDuplicateDependenciesOnlyWarnsFor,\n checkResolutionMessage,\n } = {}) {\n checkPackage.checkNoDependencies();\n checkPackage.checkRecommended({\n onlyWarnsForInPackage: onlyWarnsForInRootPackage,\n onlyWarnsForInDependencies: onlyWarnsForInRootDependencies,\n checkResolutionMessage,\n });\n\n const monorepoDirectDuplicateDependenciesOnlyWarnsForCheck =\n createOnlyWarnsForMappingCheck(\n 'monorepoDirectDuplicateDependenciesOnlyWarnsFor',\n monorepoDirectDuplicateDependenciesOnlyWarnsFor,\n );\n\n const previousCheckedWorkspaces = new Map();\n checksWorkspaces.forEach((checkSubPackage, id) => {\n checkSubPackage.checkRecommended({\n allowRangeVersionsInDependencies: checkSubPackage.isPkgLibrary\n ? allowRangeVersionsInLibraries\n : false,\n onlyWarnsForInPackage: onlyWarnsForInMonorepoPackages\n ? {\n ...onlyWarnsForInMonorepoPackages['*'],\n ...onlyWarnsForInMonorepoPackages[checkSubPackage.pkg.name],\n }\n : undefined,\n onlyWarnsForInDependencies:\n onlyWarnsForInMonorepoPackagesDependencies[\n checkSubPackage.pkg.name\n ],\n internalExactVersionsIgnore: [...checksWorkspaces.keys()],\n checkResolutionMessage,\n });\n\n const reportMonorepoDDDError = createReportError(\n 'Monorepo Direct Duplicate Dependencies',\n checkSubPackage.pkgPathName,\n );\n // Root\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n checkSubPackage.isPkgLibrary,\n 'devDependencies',\n ['dependencies', 'devDependencies'],\n pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n // previous packages\n previousCheckedWorkspaces.forEach((previousCheckSubPackage) => {\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n checkSubPackage.isPkgLibrary,\n 'devDependencies',\n ['dependencies', 'devDependencies'],\n previousCheckSubPackage.pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n checkSubPackage.isPkgLibrary,\n 'dependencies',\n ['dependencies', 'devDependencies'],\n previousCheckSubPackage.pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n checkDuplicateDependencies(\n reportMonorepoDDDError,\n checkSubPackage.pkg,\n checkSubPackage.isPkgLibrary,\n 'peerDependencies',\n ['peerDependencies'],\n previousCheckSubPackage.pkg,\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck.createFor(\n checkSubPackage.pkg.name,\n ),\n );\n });\n\n previousCheckedWorkspaces.set(id, checkSubPackage);\n });\n reportNotWarnedForMapping(\n createReportError(\n 'Monorepo Direct Duplicate Dependencies',\n checkPackage.pkgPathName,\n ),\n monorepoDirectDuplicateDependenciesOnlyWarnsForCheck,\n );\n\n return this;\n },\n\n forRoot(callback) {\n callback(checkPackage);\n return this;\n },\n\n forEach(callback) {\n checksWorkspaces.forEach((checkSubPackage) => {\n callback(checkSubPackage);\n });\n return this;\n },\n\n for(id, callback) {\n const packageCheck = checksWorkspaces.get(id);\n if (!packageCheck) {\n throw new Error(\n `Invalid package name: ${id}. Known package names: \"${[\n ...checksWorkspaces.keys(),\n ].join('\",\"')}\"`,\n );\n }\n callback(packageCheck);\n return this;\n },\n };\n}\n"],"names":["getKeys","o","Object","keys","getEntries","entries","titleDisplayed","pkgPathDisplayed","logMessage","msgTitle","msgInfo","onlyWarns","console","error","chalk","yellow","red","createReportError","title","pkgPathName","reportError","cyan","process","exitCode","reportNotWarnedFor","onlyWarnsForCheck","notWarnedFor","getNotWarnedFor","length","configName","map","depName","join","reportNotWarnedForMapping","onlyWarnsForMappingCheck","notWarnedForMapping","forEach","depNameOrStar","checkDuplicateDependencies","pkg","isPkgLibrary","depType","searchIn","depPkg","dependencies","searchInExisting","filter","type","depKey","range","versionsIn","allowDuplicated","includes","depVersion","devDepVersion","devDependencies","versions","version","index","startsWith","semver","satisfies","includePrerelease","intersects","resolutions","versionInType","name","shouldWarnsFor","checkDirectDuplicateDependencies","isPackageALibrary","getDependencyPackageJson","reportErrorNamePrefix","customCreateReportError","Promise","all","createFor","checkPeerDependencies","allowedPeerIn","missingOnlyWarnsForCheck","invalidOnlyWarnsForCheck","peerDependencies","peerDependenciesMeta","allowedPeerInExisting","allowedPeerInType","peerDepName","allowedPeerInExistingType","peerDependenciesMetaPeerDep","optional","versionsInType","minVersionOfVersion","minVersion","regularDependencyTypes","getAllowedPeerInFromType","depPkgType","isLibrary","checkDirectPeerDependencies","isVersionRange","checkExactVersions","types","internalExactVersionsIgnore","tryToAutoFix","pkgDependencies","dependencyName","versionConst","match","exec","Error","realVersion","shouldOnlyWarn","resolvedDep","slice","checkIdenticalVersions","deps","depConfigArrayOrObject","depConfig","Array","isArray","depKeyType","pkgDependenciesType","depKeyIdentical","value","checkIdenticalVersionsThanDependency","depKeys","checkNoDependencies","pkgPath","moveToSuggestion","checkResolutionsHasExplanation","checkMessage","pkgResolutions","pkgResolutionsExplained","resolutionsExplained","checkResolutionsVersionsMatch","resolutionDepVersion","checkSatisfiesVersions","dependenciesRanges","checkSatisfiesVersionsFromDependency","checkSatisfiesVersionsInDependency","dependenciesType","dependenciesTypeRanges","dependencyRange","readPkgJson","packagePath","JSON","parse","readFileSync","writePkgJson","writeFileSync","stringify","internalLoadPackageJsonFromNodeModules","pkgDepName","pkgDirname","packageUrl","importResolve","replace","platform","createGetDependencyPackageJson","nodeModulesPackagePathCache","Map","internalCustomLoadPackageJsonFromNodeModules","internalReadPkgJson","existing","get","err","code","message","matchPackageJson","set","createOnlyWarnsForArrayCheck","onlyWarnsFor","Set","delete","isMapping","createOnlyWarnsForMappingCheck","fromEntries","entryKey","entryValue","key","size","dependencyNameLevel1","arrayOnlyWarnsForCheck","createCheckPackage","packageDirectoryPath","internalWorkspacePkgDirectoryPath","path","resolve","copyPkg","argv","writePackageIfChanged","util","isDeepStrictEqual","runCalled","on","Job","constructor","fn","run","jobs","job","allowRangeVersionsInDependencies","push","checkExactDevVersions","missingOnlyWarnsFor","invalidOnlyWarnsFor","internalMissingConfigName","internalInvalidConfigName","internalConfigName","undefined","checkRecommended","onlyWarnsForInPackage","onlyWarnsForInDependencies","checkResolutionMessage","internalMissingPeerDependenciesOnlyWarnsFor","internalInvalidPeerDependenciesOnlyWarnsFor","internalDirectDuplicateDependenciesOnlyWarnsFor","exactVersionsOnlyWarnsFor","exactVersions","dependencyNameOrSpecialKey","onlyWarnsForValue","duplicateDirectDependency","missingPeerDependency","invalidPeerDependencyVersion","checkIdenticalVersionsThanDevDependencyOfDependency","dependencyType","checkSatisfiesVersionsInDevDependenciesOfDependency","checkSatisfiesVersionsBetweenDependencies","depName1","depName2","depPkg1","depPkg2","createCheckPackageWithWorkspaces","createCheckPackageOptions","checkPackage","pkgWorkspaces","workspaces","packages","workspacePackagesPaths","pattern","glob","sync","cwd","pathMatch","stat","fs","statSync","isDirectory","subPkgDirectoryPath","relative","checksWorkspaces","checkPkg","checksWorkspace","values","allowRangeVersionsInLibraries","onlyWarnsForInRootPackage","onlyWarnsForInMonorepoPackages","onlyWarnsForInRootDependencies","onlyWarnsForInMonorepoPackagesDependencies","monorepoDirectDuplicateDependenciesOnlyWarnsFor","monorepoDirectDuplicateDependenciesOnlyWarnsForCheck","previousCheckedWorkspaces","checkSubPackage","id","reportMonorepoDDDError","previousCheckSubPackage","forRoot","callback","for","packageCheck"],"mappings":"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"} \ No newline at end of file diff --git a/scripts/check-package.js b/scripts/check-package.js index 5ace3dfe..14b30672 100644 --- a/scripts/check-package.js +++ b/scripts/check-package.js @@ -1,8 +1,9 @@ import { createCheckPackage } from '../dist/index-node16.mjs'; -await createCheckPackage() +await createCheckPackage({ + isLibrary: true, +}) .checkRecommended({ - isLibrary: true, onlyWarnsForInDependencies: { '@babel/core': { duplicateDirectDependency: ['semver'] }, eslint: { duplicateDirectDependency: ['chalk'] }, diff --git a/src/.eslintrc.json b/src/.eslintrc.json index 32eb9115..21e15931 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -11,6 +11,9 @@ "@pob/eslint-config-typescript/node" ], "ignorePatterns": ["*.d.ts"], + "rules": { + "complexity": ["error", 20] + }, "overrides": [ { "files": ["**/*.test.ts", "__tests__/**/*.ts"], diff --git a/src/check-package-with-workspaces.ts b/src/check-package-with-workspaces.ts index fabf45e4..dba4ec83 100644 --- a/src/check-package-with-workspaces.ts +++ b/src/check-package-with-workspaces.ts @@ -2,6 +2,7 @@ import fs from 'fs'; import path from 'path'; import glob from 'glob'; +import type { Except } from 'type-fest'; import type { CreateCheckPackageOptions, CheckPackageApi, @@ -16,6 +17,7 @@ import { createReportError, reportNotWarnedForMapping, } from './utils/createReportError'; +import type { PackageJson } from './utils/packageTypes'; import type { OnlyWarnsForOptionalDependencyMapping } from './utils/warnForUtils'; import { createOnlyWarnsForMappingCheck } from './utils/warnForUtils'; @@ -34,7 +36,6 @@ type OnlyWarnsForInMonorepoPackagesDependenciesCheckPackageRecommendedOption = Record; export interface CheckPackageWithWorkspacesRecommendedOptions { - isLibrary?: (pkgName: string) => boolean; allowRangeVersionsInLibraries?: boolean; monorepoDirectDuplicateDependenciesOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping; onlyWarnsForInRootPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption; @@ -63,14 +64,18 @@ export interface CheckPackageWithWorkspacesApi { ) => CheckPackageWithWorkspacesApi; } +interface CreateCheckPackageWithWorkspacesOptions + extends Except { + isLibrary?: (pkg: PackageJson) => boolean; +} + export function createCheckPackageWithWorkspaces( - pkgDirectoryPath = '.', - createCheckPackageOptions: CreateCheckPackageOptions = {}, + createCheckPackageOptions: CreateCheckPackageWithWorkspacesOptions = {}, ): CheckPackageWithWorkspacesApi { - const checkPackage = createCheckPackage( - pkgDirectoryPath, - createCheckPackageOptions, - ); + const checkPackage = createCheckPackage({ + ...createCheckPackageOptions, + isLibrary: false, + }); const { pkg, pkgDirname } = checkPackage; const pkgWorkspaces: string[] | undefined = @@ -98,9 +103,11 @@ export function createCheckPackageWithWorkspaces( const checksWorkspaces = new Map( workspacePackagesPaths.map((subPkgDirectoryPath) => { - const checkPkg = createCheckPackage(subPkgDirectoryPath, { + const checkPkg = createCheckPackage({ ...createCheckPackageOptions, - internalWorkspacePkgDirectoryPath: pkgDirectoryPath, + packageDirectoryPath: subPkgDirectoryPath, + internalWorkspacePkgDirectoryPath: + createCheckPackageOptions.packageDirectoryPath, }); return [checkPkg.pkg.name, checkPkg]; }), @@ -117,7 +124,6 @@ export function createCheckPackageWithWorkspaces( }, checkRecommended({ - isLibrary = () => false, allowRangeVersionsInLibraries = true, onlyWarnsForInRootPackage, onlyWarnsForInMonorepoPackages, @@ -128,7 +134,6 @@ export function createCheckPackageWithWorkspaces( } = {}) { checkPackage.checkNoDependencies(); checkPackage.checkRecommended({ - isLibrary: false, onlyWarnsForInPackage: onlyWarnsForInRootPackage, onlyWarnsForInDependencies: onlyWarnsForInRootDependencies, checkResolutionMessage, @@ -142,10 +147,8 @@ export function createCheckPackageWithWorkspaces( const previousCheckedWorkspaces = new Map(); checksWorkspaces.forEach((checkSubPackage, id) => { - const isPackageALibrary = isLibrary(id); checkSubPackage.checkRecommended({ - isLibrary: isPackageALibrary, - allowRangeVersionsInDependencies: isPackageALibrary + allowRangeVersionsInDependencies: checkSubPackage.isPkgLibrary ? allowRangeVersionsInLibraries : false, onlyWarnsForInPackage: onlyWarnsForInMonorepoPackages @@ -170,6 +173,7 @@ export function createCheckPackageWithWorkspaces( checkDuplicateDependencies( reportMonorepoDDDError, checkSubPackage.pkg, + checkSubPackage.isPkgLibrary, 'devDependencies', ['dependencies', 'devDependencies'], pkg, @@ -182,6 +186,7 @@ export function createCheckPackageWithWorkspaces( checkDuplicateDependencies( reportMonorepoDDDError, checkSubPackage.pkg, + checkSubPackage.isPkgLibrary, 'devDependencies', ['dependencies', 'devDependencies'], previousCheckSubPackage.pkg, @@ -192,6 +197,7 @@ export function createCheckPackageWithWorkspaces( checkDuplicateDependencies( reportMonorepoDDDError, checkSubPackage.pkg, + checkSubPackage.isPkgLibrary, 'dependencies', ['dependencies', 'devDependencies'], previousCheckSubPackage.pkg, @@ -202,6 +208,7 @@ export function createCheckPackageWithWorkspaces( checkDuplicateDependencies( reportMonorepoDDDError, checkSubPackage.pkg, + checkSubPackage.isPkgLibrary, 'peerDependencies', ['peerDependencies'], previousCheckSubPackage.pkg, diff --git a/src/check-package.ts b/src/check-package.ts index a9f95aee..1067b7b2 100644 --- a/src/check-package.ts +++ b/src/check-package.ts @@ -34,12 +34,13 @@ import { } from './utils/warnForUtils'; export interface CreateCheckPackageOptions { + packageDirectoryPath?: string; + isLibrary?: boolean | ((pkg: PackageJson) => boolean); /** @internal */ internalWorkspacePkgDirectoryPath?: string; } export interface CheckDirectPeerDependenciesOptions { - isLibrary?: boolean; missingOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping; invalidOnlyWarnsFor?: OnlyWarnsForOptionalDependencyMapping; internalMissingConfigName?: string; @@ -68,7 +69,6 @@ export type OnlyWarnsForInDependenciesCheckPackageRecommendedOption = Record< >; export interface CheckRecommendedOptions { - isLibrary?: boolean; /** default is true for libraries, false otherwise */ allowRangeVersionsInDependencies?: boolean; onlyWarnsForInPackage?: OnlyWarnsForInPackageCheckPackageRecommendedOption; @@ -96,6 +96,8 @@ export interface CheckPackageApi { /** @internal */ pkgPathName: string; /** @internal */ + isPkgLibrary: boolean; + /** @internal */ getDependencyPackageJson: GetDependencyPackageJson; checkExactVersions: (options?: CheckExactVersionsOptions) => CheckPackageApi; @@ -268,15 +270,18 @@ export interface CheckPackageApi { ) => CheckPackageApi; } -export function createCheckPackage( - pkgDirectoryPath = '.', - { internalWorkspacePkgDirectoryPath }: CreateCheckPackageOptions = {}, -): CheckPackageApi { - const pkgDirname = path.resolve(pkgDirectoryPath); +export function createCheckPackage({ + packageDirectoryPath = '.', + internalWorkspacePkgDirectoryPath, + isLibrary = false, +}: CreateCheckPackageOptions = {}): CheckPackageApi { + const pkgDirname = path.resolve(packageDirectoryPath); const pkgPath = `${pkgDirname}/package.json`; - const pkgPathName = `${pkgDirectoryPath}/package.json`; + const pkgPathName = `${packageDirectoryPath}/package.json`; const pkg = readPkgJson(pkgPath); const copyPkg: PackageJson = JSON.parse(JSON.stringify(pkg)) as PackageJson; + const isPkgLibrary = + typeof isLibrary === 'function' ? isLibrary(pkg) : isLibrary; let tryToAutoFix = false; @@ -338,6 +343,7 @@ export function createCheckPackage( pkg, pkgDirname, pkgPathName, + isPkgLibrary, getDependencyPackageJson, checkExactVersions({ onlyWarnsFor, @@ -401,7 +407,6 @@ export function createCheckPackage( }, checkDirectPeerDependencies({ - isLibrary = false, missingOnlyWarnsFor, invalidOnlyWarnsFor, internalMissingConfigName = 'missingOnlyWarnsFor', @@ -421,7 +426,7 @@ export function createCheckPackage( invalidOnlyWarnsFor, ); await checkDirectPeerDependencies( - isLibrary, + isPkgLibrary, pkg, pkgPathName, getDependencyPackageJson, @@ -442,6 +447,7 @@ export function createCheckPackage( await checkDirectDuplicateDependencies( pkg, pkgPathName, + isPkgLibrary, 'dependencies', getDependencyPackageJson, createOnlyWarnsForMappingCheck(internalConfigName, onlyWarnsFor), @@ -464,10 +470,9 @@ export function createCheckPackage( }, checkRecommended({ - isLibrary = false, onlyWarnsForInPackage, onlyWarnsForInDependencies, - allowRangeVersionsInDependencies = isLibrary, + allowRangeVersionsInDependencies = isPkgLibrary, internalExactVersionsIgnore, checkResolutionMessage, } = {}) { @@ -520,7 +525,6 @@ export function createCheckPackage( this.checkResolutionsHasExplanation(checkResolutionMessage); this.checkDirectPeerDependencies({ - isLibrary, missingOnlyWarnsFor: internalMissingPeerDependenciesOnlyWarnsFor, invalidOnlyWarnsFor: internalInvalidPeerDependenciesOnlyWarnsFor, internalMissingConfigName: diff --git a/src/checks/checkDirectDuplicateDependencies.ts b/src/checks/checkDirectDuplicateDependencies.ts index f02b57e5..4c4848c9 100644 --- a/src/checks/checkDirectDuplicateDependencies.ts +++ b/src/checks/checkDirectDuplicateDependencies.ts @@ -1,4 +1,4 @@ -import type { GetDependencyPackageJson } from 'utils/createGetDependencyPackageJson'; +import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson'; import { reportNotWarnedForMapping, createReportError, @@ -11,6 +11,7 @@ import { checkDuplicateDependencies } from './checkDuplicateDependencies'; export async function checkDirectDuplicateDependencies( pkg: PackageJson, pkgPathName: string, + isPackageALibrary: boolean, depType: DependencyTypes, getDependencyPackageJson: GetDependencyPackageJson, onlyWarnsForCheck: OnlyWarnsForMappingCheck, @@ -43,6 +44,7 @@ export async function checkDirectDuplicateDependencies( checkDuplicateDependencies( reportError, pkg, + isPackageALibrary, depType, searchIn, depPkg, diff --git a/src/checks/checkDirectPeerDependencies.ts b/src/checks/checkDirectPeerDependencies.ts index 94df7865..eafda446 100644 --- a/src/checks/checkDirectPeerDependencies.ts +++ b/src/checks/checkDirectPeerDependencies.ts @@ -1,4 +1,4 @@ -import type { GetDependencyPackageJson } from 'utils/createGetDependencyPackageJson'; +import type { GetDependencyPackageJson } from '../utils/createGetDependencyPackageJson'; import { createReportError, reportNotWarnedForMapping, diff --git a/src/checks/checkDuplicateDependencies.test.ts b/src/checks/checkDuplicateDependencies.test.ts index 4b6b4b27..b8ee2ed9 100644 --- a/src/checks/checkDuplicateDependencies.test.ts +++ b/src/checks/checkDuplicateDependencies.test.ts @@ -10,6 +10,59 @@ describe('checkDuplicateDependencies', () => { mockReportError.mockReset(); }); + it('should report error when is in multiple types and not a library', () => { + checkDuplicateDependencies( + mockReportError, + { + name: 'test', + devDependencies: { + rollup: '1.0.0', + }, + dependencies: { + rollup: '1.0.0', + }, + }, + false, + 'dependencies', + ['dependencies', 'devDependencies'], + { + name: 'some-lib-using-rollup', + dependencies: { rollup: '^2.0.0' }, + }, + createOnlyWarnsForArrayCheck('test', []), + ); + expect(mockReportError).toHaveBeenCalledWith( + 'Invalid "rollup" present in dependencies and devDependencies', + 'please place it only in dependencies', + ); + }); + it('should report error when is in multiple types with same version and is a library', () => { + checkDuplicateDependencies( + mockReportError, + { + name: 'test', + devDependencies: { + rollup: '1.0.0', + }, + dependencies: { + rollup: '1.0.0', + }, + }, + true, + 'dependencies', + ['dependencies', 'devDependencies'], + { + name: 'some-lib-using-rollup', + dependencies: { rollup: '^2.0.0' }, + }, + createOnlyWarnsForArrayCheck('test', []), + ); + expect(mockReportError).toHaveBeenCalledWith( + 'Invalid "rollup" has same version in dependencies and devDependencies', + 'please place it only in dependencies or use range in dependencies', + ); + }); + it('should report error when dependency does not intersect', () => { checkDuplicateDependencies( mockReportError, @@ -20,6 +73,7 @@ describe('checkDuplicateDependencies', () => { 'some-lib-using-rollup': '1.0.0', }, }, + false, 'dependencies', ['devDependencies'], { @@ -45,6 +99,7 @@ describe('checkDuplicateDependencies', () => { 'some-lib-using-rollup': '1.0.0', }, }, + false, 'dependencies', ['devDependencies'], { @@ -65,6 +120,7 @@ describe('checkDuplicateDependencies', () => { rollup: '^1.0.1', }, }, + false, 'dependencies', ['dependencies'], { diff --git a/src/checks/checkDuplicateDependencies.ts b/src/checks/checkDuplicateDependencies.ts index d2f11ff1..8b5965c7 100644 --- a/src/checks/checkDuplicateDependencies.ts +++ b/src/checks/checkDuplicateDependencies.ts @@ -6,6 +6,7 @@ import type { OnlyWarnsForCheck } from '../utils/warnForUtils'; export function checkDuplicateDependencies( reportError: ReportError, pkg: PackageJson, + isPkgLibrary: boolean, depType: DependencyTypes, searchIn: DependencyTypes[], depPkg: PackageJson, @@ -19,9 +20,33 @@ export function checkDuplicateDependencies( for (const [depKey, range] of Object.entries(dependencies)) { const versionsIn = searchInExisting.filter((type) => pkg[type]![depKey]); - if (versionsIn.length > 1) { + let allowDuplicated = false; + if ( + versionsIn.length === 2 && + isPkgLibrary && + versionsIn.includes('dependencies') && + versionsIn.includes('devDependencies') + ) { + const depVersion = pkg.dependencies![depKey]; + const devDepVersion = pkg.devDependencies![depKey]; + + if (depVersion && depVersion === devDepVersion) { + reportError( + `Invalid "${depKey}" has same version in dependencies and devDependencies`, + 'please place it only in dependencies or use range in dependencies', + ); + continue; + } + allowDuplicated = true; + } + + if ( + versionsIn.length > 2 || + (versionsIn.length === 2 && !allowDuplicated) + ) { reportError( - `${depKey} is present in both devDependencies and dependencies, please place it only in dependencies`, + `Invalid "${depKey}" present in ${versionsIn.join(' and ')}`, + 'please place it only in dependencies', ); } else { const versions = versionsIn.map((type) => pkg[type]![depKey]); diff --git a/tsconfig.json b/tsconfig.json index 04cb8661..8e6a817e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -33,7 +33,6 @@ /* Module Resolution Options */ "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - "baseUrl": "./src" /* Base directory to resolve non-absolute module names. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ } }