@ms-cloudpack/package-utilities 10.4.2 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/lib/detectModuleType.d.ts +2 -0
  2. package/lib/detectModuleType.d.ts.map +1 -1
  3. package/lib/detectModuleType.js +2 -0
  4. package/lib/detectModuleType.js.map +1 -1
  5. package/lib/{addExportsMapEntry.d.ts → exportsMap/addExportsMapEntry.d.ts} +1 -1
  6. package/lib/exportsMap/addExportsMapEntry.d.ts.map +1 -0
  7. package/lib/{addExportsMapEntry.js → exportsMap/addExportsMapEntry.js} +1 -1
  8. package/lib/exportsMap/addExportsMapEntry.js.map +1 -0
  9. package/lib/exportsMap/createExportsMap.d.ts.map +1 -0
  10. package/lib/exportsMap/createExportsMap.js.map +1 -0
  11. package/lib/exportsMap/flattenExportsMap.d.ts.map +1 -0
  12. package/lib/{flattenExportsMap.js → exportsMap/flattenExportsMap.js} +10 -2
  13. package/lib/exportsMap/flattenExportsMap.js.map +1 -0
  14. package/lib/exportsMap/getExportsMap.d.ts.map +1 -0
  15. package/lib/exportsMap/getExportsMap.js.map +1 -0
  16. package/lib/{getSourceEntry.d.ts → exportsMap/getSourceEntry.d.ts} +1 -1
  17. package/lib/exportsMap/getSourceEntry.d.ts.map +1 -0
  18. package/lib/{getSourceEntry.js → exportsMap/getSourceEntry.js} +2 -3
  19. package/lib/exportsMap/getSourceEntry.js.map +1 -0
  20. package/lib/findFileInPackage/findFileInPackage.d.ts.map +1 -0
  21. package/lib/{findFileInPackage.js → findFileInPackage/findFileInPackage.js} +3 -4
  22. package/lib/findFileInPackage/findFileInPackage.js.map +1 -0
  23. package/lib/findFileInPackage/findPackage.d.ts.map +1 -0
  24. package/lib/findFileInPackage/findPackage.js.map +1 -0
  25. package/lib/findFileInPackage/findPackageOutputPaths.d.ts.map +1 -0
  26. package/lib/findFileInPackage/findPackageOutputPaths.js.map +1 -0
  27. package/lib/findFileInPackage/getCandidates.d.ts.map +1 -0
  28. package/lib/{getCandidates.js → findFileInPackage/getCandidates.js} +3 -5
  29. package/lib/findFileInPackage/getCandidates.js.map +1 -0
  30. package/lib/index.d.ts +18 -24
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +18 -24
  33. package/lib/index.js.map +1 -1
  34. package/lib/object/mergeArrayDefaults.d.ts.map +1 -0
  35. package/lib/object/mergeArrayDefaults.js.map +1 -0
  36. package/lib/object/mergeObjects.d.ts.map +1 -0
  37. package/lib/object/mergeObjects.js.map +1 -0
  38. package/lib/packageDefinitions/MockPackageDefinitions.d.ts +27 -0
  39. package/lib/packageDefinitions/MockPackageDefinitions.d.ts.map +1 -0
  40. package/lib/packageDefinitions/MockPackageDefinitions.js +21 -0
  41. package/lib/packageDefinitions/MockPackageDefinitions.js.map +1 -0
  42. package/lib/packageDefinitions/PackageDefinitions.d.ts +35 -0
  43. package/lib/packageDefinitions/PackageDefinitions.d.ts.map +1 -0
  44. package/lib/{PackageDefinitions.js → packageDefinitions/PackageDefinitions.js} +18 -16
  45. package/lib/packageDefinitions/PackageDefinitions.js.map +1 -0
  46. package/lib/packageDefinitions/generateVersionFromNonSemver.d.ts.map +1 -0
  47. package/lib/packageDefinitions/generateVersionFromNonSemver.js.map +1 -0
  48. package/lib/packageDefinitions/getApiServerTransform.d.ts.map +1 -0
  49. package/lib/packageDefinitions/getApiServerTransform.js.map +1 -0
  50. package/lib/packageDefinitions/getNonSemverTransform.d.ts.map +1 -0
  51. package/lib/packageDefinitions/getNonSemverTransform.js.map +1 -0
  52. package/lib/packageDefinitions/getTypesTransform.d.ts.map +1 -0
  53. package/lib/packageDefinitions/getTypesTransform.js.map +1 -0
  54. package/lib/packageJson/getDependencies.d.ts.map +1 -0
  55. package/lib/packageJson/getDependencies.js.map +1 -0
  56. package/lib/packageJson/getUnusedDependencies.d.ts.map +1 -0
  57. package/lib/packageJson/getUnusedDependencies.js.map +1 -0
  58. package/lib/packageJson/getVersion.d.ts +14 -0
  59. package/lib/packageJson/getVersion.d.ts.map +1 -0
  60. package/lib/packageJson/getVersion.js +33 -0
  61. package/lib/packageJson/getVersion.js.map +1 -0
  62. package/lib/{createResolveMap → resolveMap/createHelpers}/addLinkedEntryDependencies.d.ts +1 -1
  63. package/lib/resolveMap/createHelpers/addLinkedEntryDependencies.d.ts.map +1 -0
  64. package/lib/{createResolveMap → resolveMap/createHelpers}/addLinkedEntryDependencies.js +1 -1
  65. package/lib/resolveMap/createHelpers/addLinkedEntryDependencies.js.map +1 -0
  66. package/lib/{createResolveMap → resolveMap/createHelpers}/convertToResolveMap.d.ts +1 -1
  67. package/lib/resolveMap/createHelpers/convertToResolveMap.d.ts.map +1 -0
  68. package/lib/resolveMap/createHelpers/convertToResolveMap.js.map +1 -0
  69. package/lib/{createResolveMap → resolveMap/createHelpers}/dedupeLinkedPackages.d.ts +1 -1
  70. package/lib/resolveMap/createHelpers/dedupeLinkedPackages.d.ts.map +1 -0
  71. package/lib/resolveMap/createHelpers/dedupeLinkedPackages.js.map +1 -0
  72. package/lib/{createResolveMap → resolveMap/createHelpers}/detachEntry.d.ts +1 -1
  73. package/lib/resolveMap/createHelpers/detachEntry.d.ts.map +1 -0
  74. package/lib/resolveMap/createHelpers/detachEntry.js.map +1 -0
  75. package/lib/{createResolveMap → resolveMap/createHelpers}/entrySorter.d.ts +1 -1
  76. package/lib/resolveMap/createHelpers/entrySorter.d.ts.map +1 -0
  77. package/lib/resolveMap/createHelpers/entrySorter.js.map +1 -0
  78. package/lib/{createResolveMap → resolveMap/createHelpers}/findPackagesFromPath.d.ts +1 -1
  79. package/lib/resolveMap/createHelpers/findPackagesFromPath.d.ts.map +1 -0
  80. package/lib/{createResolveMap → resolveMap/createHelpers}/findPackagesFromPath.js +4 -6
  81. package/lib/resolveMap/createHelpers/findPackagesFromPath.js.map +1 -0
  82. package/lib/{createResolveMap → resolveMap/createHelpers}/linkPath.d.ts +1 -1
  83. package/lib/resolveMap/createHelpers/linkPath.d.ts.map +1 -0
  84. package/lib/resolveMap/createHelpers/linkPath.js.map +1 -0
  85. package/lib/resolveMap/createHelpers/parseRequiredBy.d.ts.map +1 -0
  86. package/lib/resolveMap/createHelpers/parseRequiredBy.js.map +1 -0
  87. package/lib/resolveMap/createHelpers/types/PackageMap.d.ts.map +1 -0
  88. package/lib/resolveMap/createHelpers/types/PackageMap.js.map +1 -0
  89. package/lib/{createResolveMap → resolveMap}/createResolveMap.d.ts +1 -1
  90. package/lib/resolveMap/createResolveMap.d.ts.map +1 -0
  91. package/lib/{createResolveMap → resolveMap}/createResolveMap.js +4 -4
  92. package/lib/resolveMap/createResolveMap.js.map +1 -0
  93. package/lib/resolveMap/diffResolveMaps.d.ts.map +1 -0
  94. package/lib/resolveMap/diffResolveMaps.js.map +1 -0
  95. package/lib/resolveMap/ensureResolveMapEntry.d.ts.map +1 -0
  96. package/lib/{ensureResolveMapEntry.js → resolveMap/ensureResolveMapEntry.js} +2 -3
  97. package/lib/resolveMap/ensureResolveMapEntry.js.map +1 -0
  98. package/lib/resolveMap/findResolveMapEntry.d.ts.map +1 -0
  99. package/lib/resolveMap/findResolveMapEntry.js.map +1 -0
  100. package/package.json +7 -10
  101. package/lib/PackageDefinitions.d.ts +0 -23
  102. package/lib/PackageDefinitions.d.ts.map +0 -1
  103. package/lib/PackageDefinitions.js.map +0 -1
  104. package/lib/addExportsMapEntry.d.ts.map +0 -1
  105. package/lib/addExportsMapEntry.js.map +0 -1
  106. package/lib/cleanEntry.d.ts +0 -2
  107. package/lib/cleanEntry.d.ts.map +0 -1
  108. package/lib/cleanEntry.js +0 -11
  109. package/lib/cleanEntry.js.map +0 -1
  110. package/lib/createExportsMap.d.ts.map +0 -1
  111. package/lib/createExportsMap.js.map +0 -1
  112. package/lib/createResolveMap/addLinkedEntryDependencies.d.ts.map +0 -1
  113. package/lib/createResolveMap/addLinkedEntryDependencies.js.map +0 -1
  114. package/lib/createResolveMap/convertToResolveMap.d.ts.map +0 -1
  115. package/lib/createResolveMap/convertToResolveMap.js.map +0 -1
  116. package/lib/createResolveMap/createResolveMap.d.ts.map +0 -1
  117. package/lib/createResolveMap/createResolveMap.js.map +0 -1
  118. package/lib/createResolveMap/dedupeLinkedPackages.d.ts.map +0 -1
  119. package/lib/createResolveMap/dedupeLinkedPackages.js.map +0 -1
  120. package/lib/createResolveMap/detachEntry.d.ts.map +0 -1
  121. package/lib/createResolveMap/detachEntry.js.map +0 -1
  122. package/lib/createResolveMap/diffResolveMaps.d.ts.map +0 -1
  123. package/lib/createResolveMap/diffResolveMaps.js.map +0 -1
  124. package/lib/createResolveMap/entrySorter.d.ts.map +0 -1
  125. package/lib/createResolveMap/entrySorter.js.map +0 -1
  126. package/lib/createResolveMap/findPackagesFromPath.d.ts.map +0 -1
  127. package/lib/createResolveMap/findPackagesFromPath.js.map +0 -1
  128. package/lib/createResolveMap/linkPath.d.ts.map +0 -1
  129. package/lib/createResolveMap/linkPath.js.map +0 -1
  130. package/lib/createResolveMap/parseRequiredBy.d.ts.map +0 -1
  131. package/lib/createResolveMap/parseRequiredBy.js.map +0 -1
  132. package/lib/ensureResolveMapEntry.d.ts.map +0 -1
  133. package/lib/ensureResolveMapEntry.js.map +0 -1
  134. package/lib/findFileInPackage.d.ts.map +0 -1
  135. package/lib/findFileInPackage.js.map +0 -1
  136. package/lib/findPackage.d.ts.map +0 -1
  137. package/lib/findPackage.js.map +0 -1
  138. package/lib/findPackageOutputPaths.d.ts.map +0 -1
  139. package/lib/findPackageOutputPaths.js.map +0 -1
  140. package/lib/findProjectRoot.d.ts +0 -12
  141. package/lib/findProjectRoot.d.ts.map +0 -1
  142. package/lib/findProjectRoot.js +0 -18
  143. package/lib/findProjectRoot.js.map +0 -1
  144. package/lib/findResolveMapEntry.d.ts.map +0 -1
  145. package/lib/findResolveMapEntry.js.map +0 -1
  146. package/lib/flattenExportsMap.d.ts.map +0 -1
  147. package/lib/flattenExportsMap.js.map +0 -1
  148. package/lib/generateVersionFromNonSemver.d.ts.map +0 -1
  149. package/lib/generateVersionFromNonSemver.js.map +0 -1
  150. package/lib/getApiServerTransform.d.ts.map +0 -1
  151. package/lib/getApiServerTransform.js.map +0 -1
  152. package/lib/getCandidates.d.ts.map +0 -1
  153. package/lib/getCandidates.js.map +0 -1
  154. package/lib/getDependencies.d.ts.map +0 -1
  155. package/lib/getDependencies.js.map +0 -1
  156. package/lib/getDisplayVersion.d.ts +0 -9
  157. package/lib/getDisplayVersion.d.ts.map +0 -1
  158. package/lib/getDisplayVersion.js +0 -13
  159. package/lib/getDisplayVersion.js.map +0 -1
  160. package/lib/getExportsMap.d.ts.map +0 -1
  161. package/lib/getExportsMap.js.map +0 -1
  162. package/lib/getNonSemverTransform.d.ts.map +0 -1
  163. package/lib/getNonSemverTransform.js.map +0 -1
  164. package/lib/getSourceEntry.d.ts.map +0 -1
  165. package/lib/getSourceEntry.js.map +0 -1
  166. package/lib/getTypesTransform.d.ts.map +0 -1
  167. package/lib/getTypesTransform.js.map +0 -1
  168. package/lib/getUnusedDependencies.d.ts.map +0 -1
  169. package/lib/getUnusedDependencies.js.map +0 -1
  170. package/lib/getVersion.d.ts +0 -7
  171. package/lib/getVersion.d.ts.map +0 -1
  172. package/lib/getVersion.js +0 -10
  173. package/lib/getVersion.js.map +0 -1
  174. package/lib/getVersionInternal.d.ts +0 -6
  175. package/lib/getVersionInternal.d.ts.map +0 -1
  176. package/lib/getVersionInternal.js +0 -16
  177. package/lib/getVersionInternal.js.map +0 -1
  178. package/lib/isExternalPackage.d.ts +0 -6
  179. package/lib/isExternalPackage.d.ts.map +0 -1
  180. package/lib/isExternalPackage.js +0 -11
  181. package/lib/isExternalPackage.js.map +0 -1
  182. package/lib/mergeArrayDefaults.d.ts.map +0 -1
  183. package/lib/mergeArrayDefaults.js.map +0 -1
  184. package/lib/mergeObjects.d.ts.map +0 -1
  185. package/lib/mergeObjects.js.map +0 -1
  186. package/lib/resolve.d.ts +0 -8
  187. package/lib/resolve.d.ts.map +0 -1
  188. package/lib/resolve.js +0 -27
  189. package/lib/resolve.js.map +0 -1
  190. package/lib/resolveModule.d.ts +0 -9
  191. package/lib/resolveModule.d.ts.map +0 -1
  192. package/lib/resolveModule.js +0 -15
  193. package/lib/resolveModule.js.map +0 -1
  194. package/lib/shouldExternalizePackage.d.ts +0 -12
  195. package/lib/shouldExternalizePackage.d.ts.map +0 -1
  196. package/lib/shouldExternalizePackage.js +0 -24
  197. package/lib/shouldExternalizePackage.js.map +0 -1
  198. package/lib/tsdoc-metadata.json +0 -11
  199. package/lib/types/PackageMap.d.ts.map +0 -1
  200. package/lib/types/PackageMap.js.map +0 -1
  201. /package/lib/{createExportsMap.d.ts → exportsMap/createExportsMap.d.ts} +0 -0
  202. /package/lib/{createExportsMap.js → exportsMap/createExportsMap.js} +0 -0
  203. /package/lib/{flattenExportsMap.d.ts → exportsMap/flattenExportsMap.d.ts} +0 -0
  204. /package/lib/{getExportsMap.d.ts → exportsMap/getExportsMap.d.ts} +0 -0
  205. /package/lib/{getExportsMap.js → exportsMap/getExportsMap.js} +0 -0
  206. /package/lib/{findFileInPackage.d.ts → findFileInPackage/findFileInPackage.d.ts} +0 -0
  207. /package/lib/{findPackage.d.ts → findFileInPackage/findPackage.d.ts} +0 -0
  208. /package/lib/{findPackage.js → findFileInPackage/findPackage.js} +0 -0
  209. /package/lib/{findPackageOutputPaths.d.ts → findFileInPackage/findPackageOutputPaths.d.ts} +0 -0
  210. /package/lib/{findPackageOutputPaths.js → findFileInPackage/findPackageOutputPaths.js} +0 -0
  211. /package/lib/{getCandidates.d.ts → findFileInPackage/getCandidates.d.ts} +0 -0
  212. /package/lib/{mergeArrayDefaults.d.ts → object/mergeArrayDefaults.d.ts} +0 -0
  213. /package/lib/{mergeArrayDefaults.js → object/mergeArrayDefaults.js} +0 -0
  214. /package/lib/{mergeObjects.d.ts → object/mergeObjects.d.ts} +0 -0
  215. /package/lib/{mergeObjects.js → object/mergeObjects.js} +0 -0
  216. /package/lib/{generateVersionFromNonSemver.d.ts → packageDefinitions/generateVersionFromNonSemver.d.ts} +0 -0
  217. /package/lib/{generateVersionFromNonSemver.js → packageDefinitions/generateVersionFromNonSemver.js} +0 -0
  218. /package/lib/{getApiServerTransform.d.ts → packageDefinitions/getApiServerTransform.d.ts} +0 -0
  219. /package/lib/{getApiServerTransform.js → packageDefinitions/getApiServerTransform.js} +0 -0
  220. /package/lib/{getNonSemverTransform.d.ts → packageDefinitions/getNonSemverTransform.d.ts} +0 -0
  221. /package/lib/{getNonSemverTransform.js → packageDefinitions/getNonSemverTransform.js} +0 -0
  222. /package/lib/{getTypesTransform.d.ts → packageDefinitions/getTypesTransform.d.ts} +0 -0
  223. /package/lib/{getTypesTransform.js → packageDefinitions/getTypesTransform.js} +0 -0
  224. /package/lib/{getDependencies.d.ts → packageJson/getDependencies.d.ts} +0 -0
  225. /package/lib/{getDependencies.js → packageJson/getDependencies.js} +0 -0
  226. /package/lib/{getUnusedDependencies.d.ts → packageJson/getUnusedDependencies.d.ts} +0 -0
  227. /package/lib/{getUnusedDependencies.js → packageJson/getUnusedDependencies.js} +0 -0
  228. /package/lib/{createResolveMap → resolveMap/createHelpers}/convertToResolveMap.js +0 -0
  229. /package/lib/{createResolveMap → resolveMap/createHelpers}/dedupeLinkedPackages.js +0 -0
  230. /package/lib/{createResolveMap → resolveMap/createHelpers}/detachEntry.js +0 -0
  231. /package/lib/{createResolveMap → resolveMap/createHelpers}/entrySorter.js +0 -0
  232. /package/lib/{createResolveMap → resolveMap/createHelpers}/linkPath.js +0 -0
  233. /package/lib/{createResolveMap → resolveMap/createHelpers}/parseRequiredBy.d.ts +0 -0
  234. /package/lib/{createResolveMap → resolveMap/createHelpers}/parseRequiredBy.js +0 -0
  235. /package/lib/{types → resolveMap/createHelpers/types}/PackageMap.d.ts +0 -0
  236. /package/lib/{types → resolveMap/createHelpers/types}/PackageMap.js +0 -0
  237. /package/lib/{createResolveMap → resolveMap}/diffResolveMaps.d.ts +0 -0
  238. /package/lib/{createResolveMap → resolveMap}/diffResolveMaps.js +0 -0
  239. /package/lib/{ensureResolveMapEntry.d.ts → resolveMap/ensureResolveMapEntry.d.ts} +0 -0
  240. /package/lib/{findResolveMapEntry.d.ts → resolveMap/findResolveMapEntry.d.ts} +0 -0
  241. /package/lib/{findResolveMapEntry.js → resolveMap/findResolveMapEntry.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  import type { ModuleType } from '@ms-cloudpack/common-types';
2
+ /** Exported for testing only. */
2
3
  export declare function detectModuleTypeFromSource(source: string): ModuleType;
3
4
  /**
4
5
  * Determines if the given file is commonjs or esm.
6
+ * This will use the extension if it's clear, or if not, it will parse the file.
5
7
  */
6
8
  export declare function detectModuleType(filePath: string): Promise<ModuleType>;
7
9
  //# sourceMappingURL=detectModuleType.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detectModuleType.d.ts","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CA+GrE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuB5E"}
1
+ {"version":3,"file":"detectModuleType.d.ts","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,iCAAiC;AACjC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CA+GrE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuB5E"}
@@ -5,6 +5,7 @@ import path from 'path';
5
5
  import { javascriptExtensions, typescriptExtensions } from '@ms-cloudpack/path-utilities';
6
6
  const cjsExtensions = [...javascriptExtensions, ...typescriptExtensions].filter((ext) => ext.startsWith('.c'));
7
7
  const esmExtensions = [...javascriptExtensions, ...typescriptExtensions].filter((ext) => ext.startsWith('.m'));
8
+ /** Exported for testing only. */
8
9
  export function detectModuleTypeFromSource(source) {
9
10
  let ast;
10
11
  try {
@@ -109,6 +110,7 @@ export function detectModuleTypeFromSource(source) {
109
110
  }
110
111
  /**
111
112
  * Determines if the given file is commonjs or esm.
113
+ * This will use the extension if it's clear, or if not, it will parse the file.
112
114
  */
113
115
  export async function detectModuleType(filePath) {
114
116
  // Check for explicit commonjs or ESM extensions.
@@ -1 +1 @@
1
- {"version":3,"file":"detectModuleType.js","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"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","sourcesContent":["import fsPromises from 'fs/promises';\nimport type {\n AssignmentExpression,\n CallExpression,\n Identifier,\n MemberExpression,\n Node,\n Program,\n UnaryExpression,\n} from 'acorn';\nimport { parse } from 'acorn';\nimport { simple as simpleWalk } from 'acorn-walk';\nimport path from 'path';\nimport { javascriptExtensions, typescriptExtensions } from '@ms-cloudpack/path-utilities';\nimport type { ModuleType } from '@ms-cloudpack/common-types';\n\nconst cjsExtensions = [...javascriptExtensions, ...typescriptExtensions].filter((ext) => ext.startsWith('.c'));\nconst esmExtensions = [...javascriptExtensions, ...typescriptExtensions].filter((ext) => ext.startsWith('.m'));\n\nexport function detectModuleTypeFromSource(source: string): ModuleType {\n let ast: Program;\n\n try {\n ast = parse(source, {\n ecmaVersion: 'latest',\n sourceType: 'module', // Try to parse as a module first.\n });\n } catch (err) {\n // If the parse fails, try again as a script.\n try {\n ast = parse(source, {\n ecmaVersion: 'latest',\n sourceType: 'script', // Parse as a script for CommonJS.\n });\n } catch (e) {\n // If parsing fails again, the code is not valid JavaScript or too complex for a simple parse.\n return undefined;\n }\n }\n\n // Basic check for AMD-style modules.\n const firstNode = ast.body[0];\n if (\n firstNode &&\n firstNode.type === 'ExpressionStatement' &&\n firstNode.expression.type === 'CallExpression' &&\n firstNode.expression.callee.type === 'Identifier' &&\n firstNode.expression.callee.name === 'define'\n ) {\n return 'amd';\n }\n\n let isCJS = false;\n let isESM = false;\n\n const returnESM = () => {\n isESM = true;\n throw new Error('Found moduleType.');\n };\n\n const returnCJS = () => {\n isCJS = true;\n // Note, we do not throw for CJS and instead parse the full file. Sometimes ESM output can still have checks\n // for CommonJS, and short circuiting too soon might miss ESM syntax.\n };\n\n try {\n simpleWalk(ast, {\n // ESM checks\n ImportDeclaration: returnESM,\n ExportNamedDeclaration: returnESM,\n ExportAllDeclaration: returnESM,\n ExportDefaultDeclaration: returnESM,\n\n // CommonJS checks\n CallExpression(node: Node) {\n if (isCallExpression(node) && node.callee.type === 'Identifier' && node.callee.name === 'require') {\n returnCJS();\n }\n },\n Identifier(node: Node) {\n if (isIdentifier(node) && node.name === 'exports') {\n returnCJS();\n }\n },\n UnaryExpression(node: Node) {\n if (isUnaryExpression(node) && node.operator === 'typeof') {\n const argument = node.argument;\n\n // Handle expressions like `typeof exports`\n if (isIdentifier(argument) && argument.name === 'exports') {\n returnCJS();\n }\n }\n },\n AssignmentExpression(node: Node) {\n if (isAssignmentExpression(node)) {\n const left = node.left;\n // Handle expressions like `module.exports = ...`\n if (isMemberExpression(left)) {\n if (\n 'object' in left &&\n left.object.type === 'Identifier' &&\n left.object.name === 'module' &&\n isIdentifier(left.property) &&\n left.property.name === 'exports'\n ) {\n returnCJS();\n }\n // Handle expressions like `exports.someProperty = ...`\n else if ('object' in left && left.object.type === 'Identifier' && left.object.name === 'exports') {\n returnCJS();\n }\n }\n }\n },\n });\n } catch {\n /* no-op */\n }\n\n if (isESM) {\n // Note: While it's possible for a file to include both styles, we'll prefer ESM if we find it.\n return 'esm';\n } else if (isCJS) {\n return 'cjs';\n }\n\n // We didn't find either.\n return undefined;\n}\n\n/**\n * Determines if the given file is commonjs or esm.\n */\nexport async function detectModuleType(filePath: string): Promise<ModuleType> {\n // Check for explicit commonjs or ESM extensions.\n const fileExt = path.extname(filePath);\n if (cjsExtensions.includes(fileExt)) {\n return 'cjs';\n }\n if (esmExtensions.includes(fileExt)) {\n return 'esm';\n }\n\n // For typescript files which aren't explicitly cjs, return esm immediately.\n if (typescriptExtensions.includes(fileExt)) {\n return 'esm';\n }\n\n let source: string;\n try {\n source = (await fsPromises.readFile(filePath, 'utf8')).toString();\n } catch (e) {\n return undefined;\n }\n\n return detectModuleTypeFromSource(source);\n}\n\n/**\n * Type guard for CallExpression.\n */\nfunction isCallExpression(node: Node): node is CallExpression {\n return node.type === 'CallExpression';\n}\n\n/**\n * Type guard for AssignmentExpression.\n */\nfunction isAssignmentExpression(node: Node): node is AssignmentExpression {\n return node.type === 'AssignmentExpression';\n}\n\n/**\n * Type guard for MemberExpression.\n */\nfunction isMemberExpression(node: Node): node is MemberExpression {\n return node.type === 'MemberExpression';\n}\n\n/**\n * Type guard for Identifier.\n */\nfunction isIdentifier(node: Node): node is Identifier {\n return node.type === 'Identifier';\n}\n\n/**\n * Type guard for UnaryExpression.\n */\nfunction isUnaryExpression(node: Node): node is UnaryExpression {\n return node.type === 'UnaryExpression';\n}\n"]}
1
+ {"version":3,"file":"detectModuleType.js","sourceRoot":"","sources":["../src/detectModuleType.ts"],"names":[],"mappings":"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","sourcesContent":["import fsPromises from 'fs/promises';\nimport type {\n AssignmentExpression,\n CallExpression,\n Identifier,\n MemberExpression,\n Node,\n Program,\n UnaryExpression,\n} from 'acorn';\nimport { parse } from 'acorn';\nimport { simple as simpleWalk } from 'acorn-walk';\nimport path from 'path';\nimport { javascriptExtensions, typescriptExtensions } from '@ms-cloudpack/path-utilities';\nimport type { ModuleType } from '@ms-cloudpack/common-types';\n\nconst cjsExtensions = [...javascriptExtensions, ...typescriptExtensions].filter((ext) => ext.startsWith('.c'));\nconst esmExtensions = [...javascriptExtensions, ...typescriptExtensions].filter((ext) => ext.startsWith('.m'));\n\n/** Exported for testing only. */\nexport function detectModuleTypeFromSource(source: string): ModuleType {\n let ast: Program;\n\n try {\n ast = parse(source, {\n ecmaVersion: 'latest',\n sourceType: 'module', // Try to parse as a module first.\n });\n } catch (err) {\n // If the parse fails, try again as a script.\n try {\n ast = parse(source, {\n ecmaVersion: 'latest',\n sourceType: 'script', // Parse as a script for CommonJS.\n });\n } catch (e) {\n // If parsing fails again, the code is not valid JavaScript or too complex for a simple parse.\n return undefined;\n }\n }\n\n // Basic check for AMD-style modules.\n const firstNode = ast.body[0];\n if (\n firstNode &&\n firstNode.type === 'ExpressionStatement' &&\n firstNode.expression.type === 'CallExpression' &&\n firstNode.expression.callee.type === 'Identifier' &&\n firstNode.expression.callee.name === 'define'\n ) {\n return 'amd';\n }\n\n let isCJS = false;\n let isESM = false;\n\n const returnESM = (): never => {\n isESM = true;\n throw new Error('Found moduleType.');\n };\n\n const returnCJS = (): void => {\n isCJS = true;\n // Note, we do not throw for CJS and instead parse the full file. Sometimes ESM output can still have checks\n // for CommonJS, and short circuiting too soon might miss ESM syntax.\n };\n\n try {\n simpleWalk(ast, {\n // ESM checks\n ImportDeclaration: returnESM,\n ExportNamedDeclaration: returnESM,\n ExportAllDeclaration: returnESM,\n ExportDefaultDeclaration: returnESM,\n\n // CommonJS checks\n CallExpression(node: Node) {\n if (isCallExpression(node) && node.callee.type === 'Identifier' && node.callee.name === 'require') {\n returnCJS();\n }\n },\n Identifier(node: Node) {\n if (isIdentifier(node) && node.name === 'exports') {\n returnCJS();\n }\n },\n UnaryExpression(node: Node) {\n if (isUnaryExpression(node) && node.operator === 'typeof') {\n const argument = node.argument;\n\n // Handle expressions like `typeof exports`\n if (isIdentifier(argument) && argument.name === 'exports') {\n returnCJS();\n }\n }\n },\n AssignmentExpression(node: Node) {\n if (isAssignmentExpression(node)) {\n const left = node.left;\n // Handle expressions like `module.exports = ...`\n if (isMemberExpression(left)) {\n if (\n 'object' in left &&\n left.object.type === 'Identifier' &&\n left.object.name === 'module' &&\n isIdentifier(left.property) &&\n left.property.name === 'exports'\n ) {\n returnCJS();\n }\n // Handle expressions like `exports.someProperty = ...`\n else if ('object' in left && left.object.type === 'Identifier' && left.object.name === 'exports') {\n returnCJS();\n }\n }\n }\n },\n });\n } catch {\n /* no-op */\n }\n\n if (isESM) {\n // Note: While it's possible for a file to include both styles, we'll prefer ESM if we find it.\n return 'esm';\n } else if (isCJS) {\n return 'cjs';\n }\n\n // We didn't find either.\n return undefined;\n}\n\n/**\n * Determines if the given file is commonjs or esm.\n * This will use the extension if it's clear, or if not, it will parse the file.\n */\nexport async function detectModuleType(filePath: string): Promise<ModuleType> {\n // Check for explicit commonjs or ESM extensions.\n const fileExt = path.extname(filePath);\n if (cjsExtensions.includes(fileExt)) {\n return 'cjs';\n }\n if (esmExtensions.includes(fileExt)) {\n return 'esm';\n }\n\n // For typescript files which aren't explicitly cjs, return esm immediately.\n if (typescriptExtensions.includes(fileExt)) {\n return 'esm';\n }\n\n let source: string;\n try {\n source = (await fsPromises.readFile(filePath, 'utf8')).toString();\n } catch (e) {\n return undefined;\n }\n\n return detectModuleTypeFromSource(source);\n}\n\n/**\n * Type guard for CallExpression.\n */\nfunction isCallExpression(node: Node): node is CallExpression {\n return node.type === 'CallExpression';\n}\n\n/**\n * Type guard for AssignmentExpression.\n */\nfunction isAssignmentExpression(node: Node): node is AssignmentExpression {\n return node.type === 'AssignmentExpression';\n}\n\n/**\n * Type guard for MemberExpression.\n */\nfunction isMemberExpression(node: Node): node is MemberExpression {\n return node.type === 'MemberExpression';\n}\n\n/**\n * Type guard for Identifier.\n */\nfunction isIdentifier(node: Node): node is Identifier {\n return node.type === 'Identifier';\n}\n\n/**\n * Type guard for UnaryExpression.\n */\nfunction isUnaryExpression(node: Node): node is UnaryExpression {\n return node.type === 'UnaryExpression';\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { CloudpackConfig, PackageDefinitionsCache, GeneratedExports } from '@ms-cloudpack/common-types';
2
- import { type FindFileInPackageResult } from './findFileInPackage.js';
2
+ import { type FindFileInPackageResult } from '../findFileInPackage/findFileInPackage.js';
3
3
  /**
4
4
  * Options for `addExportsMapEntry`.
5
5
  */
@@ -0,0 +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,EAAqB,KAAK,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAE5G;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAE1B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;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;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,OAAO,CAAC,CAkBlB;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.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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addExportsMapEntry.js","sourceRoot":"","sources":["../../src/exportsMap/addExportsMapEntry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAgC,MAAM,2CAA2C,CAAC;AA4C5G;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAkC,EAClC,OAAyF;IAEzF,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzC,4FAA4F;IAC5F,qCAAqC;IACrC,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,qEAAqE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CACvC;QACE,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE;KACvD,EACD,OAAO,CACR,CAAC;IAEF,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,OAAoE,EACpE,SAAkC;IAElC,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAChF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAE3C,yCAAyC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kEAAkE;IAClE,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,+EAA+E;QAC/E,6FAA6F;QAC7F,uCAAuC;QACvC,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,WAA4C,CAAC;IAEjD,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrC,0FAA0F;QAC1F,WAAW,GAAG,QAAQ,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,EAAE,CAAC;QAEjB,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;QACrC,CAAC;QAED,mCAAmC;QACnC,WAAW,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;QAEzC,IAAI,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5E,gEAAgE;YAChE,WAAW,GAAG,QAAQ,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAA6B,oBAAoB;QAC7D,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,WAAW,EAAE;QACzC,CAAC,CAAC,WAAW,CAAC;IAEhB,OAAO,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAuC,MAG3D;IACC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0GAA0G;IAC1G,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,2EAA2E;QAC3E,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtD,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;QACD,6BAA6B;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,8DAA8D;QAC9D,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAED,8DAA8D;IAC9D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,gGAAgG;IAChG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,oCAAoC;YACpC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,6DAA6D;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC;QACtB,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;IAChC,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC","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/**\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 } = 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 },\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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/createExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AAIpC;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IACP,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,EACD,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,kBAAkB,CAAC,CAqG7B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/createExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CloudpackConfig,\n PackageDefinitionsCache,\n PackageJsonExports,\n GeneratedExports,\n} from '@ms-cloudpack/common-types';\nimport { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { addExportsMapEntry } from './addExportsMapEntry.js';\n\n/**\n * Given a package path, generates an export map for the package.\n */\nexport async function createExportsMap(\n options: {\n packagePath: string;\n disableTransforms?: boolean;\n },\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\n): Promise<PackageJsonExports> {\n const { packagePath } = 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 },\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 },\n context,\n );\n }\n\n if (module) {\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n filePath: module,\n requestCondition: 'import',\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' },\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 },\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' }, context)) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/main.js' }, context)) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './index.js' }, context));\n }\n\n return exports;\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flattenExportsMap.d.ts","sourceRoot":"","sources":["../../src/exportsMap/flattenExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAM/F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,kBAAkB,EAC9B,OAAO,GAAE;IACP,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB"}
@@ -1,7 +1,6 @@
1
1
  import path from 'path';
2
- import { cleanEntry } from './cleanEntry.js';
3
2
  import glob from 'fast-glob';
4
- import { mergeArrayDefaults } from './mergeArrayDefaults.js';
3
+ import { mergeArrayDefaults } from '../object/mergeArrayDefaults.js';
5
4
  const defaultConditions = ['browser', 'module', 'import', 'density', 'default'];
6
5
  /**
7
6
  * Given a package definition and applicable conditions, return a flat map of package import to physical (relative) path.
@@ -179,4 +178,13 @@ function splitByGlob(value, valueWildcard = value.indexOf('*', 1)) {
179
178
  };
180
179
  }
181
180
  }
181
+ function cleanEntry(entryName) {
182
+ if (path.extname(entryName) === '') {
183
+ entryName += '.js';
184
+ }
185
+ if (!entryName.startsWith('./')) {
186
+ entryName = `./${entryName}`;
187
+ }
188
+ return entryName;
189
+ }
182
190
  //# sourceMappingURL=flattenExportsMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flattenExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/flattenExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport type { PackageJsonExportsObject, PackageJsonExports } from '@ms-cloudpack/common-types';\nimport glob from 'fast-glob';\nimport { mergeArrayDefaults } from '../object/mergeArrayDefaults.js';\n\nconst defaultConditions = ['browser', 'module', 'import', 'density', 'default'];\n\n/**\n * Given a package definition and applicable conditions, return a flat map of package import to physical (relative) path.\n * Optionally return the exports map fully qualified with conditions intact using the `fullExports` option.\n * Optionally takes in a `packagePath` to resolve entries and values that end in `/` and with wildcards `*`.\n *\n * Notes:\n * - This diverges from the behavior of Node in that conditions are considered in order of\n * the `conditions` array, NOT in the order keys are defined in the exports map.\n * - Null export values are supported only for generated config. A null export signals to Cloudpack\n * that the entry should be completely dropped from the flattened exports map.\n * - Following the behavior of Node, for perf reasons, we do NOT verify whether any entries\n * exist on disk except wildcard or trailing slash exports since it is required.\n * (This differs from the behavior of typescript and webpack.)\n */\nexport function flattenExportsMap(\n exportsMap: PackageJsonExports,\n options: {\n /** The conditions to check for in the exports object. */\n conditions?: string[];\n /** The conditions that must be matched to add the export. */\n requiredConditions?: string[];\n packagePath?: string;\n } = {},\n): Record<string, string> {\n const { requiredConditions, packagePath } = options;\n\n const conditions = mergeArrayDefaults(options.conditions, defaultConditions);\n\n if (typeof exportsMap === 'string' && conditions.includes('default')) {\n return {\n '.': cleanEntry(exportsMap),\n };\n }\n\n return extractExports({\n exports: exportsMap,\n conditions,\n requiredConditions,\n flatExports: {},\n importMatch: '.',\n matchedConditions: [],\n packagePath,\n });\n}\n\n/**\n * Extract the exports from an exports object or sub-object and add them to the flat exports map.\n *\n * @returns The cumulative flat exports map.\n */\nfunction extractExports(params: {\n /** The exports object to extract or a sub-object. */\n exports: PackageJsonExports;\n /** The conditions to check for in the exports object. */\n conditions: string[];\n /** The conditions that must be matched to add the export. */\n requiredConditions?: string[];\n /** The cumulative flat exports map to add the exports to. */\n flatExports: Record<string, string>;\n /** The import path to match */\n importMatch: string;\n /** The conditions that have been matched so far. */\n matchedConditions: string[];\n /** The path to the package. */\n packagePath?: string | undefined;\n}): Record<string, string> {\n const { exports, conditions, requiredConditions, flatExports, matchedConditions, packagePath, importMatch } = params;\n\n if (\n typeof exports === 'string' &&\n (!requiredConditions || requiredConditions.every((condition) => matchedConditions.includes(condition)))\n ) {\n addExportsEntry({ flatExports, key: importMatch, value: exports, packagePath });\n } else if (Array.isArray(exports)) {\n for (const exportEntry of exports) {\n extractExports({ ...params, exports: exportEntry });\n }\n } else if (exports && typeof exports === 'object') {\n // Iterate through condition matches and go deeper if a match is found.\n for (const condition of conditions) {\n const conditionExports = (exports as PackageJsonExportsObject)[condition];\n\n if (conditionExports) {\n extractExports({\n ...params,\n exports: conditionExports,\n matchedConditions: matchedConditions.concat(condition),\n });\n // Stop at the first match.\n return flatExports;\n }\n }\n\n // No conditions are available. Check for import entries.\n for (const [key, value] of Object.entries(exports)) {\n if (!key.startsWith('.')) {\n continue; // not a path\n }\n\n if (typeof value === 'string') {\n if (!flatExports[key] && (!requiredConditions || requiredConditions?.includes(key))) {\n addExportsEntry({ flatExports, key, value, packagePath });\n }\n } else if (value) {\n extractExports({\n ...params,\n exports: value,\n importMatch: key,\n matchedConditions: [...matchedConditions, key],\n });\n } else {\n delete flatExports[key];\n }\n }\n }\n\n return flatExports;\n}\n\n/**\n * Add an entry to the flattened exports map if the key and value are valid\n * and the key is not already in the map.\n *\n * Does nothing if the key contains a wildcard or a trailing slash and the value does not, such as it being `null`.\n */\nfunction addExportsEntry(params: {\n /** The path to the package. */\n flatExports: Record<string, string>;\n /** The flattened exports map. */\n key: string;\n /** The key to add to the map. */\n value: string;\n /** The relative physical path to add to the map. */\n packagePath: string | undefined;\n}): void {\n const { flatExports, key, value, packagePath } = params;\n\n const basename = path.basename(value);\n const isValid = basename !== '' && basename !== '.';\n const isMany = value.endsWith('/') || value.indexOf('*') !== -1 || key.indexOf('*') !== -1 || key.endsWith('/');\n\n // Skip if the key is already in the map.\n if (flatExports[key]) return;\n\n if (isValid && !isMany) {\n flatExports[key] = cleanEntry(value);\n return;\n }\n\n if (value === null) {\n // Debug log for null values in the exports map.\n console.debug(`Skipping null value for key \"${key}\" in exports map${packagePath ? ` of \"${packagePath}\"` : ''}.`);\n return;\n }\n\n // Debug log for export patterns found in the exports map.\n console.debug(`Found export patterns in ${packagePath ? `\"${packagePath}\" ` : ''}exports map: \"${key}\": \"${value}\"`);\n\n // A package path is required to resolve entries and values that end in `/` or that include a wildcard `*`.\n if (!packagePath) return;\n\n // Check for wildcards in the key and value.\n // The wildcards\n const keyWildcard = key.indexOf('*', 1);\n const valueWildcard = value.indexOf('*', 1);\n\n if ((key.endsWith('/') && value.endsWith('/')) || (keyWildcard !== -1 && valueWildcard !== -1)) {\n const searchGlob = valueToGlob(value, valueWildcard);\n const keySplit = splitByGlob(key, keyWildcard);\n const valueSplit = splitByGlob(value, valueWildcard);\n if (!searchGlob || !keySplit || !valueSplit) return;\n // We only want to search for files.\n const matches = glob.sync(searchGlob, { cwd: packagePath, onlyFiles: true });\n for (const match of matches) {\n // Skip files that don't have an extension or have a `.` extension.\n if (path.extname(match).length <= 1) continue;\n // Get the glob match shared between the key and value.\n const globMatch = match.substring(\n // Globs that start with `./` don't return matches with `./` in the beginning.\n match.startsWith(valueSplit.start) ? valueSplit.start.length : 0,\n match.length - valueSplit.end.length,\n );\n // Replace the glob match in the key with the resolved glob match in the value.\n const matchKey = keySplit.start + globMatch + keySplit.end;\n if (!flatExports[matchKey]) {\n flatExports[matchKey] = cleanEntry(match);\n }\n }\n }\n}\n\n/**\n * Convert a value to a glob pattern.\n *\n * @param value The value to convert.\n * @param valueWildcard The index of the wildcard in the value.\n * @returns A value converted to a glob pattern.\n */\nfunction valueToGlob(value: string, valueWildcard: number = value.indexOf('*', 1)): string | undefined {\n if (value.endsWith('/')) {\n return value + '**/*';\n } else if (valueWildcard !== -1) {\n return value.substring(0, valueWildcard) + '**/*' + value.substring(valueWildcard + 1);\n }\n}\n\n/**\n * Split a value by the location of the trailing slash or wildcard.\n *\n * @param value The value to split.\n * @param valueWildcard The index of the wildcard in the value.\n * @returns An object with the start and end substring of the split value.\n */\nfunction splitByGlob(\n value: string,\n valueWildcard: number = value.indexOf('*', 1),\n): { start: string; end: string } | undefined {\n if (value.endsWith('/')) {\n return { start: value, end: '' };\n } else if (valueWildcard !== -1) {\n return {\n start: value.substring(0, valueWildcard),\n end: value.substring(valueWildcard + 1),\n };\n }\n}\n\nfunction cleanEntry(entryName: string) {\n if (path.extname(entryName) === '') {\n entryName += '.js';\n }\n\n if (!entryName.startsWith('./')) {\n entryName = `./${entryName}`;\n }\n\n return entryName;\n}\n"]}
@@ -0,0 +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;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC7D,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,kBAAkB,CAAC,CAU7B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../../src/exportsMap/getExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6D,EAC7D,OAAyF;IAEzF,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE5D,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,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 */\nexport async function getExportsMap(\n options: { packagePath: string; disableTransforms?: boolean },\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\n): Promise<PackageJsonExports> {\n const { packagePath } = options;\n const { packages } = context;\n const definition = await packages.get(packagePath, options);\n\n if (definition.exports !== undefined) {\n return definition.exports;\n }\n\n return createExportsMap(options, context);\n}\n"]}
@@ -8,5 +8,5 @@ export declare function getSourceEntry(options: {
8
8
  }, context: {
9
9
  packages: PackageDefinitionsCache;
10
10
  config: CloudpackConfig;
11
- }): Promise<string>;
11
+ }): Promise<string | undefined>;
12
12
  //# sourceMappingURL=getSourceEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceEntry.d.ts","sourceRoot":"","sources":["../../src/exportsMap/getSourceEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAK3F;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACtE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B"}
@@ -1,7 +1,6 @@
1
- import { intermediateToSourcePath } from '@ms-cloudpack/path-utilities';
2
- import { getExportsMap } from './getExportsMap.js';
1
+ import { intermediateToSourcePath, isExternalPackage } from '@ms-cloudpack/path-utilities';
3
2
  import { flattenExportsMap } from './flattenExportsMap.js';
4
- import { isExternalPackage } from './isExternalPackage.js';
3
+ import { getExportsMap } from './getExportsMap.js';
5
4
  /**
6
5
  * Attempts to find the source path for a given entry in a package.
7
6
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSourceEntry.js","sourceRoot":"","sources":["../../src/exportsMap/getSourceEntry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA6C,EAC7C,OAAuE;IAEvE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,EAAE;QACrD,UAAU,EAAE,CAAC,QAAQ,CAAC;QACtB,kBAAkB,EAAE,CAAC,QAAQ,CAAC;KAC/B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,gFAAgF;IAChF,0CAA0C;IAC1C,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC;AACnG,CAAC","sourcesContent":["import type { CloudpackConfig, PackageDefinitionsCache } from '@ms-cloudpack/common-types';\nimport { intermediateToSourcePath, isExternalPackage } from '@ms-cloudpack/path-utilities';\nimport { flattenExportsMap } from './flattenExportsMap.js';\nimport { getExportsMap } from './getExportsMap.js';\n\n/**\n * Attempts to find the source path for a given entry in a package.\n */\nexport async function getSourceEntry(\n options: { entry: string; inputPath: string },\n context: { packages: PackageDefinitionsCache; config: CloudpackConfig },\n): Promise<string | undefined> {\n const { entry, inputPath } = options;\n const exportsMap = await getExportsMap({ packagePath: inputPath }, context);\n const flattenedExportsMap = flattenExportsMap(exportsMap);\n if (isExternalPackage(inputPath)) {\n return flattenedExportsMap[entry];\n }\n // If it is internal...\n const sourceExportsMap = flattenExportsMap(exportsMap, {\n conditions: ['source'],\n requiredConditions: ['source'],\n });\n const value = flattenedExportsMap[entry];\n // Prefer source exports if available, otherwise derive from intermediate paths,\n // and default to the flattened map value.\n return sourceExportsMap[entry] || (value && intermediateToSourcePath(value, inputPath)) || value;\n}\n"]}
@@ -0,0 +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;AAgB3F,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;CAAE,GACxF,OAAO,CAAC,uBAAuB,CAAC,CAqFlC"}
@@ -1,10 +1,9 @@
1
1
  import { normalizeRelativePath, slash } from '@ms-cloudpack/path-string-parsing';
2
- import { intermediateToSourcePath, isFileSync, sourceToIntermediatePath } from '@ms-cloudpack/path-utilities';
2
+ import { intermediateToSourcePath, isExternalPackage, isFileSync, sourceToIntermediatePath, } from '@ms-cloudpack/path-utilities';
3
3
  import path from 'path';
4
- import { flattenExportsMap } from './flattenExportsMap.js';
4
+ import { flattenExportsMap } from '../exportsMap/flattenExportsMap.js';
5
5
  import { getCandidates } from './getCandidates.js';
6
- import { getExportsMap } from './getExportsMap.js';
7
- import { isExternalPackage } from './isExternalPackage.js';
6
+ import { getExportsMap } from '../exportsMap/getExportsMap.js';
8
7
  const sourceExtensions = ['.ts', '.tsx', '.cts', '.mts', '.jsx'];
9
8
  const javascriptExtensions = ['.js', '.mjs', '.cjs'];
10
9
  /**
@@ -0,0 +1 @@
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 sourceToIntermediatePath,\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\nconst sourceExtensions = ['.ts', '.tsx', '.cts', '.mts', '.jsx'];\nconst javascriptExtensions = ['.js', '.mjs', '.cjs'];\n\nexport type FindFileInPackageOptions = {\n packagePath: string;\n filePath: string;\n};\n\nexport type FindFileInPackageResult = {\n filePath?: string;\n sourcePath?: string;\n};\n\n/**\n * Given a requested partial filePath, resolves the relative intermediate path if the file exists, with special\n * consideration for internal packages, which may not have intermediate files but only source files. Paths returned\n * are always relative and start with `./`.\n *\n * This helper is used in deriving if the given package.json entries are actual validate candidates when constructing an\n * exports map from existing metadata. For example, a package.json may list `main` as `lib/index.js`. If this file\n * exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not\n * exist, then we should not include it in the exports map.\n */\nexport async function findFileInPackage(\n options: FindFileInPackageOptions,\n context: { packages: PackageDefinitionsCache; config: Pick<CloudpackConfig, 'features'> },\n): Promise<FindFileInPackageResult> {\n const originalPath = normalizeRelativePath(options.filePath);\n const packagePath = slash(options.packagePath);\n let filePath: string | undefined;\n let sourcePath: string | undefined;\n const isInternal = !isExternalPackage(packagePath);\n const pathsToConsider = [originalPath];\n\n const definition = await context.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 === '.' && definition && !definition.exports) {\n const { main, module } = definition;\n if (main) {\n pathsToConsider.unshift(main);\n }\n if (module) {\n pathsToConsider.unshift(module);\n }\n }\n\n for (const currentPath of pathsToConsider) {\n const candidates = await getCandidates({ filePath: currentPath, packagePath }, context);\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 isNestedPackageDefinition =\n filePath && path.basename(filePath) === 'package.json' && path.basename(originalPath) !== 'package.json';\n const result: FindFileInPackageResult = {};\n\n if (isNestedPackageDefinition) {\n const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath as string));\n const exportsMap = await getExportsMap({ packagePath: nestedDefinitionPath }, context);\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 },\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 && sourceExtensions.includes(path.extname(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) {\n const ext = path.extname(filePath);\n const isJavaScriptExt = javascriptExtensions.includes(ext);\n\n if (isJavaScriptExt) {\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\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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findPackage.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/findPackage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE/G;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE;IACP;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACpD,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,GAAG,SAAS,CAAC,CA4CvE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findPackage.js","sourceRoot":"","sources":["../../src/findFileInPackage/findPackage.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAkBC,EACD,OAEC;IAED,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7F,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,MAAM,aAAa,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEnE,GAAG,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5E,IAAI,UAAmC,CAAC;QACxC,IAAI,QAA4B,CAAC;QAEjC,IAAI,CAAC;YACH,kDAAkD;YAClD,sEAAsE;YACtE,0EAA0E;YAC1E,QAAQ,GAAG,aAAa,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjF,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,kCAAkC;QACpC,CAAC;QAED,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;YAC3B,aAAa,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;YACvC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QAED,mDAAmD;QACnD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAExC,oDAAoD;QACpD,gGAAgG;QAChG,yFAAyF;QACzF,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,yCAAyC;QACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,QAAQ,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE;IAE5G,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import path from 'path';\nimport fs from 'fs';\nimport type { PackageDefinitionsCache, PackageImporterContext, PackageJson } from '@ms-cloudpack/common-types';\n\n/**\n * Find the package.json contents for `dependencyName`, searching up under `node_modules` folders\n * starting at `startPath` and ending at `rootPath` (usually the git root) or the filesystem root.\n */\nexport async function findPackage(\n options: {\n /**\n * Dependency name as specified in the parent's deps and installed in `node_modules`.\n * (This is usually the actual name, except for renamed non-semver deps.)\n */\n dependencyName: string;\n /** Start searching up from the `node_modules` of this folder. */\n startPath: string;\n /** Context in which `dependencyName` is imported. */\n importerContext?: PackageImporterContext;\n /** Stop searching at this path (usually the git root). Defaults to filesystem root. */\n rootPath?: string;\n /**\n * Cache of realpath results (improves perf, particularly on Windows).\n * As of writing, this is scoped to a `findPackagesFromPath` call.\n * (see https://github.com/microsoft/cloudpack/pull/2184)\n */\n realPathCache?: Record<string, string | undefined>;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n): Promise<{ packagePath: string; definition: PackageJson } | undefined> {\n const { dependencyName, rootPath, startPath, importerContext, realPathCache = {} } = options;\n const { packages } = context;\n\n let packagePath = startPath;\n const isStoreLayout = /[\\\\/]\\.(pnpm|store)[\\\\/]/.test(packagePath);\n\n do {\n const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);\n let definition: PackageJson | undefined;\n let realPath: string | undefined;\n\n try {\n // Get the realpath in case of a symlinked layout.\n // realpathSync.native is faster than either realpathSync or realpath.\n // https://github.com/microsoft/cloudpack/pull/2127#discussion_r1607070201\n realPath = realPathCache?.[resolvedPath] || fs.realpathSync.native(resolvedPath);\n definition = await packages.tryGet(realPath, { importerContext });\n } catch (e) {\n // Ignore errors and keep looking.\n }\n\n if (realPath && definition) {\n realPathCache[resolvedPath] = realPath;\n return { packagePath: realPath, definition };\n }\n\n // We haven't found it. Try to move up a directory.\n packagePath = path.dirname(packagePath);\n\n // If we moved up into a scope folder, skip over it.\n // Exception: in a manager using a store layout, packages starting with @ are NOT scope folders;\n // e.g. @foo/bar will be in a folder like @foo-bar-npm-1.2.3-abcdef1234 or @foo-bar@1.2.3\n if (!isStoreLayout && path.basename(packagePath).startsWith('@')) {\n packagePath = path.dirname(packagePath);\n }\n\n // Skip over nested node_modules folders.\n if (packagePath.endsWith('node_modules')) {\n packagePath = path.dirname(packagePath);\n }\n } while ((!rootPath || packagePath.length >= rootPath.length) && path.dirname(packagePath) !== packagePath);\n\n return undefined;\n}\n"]}
@@ -0,0 +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"}
@@ -0,0 +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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCandidates.d.ts","sourceRoot":"","sources":["../../src/findFileInPackage/getCandidates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AA4BhG;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAClD,OAAO,EAAE;IAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GACxF,OAAO,CAAC,MAAM,EAAE,CAAC,CA0EnB"}
@@ -1,6 +1,6 @@
1
1
  import { normalizeRelativePath } from '@ms-cloudpack/path-string-parsing';
2
+ import { isExternalPackage } from '@ms-cloudpack/path-utilities';
2
3
  import path from 'path';
3
- import { isExternalPackage } from './isExternalPackage.js';
4
4
  import { findPackageOutputPaths } from './findPackageOutputPaths.js';
5
5
  // Mappings to possible candidate extensions for a given input extension.
6
6
  const externalExtensions = ['.js', '.mjs', '.cjs'];
@@ -100,10 +100,8 @@ export async function getCandidates(options, context) {
100
100
  * Given a filepath and list of extensions, maps extensions to prepend the filepath. In the case that
101
101
  * the filepath has an extension already in the list, avoids appending the extension twice.
102
102
  *
103
- * For example, filePath = './foo/bar.js' with extensions ['.ts', '.js'] would result in:
104
- *
105
- * ['./foo/bar.ts.js', './foo/bar.js'].
106
- *
103
+ * For example, `filePath = './foo/bar.js'` with extensions `['.ts', '.js']` would result in:
104
+ * `['./foo/bar.ts.js', './foo/bar.js']`
107
105
  */
108
106
  function expandExtensions(filePath, extensions) {
109
107
  const result = [];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCandidates.js","sourceRoot":"","sources":["../../src/findFileInPackage/getCandidates.ts"],"names":[],"mappings":"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","sourcesContent":["import { type CloudpackConfig, 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 },\n context: { config: Pick<CloudpackConfig, 'features'>; packages: PackageDefinitionsCache },\n): Promise<string[]> {\n const outputPaths = await findPackageOutputPaths(options.packagePath, context);\n const { filePath, packagePath } = options;\n const resolveWebExtensions = Boolean(context.config.features?.resolveWebExtensions);\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 (esmPath && cjsPath) {\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/lib/index.d.ts CHANGED
@@ -1,26 +1,20 @@
1
- export { PackageDefinitions } from './PackageDefinitions.js';
2
- export { createResolveMap } from './createResolveMap/createResolveMap.js';
3
- export type { ResolveMap, ResolveMapEntry, LinkedPath } from '@ms-cloudpack/common-types';
4
- export { findResolveMapEntry } from './findResolveMapEntry.js';
5
- export type { DiffResolveMapsChanges, DiffResolveMapsStats } from './createResolveMap/diffResolveMaps.js';
6
- export { diffResolveMaps } from './createResolveMap/diffResolveMaps.js';
7
- export { flattenExportsMap } from './flattenExportsMap.js';
8
- export { createExportsMap } from './createExportsMap.js';
9
- export { addExportsMapEntry, type AddExportsMapEntryOptions } from './addExportsMapEntry.js';
10
- export { getExportsMap } from './getExportsMap.js';
11
- export { ensureResolveMapEntry } from './ensureResolveMapEntry.js';
12
- export { resolve } from './resolve.js';
1
+ export { PackageDefinitions } from './packageDefinitions/PackageDefinitions.js';
2
+ export { MockPackageDefinitions } from './packageDefinitions/MockPackageDefinitions.js';
3
+ export { createResolveMap } from './resolveMap/createResolveMap.js';
4
+ export { findResolveMapEntry } from './resolveMap/findResolveMapEntry.js';
5
+ export type { DiffResolveMapsChanges, DiffResolveMapsStats } from './resolveMap/diffResolveMaps.js';
6
+ export { diffResolveMaps } from './resolveMap/diffResolveMaps.js';
7
+ export { ensureResolveMapEntry } from './resolveMap/ensureResolveMapEntry.js';
8
+ export { flattenExportsMap } from './exportsMap/flattenExportsMap.js';
9
+ export { createExportsMap } from './exportsMap/createExportsMap.js';
10
+ export { addExportsMapEntry, type AddExportsMapEntryOptions } from './exportsMap/addExportsMapEntry.js';
11
+ export { getExportsMap } from './exportsMap/getExportsMap.js';
12
+ export { getSourceEntry } from './exportsMap/getSourceEntry.js';
13
13
  export { detectModuleType } from './detectModuleType.js';
14
- export { isExternalPackage } from './isExternalPackage.js';
15
- export { findFileInPackage, type FindFileInPackageOptions, type FindFileInPackageResult } from './findFileInPackage.js';
16
- export { getDisplayVersion } from './getDisplayVersion.js';
17
- export { getVersion } from './getVersion.js';
18
- export { getDependencies } from './getDependencies.js';
19
- export { getUnusedDependencies } from './getUnusedDependencies.js';
20
- export { findProjectRoot } from './findProjectRoot.js';
21
- export { shouldExternalizePackage } from './shouldExternalizePackage.js';
22
- export { getSourceEntry } from './getSourceEntry.js';
23
- export { resolveModule } from './resolveModule.js';
24
- export { mergeArrayDefaults } from './mergeArrayDefaults.js';
25
- export { mergeObjects } from './mergeObjects.js';
14
+ export { findFileInPackage, type FindFileInPackageOptions, type FindFileInPackageResult, } from './findFileInPackage/findFileInPackage.js';
15
+ export { getVersion, getDisplayVersion } from './packageJson/getVersion.js';
16
+ export { getDependencies } from './packageJson/getDependencies.js';
17
+ export { getUnusedDependencies } from './packageJson/getUnusedDependencies.js';
18
+ export { mergeArrayDefaults } from './object/mergeArrayDefaults.js';
19
+ export { mergeObjects } from './object/mergeObjects.js';
26
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAG/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
package/lib/index.js CHANGED
@@ -1,30 +1,24 @@
1
1
  // Package definition parsing
2
- export { PackageDefinitions } from './PackageDefinitions.js';
3
- // ResolveMap creation
4
- export { createResolveMap } from './createResolveMap/createResolveMap.js';
5
- export { findResolveMapEntry } from './findResolveMapEntry.js';
6
- export { diffResolveMaps } from './createResolveMap/diffResolveMaps.js';
2
+ export { PackageDefinitions } from './packageDefinitions/PackageDefinitions.js';
3
+ export { MockPackageDefinitions } from './packageDefinitions/MockPackageDefinitions.js';
4
+ // ResolveMaps
5
+ export { createResolveMap } from './resolveMap/createResolveMap.js';
6
+ export { findResolveMapEntry } from './resolveMap/findResolveMapEntry.js';
7
+ export { diffResolveMaps } from './resolveMap/diffResolveMaps.js';
8
+ export { ensureResolveMapEntry } from './resolveMap/ensureResolveMapEntry.js';
7
9
  // ExportsMap parsing and creation
8
- export { flattenExportsMap } from './flattenExportsMap.js';
9
- export { createExportsMap } from './createExportsMap.js';
10
- export { addExportsMapEntry } from './addExportsMapEntry.js';
11
- export { getExportsMap } from './getExportsMap.js';
12
- export { ensureResolveMapEntry } from './ensureResolveMapEntry.js';
13
- // Import resolution utilities
14
- export { resolve } from './resolve.js';
10
+ export { flattenExportsMap } from './exportsMap/flattenExportsMap.js';
11
+ export { createExportsMap } from './exportsMap/createExportsMap.js';
12
+ export { addExportsMapEntry } from './exportsMap/addExportsMapEntry.js';
13
+ export { getExportsMap } from './exportsMap/getExportsMap.js';
14
+ export { getSourceEntry } from './exportsMap/getSourceEntry.js';
15
15
  // Other package utilities
16
16
  export { detectModuleType } from './detectModuleType.js';
17
- export { isExternalPackage } from './isExternalPackage.js';
18
- export { findFileInPackage } from './findFileInPackage.js';
19
- export { getDisplayVersion } from './getDisplayVersion.js';
20
- export { getVersion } from './getVersion.js';
21
- export { getDependencies } from './getDependencies.js';
22
- export { getUnusedDependencies } from './getUnusedDependencies.js';
23
- export { findProjectRoot } from './findProjectRoot.js';
24
- export { shouldExternalizePackage } from './shouldExternalizePackage.js';
25
- export { getSourceEntry } from './getSourceEntry.js';
26
- export { resolveModule } from './resolveModule.js';
17
+ export { findFileInPackage, } from './findFileInPackage/findFileInPackage.js';
18
+ export { getVersion, getDisplayVersion } from './packageJson/getVersion.js';
19
+ export { getDependencies } from './packageJson/getDependencies.js';
20
+ export { getUnusedDependencies } from './packageJson/getUnusedDependencies.js';
27
21
  // Object utilities which could be moved to a separate package if we add more of them
28
- export { mergeArrayDefaults } from './mergeArrayDefaults.js';
29
- export { mergeObjects } from './mergeObjects.js';
22
+ export { mergeArrayDefaults } from './object/mergeArrayDefaults.js';
23
+ export { mergeObjects } from './object/mergeObjects.js';
30
24
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAkC,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,8BAA8B;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,0BAA0B;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAA+D,MAAM,wBAAwB,CAAC;AACxH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,qFAAqF;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["// Package definition parsing\nexport { PackageDefinitions } from './PackageDefinitions.js';\n\n// ResolveMap creation\nexport { createResolveMap } from './createResolveMap/createResolveMap.js';\nexport type { ResolveMap, ResolveMapEntry, LinkedPath } from '@ms-cloudpack/common-types';\nexport { findResolveMapEntry } from './findResolveMapEntry.js';\nexport type { DiffResolveMapsChanges, DiffResolveMapsStats } from './createResolveMap/diffResolveMaps.js';\nexport { diffResolveMaps } from './createResolveMap/diffResolveMaps.js';\n\n// ExportsMap parsing and creation\nexport { flattenExportsMap } from './flattenExportsMap.js';\nexport { createExportsMap } from './createExportsMap.js';\nexport { addExportsMapEntry, type AddExportsMapEntryOptions } from './addExportsMapEntry.js';\nexport { getExportsMap } from './getExportsMap.js';\nexport { ensureResolveMapEntry } from './ensureResolveMapEntry.js';\n\n// Import resolution utilities\nexport { resolve } from './resolve.js';\n\n// Other package utilities\nexport { detectModuleType } from './detectModuleType.js';\nexport { isExternalPackage } from './isExternalPackage.js';\nexport { findFileInPackage, type FindFileInPackageOptions, type FindFileInPackageResult } from './findFileInPackage.js';\nexport { getDisplayVersion } from './getDisplayVersion.js';\nexport { getVersion } from './getVersion.js';\nexport { getDependencies } from './getDependencies.js';\nexport { getUnusedDependencies } from './getUnusedDependencies.js';\nexport { findProjectRoot } from './findProjectRoot.js';\nexport { shouldExternalizePackage } from './shouldExternalizePackage.js';\nexport { getSourceEntry } from './getSourceEntry.js';\nexport { resolveModule } from './resolveModule.js';\n\n// Object utilities which could be moved to a separate package if we add more of them\nexport { mergeArrayDefaults } from './mergeArrayDefaults.js';\nexport { mergeObjects } from './mergeObjects.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAExF,cAAc;AACd,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAkC,MAAM,oCAAoC,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,0BAA0B;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,iBAAiB,GAGlB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,qFAAqF;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["// Package definition parsing\nexport { PackageDefinitions } from './packageDefinitions/PackageDefinitions.js';\nexport { MockPackageDefinitions } from './packageDefinitions/MockPackageDefinitions.js';\n\n// ResolveMaps\nexport { createResolveMap } from './resolveMap/createResolveMap.js';\nexport { findResolveMapEntry } from './resolveMap/findResolveMapEntry.js';\nexport type { DiffResolveMapsChanges, DiffResolveMapsStats } from './resolveMap/diffResolveMaps.js';\nexport { diffResolveMaps } from './resolveMap/diffResolveMaps.js';\nexport { ensureResolveMapEntry } from './resolveMap/ensureResolveMapEntry.js';\n\n// ExportsMap parsing and creation\nexport { flattenExportsMap } from './exportsMap/flattenExportsMap.js';\nexport { createExportsMap } from './exportsMap/createExportsMap.js';\nexport { addExportsMapEntry, type AddExportsMapEntryOptions } from './exportsMap/addExportsMapEntry.js';\nexport { getExportsMap } from './exportsMap/getExportsMap.js';\nexport { getSourceEntry } from './exportsMap/getSourceEntry.js';\n\n// Other package utilities\nexport { detectModuleType } from './detectModuleType.js';\nexport {\n findFileInPackage,\n type FindFileInPackageOptions,\n type FindFileInPackageResult,\n} from './findFileInPackage/findFileInPackage.js';\nexport { getVersion, getDisplayVersion } from './packageJson/getVersion.js';\nexport { getDependencies } from './packageJson/getDependencies.js';\nexport { getUnusedDependencies } from './packageJson/getUnusedDependencies.js';\n\n// Object utilities which could be moved to a separate package if we add more of them\nexport { mergeArrayDefaults } from './object/mergeArrayDefaults.js';\nexport { mergeObjects } from './object/mergeObjects.js';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeArrayDefaults.d.ts","sourceRoot":"","sources":["../../src/object/mergeArrayDefaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAU3F"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeArrayDefaults.js","sourceRoot":"","sources":["../../src/object/mergeArrayDefaults.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAI,MAAiC,EAAE,QAAa;IACpF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACrB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAa,CAAC;AACvB,CAAC","sourcesContent":["/**\n * Replace a '...' in an array with the provided defaults.\n * Returns a new array regardless of whether a replacement was made.\n * If `values` is undefined, returns a copy of the defaults array.\n */\nexport function mergeArrayDefaults<T>(values: (T | '...')[] | undefined, defaults: T[]): T[] {\n if (!values) {\n return [...defaults];\n }\n values = [...values];\n const defaultsIndex = values.indexOf('...');\n if (defaultsIndex > -1) {\n values.splice(defaultsIndex, 1, ...defaults);\n }\n return values as T[];\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeObjects.d.ts","sourceRoot":"","sources":["../../src/object/mergeObjects.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,GAAE;IACP;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACpC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE;SACX,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC9D,CAAC;CACE,GACL,CAAC,CAkCH"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeObjects.js","sourceRoot":"","sources":["../../src/object/mergeObjects.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAY,EACZ,UAmBI,EAAE;IAEN,oFAAoF;IACpF,uDAAuD;IACvD,MAAM,EAAE,WAAW,EAAE,UAAU,GAAG,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEtE,MAAM,GAAG,GAAG,EAAO,CAAC;IAEpB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAkB,CAAC;YACrC,MAAM,cAAc,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;YAE1C,IAAI,cAAc,EAAE,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACjB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,CAAE,GAAG,CAAC,GAAG,CAAe,IAAI,EAAE,CAAC,EAAE,GAAG,GAAG,CAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1G,CAAC;iBAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC1C,0FAA0F;gBAC1F,sEAAsE;gBACtE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAe,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/**\n * Recursively merge objects.\n * Array values are concatenated by default, but this is configurable.\n * Assumes that the types of any defined keys stay consistent across all objects;\n * if this isn't true, provide a `customMerge` function for that key.\n * (`customMerge` must also be used to customize merging for nested objects.)\n */\nexport function mergeObjects<T extends object>(\n objects: T[],\n options: {\n /**\n * Whether to concatenate all arrays (default) or overwrite with new values.\n * Applies to top-level and nested objects.\n * @default 'concat'\n */\n arrayMerge?: 'concat' | 'overwrite';\n /**\n * Overwrite the values of these object or array keys instead of merging.\n * Applies to the top-level object only.\n */\n overwriteKeys?: (keyof T)[];\n /**\n * Custom merging for key values. The function should return the merged value.\n * Applies to the top-level object only.\n */\n customMerge?: {\n [K in keyof T]?: (prev: T[K] | undefined, curr: T[K]) => T[K];\n };\n } = {},\n): T {\n // NOTE: If other options are added, consider whether they should apply recursively,\n // and if so, update the mergeObjects() recursive call.\n const { customMerge, arrayMerge = 'concat', overwriteKeys } = options;\n\n const acc = {} as T;\n\n for (const obj of objects) {\n if (!obj || typeof obj !== 'object') {\n throw new Error('mergeObjects: all arguments must be objects');\n }\n\n for (const pair of Object.entries(obj)) {\n const key = pair[0] as keyof T;\n const val = pair[1] as T[typeof key];\n const customMergeKey = customMerge?.[key];\n\n if (customMergeKey) {\n acc[key] = customMergeKey(acc[key], val);\n } else if (overwriteKeys?.includes(key)) {\n acc[key] = val;\n } else if (Array.isArray(val)) {\n acc[key] = arrayMerge === 'concat' ? ([...((acc[key] as unknown[]) || []), ...val] as typeof val) : val;\n } else if (val && typeof val === 'object') {\n // Recursively merge objects. arrayMerge makes sense to apply recursively, but customMerge\n // and overwriteKeys are specific to the keys of the top-level object.\n acc[key] = mergeObjects([(acc[key] || {}) as typeof val, val], { arrayMerge });\n } else {\n acc[key] = val;\n }\n }\n }\n\n return acc;\n}\n"]}