packtory 0.0.10 → 0.0.12

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 (250) hide show
  1. package/artifacts/artifacts-builder.d.ts +0 -14
  2. package/artifacts/artifacts-builder.d.ts.map +1 -1
  3. package/artifacts/artifacts-builder.js +75 -0
  4. package/artifacts/artifacts-builder.js.map +1 -1
  5. package/bundle-emitter/emitter.d.ts +0 -30
  6. package/bundle-emitter/emitter.d.ts.map +1 -1
  7. package/bundle-emitter/emitter.js +34 -0
  8. package/bundle-emitter/emitter.js.map +1 -1
  9. package/bundle-emitter/extract-package-tarball.js +11 -0
  10. package/bundle-emitter/extract-package-tarball.js.map +1 -1
  11. package/bundle-emitter/registry-client.d.ts +0 -21
  12. package/bundle-emitter/registry-client.d.ts.map +1 -1
  13. package/bundle-emitter/registry-client.js +261 -0
  14. package/bundle-emitter/registry-client.js.map +1 -1
  15. package/bundle-emitter/repository-url-normalizer.js +36 -0
  16. package/bundle-emitter/repository-url-normalizer.js.map +1 -1
  17. package/checks/check-runner.js +5 -0
  18. package/checks/check-runner.js.map +1 -1
  19. package/checks/rule.js +8 -0
  20. package/checks/rule.js.map +1 -1
  21. package/checks/rules/max-bundle-size.js +35 -0
  22. package/checks/rules/max-bundle-size.js.map +1 -1
  23. package/checks/rules/no-dev-dependency-imports.js +28 -0
  24. package/checks/rules/no-dev-dependency-imports.js.map +1 -1
  25. package/checks/rules/no-duplicated-files.js +107 -0
  26. package/checks/rules/no-duplicated-files.js.map +1 -1
  27. package/checks/rules/no-side-effects.js +42 -0
  28. package/checks/rules/no-side-effects.js.map +1 -1
  29. package/checks/rules/no-unused-bundle-dependencies.js +24 -0
  30. package/checks/rules/no-unused-bundle-dependencies.js.map +1 -1
  31. package/checks/rules/registry.js +9 -0
  32. package/checks/rules/registry.js.map +1 -1
  33. package/checks/rules/required-files.js +31 -0
  34. package/checks/rules/required-files.js.map +1 -1
  35. package/checks/rules/unique-target-paths.js +25 -0
  36. package/checks/rules/unique-target-paths.js.map +1 -1
  37. package/common/clock.d.ts +0 -6
  38. package/common/clock.d.ts.map +1 -1
  39. package/common/code-files.js +4 -0
  40. package/common/code-files.js.map +1 -1
  41. package/config/additional-files.js +4 -0
  42. package/config/additional-files.js.map +1 -1
  43. package/config/automatic-versioning-settings.js +4 -0
  44. package/config/automatic-versioning-settings.js.map +1 -1
  45. package/config/config.js +2 -0
  46. package/config/config.js.map +1 -1
  47. package/config/dead-code-elimination-settings.d.ts +0 -1
  48. package/config/dead-code-elimination-settings.d.ts.map +1 -1
  49. package/config/dead-code-elimination-settings.js +19 -0
  50. package/config/dead-code-elimination-settings.js.map +1 -1
  51. package/config/dependency-policy.js +3 -0
  52. package/config/dependency-policy.js.map +1 -1
  53. package/config/main-package-json-schema.js +1 -0
  54. package/config/main-package-json-schema.js.map +1 -1
  55. package/config/manual-versioning-settings.js +4 -0
  56. package/config/manual-versioning-settings.js.map +1 -1
  57. package/config/package-config.js +6 -0
  58. package/config/package-config.js.map +1 -1
  59. package/config/package-interface.js +26 -0
  60. package/config/package-interface.js.map +1 -1
  61. package/config/package-json.d.ts +0 -1
  62. package/config/package-json.d.ts.map +1 -1
  63. package/config/package-json.js +16 -0
  64. package/config/package-json.js.map +1 -1
  65. package/config/packtory-config-schema.js +3 -0
  66. package/config/packtory-config-schema.js.map +1 -1
  67. package/config/publish-settings.js +22 -0
  68. package/config/publish-settings.js.map +1 -1
  69. package/config/registry-settings.d.ts +0 -18
  70. package/config/registry-settings.d.ts.map +1 -1
  71. package/config/registry-settings.js +38 -0
  72. package/config/registry-settings.js.map +1 -1
  73. package/config/root.js +4 -0
  74. package/config/root.js.map +1 -1
  75. package/config/sbom-settings.js +3 -0
  76. package/config/sbom-settings.js.map +1 -1
  77. package/config/validation.d.ts +0 -18
  78. package/config/validation.d.ts.map +1 -1
  79. package/config/validation.js +254 -0
  80. package/config/validation.js.map +1 -1
  81. package/config/versioning-settings.js +1 -0
  82. package/config/versioning-settings.js.map +1 -1
  83. package/dead-code-eliminator/analyzed-bundle.d.ts +0 -9
  84. package/dead-code-eliminator/analyzed-bundle.d.ts.map +1 -1
  85. package/dead-code-eliminator/analyzed-bundle.js +7 -0
  86. package/dead-code-eliminator/analyzed-bundle.js.map +1 -1
  87. package/dead-code-eliminator/eliminator.js +12 -1
  88. package/dead-code-eliminator/eliminator.js.map +1 -1
  89. package/dead-code-eliminator/load-bundle.js +10 -5
  90. package/dead-code-eliminator/load-bundle.js.map +1 -1
  91. package/dead-code-eliminator/reachability/binding-extractor.js +20 -7
  92. package/dead-code-eliminator/reachability/binding-extractor.js.map +1 -1
  93. package/dead-code-eliminator/reachability/reachability.js +10 -1
  94. package/dead-code-eliminator/reachability/reachability.js.map +1 -1
  95. package/dead-code-eliminator/transform/declaration-remover.js +3 -2
  96. package/dead-code-eliminator/transform/declaration-remover.js.map +1 -1
  97. package/dead-code-eliminator/variable-declaration-bindings.js +34 -0
  98. package/dead-code-eliminator/variable-declaration-bindings.js.map +1 -0
  99. package/dependency-scanner/dependency-graph.d.ts +0 -27
  100. package/dependency-scanner/dependency-graph.d.ts.map +1 -1
  101. package/dependency-scanner/dependency-graph.js +73 -0
  102. package/dependency-scanner/dependency-graph.js.map +1 -1
  103. package/dependency-scanner/external-dependencies.js +16 -0
  104. package/dependency-scanner/external-dependencies.js.map +1 -1
  105. package/dependency-scanner/scanner.d.ts +0 -13
  106. package/dependency-scanner/scanner.d.ts.map +1 -1
  107. package/dependency-scanner/scanner.js +69 -0
  108. package/dependency-scanner/scanner.js.map +1 -1
  109. package/dependency-scanner/source-file-references.js +26 -0
  110. package/dependency-scanner/source-file-references.js.map +1 -1
  111. package/dependency-scanner/source-map-file-locator.d.ts +0 -7
  112. package/dependency-scanner/source-map-file-locator.d.ts.map +1 -1
  113. package/dependency-scanner/source-map-file-locator.js +27 -0
  114. package/dependency-scanner/source-map-file-locator.js.map +1 -1
  115. package/dependency-scanner/typescript-file-host.d.ts +0 -9
  116. package/dependency-scanner/typescript-file-host.d.ts.map +1 -1
  117. package/dependency-scanner/typescript-file-host.js +114 -0
  118. package/dependency-scanner/typescript-file-host.js.map +1 -1
  119. package/dependency-scanner/typescript-project-analyzer.d.ts +0 -17
  120. package/dependency-scanner/typescript-project-analyzer.d.ts.map +1 -1
  121. package/dependency-scanner/typescript-project-analyzer.js +52 -0
  122. package/dependency-scanner/typescript-project-analyzer.js.map +1 -1
  123. package/directed-graph/graph.d.ts +0 -26
  124. package/directed-graph/graph.d.ts.map +1 -1
  125. package/directed-graph/graph.js +229 -0
  126. package/directed-graph/graph.js.map +1 -1
  127. package/file-manager/compare.js +17 -0
  128. package/file-manager/compare.js.map +1 -1
  129. package/file-manager/equal.js +5 -0
  130. package/file-manager/equal.js.map +1 -1
  131. package/file-manager/file-manager.d.ts +0 -15
  132. package/file-manager/file-manager.d.ts.map +1 -1
  133. package/file-manager/file-manager.js +52 -0
  134. package/file-manager/file-manager.js.map +1 -1
  135. package/file-manager/permissions.js +26 -0
  136. package/file-manager/permissions.js.map +1 -1
  137. package/linker/linker.d.ts +0 -8
  138. package/linker/linker.d.ts.map +1 -1
  139. package/linker/linker.js +23 -0
  140. package/linker/linker.js.map +1 -1
  141. package/linker/resource-graph.js +25 -0
  142. package/linker/resource-graph.js.map +1 -1
  143. package/linker/source-modifier/import-paths.js +22 -0
  144. package/linker/source-modifier/import-paths.js.map +1 -1
  145. package/linker/substitute-bundles.js +84 -0
  146. package/linker/substitute-bundles.js.map +1 -1
  147. package/linker/substituted-resource-graph.js +72 -0
  148. package/linker/substituted-resource-graph.js.map +1 -1
  149. package/package-surface/modules.js +232 -5
  150. package/package-surface/modules.js.map +1 -1
  151. package/package-surface/surface.d.ts +0 -1
  152. package/package-surface/surface.d.ts.map +1 -1
  153. package/package-surface/surface.js +15 -0
  154. package/package-surface/surface.js.map +1 -1
  155. package/package.json +1 -1
  156. package/packtory/map-config.d.ts +0 -10
  157. package/packtory/map-config.d.ts.map +1 -1
  158. package/packtory/map-config.js +14 -0
  159. package/packtory/map-config.js.map +1 -1
  160. package/packtory/normalize-paths.js +24 -0
  161. package/packtory/normalize-paths.js.map +1 -1
  162. package/packtory/package-processor-build.js +72 -0
  163. package/packtory/package-processor-build.js.map +1 -1
  164. package/packtory/package-processor-publish.d.ts +0 -5
  165. package/packtory/package-processor-publish.d.ts.map +1 -1
  166. package/packtory/package-processor-publish.js +133 -0
  167. package/packtory/package-processor-publish.js.map +1 -1
  168. package/packtory/package-processor.d.ts +0 -17
  169. package/packtory/package-processor.d.ts.map +1 -1
  170. package/packtory/package-processor.js +8 -0
  171. package/packtory/package-processor.js.map +1 -1
  172. package/packtory/packtory-results.d.ts +0 -10
  173. package/packtory/packtory-results.d.ts.map +1 -1
  174. package/packtory/packtory-results.js +15 -0
  175. package/packtory/packtory-results.js.map +1 -1
  176. package/packtory/packtory.d.ts +0 -8
  177. package/packtory/packtory.d.ts.map +1 -1
  178. package/packtory/prepare-package-options.d.ts +0 -2
  179. package/packtory/prepare-package-options.d.ts.map +1 -1
  180. package/packtory/prepare-package-options.js +122 -0
  181. package/packtory/prepare-package-options.js.map +1 -1
  182. package/packtory/resolved-package.d.ts +0 -2
  183. package/packtory/resolved-package.d.ts.map +1 -1
  184. package/packtory/resolved-package.js +31 -0
  185. package/packtory/resolved-package.js.map +1 -1
  186. package/packtory/scheduler.d.ts +0 -37
  187. package/packtory/scheduler.d.ts.map +1 -1
  188. package/progress/progress-broadcaster.d.ts +0 -13
  189. package/progress/progress-broadcaster.d.ts.map +1 -1
  190. package/progress/progress-broadcaster.js +45 -0
  191. package/progress/progress-broadcaster.js.map +1 -1
  192. package/report/artifact-entry-merger.js +20 -0
  193. package/report/artifact-entry-merger.js.map +1 -1
  194. package/report/inspectors.js +73 -0
  195. package/report/inspectors.js.map +1 -1
  196. package/report/report-aggregator.d.ts +0 -5
  197. package/report/report-aggregator.d.ts.map +1 -1
  198. package/report/report-aggregator.js +185 -0
  199. package/report/report-aggregator.js.map +1 -1
  200. package/resource-resolver/content.js +53 -0
  201. package/resource-resolver/content.js.map +1 -1
  202. package/resource-resolver/resolved-bundle.d.ts +0 -10
  203. package/resource-resolver/resolved-bundle.d.ts.map +1 -1
  204. package/resource-resolver/resource-resolve-options.d.ts +0 -4
  205. package/resource-resolver/resource-resolve-options.d.ts.map +1 -1
  206. package/resource-resolver/resource-resolve-options.js +12 -0
  207. package/resource-resolver/resource-resolve-options.js.map +1 -1
  208. package/resource-resolver/resource-resolver.d.ts +0 -8
  209. package/resource-resolver/resource-resolver.d.ts.map +1 -1
  210. package/resource-resolver/resource-resolver.js +78 -0
  211. package/resource-resolver/resource-resolver.js.map +1 -1
  212. package/sbom/extract-license.js +10 -0
  213. package/sbom/extract-license.js.map +1 -1
  214. package/sbom/license-resolver.d.ts +0 -11
  215. package/sbom/license-resolver.d.ts.map +1 -1
  216. package/sbom/license-resolver.js +19 -0
  217. package/sbom/license-resolver.js.map +1 -1
  218. package/sbom/sbom-file.d.ts +0 -12
  219. package/sbom/sbom-file.d.ts.map +1 -1
  220. package/sbom/sbom-file.js +54 -0
  221. package/sbom/sbom-file.js.map +1 -1
  222. package/sbom/sbom-serializer.d.ts +0 -4
  223. package/sbom/sbom-serializer.d.ts.map +1 -1
  224. package/sbom/sbom-serializer.js +9 -0
  225. package/sbom/sbom-serializer.js.map +1 -1
  226. package/tar/extract-tar.js +38 -0
  227. package/tar/extract-tar.js.map +1 -1
  228. package/tar/tarball-builder.d.ts +0 -4
  229. package/tar/tarball-builder.d.ts.map +1 -1
  230. package/version-manager/manager.d.ts +0 -4
  231. package/version-manager/manager.d.ts.map +1 -1
  232. package/version-manager/manager.js +46 -0
  233. package/version-manager/manager.js.map +1 -1
  234. package/version-manager/manifest/builder.js +56 -0
  235. package/version-manager/manifest/builder.js.map +1 -1
  236. package/version-manager/manifest/serialize.js +46 -0
  237. package/version-manager/manifest/serialize.js.map +1 -1
  238. package/version-manager/manifest/sort-values.js +16 -0
  239. package/version-manager/manifest/sort-values.js.map +1 -1
  240. package/version-manager/specifier-classifier.js +33 -0
  241. package/version-manager/specifier-classifier.js.map +1 -1
  242. package/version-manager/specifier-errors.js +43 -0
  243. package/version-manager/specifier-errors.js.map +1 -1
  244. package/version-manager/versioned-bundle-dependencies.js +107 -0
  245. package/version-manager/versioned-bundle-dependencies.js.map +1 -1
  246. package/version-manager/versioned-bundle-imports.js +72 -0
  247. package/version-manager/versioned-bundle-imports.js.map +1 -1
  248. package/version-manager/versioned-bundle.js +60 -0
  249. package/version-manager/versioned-bundle.js.map +1 -1
  250. package/sbom.cdx.json +0 -390
