@ms-cloudpack/package-utilities 10.4.2 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/detectModuleType.d.ts +1 -0
- package/lib/detectModuleType.d.ts.map +1 -1
- package/lib/detectModuleType.js +1 -0
- package/lib/detectModuleType.js.map +1 -1
- package/lib/{addExportsMapEntry.d.ts → exportsMap/addExportsMapEntry.d.ts} +1 -1
- package/lib/exportsMap/addExportsMapEntry.d.ts.map +1 -0
- package/lib/{addExportsMapEntry.js → exportsMap/addExportsMapEntry.js} +1 -1
- package/lib/exportsMap/addExportsMapEntry.js.map +1 -0
- package/lib/exportsMap/createExportsMap.d.ts.map +1 -0
- package/lib/exportsMap/createExportsMap.js.map +1 -0
- package/lib/exportsMap/flattenExportsMap.d.ts.map +1 -0
- package/lib/{flattenExportsMap.js → exportsMap/flattenExportsMap.js} +10 -2
- package/lib/exportsMap/flattenExportsMap.js.map +1 -0
- package/lib/exportsMap/getExportsMap.d.ts.map +1 -0
- package/lib/exportsMap/getExportsMap.js.map +1 -0
- package/lib/exportsMap/getSourceEntry.d.ts.map +1 -0
- package/lib/{getSourceEntry.js → exportsMap/getSourceEntry.js} +2 -3
- package/lib/exportsMap/getSourceEntry.js.map +1 -0
- package/lib/findFileInPackage/findFileInPackage.d.ts.map +1 -0
- package/lib/{findFileInPackage.js → findFileInPackage/findFileInPackage.js} +3 -4
- package/lib/findFileInPackage/findFileInPackage.js.map +1 -0
- package/lib/findFileInPackage/findPackage.d.ts.map +1 -0
- package/lib/findFileInPackage/findPackage.js.map +1 -0
- package/lib/findFileInPackage/findPackageOutputPaths.d.ts.map +1 -0
- package/lib/findFileInPackage/findPackageOutputPaths.js.map +1 -0
- package/lib/findFileInPackage/getCandidates.d.ts.map +1 -0
- package/lib/{getCandidates.js → findFileInPackage/getCandidates.js} +1 -1
- package/lib/findFileInPackage/getCandidates.js.map +1 -0
- package/lib/index.d.ts +18 -24
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -24
- package/lib/index.js.map +1 -1
- package/lib/object/mergeArrayDefaults.d.ts.map +1 -0
- package/lib/object/mergeArrayDefaults.js.map +1 -0
- package/lib/object/mergeObjects.d.ts.map +1 -0
- package/lib/object/mergeObjects.js.map +1 -0
- package/lib/packageDefinitions/MockPackageDefinitions.d.ts +27 -0
- package/lib/packageDefinitions/MockPackageDefinitions.d.ts.map +1 -0
- package/lib/packageDefinitions/MockPackageDefinitions.js +21 -0
- package/lib/packageDefinitions/MockPackageDefinitions.js.map +1 -0
- package/lib/packageDefinitions/PackageDefinitions.d.ts +35 -0
- package/lib/packageDefinitions/PackageDefinitions.d.ts.map +1 -0
- package/lib/{PackageDefinitions.js → packageDefinitions/PackageDefinitions.js} +18 -16
- package/lib/packageDefinitions/PackageDefinitions.js.map +1 -0
- package/lib/packageDefinitions/generateVersionFromNonSemver.d.ts.map +1 -0
- package/lib/packageDefinitions/generateVersionFromNonSemver.js.map +1 -0
- package/lib/packageDefinitions/getApiServerTransform.d.ts.map +1 -0
- package/lib/packageDefinitions/getApiServerTransform.js.map +1 -0
- package/lib/packageDefinitions/getNonSemverTransform.d.ts.map +1 -0
- package/lib/packageDefinitions/getNonSemverTransform.js.map +1 -0
- package/lib/packageDefinitions/getTypesTransform.d.ts.map +1 -0
- package/lib/packageDefinitions/getTypesTransform.js.map +1 -0
- package/lib/packageJson/getDependencies.d.ts.map +1 -0
- package/lib/packageJson/getDependencies.js.map +1 -0
- package/lib/packageJson/getUnusedDependencies.d.ts.map +1 -0
- package/lib/packageJson/getUnusedDependencies.js.map +1 -0
- package/lib/packageJson/getVersion.d.ts +14 -0
- package/lib/packageJson/getVersion.d.ts.map +1 -0
- package/lib/packageJson/getVersion.js +33 -0
- package/lib/packageJson/getVersion.js.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/addLinkedEntryDependencies.d.ts +1 -1
- package/lib/resolveMap/createHelpers/addLinkedEntryDependencies.d.ts.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/addLinkedEntryDependencies.js +1 -1
- package/lib/resolveMap/createHelpers/addLinkedEntryDependencies.js.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/convertToResolveMap.d.ts +1 -1
- package/lib/resolveMap/createHelpers/convertToResolveMap.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/convertToResolveMap.js.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/dedupeLinkedPackages.d.ts +1 -1
- package/lib/resolveMap/createHelpers/dedupeLinkedPackages.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/dedupeLinkedPackages.js.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/detachEntry.d.ts +1 -1
- package/lib/resolveMap/createHelpers/detachEntry.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/detachEntry.js.map +1 -0
- package/lib/resolveMap/createHelpers/entrySorter.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/entrySorter.js.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/findPackagesFromPath.d.ts +1 -1
- package/lib/resolveMap/createHelpers/findPackagesFromPath.d.ts.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/findPackagesFromPath.js +4 -6
- package/lib/resolveMap/createHelpers/findPackagesFromPath.js.map +1 -0
- package/lib/{createResolveMap → resolveMap/createHelpers}/linkPath.d.ts +1 -1
- package/lib/resolveMap/createHelpers/linkPath.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/linkPath.js.map +1 -0
- package/lib/resolveMap/createHelpers/parseRequiredBy.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/parseRequiredBy.js.map +1 -0
- package/lib/resolveMap/createHelpers/types/PackageMap.d.ts.map +1 -0
- package/lib/resolveMap/createHelpers/types/PackageMap.js.map +1 -0
- package/lib/{createResolveMap → resolveMap}/createResolveMap.d.ts +1 -1
- package/lib/resolveMap/createResolveMap.d.ts.map +1 -0
- package/lib/{createResolveMap → resolveMap}/createResolveMap.js +4 -4
- package/lib/resolveMap/createResolveMap.js.map +1 -0
- package/lib/resolveMap/diffResolveMaps.d.ts.map +1 -0
- package/lib/resolveMap/diffResolveMaps.js.map +1 -0
- package/lib/resolveMap/ensureResolveMapEntry.d.ts.map +1 -0
- package/lib/{ensureResolveMapEntry.js → resolveMap/ensureResolveMapEntry.js} +2 -3
- package/lib/resolveMap/ensureResolveMapEntry.js.map +1 -0
- package/lib/resolveMap/findResolveMapEntry.d.ts.map +1 -0
- package/lib/resolveMap/findResolveMapEntry.js.map +1 -0
- package/package.json +7 -10
- package/lib/PackageDefinitions.d.ts +0 -23
- package/lib/PackageDefinitions.d.ts.map +0 -1
- package/lib/PackageDefinitions.js.map +0 -1
- package/lib/addExportsMapEntry.d.ts.map +0 -1
- package/lib/addExportsMapEntry.js.map +0 -1
- package/lib/cleanEntry.d.ts +0 -2
- package/lib/cleanEntry.d.ts.map +0 -1
- package/lib/cleanEntry.js +0 -11
- package/lib/cleanEntry.js.map +0 -1
- package/lib/createExportsMap.d.ts.map +0 -1
- package/lib/createExportsMap.js.map +0 -1
- package/lib/createResolveMap/addLinkedEntryDependencies.d.ts.map +0 -1
- package/lib/createResolveMap/addLinkedEntryDependencies.js.map +0 -1
- package/lib/createResolveMap/convertToResolveMap.d.ts.map +0 -1
- package/lib/createResolveMap/convertToResolveMap.js.map +0 -1
- package/lib/createResolveMap/createResolveMap.d.ts.map +0 -1
- package/lib/createResolveMap/createResolveMap.js.map +0 -1
- package/lib/createResolveMap/dedupeLinkedPackages.d.ts.map +0 -1
- package/lib/createResolveMap/dedupeLinkedPackages.js.map +0 -1
- package/lib/createResolveMap/detachEntry.d.ts.map +0 -1
- package/lib/createResolveMap/detachEntry.js.map +0 -1
- package/lib/createResolveMap/diffResolveMaps.d.ts.map +0 -1
- package/lib/createResolveMap/diffResolveMaps.js.map +0 -1
- package/lib/createResolveMap/entrySorter.d.ts.map +0 -1
- package/lib/createResolveMap/entrySorter.js.map +0 -1
- package/lib/createResolveMap/findPackagesFromPath.d.ts.map +0 -1
- package/lib/createResolveMap/findPackagesFromPath.js.map +0 -1
- package/lib/createResolveMap/linkPath.d.ts.map +0 -1
- package/lib/createResolveMap/linkPath.js.map +0 -1
- package/lib/createResolveMap/parseRequiredBy.d.ts.map +0 -1
- package/lib/createResolveMap/parseRequiredBy.js.map +0 -1
- package/lib/ensureResolveMapEntry.d.ts.map +0 -1
- package/lib/ensureResolveMapEntry.js.map +0 -1
- package/lib/findFileInPackage.d.ts.map +0 -1
- package/lib/findFileInPackage.js.map +0 -1
- package/lib/findPackage.d.ts.map +0 -1
- package/lib/findPackage.js.map +0 -1
- package/lib/findPackageOutputPaths.d.ts.map +0 -1
- package/lib/findPackageOutputPaths.js.map +0 -1
- package/lib/findProjectRoot.d.ts +0 -12
- package/lib/findProjectRoot.d.ts.map +0 -1
- package/lib/findProjectRoot.js +0 -18
- package/lib/findProjectRoot.js.map +0 -1
- package/lib/findResolveMapEntry.d.ts.map +0 -1
- package/lib/findResolveMapEntry.js.map +0 -1
- package/lib/flattenExportsMap.d.ts.map +0 -1
- package/lib/flattenExportsMap.js.map +0 -1
- package/lib/generateVersionFromNonSemver.d.ts.map +0 -1
- package/lib/generateVersionFromNonSemver.js.map +0 -1
- package/lib/getApiServerTransform.d.ts.map +0 -1
- package/lib/getApiServerTransform.js.map +0 -1
- package/lib/getCandidates.d.ts.map +0 -1
- package/lib/getCandidates.js.map +0 -1
- package/lib/getDependencies.d.ts.map +0 -1
- package/lib/getDependencies.js.map +0 -1
- package/lib/getDisplayVersion.d.ts +0 -9
- package/lib/getDisplayVersion.d.ts.map +0 -1
- package/lib/getDisplayVersion.js +0 -13
- package/lib/getDisplayVersion.js.map +0 -1
- package/lib/getExportsMap.d.ts.map +0 -1
- package/lib/getExportsMap.js.map +0 -1
- package/lib/getNonSemverTransform.d.ts.map +0 -1
- package/lib/getNonSemverTransform.js.map +0 -1
- package/lib/getSourceEntry.d.ts.map +0 -1
- package/lib/getSourceEntry.js.map +0 -1
- package/lib/getTypesTransform.d.ts.map +0 -1
- package/lib/getTypesTransform.js.map +0 -1
- package/lib/getUnusedDependencies.d.ts.map +0 -1
- package/lib/getUnusedDependencies.js.map +0 -1
- package/lib/getVersion.d.ts +0 -7
- package/lib/getVersion.d.ts.map +0 -1
- package/lib/getVersion.js +0 -10
- package/lib/getVersion.js.map +0 -1
- package/lib/getVersionInternal.d.ts +0 -6
- package/lib/getVersionInternal.d.ts.map +0 -1
- package/lib/getVersionInternal.js +0 -16
- package/lib/getVersionInternal.js.map +0 -1
- package/lib/isExternalPackage.d.ts +0 -6
- package/lib/isExternalPackage.d.ts.map +0 -1
- package/lib/isExternalPackage.js +0 -11
- package/lib/isExternalPackage.js.map +0 -1
- package/lib/mergeArrayDefaults.d.ts.map +0 -1
- package/lib/mergeArrayDefaults.js.map +0 -1
- package/lib/mergeObjects.d.ts.map +0 -1
- package/lib/mergeObjects.js.map +0 -1
- package/lib/resolve.d.ts +0 -8
- package/lib/resolve.d.ts.map +0 -1
- package/lib/resolve.js +0 -27
- package/lib/resolve.js.map +0 -1
- package/lib/resolveModule.d.ts +0 -9
- package/lib/resolveModule.d.ts.map +0 -1
- package/lib/resolveModule.js +0 -15
- package/lib/resolveModule.js.map +0 -1
- package/lib/shouldExternalizePackage.d.ts +0 -12
- package/lib/shouldExternalizePackage.d.ts.map +0 -1
- package/lib/shouldExternalizePackage.js +0 -24
- package/lib/shouldExternalizePackage.js.map +0 -1
- package/lib/tsdoc-metadata.json +0 -11
- package/lib/types/PackageMap.d.ts.map +0 -1
- package/lib/types/PackageMap.js.map +0 -1
- /package/lib/{createExportsMap.d.ts → exportsMap/createExportsMap.d.ts} +0 -0
- /package/lib/{createExportsMap.js → exportsMap/createExportsMap.js} +0 -0
- /package/lib/{flattenExportsMap.d.ts → exportsMap/flattenExportsMap.d.ts} +0 -0
- /package/lib/{getExportsMap.d.ts → exportsMap/getExportsMap.d.ts} +0 -0
- /package/lib/{getExportsMap.js → exportsMap/getExportsMap.js} +0 -0
- /package/lib/{getSourceEntry.d.ts → exportsMap/getSourceEntry.d.ts} +0 -0
- /package/lib/{findFileInPackage.d.ts → findFileInPackage/findFileInPackage.d.ts} +0 -0
- /package/lib/{findPackage.d.ts → findFileInPackage/findPackage.d.ts} +0 -0
- /package/lib/{findPackage.js → findFileInPackage/findPackage.js} +0 -0
- /package/lib/{findPackageOutputPaths.d.ts → findFileInPackage/findPackageOutputPaths.d.ts} +0 -0
- /package/lib/{findPackageOutputPaths.js → findFileInPackage/findPackageOutputPaths.js} +0 -0
- /package/lib/{getCandidates.d.ts → findFileInPackage/getCandidates.d.ts} +0 -0
- /package/lib/{mergeArrayDefaults.d.ts → object/mergeArrayDefaults.d.ts} +0 -0
- /package/lib/{mergeArrayDefaults.js → object/mergeArrayDefaults.js} +0 -0
- /package/lib/{mergeObjects.d.ts → object/mergeObjects.d.ts} +0 -0
- /package/lib/{mergeObjects.js → object/mergeObjects.js} +0 -0
- /package/lib/{generateVersionFromNonSemver.d.ts → packageDefinitions/generateVersionFromNonSemver.d.ts} +0 -0
- /package/lib/{generateVersionFromNonSemver.js → packageDefinitions/generateVersionFromNonSemver.js} +0 -0
- /package/lib/{getApiServerTransform.d.ts → packageDefinitions/getApiServerTransform.d.ts} +0 -0
- /package/lib/{getApiServerTransform.js → packageDefinitions/getApiServerTransform.js} +0 -0
- /package/lib/{getNonSemverTransform.d.ts → packageDefinitions/getNonSemverTransform.d.ts} +0 -0
- /package/lib/{getNonSemverTransform.js → packageDefinitions/getNonSemverTransform.js} +0 -0
- /package/lib/{getTypesTransform.d.ts → packageDefinitions/getTypesTransform.d.ts} +0 -0
- /package/lib/{getTypesTransform.js → packageDefinitions/getTypesTransform.js} +0 -0
- /package/lib/{getDependencies.d.ts → packageJson/getDependencies.d.ts} +0 -0
- /package/lib/{getDependencies.js → packageJson/getDependencies.js} +0 -0
- /package/lib/{getUnusedDependencies.d.ts → packageJson/getUnusedDependencies.d.ts} +0 -0
- /package/lib/{getUnusedDependencies.js → packageJson/getUnusedDependencies.js} +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/convertToResolveMap.js +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/dedupeLinkedPackages.js +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/detachEntry.js +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/entrySorter.d.ts +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/entrySorter.js +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/linkPath.js +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/parseRequiredBy.d.ts +0 -0
- /package/lib/{createResolveMap → resolveMap/createHelpers}/parseRequiredBy.js +0 -0
- /package/lib/{types → resolveMap/createHelpers/types}/PackageMap.d.ts +0 -0
- /package/lib/{types → resolveMap/createHelpers/types}/PackageMap.js +0 -0
- /package/lib/{createResolveMap → resolveMap}/diffResolveMaps.d.ts +0 -0
- /package/lib/{createResolveMap → resolveMap}/diffResolveMaps.js +0 -0
- /package/lib/{ensureResolveMapEntry.d.ts → resolveMap/ensureResolveMapEntry.d.ts} +0 -0
- /package/lib/{findResolveMapEntry.d.ts → resolveMap/findResolveMapEntry.d.ts} +0 -0
- /package/lib/{findResolveMapEntry.js → resolveMap/findResolveMapEntry.js} +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PackageDefinitions } from './PackageDefinitions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Version of PackageDefinitions which uses a fixture object instead of reading from disk.
|
|
4
|
+
*/
|
|
5
|
+
export class MockPackageDefinitions extends PackageDefinitions {
|
|
6
|
+
/**
|
|
7
|
+
* **WARNING**: Cloudpack code (including tests) outside of `@ms-cloudpack/package-utilities`
|
|
8
|
+
* should use `createPackageDefinitions` from `@ms-cloudpack/config` instead. That wrapper adds
|
|
9
|
+
* some transforms which are essential for applying settings from the cloudpack config.
|
|
10
|
+
*/
|
|
11
|
+
constructor(options) {
|
|
12
|
+
super(options);
|
|
13
|
+
this._fixture = options.fixture;
|
|
14
|
+
}
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/require-await -- override
|
|
16
|
+
async _readPackage(normalizedPath) {
|
|
17
|
+
// Make a copy to avoid accidentally modifying the fixture
|
|
18
|
+
return structuredClone(this._fixture[normalizedPath]);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=MockPackageDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockPackageDefinitions.js","sourceRoot":"","sources":["../../src/packageDefinitions/MockPackageDefinitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAkC,MAAM,yBAAyB,CAAC;AAa7F;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IAG5D;;;;OAIG;IACH,YAAY,OAAsC;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,wEAAwE;IAC9D,KAAK,CAAC,YAAY,CAAC,cAAsB;QACjD,0DAA0D;QAC1D,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACxD,CAAC;CACF","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/common-types';\nimport { PackageDefinitions, type PackageDefinitionsOptions } from './PackageDefinitions.js';\n\ninterface MockPackageDefinitionsOptions extends PackageDefinitionsOptions {\n /**\n * Map of package paths to non-transformed package definitions, used for testing.\n * Paths should be normalized with forward slashes.\n *\n * If this is set, `get()` will NOT attempt to read package definitions from disk.\n * Note that the fixture will persist across `reset` or `registerTransform` calls.\n */\n fixture: Readonly<Record<string, PackageJson>>;\n}\n\n/**\n * Version of PackageDefinitions which uses a fixture object instead of reading from disk.\n */\nexport class MockPackageDefinitions extends PackageDefinitions {\n private _fixture: MockPackageDefinitionsOptions['fixture'];\n\n /**\n * **WARNING**: Cloudpack code (including tests) outside of `@ms-cloudpack/package-utilities`\n * should use `createPackageDefinitions` from `@ms-cloudpack/config` instead. That wrapper adds\n * some transforms which are essential for applying settings from the cloudpack config.\n */\n constructor(options: MockPackageDefinitionsOptions) {\n super(options);\n this._fixture = options.fixture;\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await -- override\n protected async _readPackage(normalizedPath: string): Promise<PackageJson | undefined> {\n // Make a copy to avoid accidentally modifying the fixture\n return structuredClone(this._fixture[normalizedPath]);\n }\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CloudpackConfig, GetPackageDefinitionOptions, PackageDefinitionTransformFactory, PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/common-types';
|
|
2
|
+
export interface PackageDefinitionsOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Config object to pass to transforms. When `reset` is called with a new value, the transforms
|
|
5
|
+
* will be transforms will be re-created using the new config.
|
|
6
|
+
*/
|
|
7
|
+
config?: CloudpackConfig;
|
|
8
|
+
/**
|
|
9
|
+
* Transform factories to register on initialization.
|
|
10
|
+
*/
|
|
11
|
+
transformFactories?: PackageDefinitionTransformFactory[];
|
|
12
|
+
}
|
|
13
|
+
export declare class PackageDefinitions implements PackageDefinitionsCache {
|
|
14
|
+
private _definitions;
|
|
15
|
+
private _transformedDefinitions;
|
|
16
|
+
private _config;
|
|
17
|
+
private _transforms;
|
|
18
|
+
private _transformFactories;
|
|
19
|
+
/**
|
|
20
|
+
* **WARNING**: Cloudpack code (including tests) outside of `@ms-cloudpack/package-utilities`
|
|
21
|
+
* should use `createPackageDefinitions` from `@ms-cloudpack/config` instead. That wrapper adds
|
|
22
|
+
* some transforms which are essential for applying settings from the cloudpack config.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options?: PackageDefinitionsOptions);
|
|
25
|
+
get(packagePath: string, options?: GetPackageDefinitionOptions): Promise<PackageJson>;
|
|
26
|
+
tryGet(packagePath: string, options?: GetPackageDefinitionOptions): Promise<PackageJson | undefined>;
|
|
27
|
+
registerTransform(factory: PackageDefinitionTransformFactory): void;
|
|
28
|
+
reset(options?: {
|
|
29
|
+
newConfig?: CloudpackConfig;
|
|
30
|
+
force?: boolean;
|
|
31
|
+
}): void;
|
|
32
|
+
_getAll(options?: Pick<GetPackageDefinitionOptions, 'disableTransforms'>): Record<string, PackageJson | undefined>;
|
|
33
|
+
protected _readPackage(normalizedPath: string): Promise<PackageJson | undefined>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=PackageDefinitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageDefinitions.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/PackageDefinitions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,2BAA2B,EAE3B,iCAAiC,EACjC,uBAAuB,EACvB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAapC,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,iCAAiC,EAAE,CAAC;CAC1D;AAED,qBAAa,kBAAmB,YAAW,uBAAuB;IAChE,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,uBAAuB,CAAmC;IAClE,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,mBAAmB,CAA2C;IAEtE;;;;OAIG;gBACS,OAAO,GAAE,yBAA8B;IAO7C,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,WAAW,CAAC;IAQrF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAiD9G,iBAAiB,CAAC,OAAO,EAAE,iCAAiC;IAO5D,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;IAYhE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,2BAA2B,EAAE,mBAAmB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;cAIlG,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;CAIvF"}
|
|
@@ -11,19 +11,18 @@ import { getTypesTransform } from './getTypesTransform.js';
|
|
|
11
11
|
const getDefaultTransforms = () => [getApiServerTransform(), getTypesTransform(), getNonSemverTransform()];
|
|
12
12
|
export class PackageDefinitions {
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* transforms will be re-created using the new config.
|
|
14
|
+
* **WARNING**: Cloudpack code (including tests) outside of `@ms-cloudpack/package-utilities`
|
|
15
|
+
* should use `createPackageDefinitions` from `@ms-cloudpack/config` instead. That wrapper adds
|
|
16
|
+
* some transforms which are essential for applying settings from the cloudpack config.
|
|
18
17
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this._transforms = [];
|
|
22
|
-
this._definitions = definitionCache;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this._definitions = {};
|
|
23
20
|
this._transformedDefinitions = {};
|
|
24
|
-
this.
|
|
25
|
-
this._transformFactories =
|
|
26
|
-
|
|
21
|
+
this._transforms = [];
|
|
22
|
+
this._transformFactories = [];
|
|
23
|
+
const { config, transformFactories } = options;
|
|
24
|
+
this._transformFactories = transformFactories || [];
|
|
25
|
+
this.reset({ newConfig: config, force: true });
|
|
27
26
|
}
|
|
28
27
|
async get(packagePath, options) {
|
|
29
28
|
const definition = await this.tryGet(packagePath, options);
|
|
@@ -40,12 +39,11 @@ export class PackageDefinitions {
|
|
|
40
39
|
delete this._definitions[normalizedPath];
|
|
41
40
|
delete this._transformedDefinitions[normalizedPath];
|
|
42
41
|
}
|
|
43
|
-
// If the definition is not in the cache, read it from disk.
|
|
42
|
+
// If the definition is not in the cache, read it from disk (or from the fixture).
|
|
44
43
|
// (If the definition was invalid JSON or not found, undefined is cached.)
|
|
45
44
|
let definition = this._definitions[normalizedPath];
|
|
46
45
|
if (!(normalizedPath in this._definitions)) {
|
|
47
|
-
|
|
48
|
-
definition = await readJson(path.join(packagePath, 'package.json'), { verbose: true });
|
|
46
|
+
definition = await this._readPackage(normalizedPath);
|
|
49
47
|
this._definitions[normalizedPath] = definition;
|
|
50
48
|
if (definition) {
|
|
51
49
|
definition.name ??= `unknown-${packagePath.replace(/[^\w-]/g, '-')}`;
|
|
@@ -80,8 +78,8 @@ export class PackageDefinitions {
|
|
|
80
78
|
reset(options) {
|
|
81
79
|
this._definitions = {};
|
|
82
80
|
this._transformedDefinitions = {};
|
|
83
|
-
const { newConfig } = options || {};
|
|
84
|
-
if (newConfig) {
|
|
81
|
+
const { newConfig, force } = options || {};
|
|
82
|
+
if (newConfig || force) {
|
|
85
83
|
this._config = newConfig;
|
|
86
84
|
this._transforms = [...getDefaultTransforms(), ...this._transformFactories.map((factory) => factory(newConfig))];
|
|
87
85
|
}
|
|
@@ -89,5 +87,9 @@ export class PackageDefinitions {
|
|
|
89
87
|
_getAll(options) {
|
|
90
88
|
return options?.disableTransforms ? this._definitions : this._transformedDefinitions;
|
|
91
89
|
}
|
|
90
|
+
async _readPackage(normalizedPath) {
|
|
91
|
+
// `verbose` logs if the file exists but isn't valid JSON (or can't be read for some reason)
|
|
92
|
+
return readJson(path.join(normalizedPath, 'package.json'), { verbose: true });
|
|
93
|
+
}
|
|
92
94
|
}
|
|
93
95
|
//# sourceMappingURL=PackageDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageDefinitions.js","sourceRoot":"","sources":["../../src/packageDefinitions/PackageDefinitions.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport type {\n CloudpackConfig,\n GetPackageDefinitionOptions,\n PackageDefinitionTransform,\n PackageDefinitionTransformFactory,\n PackageDefinitionsCache,\n PackageJson,\n} from '@ms-cloudpack/common-types';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport { getNonSemverTransform } from './getNonSemverTransform.js';\nimport { getApiServerTransform } from './getApiServerTransform.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport { getTypesTransform } from './getTypesTransform.js';\n\n/**\n * `nonSemverTransform` has state defined when the function is called, so we need a wrapper function\n * which returns new transforms to ensure that state is cleared when resetting.\n */\nconst getDefaultTransforms = () => [getApiServerTransform(), getTypesTransform(), getNonSemverTransform()];\n\nexport interface PackageDefinitionsOptions {\n /**\n * Config object to pass to transforms. When `reset` is called with a new value, the transforms\n * will be transforms will be re-created using the new config.\n */\n config?: CloudpackConfig;\n /**\n * Transform factories to register on initialization.\n */\n transformFactories?: PackageDefinitionTransformFactory[];\n}\n\nexport class PackageDefinitions implements PackageDefinitionsCache {\n private _definitions: Record<string, PackageJson | undefined> = {};\n private _transformedDefinitions: Record<string, PackageJson> = {};\n private _config: CloudpackConfig | undefined;\n private _transforms: PackageDefinitionTransform[] = [];\n private _transformFactories: PackageDefinitionTransformFactory[] = [];\n\n /**\n * **WARNING**: Cloudpack code (including tests) outside of `@ms-cloudpack/package-utilities`\n * should use `createPackageDefinitions` from `@ms-cloudpack/config` instead. That wrapper adds\n * some transforms which are essential for applying settings from the cloudpack config.\n */\n constructor(options: PackageDefinitionsOptions = {}) {\n const { config, transformFactories } = options;\n this._transformFactories = transformFactories || [];\n\n this.reset({ newConfig: config, force: true });\n }\n\n async get(packagePath: string, options?: GetPackageDefinitionOptions): Promise<PackageJson> {\n const definition = await this.tryGet(packagePath, options);\n if (!definition) {\n throw new Error(`package.json not found at \"${packagePath}\"`);\n }\n return definition;\n }\n\n async tryGet(packagePath: string, options: GetPackageDefinitionOptions = {}): Promise<PackageJson | undefined> {\n const { refresh, disableTransforms, importerContext } = options;\n\n // Normalize the path used for caching to ensure consistency and avoid duplicates.\n const normalizedPath = slash(packagePath);\n\n if (refresh) {\n delete this._definitions[normalizedPath];\n delete this._transformedDefinitions[normalizedPath];\n }\n\n // If the definition is not in the cache, read it from disk (or from the fixture).\n // (If the definition was invalid JSON or not found, undefined is cached.)\n let definition = this._definitions[normalizedPath];\n if (!(normalizedPath in this._definitions)) {\n definition = await this._readPackage(normalizedPath);\n this._definitions[normalizedPath] = definition;\n\n if (definition) {\n definition.name ??= `unknown-${packagePath.replace(/[^\\w-]/g, '-')}`;\n definition.version ??= '0.0.0-unknown';\n }\n }\n\n if (disableTransforms || !definition) {\n return definition;\n }\n\n // If we don't want to skip the transform, transform the definition.\n let transformedDefinition = this._transformedDefinitions[normalizedPath];\n if (!transformedDefinition) {\n transformedDefinition = definition;\n\n for (const transform of this._transforms) {\n transformedDefinition =\n (await transform({\n definition: transformedDefinition,\n packagePath: normalizedPath,\n packages: this,\n importerContext,\n })) || transformedDefinition;\n }\n\n this._transformedDefinitions[normalizedPath] = transformedDefinition;\n }\n\n return transformedDefinition;\n }\n\n registerTransform(factory: PackageDefinitionTransformFactory) {\n this._transformFactories.push(factory);\n this._transforms.push(factory(this._config));\n\n this.reset();\n }\n\n reset(options?: { newConfig?: CloudpackConfig; force?: boolean }) {\n this._definitions = {};\n this._transformedDefinitions = {};\n\n const { newConfig, force } = options || {};\n\n if (newConfig || force) {\n this._config = newConfig;\n this._transforms = [...getDefaultTransforms(), ...this._transformFactories.map((factory) => factory(newConfig))];\n }\n }\n\n _getAll(options?: Pick<GetPackageDefinitionOptions, 'disableTransforms'>): Record<string, PackageJson | undefined> {\n return options?.disableTransforms ? this._definitions : this._transformedDefinitions;\n }\n\n protected async _readPackage(normalizedPath: string): Promise<PackageJson | undefined> {\n // `verbose` logs if the file exists but isn't valid JSON (or can't be read for some reason)\n return readJson<PackageJson>(path.join(normalizedPath, 'package.json'), { verbose: true });\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateVersionFromNonSemver.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/generateVersionFromNonSemver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateVersionFromNonSemver.js","sourceRoot":"","sources":["../../src/packageDefinitions/generateVersionFromNonSemver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,yEAAyE;IACzE,mFAAmF;IACnF,OAAO,SAAS,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC","sourcesContent":["/**\n * Convert a non-semver version to a `0.0.0-` prerelease version.\n * e.g. `npm:@custom/foo@^1.0.0` -> `0.0.0-npm--custom-foo--1-0-0`\n *\n * NOTE: This function does not verify that the input is a non-semver version.\n * It's expected that the caller has already checked this.\n */\nexport function generateVersionFromNonSemver(version: string): string {\n // Only letters, numbers, and hyphens are allowed in prerelease suffixes.\n // (Periods are also allowed but potentially have special meaning, so remove them.)\n return `0.0.0-${version.replace(/[^-a-zA-Z0-9]/g, '-')}`;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getApiServerTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getApiServerTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAI7E;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,0BAA0B,CAalE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getApiServerTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getApiServerTransform.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,CAAC,wBAAwB,EAAE,mCAAmC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AAEpH;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QACxB,IAAI,UAAU,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YACnD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG,UAAU;YACb,YAAY,EAAE,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACpG;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { PackageDefinitionTransform } from '@ms-cloudpack/common-types';\n\nconst apiServerBrowserDeps = ['@ms-cloudpack/data-bus', '@ms-cloudpack/path-string-parsing', '@trpc/client', 'zod'];\n\n/**\n * Returns a transform that will update the dependencies of the `@ms-cloudpack/api-server` package\n * to only include the browser dependencies. This reduces the resolve map packages by removing\n * around ~500 server dependencies.\n */\nexport function getApiServerTransform(): PackageDefinitionTransform {\n return ({ definition }) => {\n if (definition.name !== '@ms-cloudpack/api-server') {\n return undefined;\n }\n\n return {\n ...definition,\n dependencies: Object.fromEntries(\n Object.entries(definition.dependencies || {}).filter(([dep]) => apiServerBrowserDeps.includes(dep)),\n ),\n };\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNonSemverTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getNonSemverTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAe,MAAM,4BAA4B,CAAC;AAM1F;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,0BAA0B,CAsFlE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNonSemverTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getNonSemverTransform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionTransform, PackageJson } from '@ms-cloudpack/common-types';\nimport semver from 'semver';\nimport { generateVersionFromNonSemver } from './generateVersionFromNonSemver.js';\n\nconst depTypes = ['dependencies', 'peerDependencies'] as const;\n\n/**\n * Get a transform which handles non-semver dependencies:\n * - In a parent package, if a dependency is specified with a non-semver version, change the dep\n * to a special `0.0.0-<original-version>` prerelease version.\n * - In a child package, if the package was pulled in as a non-semver dependency by a parent\n * (per the `importerContext`), change its version to the special prerelease version as above.\n */\nexport function getNonSemverTransform(): PackageDefinitionTransform {\n /**\n * Cached info about parent packages with non-semver dependencies:\n * Map from parent name/version => dep type => non-semver dependency names\n */\n const nonSemverDeps: Record<\n `${string}@${string}`,\n Partial<Record<'dependencies' | 'peerDependencies', string[]>>\n > = {};\n\n return ({ definition, packagePath, importerContext }) => {\n const result: Partial<PackageJson> = {};\n\n // Check for non-semver dependencies\n for (const depType of depTypes) {\n const deps = definition[depType] || {};\n\n for (const [depName, depVersion] of Object.entries(deps)) {\n if (!depVersion || semver.validRange(depVersion)) {\n continue;\n }\n\n // Don't warn about workspace: deps, but still process them as non-semver.\n // (Alternatively, we could change the version of all workspace deps to * in dependencies,\n // but that's risky since there could theoretically be an additional version of that dep\n // from the registry nested somewhere in the tree.)\n if (!depVersion.startsWith('workspace:')) {\n console.debug(\n `Non-semver dependency found: ${depName}@${depVersion} ` +\n `(in ${definition.name}@${definition.version} at ${packagePath}). ` +\n \"Cloudpack will attempt to handle this, but it's recommended to use semantic versions only if possible.\",\n );\n }\n\n // Update the version in the returned dependencies:\n // \"bar\": \"npm:@custom/bar@^1\" => \"0.0.0-npm--custom-bar--1\"\n const resultDeps = (result[depType] ??= { ...deps });\n resultDeps[depName] = generateVersionFromNonSemver(depVersion);\n\n // Save that this was a non-semver dep\n const record = (nonSemverDeps[`${definition.name}@${definition.version}`] ??= {});\n (record[depType] ??= []).push(depName);\n }\n }\n\n // If this package's parent pulled it in with a non-semver dependency, make some more updates\n // (see below)\n const nonSemverParentInfo =\n importerContext && nonSemverDeps[`${importerContext.parentName}@${importerContext.parentVersion}`];\n\n // TODO: maybe this could also be used for resolutions if we have problems there:\n // adding a check for !semver.satisfies(requiredAs, definition.version) and forcing the package version?\n\n if (nonSemverParentInfo) {\n // Example: the parent depended on this package as \"bar\": \"npm:@custom/bar@^1\"\n // importedName = bar\n // versionRequirement = 0.0.0-npm--custom-bar--1 (was modified when this transform ran on the parent definition)\n const { importedName, versionRequirement } = importerContext;\n\n for (const depType of depTypes) {\n if (!nonSemverParentInfo[depType]?.includes(importedName)) {\n continue;\n }\n\n // To ensure other code handles this package properly, change its name and version to\n // the ones used by the parent (after transforms). This ensures it works properly with\n // the resolve map and isn't accidentally used by other packages which depend on this\n // package under its real name.\n result.name = importedName;\n result.version = versionRequirement;\n\n // We have changed the definition, so link the entry in nonSemverDeps to the new name/version.\n if (nonSemverDeps[`${definition.name}@${definition.version}`]) {\n nonSemverDeps[`${importedName}@${versionRequirement}`] =\n nonSemverDeps[`${definition.name}@${definition.version}`];\n }\n\n break;\n }\n }\n\n if (Object.keys(result).length) {\n return { ...definition, ...result };\n }\n return undefined;\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTypesTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getTypesTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAe,MAAM,4BAA4B,CAAC;AAK1F;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,0BAA0B,CA6B9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTypesTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getTypesTransform.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,CAAU,CAAC;AAG1G;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QACxB,IAAI,qBAA8C,CAAC;QAEnD,KAAK,MAAM,OAAO,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAU,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAc,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACX,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjC,qBAAqB,KAAK;oBACxB,GAAG,UAAU;oBACb,eAAe,EAAE,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE;oBAClD,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;iBACvB,CAAC;gBACF,OAAO,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gBACjD,oEAAoE;gBACpE,qBAAqB,CAAC,eAAgB,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,OAAO,qBAAqB,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { PackageDefinitionTransform, PackageJson } from '@ms-cloudpack/common-types';\n\nconst depTypes = ['dependencies', 'peerDependencies', 'devDependencies', 'optionalDependencies'] as const;\ntype DepType = (typeof depTypes)[number];\n\n/**\n * `@types/` dependencies should never be relevant for Cloudpack's purposes, so move them from\n * `dependencies` or `peerDependencies` to `devDependencies` so they're not processed by default.\n */\nexport function getTypesTransform(): PackageDefinitionTransform {\n return ({ definition }) => {\n let transformedDefinition: PackageJson | undefined;\n\n for (const depType of ['dependencies', 'peerDependencies'] as const) {\n const deps = definition[depType];\n if (!deps) {\n continue;\n }\n\n for (const depName of Object.keys(deps) as DepType[]) {\n if (!depName.startsWith('@types/')) {\n continue;\n }\n\n const depVersion = deps[depName];\n transformedDefinition ??= {\n ...definition,\n devDependencies: { ...definition.devDependencies },\n [depType]: { ...deps },\n };\n delete transformedDefinition[depType]?.[depName];\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n transformedDefinition.devDependencies![depName] = depVersion;\n }\n }\n\n return transformedDefinition;\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDependencies.d.ts","sourceRoot":"","sources":["../../src/packageJson/getDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,WAAW,GAAG,uBAAuB,CAOhF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDependencies.js","sourceRoot":"","sources":["../../src/packageJson/getDependencies.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAuB;IACrD,0EAA0E;IAC1E,2DAA2D;IAC3D,OAAO;QACL,GAAG,UAAU,CAAC,YAAY;QAC1B,GAAG,UAAU,CAAC,gBAAgB;KAC/B,CAAC;AACJ,CAAC","sourcesContent":["import type { PackageJson, PackageJsonDependencies } from '@ms-cloudpack/common-types';\n\n/**\n * Get the dependencies that are potentially used at runtime and considered for bundling by cloudpack\n * (currently prod and peer).\n */\nexport function getDependencies(definition: PackageJson): PackageJsonDependencies {\n // This is very simple but needs to be consistent between multiple places,\n // especially in case it needs to be changed somehow later.\n return {\n ...definition.dependencies,\n ...definition.peerDependencies,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUnusedDependencies.d.ts","sourceRoot":"","sources":["../../src/packageJson/getUnusedDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEvF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,WAAW,GAAG,uBAAuB,CAStF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUnusedDependencies.js","sourceRoot":"","sources":["../../src/packageJson/getUnusedDependencies.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAuB;IAC3D,0EAA0E;IAC1E,2DAA2D;IAC3D,OAAO;QACL,GAAG,UAAU,CAAC,eAAe;QAC7B,GAAG,2BAA2B,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAC7D,GAAG,2BAA2B,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAC9D,GAAG,UAAU,CAAC,oBAAoB;KACnC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,2BAA2B,CAClC,YAA4D;IAE5D,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAChH,CAAC","sourcesContent":["import type { PackageJson, PackageJsonDependencies } from '@ms-cloudpack/common-types';\n\n/**\n * Get the extra dependencies that cloudpack doesn't consider for bundling by default:\n * bundle, bundled, and optional deps that might not be used, and dev deps which shouldn't\n * be used at runtime.\n */\nexport function getUnusedDependencies(definition: PackageJson): PackageJsonDependencies {\n // This is very simple but needs to be consistent between multiple places,\n // especially in case it needs to be changed somehow later.\n return {\n ...definition.devDependencies,\n ...normalizeBundleDependencies(definition.bundleDependencies),\n ...normalizeBundleDependencies(definition.bundledDependencies),\n ...definition.optionalDependencies,\n };\n}\n\n/** If the bundle(d) dependencies are an array, normalize them to an object. */\nfunction normalizeBundleDependencies(\n dependencies: PackageJsonDependencies | string[] | undefined,\n): PackageJsonDependencies | undefined {\n return Array.isArray(dependencies) ? Object.fromEntries(dependencies.map((dep) => [dep, '*'])) : dependencies;\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the version of the package `importUrl` is in.
|
|
3
|
+
* @param importUrl - import.meta.url
|
|
4
|
+
*/
|
|
5
|
+
export declare function getVersion(importUrl: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Get the displayable version of the package `importUrl` is in.
|
|
8
|
+
*
|
|
9
|
+
* If it's a local package rather than a node_modules external package, the returned version
|
|
10
|
+
* will be "0.0.0-local" followed by the package path.
|
|
11
|
+
* @param importUrl - import.meta.url
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDisplayVersion(importUrl: string): string;
|
|
14
|
+
//# sourceMappingURL=getVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getVersion.d.ts","sourceRoot":"","sources":["../../src/packageJson/getVersion.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG3D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readJsonSync } from '@ms-cloudpack/json-utilities';
|
|
2
|
+
import { findPackageRoot, isExternalPackage } from '@ms-cloudpack/path-utilities';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
/**
|
|
6
|
+
* Get the version of the package `importUrl` is in.
|
|
7
|
+
* @param importUrl - import.meta.url
|
|
8
|
+
*/
|
|
9
|
+
export function getVersion(importUrl) {
|
|
10
|
+
return getVersionInternal(importUrl).version;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get the displayable version of the package `importUrl` is in.
|
|
14
|
+
*
|
|
15
|
+
* If it's a local package rather than a node_modules external package, the returned version
|
|
16
|
+
* will be "0.0.0-local" followed by the package path.
|
|
17
|
+
* @param importUrl - import.meta.url
|
|
18
|
+
*/
|
|
19
|
+
export function getDisplayVersion(importUrl) {
|
|
20
|
+
const { version, isExternal, packagePath } = getVersionInternal(importUrl);
|
|
21
|
+
return isExternal ? version : `${version} ${packagePath}`;
|
|
22
|
+
}
|
|
23
|
+
function getVersionInternal(importUrl) {
|
|
24
|
+
const packagePath = findPackageRoot(path.dirname(fileURLToPath(importUrl)));
|
|
25
|
+
const result = { version: `0.0.0-local`, packagePath, isExternal: false };
|
|
26
|
+
if (packagePath && isExternalPackage(packagePath)) {
|
|
27
|
+
const packageJSONpath = path.join(packagePath, 'package.json');
|
|
28
|
+
result.version = readJsonSync(packageJSONpath).version || result.version;
|
|
29
|
+
result.isExternal = true;
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=getVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getVersion.js","sourceRoot":"","sources":["../../src/packageJson/getVersion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3E,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAE1E,IAAI,WAAW,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAE/D,MAAM,CAAC,OAAO,GAAI,YAAY,CAAC,eAAe,CAAiB,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;QAC1F,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/common-types';\nimport { readJsonSync } from '@ms-cloudpack/json-utilities';\nimport { findPackageRoot, isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\n/**\n * Get the version of the package `importUrl` is in.\n * @param importUrl - import.meta.url\n */\nexport function getVersion(importUrl: string): string {\n return getVersionInternal(importUrl).version;\n}\n\n/**\n * Get the displayable version of the package `importUrl` is in.\n *\n * If it's a local package rather than a node_modules external package, the returned version\n * will be \"0.0.0-local\" followed by the package path.\n * @param importUrl - import.meta.url\n */\nexport function getDisplayVersion(importUrl: string): string {\n const { version, isExternal, packagePath } = getVersionInternal(importUrl);\n return isExternal ? version : `${version} ${packagePath}`;\n}\n\nfunction getVersionInternal(importUrl: string): { version: string; packagePath?: string; isExternal: boolean } {\n const packagePath = findPackageRoot(path.dirname(fileURLToPath(importUrl)));\n const result = { version: `0.0.0-local`, packagePath, isExternal: false };\n\n if (packagePath && isExternalPackage(packagePath)) {\n const packageJSONpath = path.join(packagePath, 'package.json');\n\n result.version = (readJsonSync(packageJSONpath) as PackageJson).version || result.version;\n result.isExternal = true;\n }\n\n return result;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PackageDefinitionsCache, PackageJson, ResolveMapEntry } from '@ms-cloudpack/common-types';
|
|
2
|
-
import type { PackageMap } from '
|
|
2
|
+
import type { PackageMap } from './types/PackageMap.js';
|
|
3
3
|
/**
|
|
4
4
|
* Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,
|
|
5
5
|
* preferring packageMap dependencies over linkedMap dependencies.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addLinkedEntryDependencies.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/addLinkedEntryDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAExG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE;IACP,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CAC1C,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC;;GA+FF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { satisfies } from 'semver';
|
|
2
|
-
import { getDependencies } from '
|
|
2
|
+
import { getDependencies } from '../../packageJson/getDependencies.js';
|
|
3
3
|
/**
|
|
4
4
|
* Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,
|
|
5
5
|
* preferring packageMap dependencies over linkedMap dependencies.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addLinkedEntryDependencies.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/addLinkedEntryDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageJson, ResolveMapEntry } from '@ms-cloudpack/common-types';\nimport { satisfies } from 'semver';\nimport type { PackageMap } from './types/PackageMap.js';\nimport { getDependencies } from '../../packageJson/getDependencies.js';\n\n/**\n * Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,\n * preferring packageMap dependencies over linkedMap dependencies.\n * Returns a list of duplicated packages that were added to the packageMap.\n */\nexport async function addLinkedEntryDependencies(\n options: {\n appMap: PackageMap;\n linkMap: PackageMap;\n linkedEntry: ResolveMapEntry;\n resolutions?: PackageJson['resolutions'];\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n) {\n const { appMap, linkMap, linkedEntry, resolutions } = options;\n const { packages } = context;\n const visitedEntryPaths = new Set<string>(linkedEntry.path);\n const duplicates: string[] = [];\n const entriesToVisit: ResolveMapEntry[] = [linkedEntry];\n\n function enqueue(newEntry: ResolveMapEntry) {\n if (!visitedEntryPaths.has(newEntry.path)) {\n visitedEntryPaths.add(newEntry.path);\n entriesToVisit.push(newEntry);\n }\n }\n\n while (entriesToVisit.length) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- already checked the length\n const entry = entriesToVisit.pop()!;\n\n const { name, version, dependencies } = entry;\n\n const linkDefinition = await packages.tryGet(entry.path);\n if (!linkDefinition) {\n continue;\n }\n\n const versionRequirements = getDependencies(linkDefinition);\n\n // Iterate through the dependencies of the linked package.\n for (const [dependencyName, linkedDependencyVersion] of Object.entries(dependencies)) {\n const versionRequirement = versionRequirements[dependencyName];\n if (!versionRequirement) {\n continue;\n }\n\n const appVersions = appMap[dependencyName];\n\n if (!appVersions) {\n // The app does not have any version of this dependency, so we need to bring over the version\n // used by the linkedEntry.\n const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];\n if (dependencyEntry) {\n appMap[dependencyName] = { [linkedDependencyVersion]: dependencyEntry };\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n\n // Recurse through the dependency's dependencies.\n enqueue(dependencyEntry);\n }\n } else {\n // We have one or more versions of this dependency already. If a sufficient version\n // of the dependency is already in the appMap, we we just need to update the linkedEntry's\n // dependency and the dependency's requiredBy record for the parent.\n const appDependencyVersions = Object.values(appVersions);\n\n if (appDependencyVersions.length === 1 && !appDependencyVersions[0]?.isExternal) {\n continue;\n }\n\n // See if an existing version of the dependency satisfies the semver.\n const appDependencyEntry = appDependencyVersions.find(\n (e) =>\n // If the dependency is linked, use that.\n e.isLinked ||\n // If the dependency version is required as a resolution, use that.\n resolutions?.[dependencyName] ||\n // If the dependency satisfies the semver, use that.\n satisfies(e.version, versionRequirement),\n );\n\n if (appDependencyEntry) {\n // If the dependency satisfies the semver, use that!\n entry.dependencies[dependencyName] = appDependencyEntry.version;\n appDependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n enqueue(appDependencyEntry);\n } else {\n // We have at least one version of this dependency but nothing satisfies the requirement.\n // We need to introduce a duplicate. During the final pass, we will remove non-required deps.\n const dependencyEntry = Object.values(linkMap[dependencyName] || {}).find((e) =>\n satisfies(e.version, versionRequirement),\n );\n if (dependencyEntry) {\n appVersions[dependencyEntry.version] = dependencyEntry;\n entry.dependencies[dependencyName] = linkedDependencyVersion;\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n duplicates.push(`${dependencyName}@${dependencyEntry.version}`);\n // Recursive through the dependency's dependencies.\n enqueue(dependencyEntry);\n }\n }\n }\n }\n }\n\n return { duplicates };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ResolveMap } from '@ms-cloudpack/common-types';
|
|
2
|
-
import type { PackageMap } from '
|
|
2
|
+
import type { PackageMap } from './types/PackageMap.js';
|
|
3
3
|
/**
|
|
4
4
|
* Given a PackageMap and all root paths (appPath and linked paths), returns a ResolveMap.
|
|
5
5
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToResolveMap.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/convertToResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,UAAU,CAuBpG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToResolveMap.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/convertToResolveMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAoD;IACtF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,6EAA6E;QAC7E,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;aACvD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;aAC7E,IAAI,CAAC,WAAW,CAAC,CAAC;QAErB,wFAAwF;QACxF,2EAA2E;QAC3E,IAAI,oBAAoB,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YAElE,wDAAwD;YACxD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { ResolveMap } from '@ms-cloudpack/common-types';\nimport type { PackageMap } from './types/PackageMap.js';\nimport { entrySorter } from './entrySorter.js';\n\n/**\n * Given a PackageMap and all root paths (appPath and linked paths), returns a ResolveMap.\n */\nexport function convertToResolveMap(options: { appMap: PackageMap; rootPaths: string[] }): ResolveMap {\n const { rootPaths, appMap } = options;\n const resolveMap: ResolveMap = {};\n\n for (const [packageName, packageEntries] of Object.entries(appMap)) {\n // Filter to root packages and packages which are required by other packages.\n const sortedPackageEntries = Object.values(packageEntries)\n .filter((e) => rootPaths.includes(e.path) || Object.keys(e.requiredBy).length)\n .sort(entrySorter);\n\n // Get the sorted package entries based on the most to least requiredBy references. This\n // ends up reducing the size of the resolve map by minimizing scoped cases.\n if (sortedPackageEntries.length) {\n const entry = (resolveMap[packageName] = sortedPackageEntries[0]);\n\n // Update scoped versions (version to resolve map entry)\n if (sortedPackageEntries.length > 1) {\n entry.scopedVersions = Object.fromEntries(sortedPackageEntries.slice(1).map((e) => [e.version, e]));\n }\n }\n }\n\n return resolveMap;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PackageMap } from '
|
|
1
|
+
import type { PackageMap } from './types/PackageMap.js';
|
|
2
2
|
import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';
|
|
3
3
|
/**
|
|
4
4
|
* Deduplicates linked packages by removing all but the highest version,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedupeLinkedPackages.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/dedupeLinkedPackages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,uBAAuB,EAAgC,MAAM,4BAA4B,CAAC;AAKxG;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACnG,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,iBAoH/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedupeLinkedPackages.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/dedupeLinkedPackages.ts"],"names":[],"mappings":"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","sourcesContent":["import { satisfies, rcompare as semverReverseCompare } from 'semver';\nimport type { PackageMap } from './types/PackageMap.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\nimport { detachEntry } from './detachEntry.js';\nimport type { PackageDefinitionsCache, ResolveMapEntry, LinkOptions } from '@ms-cloudpack/common-types';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\n\ntype DuplicatedDependencyBehavior = NonNullable<LinkOptions['duplicatedDependencyBehavior']>;\n\n/**\n * Deduplicates linked packages by removing all but the highest version,\n * that satisfies the semver requirements of all the requiredBy entries.\n */\nexport async function dedupeLinkedPackages(\n options: { appMap: PackageMap; allDuplicates: Set<string>; remotePath?: string; rootPath?: string },\n context: { packages: PackageDefinitionsCache },\n) {\n const { rootPath, appMap, allDuplicates, remotePath } = options;\n const { packages } = context;\n console.debug(`The following packages were duplicated by linking:\\n ${Array.from(allDuplicates).join(', ')}`);\n for (const duplicate of allDuplicates) {\n const packageName = parseRequiredBy(duplicate).name;\n\n const entries = appMap[packageName] || {};\n\n // Sanity check to ensure that it is a duplicate.\n if (Object.keys(entries).length <= 1) {\n continue;\n }\n\n let dedupeStrategy: DuplicatedDependencyBehavior = 'allow-duplication';\n for (const entry of Object.values(entries)) {\n const packageJson = await packages.get(entry.path);\n if (packageJson.cloudpack?.link?.duplicatedDependencyBehavior) {\n dedupeStrategy = packageJson.cloudpack.link.duplicatedDependencyBehavior;\n }\n }\n\n const availableVersions = Object.keys(entries);\n\n const versionRequirements = new Set<string>();\n // Find if any of the duplicate entries satisfy the semver requirement of all the requiredBy entries.\n const requiredBy: ResolveMapEntry['requiredBy'] = {};\n for (const entry of Object.values(entries)) {\n for (const [requiredById, range] of Object.entries(entry.requiredBy) as [`${string}@${string}`, string][]) {\n requiredBy[requiredById] = range;\n // We only care about satisfying version requirements that are already satisfied.\n if (satisfies(entry.version, range)) {\n versionRequirements.add(range);\n }\n }\n }\n\n // Find the versions that satisfy the semver requirements of all the requiredBy entries.\n // Sort the versions in descending order.\n const satisfiedVersions = availableVersions\n .filter((v) => [...versionRequirements].every((range) => satisfies(v, range)))\n .sort(semverReverseCompare);\n\n let satisfiedVersion: string | undefined;\n\n if (dedupeStrategy === 'force-host-version') {\n if (!rootPath) {\n console.error(\n 'Root path for project not found and is required when using the \"force-host-version\" dedupe strategy.',\n );\n continue;\n }\n // Use the app host's version of the package.\n // Find the version of the package that belongs to the host.\n // We assume that the host has a single version of the package.\n const hostVersion = availableVersions.find((v) => slash(entries[v].path).startsWith(slash(rootPath)));\n\n if (!hostVersion) {\n console.error(`Could not find a version of \"${packageName}\" that is belongs to the host.`);\n continue;\n }\n\n satisfiedVersion = hostVersion;\n } else if (dedupeStrategy === 'force-remote-version') {\n if (!remotePath) {\n console.error(\n 'Root path for project not found and is required when using the \"force-remote-version\" dedupe strategy.',\n );\n continue;\n }\n\n // Use the version of the package that is the remote.\n // Find the version of the package that does not belong to the host.\n // We assume that the remote has a single version of the package.\n const remoteVersion = availableVersions.find((v) => slash(entries[v].path).startsWith(slash(remotePath)));\n\n if (!remoteVersion) {\n console.error(`Could not find a version of \"${packageName}\" that is belongs to the remote.`);\n continue;\n }\n\n satisfiedVersion = remoteVersion;\n } else if (dedupeStrategy === 'allow-duplication' && satisfiedVersions.length > 0) {\n // Select the highest version that satisfies the semver requirements of all the requiredBy entries.\n satisfiedVersion = satisfiedVersions[0];\n console.debug(\n `Version \"${satisfiedVersion}\" of \"${packageName}\" satisfies the semver requirements of all the requiredBy entries.`,\n );\n } else {\n // If the deduplication strategy allows duplicates and\n // no version satisfies the semver requirements for all dependents,\n // then deduplication of this package is not possible.\n console.debug(\n `Could not find a version of \"${packageName}\" that satisfies the semver requirements of all the requiredBy entries.`,\n );\n continue;\n }\n\n entries[satisfiedVersion].requiredBy = requiredBy;\n\n for (const version of availableVersions) {\n if (version == satisfiedVersion) {\n continue;\n }\n detachEntry({ appMap, entry: entries[version] });\n delete appMap[packageName][version];\n }\n\n for (const requiredById of Object.keys(requiredBy)) {\n const { name: requiredByName, version: requiredByVersion } = parseRequiredBy(requiredById);\n appMap[requiredByName][requiredByVersion].dependencies[packageName] = satisfiedVersion;\n }\n\n console.debug(`Removed versions of \"${packageName}\" except for \"${satisfiedVersion}\".`);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detachEntry.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/detachEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,QAmClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detachEntry.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/detachEntry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAuD;IACjF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,oBAAoB,GAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEhE,OAAO,oBAAoB,CAAC,MAAM,EAAE,CAAC;QACnC,8FAA8F;QAC9F,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,EAAG,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAE5C,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,SAAS;QACX,CAAC;QAED,uCAAuC;QACvC,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;YACrF,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;YAExD,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,KAAK,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACrF,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAEpE,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;gBACxD,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzD,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type { ResolveMapEntry } from '@ms-cloudpack/common-types';\nimport type { PackageMap } from './types/PackageMap.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\n\n/**\n * Removes requiredBy references for an entry being removed.\n */\nexport function detachEntry(options: { appMap: PackageMap; entry: ResolveMapEntry }) {\n const { appMap } = options;\n const dependenciesToDetach: ResolveMapEntry[] = [options.entry];\n\n while (dependenciesToDetach.length) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- already checked length\n const entry = dependenciesToDetach.pop()!;\n const { name, version, requiredBy } = entry;\n\n if (entry.isLinked || !appMap[name]?.[version]) {\n continue;\n }\n\n // Disconnect the entry from consumers.\n for (const requiredByName of Object.keys(requiredBy)) {\n const { name: parentName, version: parentVersion } = parseRequiredBy(requiredByName);\n const parentEntry = appMap[parentName]?.[parentVersion];\n\n if (parentEntry) {\n delete parentEntry.dependencies[name];\n }\n }\n\n // Disconnect dependencies from the entry.\n for (const [dependencyName, dependencyVersion] of Object.entries(entry.dependencies)) {\n const dependencyEntry = appMap[dependencyName]?.[dependencyVersion];\n\n if (dependencyEntry) {\n delete dependencyEntry.requiredBy[`${name}@${version}`];\n if (Object.keys(dependencyEntry.requiredBy).length === 0) {\n dependenciesToDetach.push(dependencyEntry);\n }\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrySorter.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/entrySorter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE;;GAEG;AAEH,wBAAgB,WAAW,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,UAajE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrySorter.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/entrySorter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,CAAkB,EAAE,CAAkB;IAChE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAErD,IAAI,WAAW,GAAG,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,WAAW,GAAG,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import type { ResolveMapEntry } from '@ms-cloudpack/common-types';\nimport { gt } from 'semver';\n\n/**\n * Returns the array of entries, sorted by most required.\n */\n\nexport function entrySorter(a: ResolveMapEntry, b: ResolveMapEntry) {\n const aRequiredBy = Object.keys(a.requiredBy).length;\n const bRequiredBy = Object.keys(b.requiredBy).length;\n\n if (aRequiredBy > bRequiredBy) {\n return -1;\n }\n\n if (aRequiredBy < bRequiredBy) {\n return 1;\n }\n\n return gt(a.version, b.version) ? -1 : 1;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';
|
|
2
|
-
import type { PackageMap } from '
|
|
2
|
+
import type { PackageMap } from './types/PackageMap.js';
|
|
3
3
|
/**
|
|
4
4
|
* Find all packages from a given path. We do this by walking the dependency tree
|
|
5
5
|
* of the app to build a map of all packages and their dependencies.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findPackagesFromPath.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/findPackagesFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAIxB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IACP;;OAEG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,EACD,OAAO,EAAE;IACP;;OAEG;IACH,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC,UAAU,CAAC,CAqDrB"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { isFolder } from '@ms-cloudpack/path-utilities';
|
|
1
|
+
import { findProjectRoot, isExternalPackage, isFolder } from '@ms-cloudpack/path-utilities';
|
|
2
|
+
import { bulletedList } from '@ms-cloudpack/task-reporter';
|
|
2
3
|
import glob from 'fast-glob';
|
|
3
4
|
import path from 'path';
|
|
4
|
-
import { findPackage } from '
|
|
5
|
-
import {
|
|
6
|
-
import { getDependencies } from '../getDependencies.js';
|
|
7
|
-
import { findProjectRoot } from '../findProjectRoot.js';
|
|
8
|
-
import { bulletedList } from '@ms-cloudpack/task-reporter';
|
|
5
|
+
import { findPackage } from '../../findFileInPackage/findPackage.js';
|
|
6
|
+
import { getDependencies } from '../../packageJson/getDependencies.js';
|
|
9
7
|
/**
|
|
10
8
|
* Find all packages from a given path. We do this by walking the dependency tree
|
|
11
9
|
* of the app to build a map of all packages and their dependencies.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findPackagesFromPath.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/findPackagesFromPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n PackageDefinitionsCache,\n PackageImporterContext,\n PackageJson,\n ResolveMapEntry,\n} from '@ms-cloudpack/common-types';\nimport { findProjectRoot, isExternalPackage, isFolder } from '@ms-cloudpack/path-utilities';\nimport { bulletedList } from '@ms-cloudpack/task-reporter';\nimport glob from 'fast-glob';\nimport path from 'path';\nimport { findPackage } from '../../findFileInPackage/findPackage.js';\nimport { getDependencies } from '../../packageJson/getDependencies.js';\nimport type { PackageMap } from './types/PackageMap.js';\n\ntype PackagePathInfo = { packagePath: string; importerContext?: PackageImporterContext };\n\n/**\n * Find all packages from a given path. We do this by walking the dependency tree\n * of the app to build a map of all packages and their dependencies.\n */\nexport async function findPackagesFromPath(\n options: {\n /**\n * Paths to search for package.json files and traverse their dependencies to build a PackageMap.\n */\n searchPaths: string[];\n\n /**\n * Where to stop looking for packages (mainly used for testing).\n * If not specified, will look for the project/git root of the first path in the paths array.\n */\n rootPath?: string;\n\n /**\n * If true will glob for all package.json files in the path and add them to the map.\n */\n discoverPackages?: boolean;\n },\n context: {\n /**\n * Package cache.\n */\n packages: PackageDefinitionsCache;\n },\n): Promise<PackageMap> {\n const { searchPaths, discoverPackages } = options;\n const packageMap: PackageMap = {};\n const visitedPaths = new Set<string>();\n const realPathCache: Record<string, string | undefined> = {};\n\n for (const searchPath of searchPaths) {\n if (!(await isFolder(searchPath))) {\n throw new Error(`Path ${searchPath} is not a folder.\\n\\nMake sure the path exists and try again.`);\n }\n\n const rootPath = options.rootPath || findProjectRoot(searchPath, { noPackageRoot: true });\n\n let pathsToVisit: PackagePathInfo[];\n\n if (discoverPackages) {\n const packagePaths = await glob('**/package.json', { cwd: searchPath, ignore: ['**/node_modules/**'] });\n\n pathsToVisit = packagePaths.map((p) => ({ packagePath: path.dirname(path.join(searchPath, p)) }));\n } else {\n pathsToVisit = [{ packagePath: searchPath }];\n }\n\n while (pathsToVisit.length) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- already checked length\n const { packagePath, importerContext } = pathsToVisit.shift()!;\n\n // There's a very slight possibility (not yet observed even in large repos) that both semver\n // and non-semver dependencies could resolve to the same package name and version and therefore\n // be installed at the same path. (If the non-semver dependency was encountered first, the\n // version and possibly name in the package definition would have been transformed to match by\n // getNonSemverTransform.) It would be possible to detect this case if needed, but for now we're\n // not going to bother because it's so rare/theoretical and the effect in practice will probably\n // be the same as a dependency that's forced with `resolutions` to a version violating semver.\n if (!visitedPaths.has(packagePath)) {\n visitedPaths.add(packagePath);\n\n const dependencyPaths = await visitPackage(\n { packagePath, packageMap, rootPath, importerContext, realPathCache },\n context,\n );\n\n for (const dependencyPath of dependencyPaths) {\n // Let's avoid pushing tons of things into the work queue that we'll be skipping later.\n if (!visitedPaths.has(dependencyPath.packagePath)) {\n pathsToVisit.push(dependencyPath);\n }\n }\n }\n }\n }\n\n return packageMap;\n}\n\n/**\n * Visit a package path, and add entries for the package and its dependencies to `packageMap`.\n * Returns a list of additional dependency paths to visit.\n */\nasync function visitPackage(\n options: PackagePathInfo & {\n packageMap: PackageMap;\n rootPath: string | undefined;\n realPathCache?: Record<string, string | undefined>;\n },\n context: Parameters<typeof findPackagesFromPath>[1],\n) {\n const { packagePath, packageMap, rootPath, importerContext, realPathCache } = options;\n const { packages } = context;\n\n const packageDefinition = await packages.get(packagePath, { importerContext });\n\n const { name, version } = packageDefinition;\n const entry = ensurePackageEntry({\n packageName: importerContext?.importedName || name,\n packagePath: packagePath,\n packageMap,\n definition: packageDefinition,\n });\n\n // Add all dependencies to the list of paths to visit.\n const dependencies = getDependencies(packageDefinition) as Record<string, string>;\n\n const dependencyPaths: PackagePathInfo[] = [];\n\n for (const [dependencyName, versionRequirement] of Object.entries(dependencies)) {\n const depImporterContext: PackageImporterContext = {\n parentName: name,\n parentVersion: version,\n importedName: dependencyName,\n versionRequirement,\n };\n\n const dependencyPackage = await findPackage(\n { dependencyName, startPath: packagePath, rootPath, importerContext: depImporterContext, realPathCache },\n context,\n );\n if (!dependencyPackage) {\n if (packageDefinition.peerDependencies?.[dependencyName]) {\n // Ignore missing peer dependencies\n continue;\n }\n\n throw new Error(\n [\n `A dependency could not be found:`,\n bulletedList([\n `Dependency: ${dependencyName} (Required: ${versionRequirement})`,\n `Required by: ${packagePath}`,\n ]),\n ``,\n `Make sure the dependency is installed and try again.`,\n ].join('\\n'),\n );\n }\n\n const { packagePath: dependencyPath, definition: dependencyDefinition } = dependencyPackage;\n\n if (!(dependencyDefinition.name && dependencyDefinition.version)) {\n throw new Error(`\"${dependencyPath}/package.json\" is missing a name or version.`);\n }\n\n const dependencyEntry = ensurePackageEntry({\n packagePath: dependencyPath,\n packageName: dependencyName,\n packageMap,\n definition: dependencyDefinition,\n });\n\n entry.dependencies[dependencyName] = dependencyDefinition.version;\n dependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n dependencyPaths.push({\n packagePath: dependencyPath,\n importerContext: depImporterContext,\n });\n }\n\n return dependencyPaths;\n}\n\n/**\n * If `packageMap` doesn't already have an entry for this package name and version, create one\n * and add it to `packageMap`. Returns the entry.\n */\nfunction ensurePackageEntry(options: {\n packagePath: string;\n packageName: string;\n packageMap: PackageMap;\n definition: PackageJson;\n}): ResolveMapEntry {\n const { packagePath = '', packageName: name, packageMap, definition } = options;\n const { version } = definition;\n\n packageMap[name] ??= {};\n\n let entry = packageMap[name][version];\n if (!entry) {\n entry = packageMap[name][version] = {\n name,\n version,\n path: packagePath,\n dependencies: {},\n requiredBy: {},\n };\n\n if (isExternalPackage(packagePath)) {\n entry.isExternal = true;\n }\n }\n\n return entry;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PackageMap } from '
|
|
1
|
+
import type { PackageMap } from './types/PackageMap.js';
|
|
2
2
|
import type { LinkedPath, PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/common-types';
|
|
3
3
|
/**
|
|
4
4
|
* Given a linked path, an appMap, find packages from the linked path and add them to the appMap.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkPath.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/linkPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,OAAO,KAAK,EAAE,UAAU,EAAmB,uBAAuB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGpH;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,WAAW,CAAC;CAC9B,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,iBAyGF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkPath.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/linkPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageMap } from './types/PackageMap.js';\nimport { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';\nimport { detachEntry } from './detachEntry.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport type { LinkedPath, ResolveMapEntry, PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/common-types';\nimport { dedupeLinkedPackages } from './dedupeLinkedPackages.js';\n\n/**\n * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.\n */\nexport async function linkPath(\n options: {\n linkedPath: LinkedPath;\n appMap: PackageMap;\n rootPath?: string;\n repoDefinition?: PackageJson;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n) {\n const { linkedPath, appMap, rootPath, repoDefinition } = options;\n const linkMap = await findPackagesFromPath(\n {\n searchPaths: [linkedPath.path],\n discoverPackages: true,\n },\n context,\n );\n const entriesToLink: ResolveMapEntry[] = [];\n const { path, ignoredPackages = [], includeAll } = linkedPath;\n const resolutions = linkedPath.ignoreResolutions ? undefined : repoDefinition?.resolutions;\n\n // Iterate through the linkMap, looking for internal packages to link to the appMap.\n for (const [packageName, packageVersions] of Object.entries(linkMap)) {\n const appEntries = Object.values(appMap[packageName] || {});\n\n if (!appEntries.length) {\n continue;\n }\n\n const linkedEntries = Object.values(packageVersions);\n const linkedEntry = linkedEntries.length === 1 ? linkedEntries[0] : undefined;\n\n // For linked dependencies, we don't want multiple versions referenced. Remove them\n // all and add them in a second pass.\n if (\n linkedEntry &&\n !linkedEntry.isExternal &&\n ignoredPackages.indexOf(packageName) === -1 &&\n (includeAll || isContainedInPath(linkedEntry.path, path))\n ) {\n // Linked packages use an asterisk for the version description. This keeps it semver compatible with\n // anything.\n linkedEntry.version += '-linked';\n linkedEntry.isLinked = true;\n\n entriesToLink.push(linkedEntry);\n }\n }\n\n // We now have a list of paths to link. Iterate through them, add them to the appMap,\n // and ensure their dependencies are satisfied.\n for (const linkedEntry of entriesToLink) {\n const { name } = linkedEntry;\n const existingEntries = Object.values(appMap[name]);\n\n linkedEntry.requiredBy = {};\n for (const entry of existingEntries) {\n for (const [requiredById, requirement] of Object.entries(entry.requiredBy)) {\n const requiredByName = parseRequiredBy(requiredById).name;\n const linkedParentEntry = Object.values(linkMap[requiredByName] || {})[0];\n const requiredByKey = linkedParentEntry?.isLinked\n ? (`${linkedParentEntry.name}@${linkedParentEntry.version}` as const)\n : requiredById;\n linkedEntry.requiredBy[requiredByKey as `${string}@${string}`] = requirement;\n }\n }\n }\n\n for (const linkedEntry of entriesToLink) {\n const { name } = linkedEntry;\n const existingEntries = Object.values(appMap[name]);\n\n // We need to detach all existing entries from the appMap, along with their dependencies. Note - detaching just means that\n // we disconnect the entry from its parent and children. If the children have no other parents, we disconnect them as well\n // and recurse through their children.\n for (const existingEntry of existingEntries) {\n detachEntry({ appMap, entry: existingEntry });\n }\n\n // Attach the linked entry to the parents' dependencies.\n for (const requiredById of Object.keys(linkedEntry.requiredBy)) {\n const { name: requiredByName, version: requiredByVersion } = parseRequiredBy(requiredById);\n let requiredByEntry = appMap[requiredByName][requiredByVersion];\n\n // If we can't find the requiredBy entry, it likely means that the entry was already replaced with a linked entry\n // in the app map. Fall back to the first entry.\n requiredByEntry ??= Object.values(appMap[requiredByName])[0];\n\n requiredByEntry.dependencies[name] = linkedEntry.version;\n }\n\n // Add the linked entry\n appMap[linkedEntry.name] = { [linkedEntry.version]: linkedEntry };\n }\n\n const allDuplicates = [];\n\n // Once all linked entries have been added, ensure their dependencies are resolved.\n for (const linkedEntry of entriesToLink) {\n const { duplicates } = await addLinkedEntryDependencies(\n { linkedEntry, appMap: appMap, linkMap, resolutions },\n context,\n );\n allDuplicates.push(...duplicates);\n }\n\n if (linkedPath.resolveStrategy !== 'duplicate') {\n await dedupeLinkedPackages(\n { appMap, allDuplicates: new Set(allDuplicates), rootPath, remotePath: linkedPath.path },\n context,\n );\n }\n}\n\nfunction isContainedInPath(path: string, basePath: string) {\n path = normalizePath(path);\n basePath = normalizePath(basePath);\n\n return path.startsWith(basePath);\n}\n\nfunction normalizePath(path: string) {\n let normalizedPath = slash(path);\n\n if (!normalizedPath.endsWith('/')) {\n normalizedPath += '/';\n }\n\n return normalizedPath;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseRequiredBy.d.ts","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/parseRequiredBy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMrF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseRequiredBy.js","sourceRoot":"","sources":["../../../src/resolveMap/createHelpers/parseRequiredBy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAElD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC","sourcesContent":["/**\n * Given a requiredBy string (e.g. \"@fluentui/react@8.8.8\"), return the package name and version.\n */\nexport function parseRequiredBy(requiredBy: string): { name: string; version: string } {\n const divideIndex = requiredBy.lastIndexOf('@');\n const name = requiredBy.slice(0, divideIndex);\n const version = requiredBy.slice(divideIndex + 1);\n\n return { name, version };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageMap.d.ts","sourceRoot":"","sources":["../../../../src/resolveMap/createHelpers/types/PackageMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;KACpC,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageMap.js","sourceRoot":"","sources":["../../../../src/resolveMap/createHelpers/types/PackageMap.ts"],"names":[],"mappings":"","sourcesContent":["import type { ResolveMapEntry } from '@ms-cloudpack/common-types';\n\n/**\n * Intermediate type used internally by `createResolveMap` helpers.\n * Contains info about every discovered version of each package.\n */\nexport type PackageMap = {\n [name: string]: {\n [version: string]: ResolveMapEntry;\n };\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LinkedPath, PackageDefinitionsCache, ResolveMap } from '@ms-cloudpack/common-types';
|
|
2
2
|
/**
|
|
3
3
|
* Create a resolve map for a given `appPath`.
|
|
4
4
|
* 1. Walk the dependency tree to build a map of all packages and their dependencies.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createResolveMap.d.ts","sourceRoot":"","sources":["../../src/resolveMap/createResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAMlG;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IACP,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAEhB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,sCAAsC;IACtC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC,UAAU,CAAC,CAuBrB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { findProjectRoot } from '
|
|
2
|
-
import { convertToResolveMap } from './convertToResolveMap.js';
|
|
3
|
-
import { findPackagesFromPath } from './findPackagesFromPath.js';
|
|
4
|
-
import { linkPath } from './linkPath.js';
|
|
1
|
+
import { findProjectRoot } from '@ms-cloudpack/path-utilities';
|
|
2
|
+
import { convertToResolveMap } from './createHelpers/convertToResolveMap.js';
|
|
3
|
+
import { findPackagesFromPath } from './createHelpers/findPackagesFromPath.js';
|
|
4
|
+
import { linkPath } from './createHelpers/linkPath.js';
|
|
5
5
|
/**
|
|
6
6
|
* Create a resolve map for a given `appPath`.
|
|
7
7
|
* 1. Walk the dependency tree to build a map of all packages and their dependencies.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../../src/resolveMap/createResolveMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAeC,EACD,OAEC;IAED,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvF,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtF,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;QACE,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC;QAC1C,QAAQ;KACT,EACD,OAAO,CACR,CAAC;IAEF,4EAA4E;IAC5E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,0CAA0C;IAC1C,OAAO,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC","sourcesContent":["import type { LinkedPath, PackageDefinitionsCache, ResolveMap } from '@ms-cloudpack/common-types';\nimport { findProjectRoot } from '@ms-cloudpack/path-utilities';\nimport { convertToResolveMap } from './createHelpers/convertToResolveMap.js';\nimport { findPackagesFromPath } from './createHelpers/findPackagesFromPath.js';\nimport { linkPath } from './createHelpers/linkPath.js';\n\n/**\n * Create a resolve map for a given `appPath`.\n * 1. Walk the dependency tree to build a map of all packages and their dependencies.\n * 2. If `linkedPaths` are provided, for each one:\n * 1. Walk its dependency tree to build a map as above.\n * 2. Redirect any existing dependencies to the linked package.\n * 3. Ensure that any transitive dependencies of the linked package which aren't already\n * satisfied in the resolve map are added as scoped versions.\n * 3. For each dependency, sort the versions by the number of packages that depend on that version.\n * The most popular version will be considered the \"default\", to reduce the size of scoped versions.\n */\nexport async function createResolveMap(\n options: {\n /** Path to the app whose dependencies we want to resolve. */\n appPath: string;\n\n /** Any additional packages whose dependencies we want to resolve. */\n additionalPaths?: string[];\n\n /** See `createResolveMap` comment. */\n linkedPaths?: LinkedPath[];\n\n /**\n * Where to stop looking for packages (mainly used for testing).\n * If not specified, will look for the project/git root of the `appPath`.\n */\n rootPath?: string;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n): Promise<ResolveMap> {\n const { appPath, additionalPaths = [], linkedPaths = [] } = options;\n\n const rootPath = options.rootPath || findProjectRoot(appPath, { noPackageRoot: true });\n\n const repoDefinition = rootPath ? await context.packages.tryGet(rootPath) : undefined;\n\n // First we discover the dependencies for the app.\n const appMap = await findPackagesFromPath(\n {\n searchPaths: [appPath, ...additionalPaths],\n rootPath,\n },\n context,\n );\n\n // Next, we iterate through linked paths to inject them into the packageMap.\n for (const linkedPath of linkedPaths) {\n await linkPath({ rootPath, linkedPath, appMap, repoDefinition }, context);\n }\n\n // Finally we condense into a resolve map.\n return convertToResolveMap({ appMap, rootPaths: [appPath, ...additionalPaths] });\n}\n"]}
|