@ms-cloudpack/package-utilities 13.2.2 → 13.2.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"getExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG/G;;;;;;;GAOG;AAEH,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,EAC3F,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE/B,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"getExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAGpC;;;;;;;GAOG;AAEH,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,EAC3F,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE/B,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,kBAAkB,CAAC,CAAC"}
@@ -11,12 +11,13 @@ export async function getExportsMap(options, context) {
11
11
  if (definition.exports !== undefined) {
12
12
  return definition.exports;
13
13
  }
14
+ const bundlerCapabilities = (definition.cloudpack?.bundlerCapabilities || {});
14
15
  return createExportsMap({
15
16
  ...options,
16
17
  resolveWebExtensions: options.resolveWebExtensions ??
17
- definition.cloudpack?.bundlerCapabilities?.['resolve-web-extensions'] ??
18
+ bundlerCapabilities['resolve-web-extensions'] ??
18
19
  // eslint-disable-next-line etc/no-deprecated
19
- Boolean(context.config.features?.resolveWebExtensions),
20
+ !!context.config.features?.resolveWebExtensions,
20
21
  }, context);
21
22
  }
22
23
  //# sourceMappingURL=getExportsMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAoBzD,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6F,EAC7F,OAAyF;IAEzF,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,KAAK,SAAS,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAClF,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,OAAO,gBAAgB,CACrB;QACE,GAAG,OAAO;QACV,oBAAoB,EAClB,OAAO,CAAC,oBAAoB;YAC5B,UAAU,CAAC,SAAS,EAAE,mBAAmB,EAAE,CAAC,wBAAwB,CAAC;YACrE,6CAA6C;YAC7C,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC;KACzD,EACD,OAAO,CACR,CAAC;AACJ,CAAC","sourcesContent":["import type { CloudpackConfig, PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/common-types';\nimport { createExportsMap } 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: { packagePath: string; disableTransforms: boolean; resolveWebExtensions: boolean },\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\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: { packagePath: string },\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\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 !== undefined && 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 return createExportsMap(\n {\n ...options,\n resolveWebExtensions:\n options.resolveWebExtensions ??\n definition.cloudpack?.bundlerCapabilities?.['resolve-web-extensions'] ??\n // eslint-disable-next-line etc/no-deprecated\n Boolean(context.config.features?.resolveWebExtensions),\n },\n context,\n );\n}\n"]}