@@ -1,2 +1,12 @@
1
1
  import { isPlainObject } from 'remeda';
2
+ export function extractLicenseFromManifest(packageJson) {
3
+ if (!isPlainObject(packageJson)) {
4
+ return undefined;
5
+ }
6
+ const { license } = packageJson;
7
+ if (typeof license === 'string' && license.length > 0) {
8
+ return license;
9
+ }
10
+ return undefined;
11
+ }
2
12
  //# sourceMappingURL=extract-license.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-license.js","sourceRoot":"","sources":["../../../../source/sbom/extract-license.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ"}
1
+ {"version":3,"file":"extract-license.js","sourceRoot":"","sources":["../../../../source/sbom/extract-license.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,UAAU,0BAA0B,CAAC,WAAoB;IAC3D,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IAChC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC"}
@@ -1,14 +1,3 @@
1
1
  import type { FileManager } from '../file-manager/file-manager.ts';
2
- type LicenseResolverDependencies = {
3
- readonly fileManager: FileManager;
4
- };
5
- type LicenseResolveOptions = {
6
- readonly projectFolder: string;
7
- readonly dependencyName: string;
8
- };
9
- export type LicenseResolver = {
10
- resolveLicense: (options: LicenseResolveOptions) => Promise<string | undefined>;
11
- };
12
- export declare function createLicenseResolver(dependencies: LicenseResolverDependencies): LicenseResolver;
13
2
  export {};
14
3
  //# sourceMappingURL=license-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"license-resolver.d.ts","sourceRoot":"","sources":["../../../../source/sbom/license-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE,KAAK,2BAA2B,GAAG;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACrC,CAAC;AAEF,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,cAAc,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACnF,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,2BAA2B,GAAG,eAAe,CAqBhG"}
1
+ {"version":3,"file":"license-resolver.d.ts","sourceRoot":"","sources":["../../../../source/sbom/license-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC"}
@@ -1,3 +1,22 @@
1
1
  import path from 'node:path';
2
2
  import { extractLicenseFromManifest } from "./extract-license.js";
3
+ export function createLicenseResolver(dependencies) {
4
+ const { fileManager } = dependencies;
5
+ function buildMissingDependencyMessage(dependencyName) {
6
+ const intro = `Dependency "${dependencyName}" is declared in the published manifest`;
7
+ return `${intro} but is not installed in node_modules`;
8
+ }
9
+ return {
10
+ async resolveLicense({ projectFolder, dependencyName }) {
11
+ const packageJsonPath = path.join(projectFolder, 'node_modules', dependencyName, 'package.json');
12
+ const readability = await fileManager.checkReadability(packageJsonPath);
13
+ if (!readability.isReadable) {
14
+ throw new Error(buildMissingDependencyMessage(dependencyName));
15
+ }
16
+ const content = await fileManager.readFile(packageJsonPath);
17
+ const parsed = JSON.parse(content);
18
+ return extractLicenseFromManifest(parsed);
19
+ }
20
+ };
21
+ }
3
22
  //# sourceMappingURL=license-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"license-resolver.js","sourceRoot":"","sources":["../../../../source/sbom/license-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW;AAE5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB"}
1
+ {"version":3,"file":"license-resolver.js","sourceRoot":"","sources":["../../../../source/sbom/license-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAelE,MAAM,UAAU,qBAAqB,CAAC,YAAyC;IAC3E,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IAErC,SAAS,6BAA6B,CAAC,cAAsB;QACzD,MAAM,KAAK,GAAG,eAAe,cAAc,yCAAyC,CAAC;QACrF,OAAO,GAAG,KAAK,uCAAuC,CAAC;IAC3D,CAAC;IAED,OAAO;QACH,KAAK,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE;YAClD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YACjG,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;YAC9C,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -3,17 +3,5 @@ import type { FileDescription } from '../file-manager/file-description.ts';
3
3
  import type { VersionedBundleWithManifest } from '../version-manager/versioned-bundle.ts';
4
4
  import type { LicenseResolver } from './license-resolver.ts';
5
5
  import type { SbomSerializer } from './sbom-serializer.ts';
6
- type ToolVersionProvider = () => Promise<string>;
7
- type SbomFileBuilderDependencies = {
8
- readonly licenseResolver: LicenseResolver;
9
- readonly sbomSerializer: SbomSerializer;
10
- readonly toolVersionProvider: ToolVersionProvider;
11
- readonly projectFolder: string;
12
- };
13
- type SbomSibling = Pick<VersionedBundleWithManifest, 'name' | 'packageJson'>;
14
- export type SbomFileBuilder = {
15
- generate: (bundle: VersionedBundleWithManifest, siblings: readonly SbomSibling[], publishSettings: PublishSettings) => Promise<readonly FileDescription[] | undefined>;
16
- };
17
- export declare function createSbomFileBuilder(dependencies: SbomFileBuilderDependencies): SbomFileBuilder;
18
6
  export {};
19
7
  //# sourceMappingURL=sbom-file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sbom-file.d.ts","sourceRoot":"","sources":["../../../../source/sbom/sbom-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAC;AAE1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,KAAK,mBAAmB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjD,KAAK,2BAA2B,GAAG;IAC/B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,KAAK,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC;AAE7E,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,EAAE,CACN,MAAM,EAAE,2BAA2B,EACnC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,eAAe,EAAE,eAAe,KAC/B,OAAO,CAAC,SAAS,eAAe,EAAE,GAAG,SAAS,CAAC,CAAC;CACxD,CAAC;AAuBF,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,2BAA2B,GAAG,eAAe,CAqDhG"}
1
+ {"version":3,"file":"sbom-file.d.ts","sourceRoot":"","sources":["../../../../source/sbom/sbom-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC;AAC1E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wCAAwC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB"}
package/sbom/sbom-file.js CHANGED
@@ -1,3 +1,57 @@
1
1
  import { extractLicenseFromManifest } from "./extract-license.js";
2
2
  import { buildSbom } from "./sbom-builder.js";
3
+ const sbomFilePath = 'sbom.cdx.json';
4
+ function isSbomEnabled(publishSettings) {
5
+ return publishSettings.sbom?.enabled ?? true;
6
+ }
7
+ function listDependencyEntries(bundle) {
8
+ return [
9
+ ...Object.entries(bundle.dependencies).map(([name, specifier]) => {
10
+ return { name, specifier, kind: 'runtime' };
11
+ }),
12
+ ...Object.entries(bundle.peerDependencies).map(([name, specifier]) => {
13
+ return { name, specifier, kind: 'peer' };
14
+ })
15
+ ];
16
+ }
17
+ export function createSbomFileBuilder(dependencies) {
18
+ const { licenseResolver, sbomSerializer, toolVersionProvider, projectFolder } = dependencies;
19
+ async function resolveDependencyEntries(bundle, siblings) {
20
+ const siblingsByName = new Map(siblings.map((sibling) => {
21
+ return [sibling.name, sibling];
22
+ }));
23
+ const entries = listDependencyEntries(bundle);
24
+ return Promise.all(entries.map(async (entry) => {
25
+ const sibling = siblingsByName.get(entry.name);
26
+ const license = sibling === undefined
27
+ ? await licenseResolver.resolveLicense({ projectFolder, dependencyName: entry.name })
28
+ : extractLicenseFromManifest(sibling.packageJson);
29
+ return { ...entry, license };
30
+ }));
31
+ }
32
+ async function buildFile(bundle, siblings) {
33
+ const [resolvedToolVersion, sbomDependencies] = await Promise.all([
34
+ toolVersionProvider(),
35
+ resolveDependencyEntries(bundle, siblings)
36
+ ]);
37
+ const bom = buildSbom({
38
+ toolVersion: resolvedToolVersion,
39
+ rootComponent: { name: bundle.packageJson.name, version: bundle.packageJson.version },
40
+ dependencies: sbomDependencies
41
+ });
42
+ return {
43
+ filePath: sbomFilePath,
44
+ content: sbomSerializer.serialize(bom),
45
+ isExecutable: false
46
+ };
47
+ }
48
+ return {
49
+ async generate(bundle, siblings, publishSettings) {
50
+ if (!isSbomEnabled(publishSettings)) {
51
+ return undefined;
52
+ }
53
+ return [await buildFile(bundle, siblings)];
54
+ }
55
+ };
56
+ }
3
57
  //# sourceMappingURL=sbom-file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sbom-file.js","sourceRoot":"","sources":["../../../../source/sbom/sbom-file.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB;AAGjE,OAAO,EAAE,SAAS,EAAgD,MAAM,mBAAmB"}
1
+ {"version":3,"file":"sbom-file.js","sourceRoot":"","sources":["../../../../source/sbom/sbom-file.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,2 @@
1
1
  import * as cdx from '@cyclonedx/cyclonedx-library';
2
- export type SbomSerializer = {
3
- serialize: (bom: cdx.Models.Bom) => string;
4
- };
5
- export declare function createSbomSerializer(): SbomSerializer;
6
2
  //# sourceMappingURL=sbom-serializer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sbom-serializer.d.ts","sourceRoot":"","sources":["../../../../source/sbom/sbom-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG;IACzB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC;CAC9C,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,cAAc,CASrD"}
1
+ {"version":3,"file":"sbom-serializer.d.ts","sourceRoot":"","sources":["../../../../source/sbom/sbom-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,8BAA8B"}
@@ -1,2 +1,11 @@
1
1
  import * as cdx from '@cyclonedx/cyclonedx-library';
2
+ export function createSbomSerializer() {
3
+ const factory = new cdx.Serialize.JSON.Normalize.Factory(cdx.Spec.Spec1dot6);
4
+ const serializer = new cdx.Serialize.JsonSerializer(factory);
5
+ return {
6
+ serialize(bom) {
7
+ return serializer.serialize(bom, { sortLists: true, space: 4 });
8
+ }
9
+ };
10
+ }
2
11
  //# sourceMappingURL=sbom-serializer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sbom-serializer.js","sourceRoot":"","sources":["../../../../source/sbom/sbom-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,8BAA8B"}
1
+ {"version":3,"file":"sbom-serializer.js","sourceRoot":"","sources":["../../../../source/sbom/sbom-serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AAMpD,MAAM,UAAU,oBAAoB;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAE7D,OAAO;QACH,SAAS,CAAC,GAAG;YACT,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,4 +1,42 @@
1
1
  import { createGunzip } from 'node:zlib';
2
2
  import { Readable } from 'node:stream';
3
3
  import { extract } from 'tar-stream';
4
+ function toError(error) {
5
+ return error instanceof Error ? error : new Error(String(error));
6
+ }
7
+ async function collectTarEntries(stream) {
8
+ const entries = [];
9
+ for await (const entry of stream) {
10
+ let result = '';
11
+ for await (const chunk of entry) {
12
+ result += chunk.toString();
13
+ }
14
+ entries.push({ header: entry.header, content: result });
15
+ }
16
+ return entries;
17
+ }
18
+ async function waitForStreamError(stream) {
19
+ return await new Promise((_resolve, reject) => {
20
+ stream.once('error', (error) => {
21
+ reject(toError(error));
22
+ });
23
+ });
24
+ }
25
+ export async function extractTarEntries(buffer) {
26
+ const extractStream = extract();
27
+ const source = Readable.from(buffer);
28
+ const gunzip = createGunzip();
29
+ const stream = source.pipe(gunzip).pipe(extractStream);
30
+ try {
31
+ return await Promise.race([
32
+ collectTarEntries(stream),
33
+ waitForStreamError(source),
34
+ waitForStreamError(gunzip),
35
+ waitForStreamError(extractStream)
36
+ ]);
37
+ }
38
+ catch (error) {
39
+ throw toError(error);
40
+ }
41
+ }
4
42
  //# sourceMappingURL=extract-tar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-tar.js","sourceRoot":"","sources":["../../../../source/tar/extract-tar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa;AACtC,OAAO,EAAE,OAAO,EAAmC,MAAM,YAAY"}
1
+ {"version":3,"file":"extract-tar.js","sourceRoot":"","sources":["../../../../source/tar/extract-tar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAmC,MAAM,YAAY,CAAC;AAOtE,SAAS,OAAO,CAAC,KAAc;IAC3B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC;AAUD,KAAK,UAAU,iBAAiB,CAAC,MAAqC;IAClE,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAoB;IAClD,OAAO,MAAM,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QACjD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YACpC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc;IAClD,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAkC,CAAC;IAExF,IAAI,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACtB,iBAAiB,CAAC,MAAM,CAAC;YACzB,kBAAkB,CAAC,MAAM,CAAC;YAC1B,kBAAkB,CAAC,MAAM,CAAC;YAC1B,kBAAkB,CAAC,aAAa,CAAC;SACpC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACL,CAAC"}
@@ -1,6 +1,2 @@
1
1
  import type { FileDescription } from '../file-manager/file-description.ts';
2
- export type TarballBuilder = {
3
- build: (fileDescriptions: readonly FileDescription[]) => Promise<Buffer>;
4
- };
5
- export declare function createTarballBuilder(): TarballBuilder;
6
2
  //# sourceMappingURL=tarball-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tarball-builder.d.ts","sourceRoot":"","sources":["../../../../source/tar/tarball-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5E,CAAC;AAmBF,wBAAgB,oBAAoB,IAAI,cAAc,CAsCrD"}
1
+ {"version":3,"file":"tarball-builder.d.ts","sourceRoot":"","sources":["../../../../source/tar/tarball-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC"}
@@ -1,11 +1,7 @@
1
1
  import type { ProgressBroadcastProvider } from '../progress/progress-broadcaster.ts';
2
2
  import { type BuildVersionedBundleOptions, type VersionedBundle, type VersionedBundleWithManifest } from './versioned-bundle.ts';
3
- export type VersionManagerDependencies = {
4
- readonly progressBroadcaster: ProgressBroadcastProvider;
5
- };
6
3
  export type VersionManager = {
7
4
  addVersion: (options: BuildVersionedBundleOptions) => VersionedBundleWithManifest;
8
5
  increaseVersion: (bundle: VersionedBundle) => VersionedBundleWithManifest;
9
6
  };
10
- export declare function createVersionManager(dependencies: VersionManagerDependencies): VersionManager;
11
7
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../source/version-manager/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAIrF,OAAO,EAEH,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,2BAA2B,EACnC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,0BAA0B,GAAG;IACrC,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,UAAU,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,2BAA2B,CAAC;IAClF,eAAe,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,2BAA2B,CAAC;CAC7E,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,0BAA0B,GAAG,cAAc,CAuD7F"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../source/version-manager/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC;AAIpF,OAAO,EAEH,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,2BAA2B,EACnC,MAAM,uBAAuB;AAM9B,MAAM,MAAM,cAAc,GAAG;IACzB,UAAU,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,2BAA2B,CAAC;IAClF,eAAe,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,2BAA2B,CAAC;CAC7E"}
@@ -3,4 +3,50 @@ import { inspectPackageJsonProvenance } from "../report/inspectors.js";
3
3
  import { buildPackageManifest } from "./manifest/builder.js";
4
4
  import { serializePackageJson } from "./manifest/serialize.js";
5
5
  import { buildVersionedBundle } from "./versioned-bundle.js";
6
+ export function createVersionManager(dependencies) {
7
+ const { progressBroadcaster } = dependencies;
8
+ return {
9
+ addVersion(options) {
10
+ const versionedBundle = buildVersionedBundle(options);
11
+ const manifest = buildPackageManifest(versionedBundle);
12
+ const packageJsonContent = serializePackageJson(manifest);
13
+ if (progressBroadcaster.hasSubscribers('packageJsonAssembled')) {
14
+ progressBroadcaster.emit('packageJsonAssembled', {
15
+ packageName: versionedBundle.name,
16
+ fields: inspectPackageJsonProvenance(manifest, options.mainPackageJson, options.additionalPackageJsonAttributes)
17
+ });
18
+ }
19
+ return {
20
+ ...versionedBundle,
21
+ packageJson: manifest,
22
+ manifestFile: {
23
+ content: packageJsonContent,
24
+ isExecutable: false,
25
+ filePath: 'package.json'
26
+ }
27
+ };
28
+ },
29
+ increaseVersion(versionedBundle) {
30
+ const newVersion = semver.inc(versionedBundle.version, 'patch');
31
+ if (newVersion === null) {
32
+ throw new Error('Failed to increase version');
33
+ }
34
+ const newVersionedBundle = {
35
+ ...versionedBundle,
36
+ version: newVersion
37
+ };
38
+ const manifest = buildPackageManifest(newVersionedBundle);
39
+ const packageJsonContent = serializePackageJson(manifest);
40
+ return {
41
+ ...newVersionedBundle,
42
+ packageJson: manifest,
43
+ manifestFile: {
44
+ content: packageJsonContent,
45
+ isExecutable: false,
46
+ filePath: 'package.json'
47
+ }
48
+ };
49
+ }
50
+ };
51
+ }
6
52
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../source/version-manager/manager.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ;AAE3B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB;AAC9D,OAAO,EACH,oBAAoB,EAIvB,MAAM,uBAAuB"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../source/version-manager/manager.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACH,oBAAoB,EAIvB,MAAM,uBAAuB,CAAC;AAW/B,MAAM,UAAU,oBAAoB,CAAC,YAAwC;IACzE,MAAM,EAAE,mBAAmB,EAAE,GAAG,YAAY,CAAC;IAE7C,OAAO;QACH,UAAU,CAAC,OAAO;YACd,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE1D,IAAI,mBAAmB,CAAC,cAAc,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC7D,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBAC7C,WAAW,EAAE,eAAe,CAAC,IAAI;oBACjC,MAAM,EAAE,4BAA4B,CAChC,QAA6C,EAC7C,OAAO,CAAC,eAAoD,EAC5D,OAAO,CAAC,+BAAgF,CAC3F;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,OAAO;gBACH,GAAG,eAAe;gBAClB,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE;oBACV,OAAO,EAAE,kBAAkB;oBAC3B,YAAY,EAAE,KAAK;oBACnB,QAAQ,EAAE,cAAc;iBAC3B;aACJ,CAAC;QACN,CAAC;QAED,eAAe,CAAC,eAAe;YAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,kBAAkB,GAAoB;gBACxC,GAAG,eAAe;gBAClB,OAAO,EAAE,UAAU;aACtB,CAAC;YACF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;YAC1D,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE1D,OAAO;gBACH,GAAG,kBAAkB;gBACrB,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE;oBACV,OAAO,EAAE,kBAAkB;oBAC3B,YAAY,EAAE,KAAK;oBACnB,QAAQ,EAAE,cAAc;iBAC3B;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,3 +1,59 @@
1
1
  import { isEmpty } from 'remeda';
2
2
  // eslint-disable-next-line sonarjs/function-return-type -- distinct semantics for emit-false, emit-array, and omit
3
+ function resolveSideEffectsValue(bundle) {
4
+ if (Object.hasOwn(bundle.additionalAttributes, 'sideEffects')) {
5
+ return undefined;
6
+ }
7
+ const field = bundle.sideEffectsField;
8
+ if (field === undefined) {
9
+ return undefined;
10
+ }
11
+ if (field === false) {
12
+ return false;
13
+ }
14
+ return Array.from(field);
15
+ }
16
+ function buildSideEffectsEntry(sideEffects) {
17
+ return sideEffects === undefined ? {} : { sideEffects };
18
+ }
19
+ function toPackageJsonImports(importsField) {
20
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- config validation constrains imports values to JSON-compatible package.json data
21
+ return Object.fromEntries(Object.entries(importsField));
22
+ }
23
+ function buildImportsEntry(importsField) {
24
+ return importsField === undefined ? {} : { imports: toPackageJsonImports(importsField) };
25
+ }
26
+ function toPackageJsonBinTargets(binField) {
27
+ return Object.fromEntries(Object.entries(binField).flatMap(([name, target]) => {
28
+ return target === undefined ? [] : [[name, target]];
29
+ }));
30
+ }
31
+ function buildBinEntry(binField) {
32
+ if (binField === undefined) {
33
+ return {};
34
+ }
35
+ if (typeof binField === 'string') {
36
+ return { bin: binField };
37
+ }
38
+ return { bin: toPackageJsonBinTargets(binField) };
39
+ }
40
+ export function buildPackageManifest(bundle) {
41
+ const sideEffects = resolveSideEffectsValue(bundle);
42
+ const sideEffectsEntry = buildSideEffectsEntry(sideEffects);
43
+ const importsEntry = buildImportsEntry(bundle.importsField);
44
+ const binEntry = buildBinEntry(bundle.binField);
45
+ const packageJson = {
46
+ ...bundle.additionalAttributes,
47
+ ...sideEffectsEntry,
48
+ ...importsEntry,
49
+ ...binEntry,
50
+ exports: bundle.exportsField,
51
+ name: bundle.name,
52
+ version: bundle.version,
53
+ type: bundle.packageType,
54
+ ...(isEmpty(bundle.dependencies) ? {} : { dependencies: bundle.dependencies }),
55
+ ...(isEmpty(bundle.peerDependencies) ? {} : { peerDependencies: bundle.peerDependencies })
56
+ };
57
+ return packageJson;
58
+ }
3
59
  //# sourceMappingURL=builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../source/version-manager/manifest/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../source/version-manager/manifest/builder.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,48 @@
1
1
  import { compareValues } from "./sort-values.js";
2
+ const indentationSize = 4;
3
+ function isArray(value) {
4
+ return Array.isArray(value);
5
+ }
6
+ function isRecord(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
8
+ }
9
+ function assertNoCircularStructures(value) {
10
+ const visitedObjects = new Set();
11
+ JSON.stringify(value, (_key, currentValue) => {
12
+ if (typeof currentValue === 'object' && currentValue !== null) {
13
+ if (visitedObjects.has(currentValue)) {
14
+ throw new Error('Circular structures are not supported');
15
+ }
16
+ visitedObjects.add(currentValue);
17
+ }
18
+ return currentValue;
19
+ });
20
+ }
21
+ function shouldPreserveArrayOrder(path) {
22
+ const [topLevelKey] = path;
23
+ return topLevelKey === 'imports' || topLevelKey === 'exports';
24
+ }
25
+ function deepSortValue(value, path = []) {
26
+ if (isArray(value)) {
27
+ const mapped = value.map((entry, index) => {
28
+ return deepSortValue(entry, [...path, String(index)]);
29
+ });
30
+ return shouldPreserveArrayOrder(path) ? mapped : mapped.toSorted(compareValues);
31
+ }
32
+ if (isRecord(value)) {
33
+ return Object.fromEntries(Object.entries(value)
34
+ .map(([key, nestedValue]) => {
35
+ return [key, deepSortValue(nestedValue, [...path, key])];
36
+ })
37
+ .toSorted(([leftKey], [rightKey]) => {
38
+ return compareValues(leftKey, rightKey);
39
+ }));
40
+ }
41
+ return value;
42
+ }
43
+ export function serializePackageJson(data) {
44
+ assertNoCircularStructures(data);
45
+ const sortedData = deepSortValue(data);
46
+ return JSON.stringify(sortedData, null, indentationSize);
47
+ }
2
48
  //# sourceMappingURL=serialize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../../source/version-manager/manifest/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB"}
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../../source/version-manager/manifest/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,eAAe,GAAG,CAAC,CAAC;AAG1B,SAAS,OAAO,CAAC,KAAc;IAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAC9C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAW,CAAC;IAE1C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,YAAqB,EAAE,EAAE;QAClD,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC5D,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7D,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAuB;IACrD,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC3B,OAAO,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,OAA0B,EAAE;IAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,OAAO,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aAChB,GAAG,CAAc,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC;aACD,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAc,EAAE,CAAC,QAAQ,CAAc,EAAE,EAAE;YAC1D,OAAO,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC,CAAC,CACT,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA2B;IAC5D,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AAC7D,CAAC"}
@@ -1 +1,17 @@
1
+ function comparePrimitiveValues(valueA, valueB) {
2
+ if (valueA < valueB) {
3
+ return -1;
4
+ }
5
+ if (valueA > valueB) {
6
+ return 1;
7
+ }
8
+ return 0;
9
+ }
10
+ export function compareValues(valueA, valueB) {
11
+ if ((typeof valueA === 'boolean' || typeof valueA === 'number' || typeof valueA === 'string') &&
12
+ (typeof valueB === 'boolean' || typeof valueB === 'number' || typeof valueB === 'string')) {
13
+ return comparePrimitiveValues(valueA, valueB);
14
+ }
15
+ return 0;
16
+ }
1
17
  //# sourceMappingURL=sort-values.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sort-values.js","sourceRoot":"","sources":["../../../../../source/version-manager/manifest/sort-values.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"sort-values.js","sourceRoot":"","sources":["../../../../../source/version-manager/manifest/sort-values.ts"],"names":[],"mappings":"AAKA,SAAS,sBAAsB,CAAC,MAAsB,EAAE,MAAsB;IAC1E,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe,EAAE,MAAe;IAC1D,IACI,CAAC,OAAO,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC;QACzF,CAAC,OAAO,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,EAC3F,CAAC;QACC,OAAO,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,CAAC;AACb,CAAC"}
@@ -1,2 +1,35 @@
1
1
  import npa from 'npm-package-arg';
2
+ const workspaceProtocolPrefix = 'workspace:';
3
+ const portalProtocolPrefix = 'portal:';
4
+ const workspaceMalformedReason = 'workspace protocol is yarn/pnpm/bun-specific; resolved at install time by the workspace,' +
5
+ ' not valid in a published manifest';
6
+ const portalMalformedReason = 'portal protocol is yarn-specific; resolved as a local symlink, not valid in a published manifest';
7
+ const npaTypeKindMap = {
8
+ alias: { kind: 'registry' },
9
+ version: { kind: 'registry' },
10
+ range: { kind: 'registry' },
11
+ tag: { kind: 'registry' },
12
+ git: { kind: 'mutable', npaType: 'git' },
13
+ remote: { kind: 'mutable', npaType: 'remote' },
14
+ file: { kind: 'mutable', npaType: 'file' },
15
+ directory: { kind: 'mutable', npaType: 'directory' }
16
+ };
17
+ function classifyNpaResult(result) {
18
+ return npaTypeKindMap[result.type];
19
+ }
20
+ export function classifySpecifier(name, specifier) {
21
+ if (specifier.startsWith(workspaceProtocolPrefix)) {
22
+ return { kind: 'malformed', reason: workspaceMalformedReason };
23
+ }
24
+ if (specifier.startsWith(portalProtocolPrefix)) {
25
+ return { kind: 'malformed', reason: portalMalformedReason };
26
+ }
27
+ try {
28
+ const result = npa.resolve(name, specifier);
29
+ return classifyNpaResult(result);
30
+ }
31
+ catch (error) {
32
+ return { kind: 'malformed', reason: String(error) };
33
+ }
34
+ }
2
35
  //# sourceMappingURL=specifier-classifier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specifier-classifier.js","sourceRoot":"","sources":["../../../../source/version-manager/specifier-classifier.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB"}
1
+ {"version":3,"file":"specifier-classifier.js","sourceRoot":"","sources":["../../../../source/version-manager/specifier-classifier.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,iBAAiB,CAAC;AAElC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAC7C,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAEvC,MAAM,wBAAwB,GAC1B,0FAA0F;IAC1F,oCAAoC,CAAC;AACzC,MAAM,qBAAqB,GACvB,kGAAkG,CAAC;AAWvG,MAAM,cAAc,GAAoD;IACpE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IAC3B,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IACzB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IACxC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC9C,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE;CACvD,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAkB;IACzC,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAAiB;IAC7D,IAAI,SAAS,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACxD,CAAC;AACL,CAAC"}
@@ -1 +1,44 @@
1
+ function dependencyWord(count) {
2
+ return count === 1 ? 'dependency' : 'dependencies';
3
+ }
4
+ function entryWord(count) {
5
+ return count === 1 ? 'entry' : 'entries';
6
+ }
7
+ export function renderMutableSpecifierMessage(offenders) {
8
+ const isSingular = offenders.length === 1;
9
+ const verbAndNoun = isSingular ? 'uses a mutable specifier' : 'use mutable specifiers';
10
+ const bypassVerb = isSingular ? 'bypasses' : 'bypass';
11
+ const noun = dependencyWord(offenders.length);
12
+ const header = `Refusing to publish: ${offenders.length} ${noun} ${verbAndNoun},` +
13
+ ` which ${bypassVerb} the npm registry's integrity guarantees:`;
14
+ const lines = offenders.map((offender) => {
15
+ return ` - "${offender.name}" → "${offender.specifier}" (${offender.npaType})`;
16
+ });
17
+ const footer = 'Add the dep name to dependencyPolicy.allowMutableSpecifiers to allow this on purpose.';
18
+ return [header, ...lines, footer].join('\n');
19
+ }
20
+ export function renderMalformedSpecifierMessage(offenders) {
21
+ const isSingular = offenders.length === 1;
22
+ const verb = isSingular ? 'has' : 'have';
23
+ const noun = dependencyWord(offenders.length);
24
+ const header = `Refusing to publish: ${offenders.length} ${noun} ${verb} a specifier that npm cannot publish:`;
25
+ const lines = offenders.map((offender) => {
26
+ return ` - "${offender.name}" → "${offender.specifier}" (${offender.reason})`;
27
+ });
28
+ const replacementHint = 'Replace with a registry version (e.g. "^1.2.3").';
29
+ const allowListHint = 'Mutable-specifier allow-listing does not apply here.';
30
+ return [header, ...lines, `${replacementHint} ${allowListHint}`].join('\n');
31
+ }
32
+ export function renderUnusedAllowListMessage(unusedEntries) {
33
+ const isSingular = unusedEntries.length === 1;
34
+ const verb = isSingular ? 'is' : 'are';
35
+ const noun = entryWord(unusedEntries.length);
36
+ const header = `Refusing to publish: ${unusedEntries.length} ${noun} in` +
37
+ ` dependencyPolicy.allowMutableSpecifiers ${verb} not in use:`;
38
+ const lines = unusedEntries.map((entry) => {
39
+ return ` - "${entry}"`;
40
+ });
41
+ const footer = 'Remove unused entries — they reflect stale exceptions to the integrity policy.';
42
+ return [header, ...lines, footer].join('\n');
43
+ }
1
44
  //# sourceMappingURL=specifier-errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"specifier-errors.js","sourceRoot":"","sources":["../../../../source/version-manager/specifier-errors.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"specifier-errors.js","sourceRoot":"","sources":["../../../../source/version-manager/specifier-errors.ts"],"names":[],"mappings":"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"}