@ms-cloudpack/package-utilities 13.3.6 → 13.7.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/exportsMap/addExportsMapEntry.d.ts +5 -12
- package/lib/exportsMap/addExportsMapEntry.d.ts.map +1 -1
- package/lib/exportsMap/addExportsMapEntry.js +8 -3
- package/lib/exportsMap/addExportsMapEntry.js.map +1 -1
- package/lib/exportsMap/createExportsMap.d.ts +10 -7
- package/lib/exportsMap/createExportsMap.d.ts.map +1 -1
- package/lib/exportsMap/createExportsMap.js.map +1 -1
- package/lib/exportsMap/getExportsMap.d.ts +8 -11
- package/lib/exportsMap/getExportsMap.d.ts.map +1 -1
- package/lib/exportsMap/getExportsMap.js +2 -2
- package/lib/exportsMap/getExportsMap.js.map +1 -1
- package/lib/findFileInPackage/findFileInPackage.d.ts +27 -12
- package/lib/findFileInPackage/findFileInPackage.d.ts.map +1 -1
- package/lib/findFileInPackage/findFileInPackage.js +20 -14
- package/lib/findFileInPackage/findFileInPackage.js.map +1 -1
- package/lib/packageDefinitions/PackageDefinitions.d.ts.map +1 -1
- package/lib/packageDefinitions/PackageDefinitions.js +11 -4
- package/lib/packageDefinitions/PackageDefinitions.js.map +1 -1
- package/lib/packageDefinitions/depTypes.d.ts +6 -0
- package/lib/packageDefinitions/depTypes.d.ts.map +1 -0
- package/lib/packageDefinitions/depTypes.js +6 -0
- package/lib/packageDefinitions/depTypes.js.map +1 -0
- package/lib/packageDefinitions/getCatalogTransform.d.ts +11 -0
- package/lib/packageDefinitions/getCatalogTransform.d.ts.map +1 -0
- package/lib/packageDefinitions/getCatalogTransform.js +46 -0
- package/lib/packageDefinitions/getCatalogTransform.js.map +1 -0
- package/lib/packageDefinitions/getNonSemverTransform.d.ts.map +1 -1
- package/lib/packageDefinitions/getNonSemverTransform.js +1 -1
- package/lib/packageDefinitions/getNonSemverTransform.js.map +1 -1
- package/lib/packageDefinitions/getTypesTransform.d.ts.map +1 -1
- package/lib/packageDefinitions/getTypesTransform.js +2 -1
- package/lib/packageDefinitions/getTypesTransform.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
import type { CloudpackConfig, PackageDefinitionsCache, GeneratedExports } from '@ms-cloudpack/common-types';
|
|
2
|
-
import { type FindFileInPackageResult } from '../findFileInPackage/findFileInPackage.js';
|
|
2
|
+
import { type FindFileInPackageOptions, type FindFileInPackageResult } from '../findFileInPackage/findFileInPackage.js';
|
|
3
3
|
/**
|
|
4
4
|
* Options for `addExportsMapEntry`.
|
|
5
5
|
*/
|
|
6
|
-
export interface AddExportsMapEntryOptions {
|
|
6
|
+
export interface AddExportsMapEntryOptions extends Pick<FindFileInPackageOptions, 'packagePath' | 'resolveWebExtensions'> {
|
|
7
7
|
/**
|
|
8
8
|
* The generated exports map to add the entry to.
|
|
9
9
|
*/
|
|
10
10
|
exports: GeneratedExports;
|
|
11
|
-
/**
|
|
12
|
-
* The package path to add the entry for. This is used to resolve relative paths.
|
|
13
|
-
*/
|
|
14
|
-
packagePath: string;
|
|
15
11
|
/**
|
|
16
12
|
* The import path to add the entry for. This is used as the key in the exports map.
|
|
17
13
|
* Defaults to `'.'` (the package import).
|
|
18
14
|
*/
|
|
19
15
|
importPath?: string;
|
|
20
16
|
/**
|
|
21
|
-
* The relative path to the physical file location,
|
|
17
|
+
* The relative path to the physical file location, used to derive the exports map value.
|
|
22
18
|
* Can be a partial location, in which case we'll search for the file and associated source/d.ts files.
|
|
23
19
|
* Defaults to `importPath` if provided, or `'index.js'`.
|
|
24
20
|
*/
|
|
@@ -35,10 +31,6 @@ export interface AddExportsMapEntryOptions {
|
|
|
35
31
|
* - `node` is used for server rendering.
|
|
36
32
|
*/
|
|
37
33
|
environmentCondition?: 'browser' | 'node';
|
|
38
|
-
/**
|
|
39
|
-
* Whether to resolve web extensions (e.g. `.web.js`).
|
|
40
|
-
*/
|
|
41
|
-
resolveWebExtensions: boolean;
|
|
42
34
|
}
|
|
43
35
|
/**
|
|
44
36
|
* Add an import path to an exports map. This is intended for use with generated exports maps,
|
|
@@ -50,7 +42,8 @@ export interface AddExportsMapEntryOptions {
|
|
|
50
42
|
*/
|
|
51
43
|
export declare function addExportsMapEntry(options: AddExportsMapEntryOptions, context: {
|
|
52
44
|
packages: PackageDefinitionsCache;
|
|
53
|
-
|
|
45
|
+
/** @deprecated Pass `resolveWebExtensions` option directly */
|
|
46
|
+
config?: Pick<CloudpackConfig, 'features'>;
|
|
54
47
|
}): Promise<boolean>;
|
|
55
48
|
/**
|
|
56
49
|
* Internal logic of adding an entry to an exports map.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addExportsMapEntry.d.ts","sourceRoot":"","sources":["../../src/exportsMap/addExportsMapEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE7G,OAAO,
|
|
1
|
+
{"version":3,"file":"addExportsMapEntry.d.ts","sourceRoot":"","sources":["../../src/exportsMap/addExportsMapEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE7G,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC7B,MAAM,2CAA2C,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CACrD,wBAAwB,EACxB,aAAa,GAAG,sBAAsB,CACvC;IACC;;OAEG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAEpD;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;CAC5C,GACA,OAAO,CAAC,OAAO,CAAC,CAwBlB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,aAAa,GAAG,UAAU,CAAC,EACpE,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAgDT"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';
|
|
2
|
-
import { findFileInPackage } from '../findFileInPackage/findFileInPackage.js';
|
|
2
|
+
import { findFileInPackage, } from '../findFileInPackage/findFileInPackage.js';
|
|
3
3
|
/**
|
|
4
4
|
* Add an import path to an exports map. This is intended for use with generated exports maps,
|
|
5
5
|
* either in the context of the generated config, or generated for a package which doesn't have
|
|
@@ -9,7 +9,12 @@ import { findFileInPackage } from '../findFileInPackage/findFileInPackage.js';
|
|
|
9
9
|
* being updated is an array (it should have been normalized to object format before calling).
|
|
10
10
|
*/
|
|
11
11
|
export async function addExportsMapEntry(options, context) {
|
|
12
|
-
|
|
12
|
+
// resolveWebExtensions should only be missing in weird dependency mismatch cases, and it's
|
|
13
|
+
// rarely used anyway. In this context, definitions.get() could cause an infinite loop,
|
|
14
|
+
// so fall back to checking the config only.
|
|
15
|
+
// eslint-disable-next-line etc/no-deprecated
|
|
16
|
+
const { exports, packagePath, resolveWebExtensions = !!context.config?.features?.resolveWebExtensions } = options;
|
|
17
|
+
const { packages } = context;
|
|
13
18
|
// We try to enforce these conditions in the types, but also do an explicit check in case of
|
|
14
19
|
// casting or other unexpected input.
|
|
15
20
|
if (exports === null || Array.isArray(exports) || typeof exports === 'string') {
|
|
@@ -19,7 +24,7 @@ export async function addExportsMapEntry(options, context) {
|
|
|
19
24
|
packagePath,
|
|
20
25
|
filePath: options.filePath || options.importPath || '',
|
|
21
26
|
resolveWebExtensions,
|
|
22
|
-
},
|
|
27
|
+
}, { packages });
|
|
23
28
|
return _addEntry(options, foundFile);
|
|
24
29
|
}
|
|
25
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addExportsMapEntry.js","sourceRoot":"","sources":["../../src/exportsMap/addExportsMapEntry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CloudpackConfig, PackageDefinitionsCache, GeneratedExports } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { findFileInPackage, type FindFileInPackageResult } from '../findFileInPackage/findFileInPackage.js';\n\n/**\n * Options for `addExportsMapEntry`.\n */\nexport interface AddExportsMapEntryOptions {\n /**\n * The generated exports map to add the entry to.\n */\n exports: GeneratedExports;\n\n /**\n * The package path to add the entry for. This is used to resolve relative paths.\n */\n packagePath: string;\n\n /**\n * The import path to add the entry for. This is used as the key in the exports map.\n * Defaults to `'.'` (the package import).\n */\n importPath?: string;\n\n /**\n * The relative path to the physical file location, representing the \"key\" in the exports map.\n * Can be a partial location, in which case we'll search for the file and associated source/d.ts files.\n * Defaults to `importPath` if provided, or `'index.js'`.\n */\n filePath?: string;\n\n /**\n * Module type condition to add the entry for.\n * @default 'default'\n */\n requestCondition?: 'import' | 'require' | 'default';\n\n /**\n * The condition that describes the environment the entry is for.\n * Unspecified implies environmentally agnostic.\n * - `browser` is used for cases such as `browser` entries in package.json or implicit exports defined in routes.\n * - `node` is used for server rendering.\n */\n environmentCondition?: 'browser' | 'node';\n\n /**\n * Whether to resolve web extensions (e.g. `.web.js`).\n */\n resolveWebExtensions: boolean;\n}\n\n/**\n * Add an import path to an exports map. This is intended for use with generated exports maps,\n * either in the context of the generated config, or generated for a package which doesn't have\n * an exports map.\n *\n * Throws an error if the exports map passed in is not an object, or if the value of the key\n * being updated is an array (it should have been normalized to object format before calling).\n */\nexport async function addExportsMapEntry(\n options: AddExportsMapEntryOptions,\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\n): Promise<boolean> {\n const { exports, packagePath, resolveWebExtensions } = options;\n\n // We try to enforce these conditions in the types, but also do an explicit check in case of\n // casting or other unexpected input.\n if (exports === null || Array.isArray(exports) || typeof exports === 'string') {\n throw new Error(`Exports passed to addExportsMapEntry must be an object; received: ${JSON.stringify(exports)}`);\n }\n\n const foundFile = await findFileInPackage(\n {\n packagePath,\n filePath: options.filePath || options.importPath || '',\n resolveWebExtensions,\n },\n context,\n );\n\n return _addEntry(options, foundFile);\n}\n\n/**\n * Internal logic of adding an entry to an exports map.\n * Exported for testing this logic separately from the filesystem parts.\n * @internal\n */\nexport function _addEntry(\n options: Omit<AddExportsMapEntryOptions, 'packagePath' | 'filePath'>,\n foundFile: FindFileInPackageResult,\n): boolean {\n const { exports, environmentCondition, requestCondition = 'default' } = options;\n const { filePath, sourcePath } = foundFile;\n\n // Only do work if a file path was found.\n if (!filePath) {\n return false;\n }\n\n // Normalize the import path (this also converts undefined to '.')\n const importPath = normalizeRelativePath(options.importPath);\n\n const oldEntry = exports[importPath];\n if (Array.isArray(oldEntry)) {\n // This should never happen with the standardized generated exports map format.\n // In theory we could handle it by pushing to the array, but nesting conditions inside arrays\n // isn't valid in the exports map spec.\n throw new Error(`Cannot add to an array of exports for \"${importPath}\"`);\n }\n\n let exportValue: string | Record<string, string>;\n\n if (!sourcePath && !requestCondition) {\n // If this is the only entry we're adding, set it to a string to minimize the exports map.\n exportValue = filePath;\n } else {\n exportValue = {};\n\n if (sourcePath) {\n exportValue['source'] = sourcePath;\n }\n\n // Add the entry for the condition.\n exportValue[requestCondition] = filePath;\n\n if (requestCondition === 'default' && Object.keys(exportValue).length === 1) {\n // Only the default condition is present, so flatten to a string\n exportValue = filePath;\n }\n }\n\n const newEntry: GeneratedExports[string] = environmentCondition\n ? { [environmentCondition]: exportValue }\n : exportValue;\n\n exports[importPath] = mergeEntries({ oldEntry, newEntry });\n\n return true;\n}\n\n/**\n * This handles the merging of potential nested environment and request conditions, and ensures that\n * the `default` key is in the correct order (always last).\n */\nfunction mergeEntries<T extends string | Record<string, T>>(params: {\n oldEntry: T | null | undefined;\n newEntry: T;\n}): T {\n const { oldEntry, newEntry } = params;\n\n if (!oldEntry) {\n return newEntry;\n }\n\n // If oldEntry is a string... (using !== object instead of === string so TS infers the correct type later)\n if (typeof oldEntry !== 'object') {\n // If newEntry is an object without a default, use oldEntry as the default.\n if (typeof newEntry === 'object' && !newEntry.default) {\n return { ...newEntry, default: oldEntry };\n }\n // Otherwise ignore oldEntry.\n return newEntry;\n }\n\n if (typeof newEntry !== 'object') {\n // oldEntry object, newEntry string => use newEntry as default\n return { ...oldEntry, default: newEntry };\n }\n\n // both objects => full merge (the typings get imprecise here)\n const merged: Record<string, T> = {};\n // put the new keys first in the merged object (this could be made configurable later if needed)\n const allKeys = new Set([...Object.keys(newEntry), ...Object.keys(oldEntry)]);\n for (const key of allKeys) {\n if (newEntry[key]) {\n merged[key] = mergeEntries({ oldEntry: oldEntry[key], newEntry: newEntry[key] });\n } else {\n merged[key] = oldEntry[key];\n }\n }\n\n const defaultValue = merged.default;\n if (defaultValue) {\n if (Object.keys(merged).length === 1) {\n // flatten out the default condition\n return defaultValue;\n }\n\n // ensure the default is last (exports maps keys are ordered)\n delete merged.default;\n merged.default = defaultValue;\n }\n\n return merged as T;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"addExportsMapEntry.js","sourceRoot":"","sources":["../../src/exportsMap/addExportsMapEntry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CloudpackConfig, PackageDefinitionsCache, GeneratedExports } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport {\n findFileInPackage,\n type FindFileInPackageOptions,\n type FindFileInPackageResult,\n} from '../findFileInPackage/findFileInPackage.js';\n\n/**\n * Options for `addExportsMapEntry`.\n */\nexport interface AddExportsMapEntryOptions extends Pick<\n FindFileInPackageOptions,\n 'packagePath' | 'resolveWebExtensions'\n> {\n /**\n * The generated exports map to add the entry to.\n */\n exports: GeneratedExports;\n\n /**\n * The import path to add the entry for. This is used as the key in the exports map.\n * Defaults to `'.'` (the package import).\n */\n importPath?: string;\n\n /**\n * The relative path to the physical file location, used to derive the exports map value.\n * Can be a partial location, in which case we'll search for the file and associated source/d.ts files.\n * Defaults to `importPath` if provided, or `'index.js'`.\n */\n filePath?: string;\n\n /**\n * Module type condition to add the entry for.\n * @default 'default'\n */\n requestCondition?: 'import' | 'require' | 'default';\n\n /**\n * The condition that describes the environment the entry is for.\n * Unspecified implies environmentally agnostic.\n * - `browser` is used for cases such as `browser` entries in package.json or implicit exports defined in routes.\n * - `node` is used for server rendering.\n */\n environmentCondition?: 'browser' | 'node';\n}\n\n/**\n * Add an import path to an exports map. This is intended for use with generated exports maps,\n * either in the context of the generated config, or generated for a package which doesn't have\n * an exports map.\n *\n * Throws an error if the exports map passed in is not an object, or if the value of the key\n * being updated is an array (it should have been normalized to object format before calling).\n */\nexport async function addExportsMapEntry(\n options: AddExportsMapEntryOptions,\n context: {\n packages: PackageDefinitionsCache;\n /** @deprecated Pass `resolveWebExtensions` option directly */\n config?: Pick<CloudpackConfig, 'features'>;\n },\n): Promise<boolean> {\n // resolveWebExtensions should only be missing in weird dependency mismatch cases, and it's\n // rarely used anyway. In this context, definitions.get() could cause an infinite loop,\n // so fall back to checking the config only.\n // eslint-disable-next-line etc/no-deprecated\n const { exports, packagePath, resolveWebExtensions = !!context.config?.features?.resolveWebExtensions } = options;\n const { packages } = context;\n\n // We try to enforce these conditions in the types, but also do an explicit check in case of\n // casting or other unexpected input.\n if (exports === null || Array.isArray(exports) || typeof exports === 'string') {\n throw new Error(`Exports passed to addExportsMapEntry must be an object; received: ${JSON.stringify(exports)}`);\n }\n\n const foundFile = await findFileInPackage(\n {\n packagePath,\n filePath: options.filePath || options.importPath || '',\n resolveWebExtensions,\n },\n { packages },\n );\n\n return _addEntry(options, foundFile);\n}\n\n/**\n * Internal logic of adding an entry to an exports map.\n * Exported for testing this logic separately from the filesystem parts.\n * @internal\n */\nexport function _addEntry(\n options: Omit<AddExportsMapEntryOptions, 'packagePath' | 'filePath'>,\n foundFile: FindFileInPackageResult,\n): boolean {\n const { exports, environmentCondition, requestCondition = 'default' } = options;\n const { filePath, sourcePath } = foundFile;\n\n // Only do work if a file path was found.\n if (!filePath) {\n return false;\n }\n\n // Normalize the import path (this also converts undefined to '.')\n const importPath = normalizeRelativePath(options.importPath);\n\n const oldEntry = exports[importPath];\n if (Array.isArray(oldEntry)) {\n // This should never happen with the standardized generated exports map format.\n // In theory we could handle it by pushing to the array, but nesting conditions inside arrays\n // isn't valid in the exports map spec.\n throw new Error(`Cannot add to an array of exports for \"${importPath}\"`);\n }\n\n let exportValue: string | Record<string, string>;\n\n if (!sourcePath && !requestCondition) {\n // If this is the only entry we're adding, set it to a string to minimize the exports map.\n exportValue = filePath;\n } else {\n exportValue = {};\n\n if (sourcePath) {\n exportValue['source'] = sourcePath;\n }\n\n // Add the entry for the condition.\n exportValue[requestCondition] = filePath;\n\n if (requestCondition === 'default' && Object.keys(exportValue).length === 1) {\n // Only the default condition is present, so flatten to a string\n exportValue = filePath;\n }\n }\n\n const newEntry: GeneratedExports[string] = environmentCondition\n ? { [environmentCondition]: exportValue }\n : exportValue;\n\n exports[importPath] = mergeEntries({ oldEntry, newEntry });\n\n return true;\n}\n\n/**\n * This handles the merging of potential nested environment and request conditions, and ensures that\n * the `default` key is in the correct order (always last).\n */\nfunction mergeEntries<T extends string | Record<string, T>>(params: {\n oldEntry: T | null | undefined;\n newEntry: T;\n}): T {\n const { oldEntry, newEntry } = params;\n\n if (!oldEntry) {\n return newEntry;\n }\n\n // If oldEntry is a string... (using !== object instead of === string so TS infers the correct type later)\n if (typeof oldEntry !== 'object') {\n // If newEntry is an object without a default, use oldEntry as the default.\n if (typeof newEntry === 'object' && !newEntry.default) {\n return { ...newEntry, default: oldEntry };\n }\n // Otherwise ignore oldEntry.\n return newEntry;\n }\n\n if (typeof newEntry !== 'object') {\n // oldEntry object, newEntry string => use newEntry as default\n return { ...oldEntry, default: newEntry };\n }\n\n // both objects => full merge (the typings get imprecise here)\n const merged: Record<string, T> = {};\n // put the new keys first in the merged object (this could be made configurable later if needed)\n const allKeys = new Set([...Object.keys(newEntry), ...Object.keys(oldEntry)]);\n for (const key of allKeys) {\n if (newEntry[key]) {\n merged[key] = mergeEntries({ oldEntry: oldEntry[key], newEntry: newEntry[key] });\n } else {\n merged[key] = oldEntry[key];\n }\n }\n\n const defaultValue = merged.default;\n if (defaultValue) {\n if (Object.keys(merged).length === 1) {\n // flatten out the default condition\n return defaultValue;\n }\n\n // ensure the default is last (exports maps keys are ordered)\n delete merged.default;\n merged.default = defaultValue;\n }\n\n return merged as T;\n}\n"]}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/common-types';
|
|
2
|
+
import { type AddExportsMapEntryOptions } from './addExportsMapEntry.js';
|
|
3
|
+
export interface CreateExportsMapOptions extends Pick<AddExportsMapEntryOptions, 'packagePath' | 'resolveWebExtensions'> {
|
|
4
|
+
/**
|
|
5
|
+
* If true, create the exports map based on the original package definition, not the
|
|
6
|
+
* transformed one.
|
|
7
|
+
*/
|
|
8
|
+
disableTransforms?: boolean;
|
|
9
|
+
}
|
|
2
10
|
/**
|
|
3
11
|
* Given a package path, return its exports if already set (this could be from either the original
|
|
4
12
|
* package.json or as generated by `createPackageSettingsTransform`), or otherwise generate an
|
|
5
13
|
* exports map based on other fields in the package definition.
|
|
6
14
|
*/
|
|
7
|
-
export declare function createExportsMap(options: {
|
|
8
|
-
packagePath: string;
|
|
9
|
-
disableTransforms?: boolean;
|
|
10
|
-
resolveWebExtensions: boolean;
|
|
11
|
-
}, context: {
|
|
15
|
+
export declare function createExportsMap(options: CreateExportsMapOptions, context: {
|
|
12
16
|
packages: PackageDefinitionsCache;
|
|
13
|
-
config: Pick<CloudpackConfig, 'features'>;
|
|
14
17
|
}): Promise<PackageJsonExports>;
|
|
15
18
|
//# sourceMappingURL=createExportsMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/createExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"createExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/createExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAoB,MAAM,4BAA4B,CAAC;AAEhH,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CACnD,yBAAyB,EACzB,aAAa,GAAG,sBAAsB,CACvC;IACC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,kBAAkB,CAAC,CAyG7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/createExportsMap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/createExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageJsonExports, GeneratedExports } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { addExportsMapEntry, type AddExportsMapEntryOptions } from './addExportsMapEntry.js';\n\nexport interface CreateExportsMapOptions extends Pick<\n AddExportsMapEntryOptions,\n 'packagePath' | 'resolveWebExtensions'\n> {\n /**\n * If true, create the exports map based on the original package definition, not the\n * transformed one.\n */\n disableTransforms?: boolean;\n}\n\n/**\n * Given a package path, return its exports if already set (this could be from either the original\n * package.json or as generated by `createPackageSettingsTransform`), or otherwise generate an\n * exports map based on other fields in the package definition.\n */\nexport async function createExportsMap(\n options: CreateExportsMapOptions,\n context: { packages: PackageDefinitionsCache },\n): Promise<PackageJsonExports> {\n const { packagePath, resolveWebExtensions } = options;\n const { packages } = context;\n const definition = await packages.get(packagePath, { disableTransforms: options.disableTransforms });\n\n // Don't create an exports map for a definition that already has one.\n if (definition.exports) {\n return definition.exports;\n }\n\n const { browser, main, module, type } = definition;\n // Use the GeneratedExports type internally because it matches up with the more constrained\n // format of the exports map we're creating here (and addExportsMapEntry requires this type).\n const exports: GeneratedExports = {};\n\n // Only try to add `index.js` as an entry if main/module/browser isn't available.\n if (!(main || module || browser)) {\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n filePath: 'index.js',\n requestCondition: type === 'module' ? 'import' : undefined,\n resolveWebExtensions,\n },\n context,\n );\n }\n\n if (main) {\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n filePath: main,\n requestCondition: type === 'module' ? 'import' : undefined,\n resolveWebExtensions,\n },\n context,\n );\n }\n\n if (module) {\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n filePath: module,\n requestCondition: 'import',\n resolveWebExtensions,\n },\n context,\n );\n }\n\n if (browser) {\n if (typeof definition.browser === 'string') {\n await addExportsMapEntry(\n { exports, packagePath, filePath: definition.browser, environmentCondition: 'browser', resolveWebExtensions },\n context,\n );\n } else if (typeof definition.browser === 'object') {\n for (const [key, value] of Object.entries(definition.browser)) {\n if (!value || typeof value !== 'string') {\n continue;\n }\n\n const isDefaultModule = normalizeRelativePath(module) === normalizeRelativePath(key);\n const isDefaultMain = normalizeRelativePath(main) === normalizeRelativePath(key);\n\n let importPaths: string[];\n if (isDefaultMain || isDefaultModule) {\n importPaths = ['.'];\n } else {\n importPaths = [key, key.replace(/\\.js$/, '')];\n }\n\n for (const importPath of importPaths) {\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n importPath,\n filePath: value,\n environmentCondition: 'browser',\n requestCondition: isDefaultModule || (isDefaultMain && type === 'module') ? 'import' : undefined,\n resolveWebExtensions,\n },\n context,\n );\n }\n }\n }\n }\n\n // If we couldn't infer the exports map shape from existing metadata,\n // formulate based off inferred file structure.\n // Note: CRA defaults to src/index.js, Vite defaults to src/main.js\n if (Object.keys(exports).length === 0) {\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/index.js', resolveWebExtensions }, context)) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/main.js', resolveWebExtensions }, context)) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './index.js', resolveWebExtensions }, context));\n }\n\n return exports;\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { CloudpackConfig, PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/common-types';
|
|
1
|
+
import type { CloudpackConfig, PackageDefinitionsCache, PackageJsonExports, WithOptional } from '@ms-cloudpack/common-types';
|
|
2
|
+
import { type CreateExportsMapOptions } from './createExportsMap.js';
|
|
2
3
|
/**
|
|
3
4
|
* Get a package's provided exports map, or create one based on other entry info and the
|
|
4
5
|
* package structure as a fallback.
|
|
@@ -7,18 +8,14 @@ import type { CloudpackConfig, PackageDefinitionsCache, PackageJsonExports } fro
|
|
|
7
8
|
* by `createPackageSettingsTransform`. (Exception is tests within `package-utilities` or other
|
|
8
9
|
* contexts that didn't use `createPackageDefinitions`.)
|
|
9
10
|
*/
|
|
10
|
-
export declare function getExportsMap(options: {
|
|
11
|
-
packagePath: string;
|
|
12
|
-
disableTransforms: boolean;
|
|
13
|
-
resolveWebExtensions: boolean;
|
|
14
|
-
}, context: {
|
|
11
|
+
export declare function getExportsMap(options: Required<CreateExportsMapOptions>, context: {
|
|
15
12
|
packages: PackageDefinitionsCache;
|
|
16
|
-
|
|
13
|
+
/** @deprecated Pass `resolveWebExtensions` option directly */
|
|
14
|
+
config?: Pick<CloudpackConfig, 'features'>;
|
|
17
15
|
}): Promise<PackageJsonExports>;
|
|
18
|
-
export declare function getExportsMap(options: {
|
|
19
|
-
packagePath: string;
|
|
20
|
-
}, context: {
|
|
16
|
+
export declare function getExportsMap(options: WithOptional<Omit<CreateExportsMapOptions, 'disableTransforms'>, 'resolveWebExtensions'>, context: {
|
|
21
17
|
packages: PackageDefinitionsCache;
|
|
22
|
-
|
|
18
|
+
/** @deprecated Pass `resolveWebExtensions` option directly */
|
|
19
|
+
config?: Pick<CloudpackConfig, 'features'>;
|
|
23
20
|
}): Promise<PackageJsonExports>;
|
|
24
21
|
//# sourceMappingURL=getExportsMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,uBAAuB,EACvB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"getExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEvF;;;;;;;GAOG;AAEH,wBAAsB,aAAa,CACjC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAC1C,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;CAC5C,GACA,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE/B,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,EAAE,sBAAsB,CAAC,EACjG,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;CAC5C,GACA,OAAO,CAAC,kBAAkB,CAAC,CAAC"}
|
|
@@ -4,7 +4,7 @@ export async function getExportsMap(options, context) {
|
|
|
4
4
|
const { packagePath, disableTransforms } = options;
|
|
5
5
|
const { packages } = context;
|
|
6
6
|
const definition = await packages.get(packagePath, options);
|
|
7
|
-
if (disableTransforms
|
|
7
|
+
if (disableTransforms && options.resolveWebExtensions === undefined) {
|
|
8
8
|
// When disableTransforms is defined, we need to know if we should resolve web extensions.
|
|
9
9
|
throw new Error('resolveWebExtensions is required when disableTransforms is true (this is a Cloudpack bug).');
|
|
10
10
|
}
|
|
@@ -17,7 +17,7 @@ export async function getExportsMap(options, context) {
|
|
|
17
17
|
resolveWebExtensions: options.resolveWebExtensions ??
|
|
18
18
|
bundlerCapabilities['resolve-web-extensions'] ??
|
|
19
19
|
// eslint-disable-next-line etc/no-deprecated
|
|
20
|
-
!!context.config
|
|
20
|
+
!!context.config?.features?.resolveWebExtensions,
|
|
21
21
|
}, context);
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=getExportsMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,uBAAuB,CAAC;AA4BvF,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6F,EAC7F,OAA0F;IAE1F,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE5D,IAAI,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACpE,0FAA0F;QAC1F,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,MAAM,mBAAmB,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,mBAAmB,IAAI,EAAE,CAAuC,CAAC;IAEpH,OAAO,gBAAgB,CACrB;QACE,GAAG,OAAO;QACV,oBAAoB,EAClB,OAAO,CAAC,oBAAoB;YAC5B,mBAAmB,CAAC,wBAAwB,CAAC;YAC7C,6CAA6C;YAC7C,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,oBAAoB;KACnD,EACD,OAAO,CACR,CAAC;AACJ,CAAC","sourcesContent":["import type {\n CloudpackConfig,\n InternalBundlerCapabilitiesOptions,\n PackageDefinitionsCache,\n PackageJsonExports,\n WithOptional,\n} from '@ms-cloudpack/common-types';\nimport { createExportsMap, type CreateExportsMapOptions } from './createExportsMap.js';\n\n/**\n * Get a package's provided exports map, or create one based on other entry info and the\n * package structure as a fallback.\n *\n * NOTE: Unless `disableTransforms` is true, this will use the cached exports map that was created\n * by `createPackageSettingsTransform`. (Exception is tests within `package-utilities` or other\n * contexts that didn't use `createPackageDefinitions`.)\n */\n// When disableTransforms is defined, resolveWebExtensions is required\nexport async function getExportsMap(\n options: Required<CreateExportsMapOptions>,\n context: {\n packages: PackageDefinitionsCache;\n /** @deprecated Pass `resolveWebExtensions` option directly */\n config?: Pick<CloudpackConfig, 'features'>;\n },\n): Promise<PackageJsonExports>;\n// When disableTransforms is undefined, resolveWebExtensions is not required since we can get it from cached settings\nexport async function getExportsMap(\n options: WithOptional<Omit<CreateExportsMapOptions, 'disableTransforms'>, 'resolveWebExtensions'>,\n context: {\n packages: PackageDefinitionsCache;\n /** @deprecated Pass `resolveWebExtensions` option directly */\n config?: Pick<CloudpackConfig, 'features'>;\n },\n): Promise<PackageJsonExports>;\n// Implementation\nexport async function getExportsMap(\n options: { packagePath: string; disableTransforms?: boolean; resolveWebExtensions?: boolean },\n context: { packages: PackageDefinitionsCache; config?: Pick<CloudpackConfig, 'features'> },\n): Promise<PackageJsonExports> {\n const { packagePath, disableTransforms } = options;\n const { packages } = context;\n const definition = await packages.get(packagePath, options);\n\n if (disableTransforms && options.resolveWebExtensions === undefined) {\n // When disableTransforms is defined, we need to know if we should resolve web extensions.\n throw new Error('resolveWebExtensions is required when disableTransforms is true (this is a Cloudpack bug).');\n }\n\n if (definition.exports !== undefined) {\n return definition.exports;\n }\n\n const bundlerCapabilities = (definition.cloudpack?.bundlerCapabilities || {}) as InternalBundlerCapabilitiesOptions;\n\n return createExportsMap(\n {\n ...options,\n resolveWebExtensions:\n options.resolveWebExtensions ??\n bundlerCapabilities['resolve-web-extensions'] ??\n // eslint-disable-next-line etc/no-deprecated\n !!context.config?.features?.resolveWebExtensions,\n },\n context,\n );\n}\n"]}
|
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
import type { CloudpackConfig, PackageDefinitionsCache } from '@ms-cloudpack/common-types';
|
|
2
|
-
export
|
|
2
|
+
export interface FindFileInPackageOptions {
|
|
3
|
+
/** Absolute path to the package root, used to resolve relative paths. */
|
|
3
4
|
packagePath: string;
|
|
5
|
+
/**
|
|
6
|
+
* The relative path to the physical file location.
|
|
7
|
+
* Can be a partial location, in which case we'll search for the file.
|
|
8
|
+
*/
|
|
4
9
|
filePath: string;
|
|
10
|
+
/** Whether to try `.web.*` extensions when resolving files. */
|
|
5
11
|
resolveWebExtensions: boolean;
|
|
6
|
-
}
|
|
7
|
-
export
|
|
12
|
+
}
|
|
13
|
+
export interface FindFileInPackageResult {
|
|
14
|
+
/**
|
|
15
|
+
* Relative path to the resolved file (if found), with leading `./`
|
|
16
|
+
*/
|
|
8
17
|
filePath?: string;
|
|
18
|
+
/**
|
|
19
|
+
* For internal packages only: relative path to the corresponding source file (if found),
|
|
20
|
+
* with leading `./`
|
|
21
|
+
*/
|
|
9
22
|
sourcePath?: string;
|
|
10
|
-
}
|
|
23
|
+
}
|
|
11
24
|
/**
|
|
12
|
-
* Given a requested partial filePath
|
|
13
|
-
* consideration for internal packages
|
|
14
|
-
*
|
|
25
|
+
* Given a requested partial `filePath`, resolves the relative intermediate path if the file exists,
|
|
26
|
+
* with special consideration for internal packages (which may not have intermediate files, only
|
|
27
|
+
* source files).
|
|
15
28
|
*
|
|
16
|
-
* This helper is used in deriving if the given package.json entries are actual validate candidates
|
|
17
|
-
* exports map from existing metadata. For example, a package.json may list
|
|
18
|
-
* exists, or in internal packages, if `src/index.tsx` exists,
|
|
19
|
-
* exist, then we should not include it in the
|
|
29
|
+
* This helper is used in deriving if the given package.json entries are actual validate candidates
|
|
30
|
+
* when constructing an exports map from existing metadata. For example, a package.json may list
|
|
31
|
+
* `main` as `lib/index.js`. If this file exists, or in internal packages, if `src/index.tsx` exists,
|
|
32
|
+
* then this is a valid candidate. If the file does not exist, then we should not include it in the
|
|
33
|
+
* exports map.
|
|
20
34
|
*/
|
|
21
35
|
export declare function findFileInPackage(options: FindFileInPackageOptions, context: {
|
|
22
36
|
packages: PackageDefinitionsCache;
|
|
23
|
-
|
|
37
|
+
/** @deprecated Pass `resolveWebExtensions` directly instead */
|
|
38
|
+
config?: Pick<CloudpackConfig, 'features'>;
|
|
24
39
|
}): Promise<FindFileInPackageResult>;
|
|
25
40
|
//# sourceMappingURL=findFileInPackage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findFileInPackage.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/findFileInPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAe3F,MAAM,
|
|
1
|
+
{"version":3,"file":"findFileInPackage.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/findFileInPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAe3F,MAAM,WAAW,wBAAwB;IACvC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;IAClC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;CAC5C,GACA,OAAO,CAAC,uBAAuB,CAAC,CAoGlC"}
|
|
@@ -5,24 +5,30 @@ import { flattenExportsMap } from '../exportsMap/flattenExportsMap.js';
|
|
|
5
5
|
import { getCandidates } from './getCandidates.js';
|
|
6
6
|
import { getExportsMap } from '../exportsMap/getExportsMap.js';
|
|
7
7
|
/**
|
|
8
|
-
* Given a requested partial filePath
|
|
9
|
-
* consideration for internal packages
|
|
10
|
-
*
|
|
8
|
+
* Given a requested partial `filePath`, resolves the relative intermediate path if the file exists,
|
|
9
|
+
* with special consideration for internal packages (which may not have intermediate files, only
|
|
10
|
+
* source files).
|
|
11
11
|
*
|
|
12
|
-
* This helper is used in deriving if the given package.json entries are actual validate candidates
|
|
13
|
-
* exports map from existing metadata. For example, a package.json may list
|
|
14
|
-
* exists, or in internal packages, if `src/index.tsx` exists,
|
|
15
|
-
* exist, then we should not include it in the
|
|
12
|
+
* This helper is used in deriving if the given package.json entries are actual validate candidates
|
|
13
|
+
* when constructing an exports map from existing metadata. For example, a package.json may list
|
|
14
|
+
* `main` as `lib/index.js`. If this file exists, or in internal packages, if `src/index.tsx` exists,
|
|
15
|
+
* then this is a valid candidate. If the file does not exist, then we should not include it in the
|
|
16
|
+
* exports map.
|
|
16
17
|
*/
|
|
17
18
|
export async function findFileInPackage(options, context) {
|
|
18
|
-
|
|
19
|
+
// resolveWebExtensions should only be missing in weird dependency mismatch cases, and it's
|
|
20
|
+
// rarely used anyway. In this context, definitions.get() could cause an infinite loop,
|
|
21
|
+
// so fall back to checking the config only.
|
|
22
|
+
// eslint-disable-next-line etc/no-deprecated
|
|
23
|
+
const { resolveWebExtensions = !!context.config?.features?.resolveWebExtensions } = options;
|
|
24
|
+
const { packages } = context;
|
|
19
25
|
const originalPath = normalizeRelativePath(options.filePath);
|
|
20
26
|
const packagePath = slash(options.packagePath);
|
|
27
|
+
const isInternal = !isExternalPackage(packagePath);
|
|
21
28
|
let filePath;
|
|
22
29
|
let sourcePath;
|
|
23
|
-
const isInternal = !isExternalPackage(packagePath);
|
|
24
30
|
const pathsToConsider = [originalPath];
|
|
25
|
-
const originalDefinition = await
|
|
31
|
+
const originalDefinition = await packages.tryGet(packagePath, { disableTransforms: true });
|
|
26
32
|
// If the original package.json has an exports map, we should not use main and module as hints.
|
|
27
33
|
if (originalPath === '.' && originalDefinition && !originalDefinition.exports) {
|
|
28
34
|
const { main, module } = originalDefinition;
|
|
@@ -42,18 +48,18 @@ export async function findFileInPackage(options, context) {
|
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
for (const currentPath of pathsToConsider) {
|
|
45
|
-
const candidates = await getCandidates({ filePath: currentPath, packagePath, resolveWebExtensions },
|
|
51
|
+
const candidates = await getCandidates({ filePath: currentPath, packagePath, resolveWebExtensions }, { packages });
|
|
46
52
|
// Try and resolve a physical file given the candidates.
|
|
47
53
|
filePath = candidates.find((candidate) => isFileSync(path.join(packagePath, candidate)));
|
|
48
54
|
if (filePath) {
|
|
49
55
|
break;
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
|
-
const isNestedPackageDefinition = filePath && path.basename(filePath) === 'package.json' && path.basename(originalPath) !== 'package.json';
|
|
53
58
|
const result = {};
|
|
54
|
-
if (
|
|
59
|
+
if (filePath && path.basename(filePath) === 'package.json' && path.basename(originalPath) !== 'package.json') {
|
|
60
|
+
// Nested package.json reference
|
|
55
61
|
const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath));
|
|
56
|
-
const exportsMap = await getExportsMap({ packagePath: nestedDefinitionPath },
|
|
62
|
+
const exportsMap = await getExportsMap({ packagePath: nestedDefinitionPath, resolveWebExtensions: options.resolveWebExtensions }, { packages });
|
|
57
63
|
const entryPath = flattenExportsMap(exportsMap)['.'];
|
|
58
64
|
if (entryPath) {
|
|
59
65
|
return findFileInPackage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findFileInPackage.js","sourceRoot":"","sources":["../../src/findFileInPackage/findFileInPackage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"findFileInPackage.js","sourceRoot":"","sources":["../../src/findFileInPackage/findFileInPackage.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CloudpackConfig, PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';\nimport {\n intermediateToSourcePath,\n isExternalPackage,\n isFileSync,\n plainJsRegex,\n sourceToIntermediatePath,\n transpiledSourceRegex,\n} from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport { flattenExportsMap } from '../exportsMap/flattenExportsMap.js';\nimport { getCandidates } from './getCandidates.js';\nimport { getExportsMap } from '../exportsMap/getExportsMap.js';\n\nexport interface FindFileInPackageOptions {\n /** Absolute path to the package root, used to resolve relative paths. */\n packagePath: string;\n /**\n * The relative path to the physical file location.\n * Can be a partial location, in which case we'll search for the file.\n */\n filePath: string;\n /** Whether to try `.web.*` extensions when resolving files. */\n resolveWebExtensions: boolean;\n}\n\nexport interface FindFileInPackageResult {\n /**\n * Relative path to the resolved file (if found), with leading `./`\n */\n filePath?: string;\n /**\n * For internal packages only: relative path to the corresponding source file (if found),\n * with leading `./`\n */\n sourcePath?: string;\n}\n\n/**\n * Given a requested partial `filePath`, resolves the relative intermediate path if the file exists,\n * with special consideration for internal packages (which may not have intermediate files, only\n * source files).\n *\n * This helper is used in deriving if the given package.json entries are actual validate candidates\n * when constructing an exports map from existing metadata. For example, a package.json may list\n * `main` as `lib/index.js`. If this file exists, or in internal packages, if `src/index.tsx` exists,\n * then this is a valid candidate. If the file does not exist, then we should not include it in the\n * exports map.\n */\nexport async function findFileInPackage(\n options: FindFileInPackageOptions,\n context: {\n packages: PackageDefinitionsCache;\n /** @deprecated Pass `resolveWebExtensions` directly instead */\n config?: Pick<CloudpackConfig, 'features'>;\n },\n): Promise<FindFileInPackageResult> {\n // resolveWebExtensions should only be missing in weird dependency mismatch cases, and it's\n // rarely used anyway. In this context, definitions.get() could cause an infinite loop,\n // so fall back to checking the config only.\n // eslint-disable-next-line etc/no-deprecated\n const { resolveWebExtensions = !!context.config?.features?.resolveWebExtensions } = options;\n const { packages } = context;\n\n const originalPath = normalizeRelativePath(options.filePath);\n const packagePath = slash(options.packagePath);\n const isInternal = !isExternalPackage(packagePath);\n\n let filePath: string | undefined;\n let sourcePath: string | undefined;\n const pathsToConsider = [originalPath];\n\n const originalDefinition = await packages.tryGet(packagePath, { disableTransforms: true });\n // If the original package.json has an exports map, we should not use main and module as hints.\n if (originalPath === '.' && originalDefinition && !originalDefinition.exports) {\n const { main, module } = originalDefinition;\n if (main) {\n pathsToConsider.unshift(main);\n }\n if (module) {\n pathsToConsider.unshift(module);\n }\n }\n\n if (originalDefinition && originalDefinition.exports) {\n // Pass in packagePath so that we can expand wildcards in the exports map.\n const expandedExportsMap = flattenExportsMap(originalDefinition.exports, { packagePath });\n if (expandedExportsMap[originalPath]) {\n // If the original path is an entry in the exports map, we should use that as a candidate.\n pathsToConsider.unshift(expandedExportsMap[originalPath]);\n }\n }\n\n for (const currentPath of pathsToConsider) {\n const candidates = await getCandidates({ filePath: currentPath, packagePath, resolveWebExtensions }, { packages });\n\n // Try and resolve a physical file given the candidates.\n filePath = candidates.find((candidate) => isFileSync(path.join(packagePath, candidate)));\n if (filePath) {\n break;\n }\n }\n\n const result: FindFileInPackageResult = {};\n\n if (filePath && path.basename(filePath) === 'package.json' && path.basename(originalPath) !== 'package.json') {\n // Nested package.json reference\n const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath));\n const exportsMap = await getExportsMap(\n { packagePath: nestedDefinitionPath, resolveWebExtensions: options.resolveWebExtensions },\n { packages },\n );\n const entryPath = flattenExportsMap(exportsMap)['.'];\n\n if (entryPath) {\n return findFileInPackage(\n {\n packagePath,\n filePath: normalizeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, entryPath))),\n resolveWebExtensions: options.resolveWebExtensions,\n },\n context,\n );\n } else {\n // If we can't find an entry, we should not include this in the exports map.\n // This avoids adding a \"./package.json\" value to a \".\" entry.\n return result;\n }\n }\n\n // If the resolved file is a typescript file in an internal package, try to resolve the intermediate.\n if (filePath && transpiledSourceRegex.test(filePath)) {\n sourcePath = filePath;\n filePath = isInternal ? sourceToIntermediatePath(filePath) : undefined;\n }\n\n // If we haven't resolved a sourcePath, try to resolve it from the intermediate.\n if (isInternal && filePath && !sourcePath && plainJsRegex.test(filePath)) {\n // Not a TS file, but a JS file. Try to find the source.\n sourcePath = intermediateToSourcePath(filePath, packagePath);\n\n // If we couldn't find a TS file, clear sourcePath.\n if (sourcePath === filePath) {\n sourcePath = undefined;\n }\n }\n\n if (filePath) {\n result.filePath = normalizeRelativePath(filePath);\n }\n\n if (sourcePath) {\n result.sourcePath = normalizeRelativePath(sourcePath);\n }\n\n return result;\n}\n"]}
|
|
@@ -1 +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,EACX,mCAAmC,EACpC,MAAM,4BAA4B,CAAC;
|
|
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,EACX,mCAAmC,EACpC,MAAM,4BAA4B,CAAC;AAOpC,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,iCAAiC,EAAE,CAAC;CAC1D;AA2CD,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;IAQ7C,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;IAkD9G,iBAAiB,CAAC,OAAO,EAAE,iCAAiC,GAAG,IAAI;IAOnE,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAYvE,GAAG,CACD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,WAAW,EACvB,OAAO,CAAC,EAAE,IAAI,CAAC,2BAA2B,EAAE,mBAAmB,CAAC,GAC/D,IAAI;IAYP,MAAM,CAAC,KAAK,EAAE,mCAAmC,GAAG,IAAI;IAKxD,cAAc,IAAI,mCAAmC;cAOrC,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;CAIvF"}
|
|
@@ -3,11 +3,17 @@ import { cloneJson, readJson } from '@ms-cloudpack/json-utilities';
|
|
|
3
3
|
import { getNonSemverTransform } from './getNonSemverTransform.js';
|
|
4
4
|
import { slash } from '@ms-cloudpack/path-string-parsing';
|
|
5
5
|
import { getTypesTransform } from './getTypesTransform.js';
|
|
6
|
+
import { getCatalogTransform } from './getCatalogTransform.js';
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
8
|
+
* Transforms may be stateful, so we have to store the factories (not the transforms themselves)
|
|
9
|
+
* and re-call the factory when resetting.
|
|
9
10
|
*/
|
|
10
|
-
const
|
|
11
|
+
const defaultFactories = [
|
|
12
|
+
getTypesTransform,
|
|
13
|
+
// Catalog versions can contain non-semver, so this must come before nonSemverTransform
|
|
14
|
+
getCatalogTransform,
|
|
15
|
+
getNonSemverTransform,
|
|
16
|
+
];
|
|
11
17
|
/**
|
|
12
18
|
* Defines which keys from package.json are allowed to be cloned.
|
|
13
19
|
* Keys with true values are cloned, keys with false values are not cloned.
|
|
@@ -50,6 +56,7 @@ export class PackageDefinitions {
|
|
|
50
56
|
constructor(options = {}) {
|
|
51
57
|
const { config, transformFactories } = options;
|
|
52
58
|
this._transformFactories = transformFactories || [];
|
|
59
|
+
// `force` means always initialize transforms even if no config is provided
|
|
53
60
|
this.reset({ newConfig: config, force: true });
|
|
54
61
|
}
|
|
55
62
|
async get(packagePath, options) {
|
|
@@ -110,7 +117,7 @@ export class PackageDefinitions {
|
|
|
110
117
|
const { newConfig, force } = options || {};
|
|
111
118
|
if (newConfig || force) {
|
|
112
119
|
this._config = newConfig;
|
|
113
|
-
this._transforms = [...
|
|
120
|
+
this._transforms = [...defaultFactories, ...this._transformFactories].map((factory) => factory(newConfig));
|
|
114
121
|
}
|
|
115
122
|
}
|
|
116
123
|
set(packagePath, definition, options) {
|
|
@@ -1 +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 SerializablePackageDefinitionsCache,\n} from '@ms-cloudpack/common-types';\nimport { cloneJson, readJson } from '@ms-cloudpack/json-utilities';\nimport { getNonSemverTransform } from './getNonSemverTransform.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport { getTypesTransform } from './getTypesTransform.js';\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\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 = () => [getTypesTransform(), getNonSemverTransform()];\n\n/**\n * Defines which keys from package.json are allowed to be cloned.\n * Keys with true values are cloned, keys with false values are not cloned.\n * (It's an object for better typings and faster access.)\n *\n * NOTE: If you add any new keys to PackageJson, they must be added here too.\n */\nconst copyPackageJsonKeys: Record<keyof PackageJson, boolean> = {\n name: true,\n version: true,\n description: true,\n dependencies: true,\n devDependencies: true,\n peerDependencies: true,\n peerDependenciesMeta: true,\n optionalDependencies: true,\n bundledDependencies: true,\n bundleDependencies: true,\n type: true,\n main: true,\n module: true,\n browser: true,\n exports: true,\n resolutions: true,\n cloudpack: true,\n\n /** Engines are used to check Node version compatibility between process and Cloudpack, not for packages bundled by Cloudpack */\n engines: false,\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 // Clone the definition (only keys we care about) so we don't accidentally modify the original.\n transformedDefinition = cloneJson(definition, { keys: copyPackageJsonKeys });\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): void {\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 }): void {\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 set(\n packagePath: string,\n definition: PackageJson,\n options?: Pick<GetPackageDefinitionOptions, 'disableTransforms'>,\n ): void {\n const { disableTransforms } = options || {};\n // Normalize the path used for caching to ensure consistency.\n const normalizedPath = slash(packagePath);\n // Delete the transformed definition if it exists, so we don't have stale data.\n if (disableTransforms) {\n delete this._transformedDefinitions[normalizedPath];\n }\n const record = disableTransforms ? this._definitions : this._transformedDefinitions;\n record[normalizedPath] = definition;\n }\n\n extend(input: SerializablePackageDefinitionsCache): void {\n Object.assign(this._definitions, input.definitions);\n Object.assign(this._transformedDefinitions, input.transformedDefinitions);\n }\n\n toSerializable(): SerializablePackageDefinitionsCache {\n return {\n definitions: this._definitions,\n transformedDefinitions: this._transformedDefinitions,\n };\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"]}
|
|
1
|
+
{"version":3,"file":"PackageDefinitions.js","sourceRoot":"","sources":["../../src/packageDefinitions/PackageDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAUxB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAc/D;;;GAGG;AACH,MAAM,gBAAgB,GAAG;IACvB,iBAAiB;IACjB,uFAAuF;IACvF,mBAAmB;IACnB,qBAAqB;CACtB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAuC;IAC9D,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,IAAI;IACtB,oBAAoB,EAAE,IAAI;IAC1B,oBAAoB,EAAE,IAAI;IAC1B,mBAAmB,EAAE,IAAI;IACzB,kBAAkB,EAAE,IAAI;IACxB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IAEf,gIAAgI;IAChI,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,OAAO,kBAAkB;IACrB,YAAY,GAA4C,EAAE,CAAC;IAC3D,uBAAuB,GAAgC,EAAE,CAAC;IAC1D,OAAO,CAA8B;IACrC,WAAW,GAAiC,EAAE,CAAC;IAC/C,mBAAmB,GAAwC,EAAE,CAAC;IAEtE;;;;OAIG;IACH,YAAY,UAAqC,EAAE;QACjD,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,IAAI,EAAE,CAAC;QAEpD,2EAA2E;QAC3E,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,OAAqC;QAClE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,UAAuC,EAAE;QACzE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QAEhE,kFAAkF;QAClF,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAE1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;QACtD,CAAC;QAED,kFAAkF;QAClF,0EAA0E;QAC1E,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;YAE/C,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,KAAK,WAAW,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;gBACrE,UAAU,CAAC,OAAO,KAAK,eAAe,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,iBAAiB,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,oEAAoE;QACpE,IAAI,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;QACzE,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,+FAA+F;YAC/F,qBAAqB,GAAG,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAE7E,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzC,qBAAqB;oBACnB,CAAC,MAAM,SAAS,CAAC;wBACf,UAAU,EAAE,qBAAqB;wBACjC,WAAW,EAAE,cAAc;wBAC3B,QAAQ,EAAE,IAAI;wBACd,eAAe;qBAChB,CAAC,CAAC,IAAI,qBAAqB,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,GAAG,qBAAqB,CAAC;QACvE,CAAC;QAED,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,OAA0C;QAC1D,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAA0D;QAC9D,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QAElC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QAE3C,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,GAAG,CACD,WAAmB,EACnB,UAAuB,EACvB,OAAgE;QAEhE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QAC5C,6DAA6D;QAC7D,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,+EAA+E;QAC/E,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACpF,MAAM,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,KAA0C;QAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IAED,cAAc;QACZ,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,sBAAsB,EAAE,IAAI,CAAC,uBAAuB;SACrD,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,cAAsB;QACjD,4FAA4F;QAC5F,OAAO,QAAQ,CAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC;CACF","sourcesContent":["import path from 'path';\nimport type {\n CloudpackConfig,\n GetPackageDefinitionOptions,\n PackageDefinitionTransform,\n PackageDefinitionTransformFactory,\n PackageDefinitionsCache,\n PackageJson,\n SerializablePackageDefinitionsCache,\n} from '@ms-cloudpack/common-types';\nimport { cloneJson, readJson } from '@ms-cloudpack/json-utilities';\nimport { getNonSemverTransform } from './getNonSemverTransform.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\nimport { getTypesTransform } from './getTypesTransform.js';\nimport { getCatalogTransform } from './getCatalogTransform.js';\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\n/**\n * Transforms may be stateful, so we have to store the factories (not the transforms themselves)\n * and re-call the factory when resetting.\n */\nconst defaultFactories = [\n getTypesTransform,\n // Catalog versions can contain non-semver, so this must come before nonSemverTransform\n getCatalogTransform,\n getNonSemverTransform,\n];\n\n/**\n * Defines which keys from package.json are allowed to be cloned.\n * Keys with true values are cloned, keys with false values are not cloned.\n * (It's an object for better typings and faster access.)\n *\n * NOTE: If you add any new keys to PackageJson, they must be added here too.\n */\nconst copyPackageJsonKeys: Record<keyof PackageJson, boolean> = {\n name: true,\n version: true,\n description: true,\n dependencies: true,\n devDependencies: true,\n peerDependencies: true,\n peerDependenciesMeta: true,\n optionalDependencies: true,\n bundledDependencies: true,\n bundleDependencies: true,\n type: true,\n main: true,\n module: true,\n browser: true,\n exports: true,\n resolutions: true,\n cloudpack: true,\n\n /** Engines are used to check Node version compatibility between process and Cloudpack, not for packages bundled by Cloudpack */\n engines: false,\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 // `force` means always initialize transforms even if no config is provided\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 // Clone the definition (only keys we care about) so we don't accidentally modify the original.\n transformedDefinition = cloneJson(definition, { keys: copyPackageJsonKeys });\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): void {\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 }): void {\n this._definitions = {};\n this._transformedDefinitions = {};\n\n const { newConfig, force } = options || {};\n\n if (newConfig || force) {\n this._config = newConfig;\n this._transforms = [...defaultFactories, ...this._transformFactories].map((factory) => factory(newConfig));\n }\n }\n\n set(\n packagePath: string,\n definition: PackageJson,\n options?: Pick<GetPackageDefinitionOptions, 'disableTransforms'>,\n ): void {\n const { disableTransforms } = options || {};\n // Normalize the path used for caching to ensure consistency.\n const normalizedPath = slash(packagePath);\n // Delete the transformed definition if it exists, so we don't have stale data.\n if (disableTransforms) {\n delete this._transformedDefinitions[normalizedPath];\n }\n const record = disableTransforms ? this._definitions : this._transformedDefinitions;\n record[normalizedPath] = definition;\n }\n\n extend(input: SerializablePackageDefinitionsCache): void {\n Object.assign(this._definitions, input.definitions);\n Object.assign(this._transformedDefinitions, input.transformedDefinitions);\n }\n\n toSerializable(): SerializablePackageDefinitionsCache {\n return {\n definitions: this._definitions,\n transformedDefinitions: this._transformedDefinitions,\n };\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,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard dependency types to check in transforms.
|
|
3
|
+
* (Omits `bundle(d)Dependencies` since they don't have versions.)
|
|
4
|
+
*/
|
|
5
|
+
export declare const depTypes: readonly ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"];
|
|
6
|
+
//# sourceMappingURL=depTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depTypes.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/depTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,QAAQ,0FAA2F,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard dependency types to check in transforms.
|
|
3
|
+
* (Omits `bundle(d)Dependencies` since they don't have versions.)
|
|
4
|
+
*/
|
|
5
|
+
export const depTypes = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
|
|
6
|
+
//# sourceMappingURL=depTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depTypes.js","sourceRoot":"","sources":["../../src/packageDefinitions/depTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,CAAU,CAAC","sourcesContent":["/**\n * Standard dependency types to check in transforms.\n * (Omits `bundle(d)Dependencies` since they don't have versions.)\n */\nexport const depTypes = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] as const;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CloudpackConfig, PackageDefinitionTransform } from '@ms-cloudpack/common-types';
|
|
2
|
+
/**
|
|
3
|
+
* Get a transform which handles `catalog:*` versions by translating them to the actual versions
|
|
4
|
+
* from the catalogs. (Note that the resulting version might still be a `workspace:` version in yarn,
|
|
5
|
+
* or other non-semver.)
|
|
6
|
+
*
|
|
7
|
+
* @see https://pnpm.io/catalogs
|
|
8
|
+
* @see https://yarnpkg.com/features/catalogs
|
|
9
|
+
*/
|
|
10
|
+
export declare function getCatalogTransform(config: CloudpackConfig | undefined): PackageDefinitionTransform;
|
|
11
|
+
//# sourceMappingURL=getCatalogTransform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCatalogTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getCatalogTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAM9F;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,0BAA0B,CAwCnG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { isExternalPackage } from '@ms-cloudpack/path-utilities';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { getCatalogs, getCatalogVersion, isCatalogVersion } from 'workspace-tools';
|
|
4
|
+
import { depTypes } from './depTypes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get a transform which handles `catalog:*` versions by translating them to the actual versions
|
|
7
|
+
* from the catalogs. (Note that the resulting version might still be a `workspace:` version in yarn,
|
|
8
|
+
* or other non-semver.)
|
|
9
|
+
*
|
|
10
|
+
* @see https://pnpm.io/catalogs
|
|
11
|
+
* @see https://yarnpkg.com/features/catalogs
|
|
12
|
+
*/
|
|
13
|
+
export function getCatalogTransform(config) {
|
|
14
|
+
if (!config?.appPath || !fs.existsSync(config.appPath)) {
|
|
15
|
+
// If there's no config or appPath is invalid, it's probably running in a test.
|
|
16
|
+
// Skip loading catalogs in that case so we don't waste time searching for a root.
|
|
17
|
+
return () => undefined;
|
|
18
|
+
}
|
|
19
|
+
// Load version catalogs. This will search up from the given directory to find the root.
|
|
20
|
+
const catalogs = getCatalogs(config.appPath);
|
|
21
|
+
if (!catalogs) {
|
|
22
|
+
// No catalogs found, so no transform needed
|
|
23
|
+
return () => undefined;
|
|
24
|
+
}
|
|
25
|
+
return ({ definition, packagePath }) => {
|
|
26
|
+
if (isExternalPackage(packagePath)) {
|
|
27
|
+
// External packages can't have catalog deps
|
|
28
|
+
return definition;
|
|
29
|
+
}
|
|
30
|
+
for (const depType of depTypes) {
|
|
31
|
+
const deps = definition[depType] || {};
|
|
32
|
+
for (const [depName, depVersion] of Object.entries(deps)) {
|
|
33
|
+
if (!depVersion || !isCatalogVersion(depVersion)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// Get the real version. This will throw if the catalog specification is invalid
|
|
37
|
+
// (though probably the package manager itself would already have errored).
|
|
38
|
+
const realVersion = getCatalogVersion({ catalogs, name: depName, version: depVersion });
|
|
39
|
+
// Update the dep. Note that this may be a `workspace:` version or other non-semver.
|
|
40
|
+
deps[depName] = realVersion;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return definition;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=getCatalogTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCatalogTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getCatalogTransform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmC;IACrE,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,+EAA+E;QAC/E,kFAAkF;QAClF,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IAED,wFAAwF;IACxF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,4CAA4C;QAC5C,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE;QACrC,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,4CAA4C;YAC5C,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEvC,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;oBACjD,SAAS;gBACX,CAAC;gBAED,gFAAgF;gBAChF,2EAA2E;gBAC3E,MAAM,WAAW,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBAExF,oFAAoF;gBACpF,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { CloudpackConfig, PackageDefinitionTransform } from '@ms-cloudpack/common-types';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport fs from 'fs';\nimport { getCatalogs, getCatalogVersion, isCatalogVersion } from 'workspace-tools';\nimport { depTypes } from './depTypes.js';\n\n/**\n * Get a transform which handles `catalog:*` versions by translating them to the actual versions\n * from the catalogs. (Note that the resulting version might still be a `workspace:` version in yarn,\n * or other non-semver.)\n *\n * @see https://pnpm.io/catalogs\n * @see https://yarnpkg.com/features/catalogs\n */\nexport function getCatalogTransform(config: CloudpackConfig | undefined): PackageDefinitionTransform {\n if (!config?.appPath || !fs.existsSync(config.appPath)) {\n // If there's no config or appPath is invalid, it's probably running in a test.\n // Skip loading catalogs in that case so we don't waste time searching for a root.\n return () => undefined;\n }\n\n // Load version catalogs. This will search up from the given directory to find the root.\n const catalogs = getCatalogs(config.appPath);\n\n if (!catalogs) {\n // No catalogs found, so no transform needed\n return () => undefined;\n }\n\n return ({ definition, packagePath }) => {\n if (isExternalPackage(packagePath)) {\n // External packages can't have catalog deps\n return definition;\n }\n\n for (const depType of depTypes) {\n const deps = definition[depType] || {};\n\n for (const [depName, depVersion] of Object.entries(deps)) {\n if (!depVersion || !isCatalogVersion(depVersion)) {\n continue;\n }\n\n // Get the real version. This will throw if the catalog specification is invalid\n // (though probably the package manager itself would already have errored).\n const realVersion = getCatalogVersion({ catalogs, name: depName, version: depVersion });\n\n // Update the dep. Note that this may be a `workspace:` version or other non-semver.\n deps[depName] = realVersion;\n }\n }\n\n return definition;\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNonSemverTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getNonSemverTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAA4B,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"getNonSemverTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getNonSemverTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAA4B,MAAM,4BAA4B,CAAC;AAgBvG;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,0BAA0B,CAgHlE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import { generateVersionFromNonSemver } from './generateVersionFromNonSemver.js';
|
|
3
|
-
|
|
3
|
+
import { depTypes } from './depTypes.js';
|
|
4
4
|
/**
|
|
5
5
|
* Match yarn berry (v2+) patch versions:
|
|
6
6
|
* `patch:@foo/bar@npm%3A7.18.0#~/.yarn/patches/@foo-bar-npm-7.18.0-f1d556a934.patch`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNonSemverTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getNonSemverTransform.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"getNonSemverTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getNonSemverTransform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionTransform, PackageJsonCloudpackMeta } from '@ms-cloudpack/common-types';\nimport semver from 'semver';\nimport { generateVersionFromNonSemver } from './generateVersionFromNonSemver.js';\nimport { depTypes } from './depTypes.js';\n\n/**\n * Match yarn berry (v2+) patch versions:\n * `patch:@foo/bar@npm%3A7.18.0#~/.yarn/patches/@foo-bar-npm-7.18.0-f1d556a934.patch`\n *\n * - `[1]` is the part of the version before the `#`\n * - `[2]` is the patch path relative to root: `.yarn/patches/@foo-bar-npm-7.18.0-f1d556a934.patch`\n */\n// Be strict about matching yarn's generated path in case of other patching-related cases that\n// might need different handling (those could be explicitly supported later if needed).\nconst yarnBerryPatchRegex = /^(patch:.*?)#~\\/(\\.yarn\\/patches\\/.*\\.patch)$/;\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<`${string}@${string}`, Partial<Record<(typeof depTypes)[number], string[]>>> = {};\n /**\n * Map from transformed yarn berry patch versions to relative patch file paths.\n * (This is necessary to save because the original path is only available in the parent's deps,\n * but it needs to be added to the child's cloudpack metadata.)\n *\n * Example:\n * - Original version: `patch:@foo/bar@npm%3A7.18.0#~/.yarn/patches/@foo-bar-npm-7.18.0-f1d556a934.patch`\n * - the part after `#~/` is the patch file path\n * - Transformed version: `0.0.0-patch--foo-bar-npm-3A7-18-0`\n * - This map: `0.0.0-patch--foo-bar-npm-3A7-18-0` to `.yarn/patches/@foo-bar-npm-7.18.0-f1d556a934.patch`\n */\n const yarnPatchVersionsToFiles: Record<string, string> = {};\n\n return ({ definition, packagePath, importerContext }) => {\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 const patchFileMatch = depVersion.match(yarnBerryPatchRegex);\n\n // Update the version in the returned dependencies:\n // \"bar\": \"npm:@custom/bar@^1\" => \"0.0.0-npm--custom-bar--1\"\n // (For the yarn berry patch files, remove the path from the end to make the version shorter;\n // this will probably still be a unique version/not collide with anything else.)\n const updatedVersion = generateVersionFromNonSemver(patchFileMatch?.[1] || depVersion);\n deps[depName] = updatedVersion;\n\n if (patchFileMatch) {\n // This version corresponds to a yarn berry patch file.\n // Save the patch file path for reference when we're updating the child package.\n yarnPatchVersionsToFiles[updatedVersion] = patchFileMatch[2];\n }\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 // Check if this package's parent pulled it in with a non-semver dependency, and if so,\n // update the returned name and version.\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 // The parent has at least one non-semver dependency (which might not be this package).\n // Check in each dependency type to see if this package is listed as non-semver.\n const { importedName, versionRequirement } = importerContext;\n\n for (const depType of depTypes) {\n if (!nonSemverParentInfo[depType]?.includes(importedName)) {\n continue;\n }\n\n // This package's parent pulled it in with a non-semver dependency.\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 //\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 const origSpec = `${definition.name}@${definition.version}` as const;\n definition.name = importedName;\n definition.version = versionRequirement;\n\n if (yarnPatchVersionsToFiles[versionRequirement]) {\n // This version corresponds to a yarn berry patch file.\n // Save the patch file path for reference in PackagePatchesCache.\n // (technically `cloudpack.mode` is required, but it's set in another transform)\n definition.cloudpack ??= {} as PackageJsonCloudpackMeta;\n definition.cloudpack.patchFilePath = yarnPatchVersionsToFiles[versionRequirement];\n }\n\n // We have changed the definition, so link the entry in nonSemverDeps to the new name/version.\n if (nonSemverDeps[origSpec]) {\n nonSemverDeps[`${importedName}@${versionRequirement}`] = nonSemverDeps[origSpec];\n }\n\n break;\n }\n }\n\n return definition;\n };\n}\n"]}
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"getTypesTransform.d.ts","sourceRoot":"","sources":["../../src/packageDefinitions/getTypesTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAG7E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,0BAA0B,CAkB9D"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { depTypes } from './depTypes.js';
|
|
1
2
|
/**
|
|
2
3
|
* `@types/` dependencies should never be relevant for Cloudpack's purposes, so delete them.
|
|
3
4
|
*/
|
|
4
5
|
export function getTypesTransform() {
|
|
5
6
|
return ({ definition }) => {
|
|
6
7
|
// Ignore bundle(d)Dependencies since they're so uncommon and unlikely to cause issues if present
|
|
7
|
-
for (const depType of
|
|
8
|
+
for (const depType of depTypes) {
|
|
8
9
|
const deps = definition[depType];
|
|
9
10
|
if (!deps) {
|
|
10
11
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTypesTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getTypesTransform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getTypesTransform.js","sourceRoot":"","sources":["../../src/packageDefinitions/getTypesTransform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QACxB,iGAAiG;QACjG,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,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;gBACxC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { PackageDefinitionTransform } from '@ms-cloudpack/common-types';\nimport { depTypes } from './depTypes.js';\n\n/**\n * `@types/` dependencies should never be relevant for Cloudpack's purposes, so delete them.\n */\nexport function getTypesTransform(): PackageDefinitionTransform {\n return ({ definition }) => {\n // Ignore bundle(d)Dependencies since they're so uncommon and unlikely to cause issues if present\n for (const depType of depTypes) {\n const deps = definition[depType];\n if (!deps) {\n continue;\n }\n\n for (const depName of Object.keys(deps)) {\n if (depName.startsWith('@types/')) {\n delete deps[depName];\n }\n }\n }\n\n return definition;\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/package-utilities",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.7.0",
|
|
4
4
|
"description": "Utilities for resolving/parsing packages and their imports in Cloudpack",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,12 +28,13 @@
|
|
|
28
28
|
"@ms-cloudpack/common-types": "^0.33.2",
|
|
29
29
|
"@ms-cloudpack/json-utilities": "^0.1.11",
|
|
30
30
|
"@ms-cloudpack/path-string-parsing": "^1.3.0",
|
|
31
|
-
"@ms-cloudpack/path-utilities": "^3.2.
|
|
31
|
+
"@ms-cloudpack/path-utilities": "^3.2.7",
|
|
32
32
|
"@ms-cloudpack/task-reporter": "^0.19.0",
|
|
33
33
|
"acorn": "^8.11.2",
|
|
34
34
|
"acorn-walk": "^8.2.1",
|
|
35
35
|
"semver": "^7.6.0",
|
|
36
|
-
"tinyglobby": "^0.2.13"
|
|
36
|
+
"tinyglobby": "^0.2.13",
|
|
37
|
+
"workspace-tools": "^0.40.2"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
|