1
+ {"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAoBzD,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6F,EAC7F,OAAyF;IAEzF,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,KAAK,SAAS,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAClF,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,CAAC,QAAQ,EAAE,oBAAoB;KAClD,EACD,OAAO,CACR,CAAC;AACJ,CAAC","sourcesContent":["import type {\n CloudpackConfig,\n InternalBundlerCapabilitiesOptions,\n PackageDefinitionsCache,\n PackageJsonExports,\n} from '@ms-cloudpack/common-types';\nimport { createExportsMap } 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: { packagePath: string; disableTransforms: boolean; resolveWebExtensions: boolean },\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\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: { packagePath: string },\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\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 !== undefined && 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,4 +1,4 @@
1
- import { type PackageDefinitionsCache } from '@ms-cloudpack/common-types';
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Given a package path, read the package definition's main and modules, if present,
4
4
  * to uncover cjs and esm output paths. If both main and module are present, and they
@@ -1 +1 @@
1
- {"version":3,"file":"findPackageOutputPaths.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/findPackageOutputPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAK1E;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAuE3D"}
1
+ {"version":3,"file":"findPackageOutputPaths.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/findPackageOutputPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAK1E;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAuE3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"findPackageOutputPaths.js","sourceRoot":"","sources":["../../src/findFileInPackage/findPackageOutputPaths.ts"],"names":[],"mappings":"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","sourcesContent":["import { type PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';\nimport { isFileSync, isFolderSync } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\n\n/**\n * Given a package path, read the package definition's main and modules, if present,\n * to uncover cjs and esm output paths. If both main and module are present, and they\n * point to the same filename in distinct paths, we can infer the common ancestor to\n * derive cjs/esm output paths. This is particularly useful in getCandidates, where\n * we need to translate a request import file path into a physical file.\n *\n * Paths are normalized - slashes will be forward, paths are relative and start with a period,\n * and they will always end with a trailing slash to make it easy to replace within\n * findCandidates.\n *\n * If there is not enough info to conclude the output paths, return undefined.\n */\nexport async function findPackageOutputPaths(\n packagePath: string,\n context: { packages: PackageDefinitionsCache },\n): Promise<{ cjsPath: string; esmPath: string } | undefined> {\n const originalDefinition = await context.packages.get(packagePath, { disableTransforms: true });\n\n const { exports, main, module } = originalDefinition;\n\n // If an exports map is provided, or we're missing main or module, don't\n // try and derive an output path. We don't have enough information.\n if (exports || !main || !module || main === module) {\n return undefined;\n }\n\n // We should only attempt to find package output paths if main and module\n // are filenames that have extensions.\n const mainExt = path.extname(main);\n const moduleExt = path.extname(module);\n\n // If main/module have an extension, we need to remove the filename to get the folder.\n let cjsPath = main;\n let esmPath = module;\n\n // If either are folders, we should assume we're looking for index.js within the folder.\n if (!mainExt) {\n if (isFolderSync(path.resolve(packagePath, main))) {\n cjsPath = slash(path.join(main, 'index.js'));\n } else if (isFileSync(path.resolve(packagePath, main + '.js'))) {\n cjsPath = main + '.js';\n }\n }\n if (!moduleExt) {\n if (isFolderSync(path.resolve(packagePath, module))) {\n esmPath = slash(path.join(module, 'index.js'));\n } else if (isFileSync(path.resolve(packagePath, module + '.js'))) {\n esmPath = module + '.js';\n }\n }\n\n // If the filenames don't match (ignoring extensions because of cjs vs mjs), we could\n // be in an asymmetrical case (e.g. main: /dist/foo.js vs module: /dist-esm/src/bar.js)\n if (path.basename(cjsPath, mainExt) !== path.basename(esmPath, moduleExt)) {\n return undefined;\n }\n\n // Ignore the filenames (which might differ on extension, js vs cjs vs mjs.)\n cjsPath = path.dirname(cjsPath);\n esmPath = path.dirname(esmPath);\n\n // They are different - strip off the common paths at the end to derive\n // the unique cjs/esm output paths.\n // For example, if main is `lib/cjs/foo/bar/index.js' and module is `lib/esm/foo/bar/index.js`,\n // then the cjsOutputPath is `lib/cjs` and the esmOutputPath is `lib/esm`.\n const mainParts = cjsPath?.split('/');\n const moduleParts = esmPath?.split('/');\n const commonParts = [];\n\n while (\n mainParts.length &&\n moduleParts.length &&\n mainParts[mainParts.length - 1] === moduleParts[moduleParts.length - 1]\n ) {\n commonParts.unshift(mainParts.pop());\n moduleParts.pop();\n }\n\n cjsPath = normalizeRelativePath(mainParts.length ? mainParts.join('/') : cjsPath || '') + '/';\n esmPath = normalizeRelativePath(moduleParts.length ? moduleParts.join('/') : esmPath || '') + '/';\n\n if (cjsPath === esmPath || cjsPath === './' || esmPath === './') {\n return undefined;\n }\n\n return { cjsPath, esmPath };\n}\n"]}
1
+ {"version":3,"file":"findPackageOutputPaths.js","sourceRoot":"","sources":["../../src/findFileInPackage/findPackageOutputPaths.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';\nimport { isFileSync, isFolderSync } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\n\n/**\n * Given a package path, read the package definition's main and modules, if present,\n * to uncover cjs and esm output paths. If both main and module are present, and they\n * point to the same filename in distinct paths, we can infer the common ancestor to\n * derive cjs/esm output paths. This is particularly useful in getCandidates, where\n * we need to translate a request import file path into a physical file.\n *\n * Paths are normalized - slashes will be forward, paths are relative and start with a period,\n * and they will always end with a trailing slash to make it easy to replace within\n * findCandidates.\n *\n * If there is not enough info to conclude the output paths, return undefined.\n */\nexport async function findPackageOutputPaths(\n packagePath: string,\n context: { packages: PackageDefinitionsCache },\n): Promise<{ cjsPath: string; esmPath: string } | undefined> {\n const originalDefinition = await context.packages.get(packagePath, { disableTransforms: true });\n\n const { exports, main, module } = originalDefinition;\n\n // If an exports map is provided, or we're missing main or module, don't\n // try and derive an output path. We don't have enough information.\n if (exports || !main || !module || main === module) {\n return undefined;\n }\n\n // We should only attempt to find package output paths if main and module\n // are filenames that have extensions.\n const mainExt = path.extname(main);\n const moduleExt = path.extname(module);\n\n // If main/module have an extension, we need to remove the filename to get the folder.\n let cjsPath = main;\n let esmPath = module;\n\n // If either are folders, we should assume we're looking for index.js within the folder.\n if (!mainExt) {\n if (isFolderSync(path.resolve(packagePath, main))) {\n cjsPath = slash(path.join(main, 'index.js'));\n } else if (isFileSync(path.resolve(packagePath, main + '.js'))) {\n cjsPath = main + '.js';\n }\n }\n if (!moduleExt) {\n if (isFolderSync(path.resolve(packagePath, module))) {\n esmPath = slash(path.join(module, 'index.js'));\n } else if (isFileSync(path.resolve(packagePath, module + '.js'))) {\n esmPath = module + '.js';\n }\n }\n\n // If the filenames don't match (ignoring extensions because of cjs vs mjs), we could\n // be in an asymmetrical case (e.g. main: /dist/foo.js vs module: /dist-esm/src/bar.js)\n if (path.basename(cjsPath, mainExt) !== path.basename(esmPath, moduleExt)) {\n return undefined;\n }\n\n // Ignore the filenames (which might differ on extension, js vs cjs vs mjs.)\n cjsPath = path.dirname(cjsPath);\n esmPath = path.dirname(esmPath);\n\n // They are different - strip off the common paths at the end to derive\n // the unique cjs/esm output paths.\n // For example, if main is `lib/cjs/foo/bar/index.js' and module is `lib/esm/foo/bar/index.js`,\n // then the cjsOutputPath is `lib/cjs` and the esmOutputPath is `lib/esm`.\n const mainParts = cjsPath?.split('/');\n const moduleParts = esmPath?.split('/');\n const commonParts = [];\n\n while (\n mainParts.length &&\n moduleParts.length &&\n mainParts[mainParts.length - 1] === moduleParts[moduleParts.length - 1]\n ) {\n commonParts.unshift(mainParts.pop());\n moduleParts.pop();\n }\n\n cjsPath = normalizeRelativePath(mainParts.length ? mainParts.join('/') : cjsPath || '') + '/';\n esmPath = normalizeRelativePath(moduleParts.length ? moduleParts.join('/') : esmPath || '') + '/';\n\n if (cjsPath === esmPath || cjsPath === './' || esmPath === './') {\n return undefined;\n }\n\n return { cjsPath, esmPath };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { type PackageDefinitionsCache } from '@ms-cloudpack/common-types';
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Given a packagePath and a filePath from its exports map (or main/module), build candidate paths
4
4
  * to look for the physical file in order of priority. For internal packages, we try to discover
@@ -1 +1 @@
1
- {"version":3,"file":"getCandidates.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/getCandidates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AA4B1E;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,EACjF,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,MAAM,EAAE,CAAC,CA0EnB"}
1
+ {"version":3,"file":"getCandidates.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/getCandidates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AA4B1E;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,EACjF,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,MAAM,EAAE,CAAC,CA0EnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"getCandidates.js","sourceRoot":"","sources":["../../src/findFileInPackage/getCandidates.ts"],"names":[],"mappings":"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","sourcesContent":["import { type PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport { findPackageOutputPaths } from './findPackageOutputPaths.js';\n\n// Mappings to possible candidate extensions for a given input extension.\nconst externalExtensions = ['.js', '.mjs', '.cjs'];\nconst internalExtensions = ['.ts', '.tsx', '.mts', '.cts', '.jsx', '.js', '.mjs', '.cjs'];\nconst internalExtensionMap: Record<string, string[]> = {\n '.ts': ['.ts', '.js'],\n '.tsx': ['.tsx', '.js'],\n '.mts': ['.mts', '.mjs', '.js'],\n '.cts': ['.cts', '.cjs', '.js'],\n '.jsx': ['.jsx', '.js'],\n '.js': ['.ts', '.tsx', '.mts', '.cts', '.jsx', '.js'],\n '.mjs': ['.mjs', '.js'],\n '.cjs': ['.cjs', '.js'],\n};\nconst externalExtensionMap: Record<string, string[]> = {\n '.ts': ['.js'],\n '.tsx': ['.js'],\n '.mts': ['.mjs'],\n '.cts': ['.cjs'],\n '.jsx': ['.js'],\n '.js': ['.js'],\n};\n\n/**\n * Given a packagePath and a filePath from its exports map (or main/module), build candidate paths\n * to look for the physical file in order of priority. For internal packages, we try to discover\n * source files first, and then fallback to the original file name. We also search for index files\n * and expand folder paths as well for ambiguous references. For external packages, we prioritize\n * intermediate paths.\n */\nexport async function getCandidates(\n options: { filePath: string; packagePath: string; resolveWebExtensions: boolean },\n context: { packages: PackageDefinitionsCache },\n): Promise<string[]> {\n const outputPaths = await findPackageOutputPaths(options.packagePath, context);\n const { filePath, packagePath, resolveWebExtensions } = options;\n const isBlankPath = !filePath || filePath === '.';\n const originalPath = isBlankPath ? './index' : normalizeRelativePath(filePath);\n const originalExt = path.extname(originalPath);\n const isInternal = !isExternalPackage(packagePath);\n const endsWithSlash = originalPath.endsWith('/');\n const candidates = [];\n const defaultExtensions = isInternal ? internalExtensions : externalExtensions;\n const defaultExtensionsWithSuffixes = resolveWebExtensions\n ? [...defaultExtensions.map((ext) => `.web${ext}`), ...defaultExtensions]\n : defaultExtensions;\n const extensions =\n (isInternal ? internalExtensionMap : externalExtensionMap)[originalExt] || defaultExtensionsWithSuffixes;\n\n const pathsToAdd: string[] = [];\n\n // For internal packages, we try and resolve the source file name first.\n const { esmPath, cjsPath } = outputPaths || {};\n\n if (isInternal) {\n if (cjsPath && esmPath) {\n if (originalPath.startsWith(esmPath)) {\n pathsToAdd.push(originalPath.replace(esmPath, './src/'));\n } else if (originalPath.startsWith(cjsPath)) {\n pathsToAdd.push(originalPath.replace(cjsPath, './src/'));\n }\n } else if (originalPath.startsWith('./lib/')) {\n pathsToAdd.push(originalPath.replace(/^\\.\\/lib\\//, './src/'));\n }\n }\n\n // If we have both values and the path is not already esm...\n if (esmPath && cjsPath && !originalPath.startsWith(esmPath)) {\n // We have a distinct esm output path. If the original path refers to the cjsPath,\n // refer only to the esm path.\n pathsToAdd.push(originalPath.replace(cjsPath, esmPath));\n } else {\n pathsToAdd.push(originalPath);\n }\n\n for (let currentPath of pathsToAdd) {\n const unrecognizedExt = originalExt && !extensions.includes(path.extname(currentPath));\n\n // For internal packages, we try and resolve the original file name first.\n if (isInternal && unrecognizedExt) {\n candidates.push(currentPath);\n }\n\n // If the path doesn't end with a slash, it could be a file. Add extensions.\n if (!endsWithSlash) {\n candidates.push(...expandExtensions(currentPath, extensions));\n }\n\n // For non-extension references, we might be referring to a folder, or a barrel file within a folder. Add the\n // appropriate extensions for the barrel file, and fall back to a package.json in the case of nested definitions.\n if (!originalExt && !isBlankPath) {\n // Trim trailing slash\n if (endsWithSlash) {\n currentPath = currentPath.slice(0, -1);\n }\n\n candidates.push(...expandExtensions(currentPath + '/index', extensions));\n candidates.push(currentPath + '/package.json');\n }\n\n // For external packages, we try and resolve the original file name last.\n if (!isInternal && unrecognizedExt) {\n candidates.push(currentPath);\n }\n }\n\n return candidates;\n}\n\n/**\n * Given a filepath and list of extensions, maps extensions to prepend the filepath. In the case that\n * the filepath has an extension already in the list, avoids appending the extension twice.\n *\n * For example, `filePath = './foo/bar.js'` with extensions `['.ts', '.js']` would result in:\n * `['./foo/bar.ts.js', './foo/bar.js']`\n */\nfunction expandExtensions(filePath: string, extensions: string[]): string[] {\n const result: string[] = [];\n const ext = path.extname(filePath);\n\n if (extensions.includes(ext)) {\n filePath = `${filePath.slice(0, -ext.length)}`;\n }\n\n for (const currentExt of extensions) {\n result.push(filePath + currentExt);\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"getCandidates.js","sourceRoot":"","sources":["../../src/findFileInPackage/getCandidates.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport path from 'path';\nimport { findPackageOutputPaths } from './findPackageOutputPaths.js';\n\n// Mappings to possible candidate extensions for a given input extension.\nconst externalExtensions = ['.js', '.mjs', '.cjs'];\nconst internalExtensions = ['.ts', '.tsx', '.mts', '.cts', '.jsx', '.js', '.mjs', '.cjs'];\nconst internalExtensionMap: Record<string, string[]> = {\n '.ts': ['.ts', '.js'],\n '.tsx': ['.tsx', '.js'],\n '.mts': ['.mts', '.mjs', '.js'],\n '.cts': ['.cts', '.cjs', '.js'],\n '.jsx': ['.jsx', '.js'],\n '.js': ['.ts', '.tsx', '.mts', '.cts', '.jsx', '.js'],\n '.mjs': ['.mjs', '.js'],\n '.cjs': ['.cjs', '.js'],\n};\nconst externalExtensionMap: Record<string, string[]> = {\n '.ts': ['.js'],\n '.tsx': ['.js'],\n '.mts': ['.mjs'],\n '.cts': ['.cjs'],\n '.jsx': ['.js'],\n '.js': ['.js'],\n};\n\n/**\n * Given a packagePath and a filePath from its exports map (or main/module), build candidate paths\n * to look for the physical file in order of priority. For internal packages, we try to discover\n * source files first, and then fallback to the original file name. We also search for index files\n * and expand folder paths as well for ambiguous references. For external packages, we prioritize\n * intermediate paths.\n */\nexport async function getCandidates(\n options: { filePath: string; packagePath: string; resolveWebExtensions: boolean },\n context: { packages: PackageDefinitionsCache },\n): Promise<string[]> {\n const outputPaths = await findPackageOutputPaths(options.packagePath, context);\n const { filePath, packagePath, resolveWebExtensions } = options;\n const isBlankPath = !filePath || filePath === '.';\n const originalPath = isBlankPath ? './index' : normalizeRelativePath(filePath);\n const originalExt = path.extname(originalPath);\n const isInternal = !isExternalPackage(packagePath);\n const endsWithSlash = originalPath.endsWith('/');\n const candidates = [];\n const defaultExtensions = isInternal ? internalExtensions : externalExtensions;\n const defaultExtensionsWithSuffixes = resolveWebExtensions\n ? [...defaultExtensions.map((ext) => `.web${ext}`), ...defaultExtensions]\n : defaultExtensions;\n const extensions =\n (isInternal ? internalExtensionMap : externalExtensionMap)[originalExt] || defaultExtensionsWithSuffixes;\n\n const pathsToAdd: string[] = [];\n\n // For internal packages, we try and resolve the source file name first.\n const { esmPath, cjsPath } = outputPaths || {};\n\n if (isInternal) {\n if (cjsPath && esmPath) {\n if (originalPath.startsWith(esmPath)) {\n pathsToAdd.push(originalPath.replace(esmPath, './src/'));\n } else if (originalPath.startsWith(cjsPath)) {\n pathsToAdd.push(originalPath.replace(cjsPath, './src/'));\n }\n } else if (originalPath.startsWith('./lib/')) {\n pathsToAdd.push(originalPath.replace(/^\\.\\/lib\\//, './src/'));\n }\n }\n\n // If we have both values and the path is not already esm...\n if (esmPath && cjsPath && !originalPath.startsWith(esmPath)) {\n // We have a distinct esm output path. If the original path refers to the cjsPath,\n // refer only to the esm path.\n pathsToAdd.push(originalPath.replace(cjsPath, esmPath));\n } else {\n pathsToAdd.push(originalPath);\n }\n\n for (let currentPath of pathsToAdd) {\n const unrecognizedExt = originalExt && !extensions.includes(path.extname(currentPath));\n\n // For internal packages, we try and resolve the original file name first.\n if (isInternal && unrecognizedExt) {\n candidates.push(currentPath);\n }\n\n // If the path doesn't end with a slash, it could be a file. Add extensions.\n if (!endsWithSlash) {\n candidates.push(...expandExtensions(currentPath, extensions));\n }\n\n // For non-extension references, we might be referring to a folder, or a barrel file within a folder. Add the\n // appropriate extensions for the barrel file, and fall back to a package.json in the case of nested definitions.\n if (!originalExt && !isBlankPath) {\n // Trim trailing slash\n if (endsWithSlash) {\n currentPath = currentPath.slice(0, -1);\n }\n\n candidates.push(...expandExtensions(currentPath + '/index', extensions));\n candidates.push(currentPath + '/package.json');\n }\n\n // For external packages, we try and resolve the original file name last.\n if (!isInternal && unrecognizedExt) {\n candidates.push(currentPath);\n }\n }\n\n return candidates;\n}\n\n/**\n * Given a filepath and list of extensions, maps extensions to prepend the filepath. In the case that\n * the filepath has an extension already in the list, avoids appending the extension twice.\n *\n * For example, `filePath = './foo/bar.js'` with extensions `['.ts', '.js']` would result in:\n * `['./foo/bar.ts.js', './foo/bar.js']`\n */\nfunction expandExtensions(filePath: string, extensions: string[]): string[] {\n const result: string[] = [];\n const ext = path.extname(filePath);\n\n if (extensions.includes(ext)) {\n filePath = `${filePath.slice(0, -ext.length)}`;\n }\n\n for (const currentExt of extensions) {\n result.push(filePath + currentExt);\n }\n\n return result;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/package-utilities",
3
- "version": "13.2.2",
3
+ "version": "13.2.3",
4
4
  "description": "Utilities for resolving/parsing packages and their imports in Cloudpack",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,11 +13,22 @@
13
13
  "import": "./lib/index.js"
14
14
  }
15
15
  },
16
+ "scripts": {
17
+ "api": "cloudpack-scripts api",
18
+ "build:watch": "cloudpack-scripts build-watch",
19
+ "build": "cloudpack-scripts build",
20
+ "lint:update": "cloudpack-scripts lint-update",
21
+ "lint": "cloudpack-scripts lint",
22
+ "prepack": "cp .npmignore lib/.npmignore",
23
+ "test:update": "cloudpack-scripts test-update",
24
+ "test:watch": "cloudpack-scripts test-watch",
25
+ "test": "cloudpack-scripts test"
26
+ },
16
27
  "dependencies": {
17
- "@ms-cloudpack/common-types": "^0.32.2",
28
+ "@ms-cloudpack/common-types": "^0.33.0",
18
29
  "@ms-cloudpack/json-utilities": "^0.1.11",
19
30
  "@ms-cloudpack/path-string-parsing": "^1.2.7",
20
- "@ms-cloudpack/path-utilities": "^3.1.34",
31
+ "@ms-cloudpack/path-utilities": "^3.2.0",
21
32
  "@ms-cloudpack/task-reporter": "^0.17.4",
22
33
  "acorn": "^8.11.2",
23
34
  "acorn-walk": "^8.2.1",
@@ -29,17 +40,6 @@
29
40
  "@ms-cloudpack/scripts": "^0.0.1",
30
41
  "@ms-cloudpack/test-utilities": "^0.5.0"
31
42
  },
32
- "scripts": {
33
- "api": "cloudpack-scripts api",
34
- "build:watch": "cloudpack-scripts build-watch",
35
- "build": "cloudpack-scripts build",
36
- "lint:update": "cloudpack-scripts lint-update",
37
- "lint": "cloudpack-scripts lint",
38
- "prepack": "cp .npmignore lib/.npmignore",
39
- "test:update": "cloudpack-scripts test-update",
40
- "test:watch": "cloudpack-scripts test-watch",
41
- "test": "cloudpack-scripts test"
42
- },
43
43
  "files": [
44
44
  "lib/**/!(*.test.*)"
45
45
  ],