packtory 0.0.8 → 0.0.9

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 (339) hide show
  1. package/artifacts/artifacts-builder.d.ts +7 -5
  2. package/artifacts/artifacts-builder.d.ts.map +1 -1
  3. package/artifacts/artifacts-builder.js +47 -18
  4. package/artifacts/artifacts-builder.js.map +1 -1
  5. package/bundle-emitter/emitter.d.ts +12 -2
  6. package/bundle-emitter/emitter.d.ts.map +1 -1
  7. package/bundle-emitter/emitter.js +11 -6
  8. package/bundle-emitter/emitter.js.map +1 -1
  9. package/bundle-emitter/extract-package-tarball.js +1 -2
  10. package/bundle-emitter/extract-package-tarball.js.map +1 -1
  11. package/bundle-emitter/publish-settings-bridge.js +133 -0
  12. package/bundle-emitter/publish-settings-bridge.js.map +1 -0
  13. package/bundle-emitter/registry-client.d.ts +13 -6
  14. package/bundle-emitter/registry-client.d.ts.map +1 -1
  15. package/bundle-emitter/registry-client.js +217 -45
  16. package/bundle-emitter/registry-client.js.map +1 -1
  17. package/bundle-emitter/repository-coherence.js +54 -0
  18. package/bundle-emitter/repository-coherence.js.map +1 -0
  19. package/bundle-emitter/repository-url-normalizer.js +38 -0
  20. package/bundle-emitter/repository-url-normalizer.js.map +1 -0
  21. package/checks/check-runner.js +3 -9
  22. package/checks/check-runner.js.map +1 -1
  23. package/checks/rule.js +13 -0
  24. package/checks/rule.js.map +1 -0
  25. package/checks/rules/max-bundle-size.js +44 -0
  26. package/checks/rules/max-bundle-size.js.map +1 -0
  27. package/checks/rules/no-dev-dependency-imports.js +37 -0
  28. package/checks/rules/no-dev-dependency-imports.js.map +1 -0
  29. package/checks/rules/no-duplicated-files.js +102 -27
  30. package/checks/rules/no-duplicated-files.js.map +1 -1
  31. package/checks/rules/no-side-effects.js +51 -0
  32. package/checks/rules/no-side-effects.js.map +1 -0
  33. package/checks/rules/no-unused-bundle-dependencies.js +33 -0
  34. package/checks/rules/no-unused-bundle-dependencies.js.map +1 -0
  35. package/checks/rules/registry.js +17 -0
  36. package/checks/rules/registry.js.map +1 -0
  37. package/checks/rules/required-files.js +41 -0
  38. package/checks/rules/required-files.js.map +1 -0
  39. package/checks/rules/unique-target-paths.js +34 -0
  40. package/checks/rules/unique-target-paths.js.map +1 -0
  41. package/common/clock.d.ts +7 -0
  42. package/common/clock.d.ts.map +1 -0
  43. package/common/clock.js +11 -0
  44. package/common/clock.js.map +1 -0
  45. package/common/code-files.js +5 -0
  46. package/common/code-files.js.map +1 -0
  47. package/config/additional-package-json-attributes-schema.js +7 -0
  48. package/config/additional-package-json-attributes-schema.js.map +1 -0
  49. package/config/automatic-versioning-settings.js +7 -0
  50. package/config/automatic-versioning-settings.js.map +1 -0
  51. package/config/checks-schema.d.ts +74 -0
  52. package/config/checks-schema.d.ts.map +1 -0
  53. package/config/checks-schema.js +27 -0
  54. package/config/checks-schema.js.map +1 -0
  55. package/config/common-package-settings-schemas.js +20 -0
  56. package/config/common-package-settings-schemas.js.map +1 -0
  57. package/config/config.d.ts +16 -704
  58. package/config/config.d.ts.map +1 -1
  59. package/config/config.js +3 -71
  60. package/config/config.js.map +1 -1
  61. package/config/dead-code-elimination-settings.d.ts +6 -0
  62. package/config/dead-code-elimination-settings.d.ts.map +1 -0
  63. package/config/dead-code-elimination-settings.js +5 -0
  64. package/config/dead-code-elimination-settings.js.map +1 -0
  65. package/config/dependency-policy.d.ts +6 -0
  66. package/config/dependency-policy.d.ts.map +1 -0
  67. package/config/dependency-policy.js +6 -0
  68. package/config/dependency-policy.js.map +1 -0
  69. package/config/main-package-json-schema.js +14 -0
  70. package/config/main-package-json-schema.js.map +1 -0
  71. package/config/manual-versioning-settings.js +7 -0
  72. package/config/manual-versioning-settings.js.map +1 -0
  73. package/config/optional-package-settings-schema.js +15 -0
  74. package/config/optional-package-settings-schema.js.map +1 -0
  75. package/config/package-config.d.ts +49 -0
  76. package/config/package-config.d.ts.map +1 -0
  77. package/config/package-config.js +7 -0
  78. package/config/package-config.js.map +1 -0
  79. package/config/package-interface.d.ts +34 -0
  80. package/config/package-interface.d.ts.map +1 -0
  81. package/config/package-interface.js +26 -0
  82. package/config/package-interface.js.map +1 -0
  83. package/config/package-json.d.ts +11 -10
  84. package/config/package-json.d.ts.map +1 -1
  85. package/config/package-json.js +11 -19
  86. package/config/package-json.js.map +1 -1
  87. package/config/package-schemas.js +10 -0
  88. package/config/package-schemas.js.map +1 -0
  89. package/config/packtory-config-schema.js +7 -0
  90. package/config/packtory-config-schema.js.map +1 -0
  91. package/config/packtory-config-without-registry-schema.js +32 -0
  92. package/config/packtory-config-without-registry-schema.js.map +1 -0
  93. package/config/per-package-settings-schema.js +22 -0
  94. package/config/per-package-settings-schema.js.map +1 -0
  95. package/config/publish-settings.d.ts +22 -0
  96. package/config/publish-settings.d.ts.map +1 -0
  97. package/config/publish-settings.js +26 -0
  98. package/config/publish-settings.js.map +1 -0
  99. package/config/publish-settings.report.js +17 -0
  100. package/config/publish-settings.report.js.map +1 -0
  101. package/config/registry-settings.d.ts +83 -1
  102. package/config/registry-settings.d.ts.map +1 -1
  103. package/config/registry-settings.js +35 -1
  104. package/config/registry-settings.js.map +1 -1
  105. package/config/registry-settings.report.js +41 -0
  106. package/config/registry-settings.report.js.map +1 -0
  107. package/config/root.d.ts +7 -0
  108. package/config/root.d.ts.map +1 -0
  109. package/config/{entry-point.js → root.js} +2 -2
  110. package/config/root.js.map +1 -0
  111. package/config/sbom-settings.js +5 -0
  112. package/config/sbom-settings.js.map +1 -0
  113. package/config/validation.d.ts +2 -2
  114. package/config/validation.d.ts.map +1 -1
  115. package/config/validation.js +155 -37
  116. package/config/validation.js.map +1 -1
  117. package/config/versioning-settings.d.ts.map +1 -1
  118. package/config/versioning-settings.js +2 -9
  119. package/config/versioning-settings.js.map +1 -1
  120. package/dead-code-eliminator/analyzed-bundle.d.ts +27 -0
  121. package/dead-code-eliminator/analyzed-bundle.d.ts.map +1 -0
  122. package/dead-code-eliminator/analyzed-bundle.js +8 -0
  123. package/dead-code-eliminator/analyzed-bundle.js.map +1 -0
  124. package/dead-code-eliminator/cross-bundle/cross-bundle-seeds.js +126 -0
  125. package/dead-code-eliminator/cross-bundle/cross-bundle-seeds.js.map +1 -0
  126. package/dead-code-eliminator/elimination-emitter.js +53 -0
  127. package/dead-code-eliminator/elimination-emitter.js.map +1 -0
  128. package/dead-code-eliminator/eliminator.js +141 -0
  129. package/dead-code-eliminator/eliminator.js.map +1 -0
  130. package/dead-code-eliminator/load-bundle.js +52 -0
  131. package/dead-code-eliminator/load-bundle.js.map +1 -0
  132. package/dead-code-eliminator/reachability/binding-extractor.js +88 -0
  133. package/dead-code-eliminator/reachability/binding-extractor.js.map +1 -0
  134. package/dead-code-eliminator/reachability/impure-statements.js +12 -0
  135. package/dead-code-eliminator/reachability/impure-statements.js.map +1 -0
  136. package/dead-code-eliminator/reachability/reachability.js +141 -0
  137. package/dead-code-eliminator/reachability/reachability.js.map +1 -0
  138. package/dead-code-eliminator/side-effect-classifier.js +289 -0
  139. package/dead-code-eliminator/side-effect-classifier.js.map +1 -0
  140. package/dead-code-eliminator/side-effects-field.js +25 -0
  141. package/dead-code-eliminator/side-effects-field.js.map +1 -0
  142. package/dead-code-eliminator/transform/atom-translator.js +13 -0
  143. package/dead-code-eliminator/transform/atom-translator.js.map +1 -0
  144. package/dead-code-eliminator/transform/declaration-remover.js +92 -0
  145. package/dead-code-eliminator/transform/declaration-remover.js.map +1 -0
  146. package/dead-code-eliminator/transform/line-index.js +27 -0
  147. package/dead-code-eliminator/transform/line-index.js.map +1 -0
  148. package/dead-code-eliminator/transform/source-map-composer.js +68 -0
  149. package/dead-code-eliminator/transform/source-map-composer.js.map +1 -0
  150. package/dependency-scanner/dependency-graph.d.ts +1 -1
  151. package/dependency-scanner/dependency-graph.d.ts.map +1 -1
  152. package/dependency-scanner/dependency-graph.js +5 -7
  153. package/dependency-scanner/dependency-graph.js.map +1 -1
  154. package/dependency-scanner/external-dependencies.js +2 -2
  155. package/dependency-scanner/external-dependencies.js.map +1 -1
  156. package/dependency-scanner/scanner.d.ts +7 -7
  157. package/dependency-scanner/scanner.d.ts.map +1 -1
  158. package/dependency-scanner/scanner.js +9 -14
  159. package/dependency-scanner/scanner.js.map +1 -1
  160. package/dependency-scanner/source-file-references.js +3 -48
  161. package/dependency-scanner/source-file-references.js.map +1 -1
  162. package/dependency-scanner/source-map-file-locator.d.ts.map +1 -1
  163. package/dependency-scanner/source-map-file-locator.js +10 -3
  164. package/dependency-scanner/source-map-file-locator.js.map +1 -1
  165. package/dependency-scanner/typescript-file-host.d.ts +2 -0
  166. package/dependency-scanner/typescript-file-host.d.ts.map +1 -1
  167. package/dependency-scanner/typescript-file-host.js +99 -32
  168. package/dependency-scanner/typescript-file-host.js.map +1 -1
  169. package/dependency-scanner/typescript-project-analyzer.d.ts +4 -5
  170. package/dependency-scanner/typescript-project-analyzer.d.ts.map +1 -1
  171. package/dependency-scanner/typescript-project-analyzer.js +5 -17
  172. package/dependency-scanner/typescript-project-analyzer.js.map +1 -1
  173. package/directed-graph/graph.d.ts +1 -1
  174. package/directed-graph/graph.d.ts.map +1 -1
  175. package/directed-graph/graph.js +132 -97
  176. package/directed-graph/graph.js.map +1 -1
  177. package/file-manager/compare.js +11 -9
  178. package/file-manager/compare.js.map +1 -1
  179. package/file-manager/file-manager.d.ts +1 -1
  180. package/file-manager/file-manager.d.ts.map +1 -1
  181. package/file-manager/file-manager.js +7 -1
  182. package/file-manager/file-manager.js.map +1 -1
  183. package/file-manager/permissions.js +20 -6
  184. package/file-manager/permissions.js.map +1 -1
  185. package/linker/linked-bundle.d.ts +5 -3
  186. package/linker/linked-bundle.d.ts.map +1 -1
  187. package/linker/linker.d.ts.map +1 -1
  188. package/linker/linker.js +8 -7
  189. package/linker/linker.js.map +1 -1
  190. package/linker/resource-graph.js +5 -8
  191. package/linker/resource-graph.js.map +1 -1
  192. package/linker/source-modifier/import-paths.js +1 -12
  193. package/linker/source-modifier/import-paths.js.map +1 -1
  194. package/linker/substitute-bundles.js +55 -48
  195. package/linker/substitute-bundles.js.map +1 -1
  196. package/linker/substituted-resource-graph.js +5 -8
  197. package/linker/substituted-resource-graph.js.map +1 -1
  198. package/npm-oidc-id-token-resolver.js +56 -0
  199. package/npm-oidc-id-token-resolver.js.map +1 -0
  200. package/package-surface/modules.js +307 -0
  201. package/package-surface/modules.js.map +1 -0
  202. package/package-surface/public-module-usage.js +37 -0
  203. package/package-surface/public-module-usage.js.map +1 -0
  204. package/package-surface/surface.d.ts +14 -0
  205. package/package-surface/surface.d.ts.map +1 -0
  206. package/package-surface/surface.js +16 -0
  207. package/package-surface/surface.js.map +1 -0
  208. package/package.json +13 -9
  209. package/packages/package-processor.composition.js +127 -0
  210. package/packages/package-processor.composition.js.map +1 -0
  211. package/packages/packtory/packtory.entry-point.d.ts +10 -5
  212. package/packages/packtory/packtory.entry-point.d.ts.map +1 -1
  213. package/packages/packtory/packtory.entry-point.js +7 -43
  214. package/packages/packtory/packtory.entry-point.js.map +1 -1
  215. package/packtory/map-config.d.ts +7 -16
  216. package/packtory/map-config.d.ts.map +1 -1
  217. package/packtory/map-config.js +5 -60
  218. package/packtory/map-config.js.map +1 -1
  219. package/packtory/normalize-paths.js +2 -2
  220. package/packtory/normalize-paths.js.map +1 -1
  221. package/packtory/package-processor-build.js +75 -0
  222. package/packtory/package-processor-build.js.map +1 -0
  223. package/packtory/package-processor-publish.d.ts +29 -0
  224. package/packtory/package-processor-publish.d.ts.map +1 -0
  225. package/packtory/package-processor-publish.js +134 -0
  226. package/packtory/package-processor-publish.js.map +1 -0
  227. package/packtory/package-processor.d.ts +17 -21
  228. package/packtory/package-processor.d.ts.map +1 -1
  229. package/packtory/package-processor.js +6 -81
  230. package/packtory/package-processor.js.map +1 -1
  231. package/packtory/packtory-publish.js +66 -0
  232. package/packtory/packtory-publish.js.map +1 -0
  233. package/packtory/packtory-resolve.js +77 -0
  234. package/packtory/packtory-resolve.js.map +1 -0
  235. package/packtory/packtory-results.d.ts +47 -0
  236. package/packtory/packtory-results.d.ts.map +1 -0
  237. package/packtory/packtory-results.js +16 -0
  238. package/packtory/packtory-results.js.map +1 -0
  239. package/packtory/packtory.d.ts +16 -37
  240. package/packtory/packtory.d.ts.map +1 -1
  241. package/packtory/packtory.js +33 -114
  242. package/packtory/packtory.js.map +1 -1
  243. package/packtory/prepare-package-options.d.ts +28 -0
  244. package/packtory/prepare-package-options.d.ts.map +1 -0
  245. package/packtory/prepare-package-options.js +122 -0
  246. package/packtory/prepare-package-options.js.map +1 -0
  247. package/packtory/report-attachment.js +25 -0
  248. package/packtory/report-attachment.js.map +1 -0
  249. package/packtory/resolved-package.d.ts +17 -0
  250. package/packtory/resolved-package.d.ts.map +1 -0
  251. package/packtory/resolved-package.js +35 -0
  252. package/packtory/resolved-package.js.map +1 -0
  253. package/packtory/scheduler.d.ts.map +1 -1
  254. package/packtory/scheduler.js +17 -15
  255. package/packtory/scheduler.js.map +1 -1
  256. package/progress/progress-broadcaster.d.ts +128 -5
  257. package/progress/progress-broadcaster.d.ts.map +1 -1
  258. package/progress/progress-broadcaster.js +37 -8
  259. package/progress/progress-broadcaster.js.map +1 -1
  260. package/report/artifact-entry-merger.js +22 -0
  261. package/report/artifact-entry-merger.js.map +1 -0
  262. package/report/config-redactor.js +27 -0
  263. package/report/config-redactor.js.map +1 -0
  264. package/report/decorators.js +68 -0
  265. package/report/decorators.js.map +1 -0
  266. package/report/inspectors.js +74 -0
  267. package/report/inspectors.js.map +1 -0
  268. package/report/report-aggregator.d.ts +61 -0
  269. package/report/report-aggregator.d.ts.map +1 -0
  270. package/report/report-aggregator.js +187 -0
  271. package/report/report-aggregator.js.map +1 -0
  272. package/resource-resolver/content.js +14 -0
  273. package/resource-resolver/content.js.map +1 -1
  274. package/resource-resolver/resolved-bundle.d.ts +4 -2
  275. package/resource-resolver/resolved-bundle.d.ts.map +1 -1
  276. package/resource-resolver/resource-resolve-options.d.ts +12 -5
  277. package/resource-resolver/resource-resolve-options.d.ts.map +1 -1
  278. package/resource-resolver/resource-resolve-options.js +14 -0
  279. package/resource-resolver/resource-resolve-options.js.map +1 -0
  280. package/resource-resolver/resource-resolver.d.ts +1 -1
  281. package/resource-resolver/resource-resolver.d.ts.map +1 -1
  282. package/resource-resolver/resource-resolver.js +37 -22
  283. package/resource-resolver/resource-resolver.js.map +1 -1
  284. package/sbom/extract-license.js +12 -0
  285. package/sbom/extract-license.js.map +1 -0
  286. package/sbom/license-resolver.d.ts +14 -0
  287. package/sbom/license-resolver.d.ts.map +1 -0
  288. package/sbom/license-resolver.js +22 -0
  289. package/sbom/license-resolver.js.map +1 -0
  290. package/sbom/sbom-builder.js +68 -0
  291. package/sbom/sbom-builder.js.map +1 -0
  292. package/sbom/sbom-file.d.ts +19 -0
  293. package/sbom/sbom-file.d.ts.map +1 -0
  294. package/sbom/sbom-file.js +57 -0
  295. package/sbom/sbom-file.js.map +1 -0
  296. package/sbom/sbom-serializer.d.ts +6 -0
  297. package/sbom/sbom-serializer.d.ts.map +1 -0
  298. package/sbom/sbom-serializer.js +11 -0
  299. package/sbom/sbom-serializer.js.map +1 -0
  300. package/sbom/tool-version.js +44 -0
  301. package/sbom/tool-version.js.map +1 -0
  302. package/tar/extract-tar.js +28 -3
  303. package/tar/extract-tar.js.map +1 -1
  304. package/tar/tarball-builder.d.ts.map +1 -1
  305. package/tar/tarball-builder.js +10 -7
  306. package/tar/tarball-builder.js.map +1 -1
  307. package/version-manager/manager.d.ts +5 -1
  308. package/version-manager/manager.d.ts.map +1 -1
  309. package/version-manager/manager.js +9 -1
  310. package/version-manager/manager.js.map +1 -1
  311. package/version-manager/manifest/builder.js +52 -6
  312. package/version-manager/manifest/builder.js.map +1 -1
  313. package/version-manager/manifest/serialize.js +31 -39
  314. package/version-manager/manifest/serialize.js.map +1 -1
  315. package/version-manager/manifest/sort-values.js +17 -0
  316. package/version-manager/manifest/sort-values.js.map +1 -0
  317. package/version-manager/specifier-classifier.js +35 -0
  318. package/version-manager/specifier-classifier.js.map +1 -0
  319. package/version-manager/specifier-errors.js +44 -0
  320. package/version-manager/specifier-errors.js.map +1 -0
  321. package/version-manager/versioned-bundle-dependencies.js +112 -0
  322. package/version-manager/versioned-bundle-dependencies.js.map +1 -0
  323. package/version-manager/versioned-bundle-imports.d.ts +5 -0
  324. package/version-manager/versioned-bundle-imports.d.ts.map +1 -0
  325. package/version-manager/versioned-bundle-imports.js +75 -0
  326. package/version-manager/versioned-bundle-imports.js.map +1 -0
  327. package/version-manager/versioned-bundle.d.ts +16 -8
  328. package/version-manager/versioned-bundle.d.ts.map +1 -1
  329. package/version-manager/versioned-bundle.js +48 -62
  330. package/version-manager/versioned-bundle.js.map +1 -1
  331. package/config/entry-point.d.ts +0 -7
  332. package/config/entry-point.d.ts.map +0 -1
  333. package/config/entry-point.js.map +0 -1
  334. package/file-manager/sort.js +0 -13
  335. package/file-manager/sort.js.map +0 -1
  336. package/list/unique-list.js +0 -5
  337. package/list/unique-list.js.map +0 -1
  338. package/version-manager/manifest/builder.d.ts +0 -5
  339. package/version-manager/manifest/builder.d.ts.map +0 -1
@@ -1,73 +1,246 @@
1
1
  import { Maybe } from 'true-myth';
2
2
  import { z } from 'zod/mini';
3
- import { safeParse } from '@schema-hub/zod-error-formatter';
4
- function isFetchError(error) {
5
- return typeof error === 'object' && error !== null && Object.hasOwn(error, 'statusCode');
6
- }
7
- function encodePackageName(name) {
8
- return name.replace('/', '%2F');
9
- }
10
- const distTagsSchema = z.object({
11
- latest: z.optional(z.string())
12
- });
13
- const versionDataSchema = z.object({
14
- dist: z.object({ shasum: z.string(), tarball: z.string() })
3
+ import { buildPublishOptionsForPublishSettings, remapPublishError } from "./publish-settings-bridge.js";
4
+ const notFoundStatusCode = 404;
5
+ const unauthorizedStatusCode = 401;
6
+ const forbiddenStatusCode = 403;
7
+ const npmRegistryUrl = 'https://registry.npmjs.org/';
8
+ const oidcExchangeRefreshThresholdInMilliseconds = 60_000;
9
+ const packageVersionDetailsSchema = z.object({
10
+ dist: z.object({
11
+ tarball: z.string()
12
+ })
15
13
  });
16
14
  const abbreviatedPackageResponseSchema = z.object({
17
15
  name: z.string(),
18
- 'dist-tags': distTagsSchema,
19
- versions: z.record(z.string(), versionDataSchema)
16
+ 'dist-tags': z.object({
17
+ latest: z.optional(z.string())
18
+ }),
19
+ versions: z.record(z.string(), packageVersionDetailsSchema)
20
20
  });
21
- const httpStatusCode = {
22
- notFound: 404,
23
- forbidden: 403
24
- };
21
+ const oidcExchangeResponseSchema = z.object({
22
+ token_type: z.string(),
23
+ token: z.string(),
24
+ created: z.string(),
25
+ expires: z.string()
26
+ });
27
+ function encodePackageName(name) {
28
+ return name.replace('/', '%2F');
29
+ }
30
+ function isRecord(value) {
31
+ return value instanceof Object;
32
+ }
33
+ function parseAbbreviatedPackageResponse(response) {
34
+ const result = abbreviatedPackageResponseSchema.safeParse(response);
35
+ return result.success ? result.data : undefined;
36
+ }
37
+ function toPublishManifest(manifest) {
38
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- libnpmpublish expects @npm/types PackageJson, which is structurally compatible with our validated manifest
39
+ return manifest;
40
+ }
41
+ function resolveRegistryUrl(registrySettings) {
42
+ return registrySettings.registryUrl;
43
+ }
44
+ function isNpmRegistry(registry) {
45
+ return new URL(registry ?? npmRegistryUrl).href === npmRegistryUrl;
46
+ }
47
+ function normalizeAuthConfig(registrySettings) {
48
+ if ('type' in registrySettings.auth) {
49
+ return {
50
+ publish: registrySettings.auth,
51
+ metadata: undefined
52
+ };
53
+ }
54
+ return {
55
+ publish: registrySettings.auth.publish,
56
+ metadata: registrySettings.auth.metadata
57
+ };
58
+ }
59
+ function resolvePublishAuth(registrySettings) {
60
+ return normalizeAuthConfig(registrySettings).publish;
61
+ }
62
+ function createBaseOptions(registrySettings) {
63
+ return {
64
+ alwaysAuth: true,
65
+ registry: resolveRegistryUrl(registrySettings)
66
+ };
67
+ }
68
+ function buildAuthOptions(auth, registrySettings) {
69
+ const registry = resolveRegistryUrl(registrySettings);
70
+ const options = createBaseOptions(registrySettings);
71
+ if (auth.type === 'bearer-token') {
72
+ return {
73
+ allowsAutomaticRetry: false,
74
+ registry,
75
+ options: {
76
+ ...options,
77
+ forceAuth: {
78
+ token: auth.token
79
+ }
80
+ }
81
+ };
82
+ }
83
+ return {
84
+ allowsAutomaticRetry: false,
85
+ registry,
86
+ options: {
87
+ ...options,
88
+ forceAuth: {
89
+ _auth: Buffer.from(`${auth.username}:${auth.password}`).toString('base64')
90
+ },
91
+ ...(auth.email === undefined ? {} : { email: auth.email })
92
+ }
93
+ };
94
+ }
95
+ function createAnonymousAuthResolution(registrySettings) {
96
+ return {
97
+ allowsAutomaticRetry: false,
98
+ registry: resolveRegistryUrl(registrySettings),
99
+ options: createBaseOptions(registrySettings)
100
+ };
101
+ }
102
+ function parseOidcExchangeResponse(response) {
103
+ const result = oidcExchangeResponseSchema.safeParse(response);
104
+ return result.success ? result.data : undefined;
105
+ }
106
+ async function parseJsonResponse(response) {
107
+ return response.json();
108
+ }
25
109
  export function createRegistryClient(dependencies) {
26
- const { npmFetch, publish } = dependencies;
110
+ const { npmFetch, publish, fetch: fetchImplementation, clock, promptForOneTimePassword, resolveIdToken } = dependencies;
111
+ const oidcExchangeTokenCache = new Map();
112
+ async function exchangeOidcToken(packageName, registrySettings, auth) {
113
+ const cacheKey = `${resolveRegistryUrl(registrySettings) ?? npmRegistryUrl}::${packageName}`;
114
+ const cachedToken = oidcExchangeTokenCache.get(cacheKey);
115
+ const currentTime = clock.getCurrentTimeInMilliseconds();
116
+ if (cachedToken !== undefined &&
117
+ cachedToken.expiresAt - currentTime > oidcExchangeRefreshThresholdInMilliseconds) {
118
+ return cachedToken.token;
119
+ }
120
+ if (!isNpmRegistry(resolveRegistryUrl(registrySettings))) {
121
+ throw new Error('npm-oidc auth is only supported with the npmjs.org registry');
122
+ }
123
+ const idToken = await resolveIdToken(auth);
124
+ const exchangeResponse = await fetchImplementation(`${npmRegistryUrl}-/npm/v1/oidc/token/exchange/package/${encodePackageName(packageName)}`, {
125
+ method: 'POST',
126
+ headers: { Authorization: `Bearer ${idToken}` }
127
+ });
128
+ if (!exchangeResponse.ok) {
129
+ throw new Error(`OIDC token exchange failed with status ${exchangeResponse.status}`);
130
+ }
131
+ const body = parseOidcExchangeResponse(await parseJsonResponse(exchangeResponse));
132
+ if (body === undefined) {
133
+ throw new TypeError('OIDC token exchange returned an invalid response');
134
+ }
135
+ const expiresAt = Date.parse(body.expires);
136
+ if (!Number.isFinite(expiresAt)) {
137
+ throw new TypeError('OIDC token exchange returned an invalid expiry timestamp');
138
+ }
139
+ oidcExchangeTokenCache.set(cacheKey, {
140
+ token: body.token,
141
+ expiresAt
142
+ });
143
+ return body.token;
144
+ }
145
+ async function resolveWriteAuthOptions(packageName, registrySettings) {
146
+ const auth = resolvePublishAuth(registrySettings);
147
+ if (auth.type !== 'npm-oidc') {
148
+ return buildAuthOptions(auth, registrySettings).options;
149
+ }
150
+ const token = await exchangeOidcToken(packageName, registrySettings, auth);
151
+ return {
152
+ ...createBaseOptions(registrySettings),
153
+ forceAuth: {
154
+ token
155
+ }
156
+ };
157
+ }
158
+ function resolveMetadataAuthOptions(registrySettings) {
159
+ const { metadata: metadataMode, publish: publishAuth } = normalizeAuthConfig(registrySettings);
160
+ if (metadataMode === undefined || metadataMode === 'inherit-publish-auth') {
161
+ if (publishAuth.type === 'npm-oidc') {
162
+ return createAnonymousAuthResolution(registrySettings);
163
+ }
164
+ return buildAuthOptions(publishAuth, registrySettings);
165
+ }
166
+ if (metadataMode === 'auto') {
167
+ return {
168
+ ...createAnonymousAuthResolution(registrySettings),
169
+ allowsAutomaticRetry: true
170
+ };
171
+ }
172
+ if (typeof metadataMode !== 'object') {
173
+ return createAnonymousAuthResolution(registrySettings);
174
+ }
175
+ return buildAuthOptions(metadataMode, registrySettings);
176
+ }
177
+ async function retryAutoMetadataAuth(registrySettings, auth, run) {
178
+ try {
179
+ return await run(auth.options);
180
+ }
181
+ catch (error) {
182
+ const statusCode = isRecord(error) ? error.statusCode : undefined;
183
+ if (!auth.allowsAutomaticRetry ||
184
+ (statusCode !== forbiddenStatusCode && statusCode !== unauthorizedStatusCode)) {
185
+ throw error;
186
+ }
187
+ const publishAuth = resolvePublishAuth(registrySettings);
188
+ if (publishAuth.type === 'npm-oidc') {
189
+ throw error;
190
+ }
191
+ return run(buildAuthOptions(publishAuth, registrySettings).options);
192
+ }
193
+ }
27
194
  async function fetchRegistryEndpoint(endpoint, registrySettings) {
28
195
  const acceptHeaderForFetchingAbbreviatedResponse = 'application/vnd.npm.install-v1+json';
29
- return npmFetch.json(endpoint, {
30
- forceAuth: {
31
- alwaysAuth: true,
32
- token: registrySettings.token
33
- },
34
- registry: registrySettings.registryUrl,
35
- headers: { accept: acceptHeaderForFetchingAbbreviatedResponse }
196
+ const auth = resolveMetadataAuthOptions(registrySettings);
197
+ return retryAutoMetadataAuth(registrySettings, auth, async (options) => {
198
+ return npmFetch.json(endpoint, {
199
+ ...options,
200
+ headers: { accept: acceptHeaderForFetchingAbbreviatedResponse }
201
+ });
36
202
  });
37
203
  }
38
204
  async function fetchPackage(packageName, registrySettings) {
39
205
  const endpointUri = `/${encodePackageName(packageName)}`;
40
206
  try {
41
207
  const response = await fetchRegistryEndpoint(endpointUri, registrySettings);
42
- const result = safeParse(abbreviatedPackageResponseSchema, response);
43
- if (!result.success) {
208
+ const result = parseAbbreviatedPackageResponse(response);
209
+ if (result === undefined) {
44
210
  throw new Error('Got an invalid response from registry API');
45
211
  }
46
- return Maybe.just(result.data);
212
+ return Maybe.just(result);
47
213
  }
48
214
  catch (error) {
49
- if (isFetchError(error) &&
50
- (error.statusCode === httpStatusCode.notFound || error.statusCode === httpStatusCode.forbidden)) {
215
+ const statusCode = isRecord(error) ? error.statusCode : undefined;
216
+ if (statusCode === notFoundStatusCode || statusCode === forbiddenStatusCode) {
51
217
  return Maybe.nothing();
52
218
  }
53
219
  throw error;
54
220
  }
55
221
  }
56
222
  return {
57
- async fetchTarball(tarballUrl) {
58
- const response = await npmFetch(tarballUrl);
223
+ async fetchTarball(tarballUrl, registrySettings) {
224
+ const auth = resolveMetadataAuthOptions(registrySettings);
225
+ const response = await retryAutoMetadataAuth(registrySettings, auth, async (options) => {
226
+ return npmFetch(tarballUrl, options);
227
+ });
59
228
  return response.buffer();
60
229
  },
61
- async publishPackage(manifest, tarData, registrySettings) {
62
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ok in this case
63
- await publish(manifest, tarData, {
64
- defaultTag: 'latest',
65
- forceAuth: {
66
- alwaysAuth: true,
67
- token: registrySettings.token
68
- },
69
- registry: registrySettings.registryUrl
70
- });
230
+ async publishPackage(manifest, tarData, registrySettings, publishSettings) {
231
+ const authOptions = await resolveWriteAuthOptions(manifest.name, registrySettings);
232
+ const publishOptionsFromSettings = buildPublishOptionsForPublishSettings(publishSettings);
233
+ try {
234
+ await publish(toPublishManifest(manifest), tarData, {
235
+ defaultTag: 'latest',
236
+ ...authOptions,
237
+ ...publishOptionsFromSettings,
238
+ ...(promptForOneTimePassword === undefined ? {} : { otpPrompt: promptForOneTimePassword })
239
+ });
240
+ }
241
+ catch (error) {
242
+ throw remapPublishError(error, publishSettings);
243
+ }
71
244
  },
72
245
  async fetchLatestVersion(packageName, registrySettings) {
73
246
  const packageResponse = await fetchPackage(packageName, registrySettings);
@@ -78,11 +251,10 @@ export function createRegistryClient(dependencies) {
78
251
  if (latestVersion !== undefined) {
79
252
  const versionData = packageResponse.value.versions[latestVersion];
80
253
  if (versionData === undefined) {
81
- throw new Error(`Version "${latestVersion}" for package "${packageName}" is missing a shasum`);
254
+ throw new Error(`Version "${latestVersion}" for package "${packageName}" has no entry in the registry response`);
82
255
  }
83
256
  return Maybe.just({
84
257
  version: latestVersion,
85
- shasum: versionData.dist.shasum,
86
258
  tarballUrl: versionData.dist.tarball
87
259
  });
88
260
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/registry-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/registry-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { normalizeRepositoryUrl } from "./repository-url-normalizer.js";
2
+ function isNonEmptyString(value) {
3
+ return typeof value === 'string' && value.length > 0;
4
+ }
5
+ export function readCiEnvironment(env) {
6
+ return {
7
+ githubServerUrl: env.GITHUB_SERVER_URL,
8
+ githubRepository: env.GITHUB_REPOSITORY,
9
+ gitlabProjectUrl: env.CI_PROJECT_URL
10
+ };
11
+ }
12
+ export function getCiRepositoryUrl(env) {
13
+ if (isNonEmptyString(env.githubServerUrl) && isNonEmptyString(env.githubRepository)) {
14
+ return `${env.githubServerUrl}/${env.githubRepository}`;
15
+ }
16
+ if (isNonEmptyString(env.gitlabProjectUrl)) {
17
+ return env.gitlabProjectUrl;
18
+ }
19
+ return undefined;
20
+ }
21
+ const noRepositoryDeclaredMessage = [
22
+ 'Provenance is enabled but the package has no repository declared.',
23
+ 'Add a "repository" entry to additionalPackageJsonAttributes',
24
+ "so consumers can verify the attestation's source claim."
25
+ ].join('\n');
26
+ const noCiDetectedMessage = [
27
+ 'Provenance auto mode is enabled but no CI repository was detected.',
28
+ 'Provenance auto mode requires GitHub Actions or GitLab CI; expected',
29
+ 'one of GITHUB_SERVER_URL+GITHUB_REPOSITORY or CI_PROJECT_URL.'
30
+ ].join('\n');
31
+ function buildMismatchMessage(configuredUrl, ciUrl) {
32
+ return [
33
+ "Provenance is enabled but the package's repository URL does not match",
34
+ 'the CI repository.',
35
+ `Configured repository: ${configuredUrl}`,
36
+ `CI repository: ${ciUrl}`,
37
+ 'Either correct the package.json repository field, or disable provenance',
38
+ 'if the mismatch is intentional.'
39
+ ].join('\n');
40
+ }
41
+ export function assertRepositoryCoherence(manifest, ciRepositoryUrl) {
42
+ const normalizedManifestUrl = normalizeRepositoryUrl(manifest.repository);
43
+ if (normalizedManifestUrl === undefined) {
44
+ throw new Error(noRepositoryDeclaredMessage);
45
+ }
46
+ const normalizedCiUrl = normalizeRepositoryUrl(ciRepositoryUrl);
47
+ if (normalizedCiUrl === undefined) {
48
+ throw new Error(noCiDetectedMessage);
49
+ }
50
+ if (normalizedCiUrl !== normalizedManifestUrl) {
51
+ throw new Error(buildMismatchMessage(normalizedManifestUrl, normalizedCiUrl));
52
+ }
53
+ }
54
+ //# sourceMappingURL=repository-coherence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-coherence.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/repository-coherence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAQxE,SAAS,gBAAgB,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAiD;IAC/E,OAAO;QACH,eAAe,EAAE,GAAG,CAAC,iBAAiB;QACtC,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;QACvC,gBAAgB,EAAE,GAAG,CAAC,cAAc;KACvC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAkB;IACjD,IAAI,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClF,OAAO,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,CAAC,gBAAgB,CAAC;IAChC,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,2BAA2B,GAAG;IAChC,mEAAmE;IACnE,6DAA6D;IAC7D,yDAAyD;CAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,mBAAmB,GAAG;IACxB,oEAAoE;IACpE,qEAAqE;IACrE,+DAA+D;CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,oBAAoB,CAAC,aAAqB,EAAE,KAAa;IAC9D,OAAO;QACH,uEAAuE;QACvE,oBAAoB;QACpB,0BAA0B,aAAa,EAAE;QACzC,0BAA0B,KAAK,EAAE;QACjC,yEAAyE;QACzE,iCAAiC;KACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,QAA2C,EAC3C,eAAmC;IAEnC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1E,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,eAAe,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;IAChE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,eAAe,KAAK,qBAAqB,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC,CAAC;IAClF,CAAC;AACL,CAAC"}
@@ -0,0 +1,38 @@
1
+ import HostedGitInfo from 'hosted-git-info';
2
+ function isNonEmptyString(value) {
3
+ return typeof value === 'string' && value.length > 0;
4
+ }
5
+ function isRecord(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ function extractRawUrl(input) {
9
+ if (isNonEmptyString(input)) {
10
+ return input;
11
+ }
12
+ if (isRecord(input) && isNonEmptyString(input.url)) {
13
+ return input.url;
14
+ }
15
+ return undefined;
16
+ }
17
+ function manualNormalize(url) {
18
+ let normalized = url.startsWith('git+') ? url.slice('git+'.length) : url;
19
+ if (normalized.endsWith('.git')) {
20
+ normalized = normalized.slice(0, -'.git'.length);
21
+ }
22
+ if (normalized.endsWith('/')) {
23
+ normalized = normalized.slice(0, -1);
24
+ }
25
+ return normalized.toLowerCase();
26
+ }
27
+ export function normalizeRepositoryUrl(input) {
28
+ const rawUrl = extractRawUrl(input);
29
+ if (rawUrl === undefined) {
30
+ return undefined;
31
+ }
32
+ const hosted = HostedGitInfo.fromUrl(rawUrl);
33
+ if (hosted !== undefined) {
34
+ return manualNormalize(hosted.https({ noCommittish: true }));
35
+ }
36
+ return manualNormalize(rawUrl);
37
+ }
38
+ //# sourceMappingURL=repository-url-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-url-normalizer.js","sourceRoot":"","sources":["../../../../source/bundle-emitter/repository-url-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,SAAS,gBAAgB,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,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,aAAa,CAAC,KAAc;IACjC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,GAAG,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAChC,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -1,13 +1,7 @@
1
- import { noDuplicatedFilesRule } from "./rules/no-duplicated-files.js";
2
- const checkRules = [noDuplicatedFilesRule];
1
+ import { allRules } from "./rules/registry.js";
3
2
  export function runChecks(params) {
4
- const { settings, bundles: packages } = params;
5
- return checkRules
6
- .filter((rule) => {
7
- return rule.isEnabled(settings);
8
- })
9
- .flatMap((rule) => {
10
- return rule.run({ bundles: packages }, settings);
3
+ return allRules.flatMap((rule) => {
4
+ return rule.run(params);
11
5
  });
12
6
  }
13
7
  //# sourceMappingURL=check-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-runner.js","sourceRoot":"","sources":["../../../../source/checks/check-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,MAAM,UAAU,GAAyB,CAAC,qBAAqB,CAAC,CAAC;AAEjE,MAAM,UAAU,SAAS,CAAC,MAAyB;IAC/C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE/C,OAAO,UAAU;SACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC;SACD,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"check-runner.js","sourceRoot":"","sources":["../../../../source/checks/check-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAS/C,MAAM,UAAU,SAAS,CAAC,MAAyB;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC"}
package/checks/rule.js ADDED
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod/mini';
2
+ import { nonEmptyStringSchema } from "../config/base-validations.js";
3
+ export const enabledOnlyGlobalSchema = z.strictObject({ enabled: z.boolean() });
4
+ export const emptyPerPackageSchema = z.strictObject({});
5
+ const pathAllowListShape = {
6
+ allowList: z.optional(z.readonly(z.array(nonEmptyStringSchema)))
7
+ };
8
+ export const pathAllowListGlobalSchema = z.strictObject({
9
+ enabled: z.boolean(),
10
+ ...pathAllowListShape
11
+ });
12
+ export const pathAllowListPerPackageSchema = z.strictObject(pathAllowListShape);
13
+ //# sourceMappingURL=rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../../source/checks/rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAoB,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAExD,MAAM,kBAAkB,GAAG;IACvB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,YAAY,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,GAAG,kBAAkB;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod/mini';
2
+ const ruleName = 'maxBundleSize';
3
+ const byteLimitSchema = z.number().check(z.int(), z.nonnegative());
4
+ const globalSchema = z.strictObject({
5
+ enabled: z.boolean(),
6
+ bytes: z.optional(byteLimitSchema)
7
+ });
8
+ const perPackageSchema = z.strictObject({
9
+ bytes: z.optional(byteLimitSchema)
10
+ });
11
+ function bundleSizeBytes(bundle) {
12
+ let total = 0;
13
+ for (const resource of bundle.contents) {
14
+ total += Buffer.byteLength(resource.fileDescription.content);
15
+ }
16
+ return total;
17
+ }
18
+ function checkBundle(bundle, threshold) {
19
+ if (threshold === undefined) {
20
+ return [];
21
+ }
22
+ const size = bundleSizeBytes(bundle);
23
+ if (size <= threshold) {
24
+ return [];
25
+ }
26
+ return [`Package "${bundle.name}" exceeds the maximum bundle size: ${size} bytes (limit: ${threshold} bytes)`];
27
+ }
28
+ function run(params) {
29
+ const globalConfig = params.settings?.maxBundleSize;
30
+ if (globalConfig?.enabled !== true) {
31
+ return [];
32
+ }
33
+ return params.bundles.flatMap((bundle) => {
34
+ const override = params.perPackageSettings.get(bundle.name)?.maxBundleSize?.bytes;
35
+ return checkBundle(bundle, override ?? globalConfig.bytes);
36
+ });
37
+ }
38
+ export const maxBundleSizeRule = {
39
+ name: ruleName,
40
+ globalSchema,
41
+ perPackageSchema,
42
+ run
43
+ };
44
+ //# sourceMappingURL=max-bundle-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"max-bundle-size.js","sourceRoot":"","sources":["../../../../../source/checks/rules/max-bundle-size.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAI7B,MAAM,QAAQ,GAAG,eAAe,CAAC;AAEjC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAEnE,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,YAAY,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;CACrC,CAAC,CAAC;AAMH,SAAS,eAAe,CAAC,MAAsB;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,MAAsB,EAAE,SAA6B;IACtE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,CAAC,YAAY,MAAM,CAAC,IAAI,sCAAsC,IAAI,kBAAkB,SAAS,SAAS,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,GAAG,CAAC,MAAiB;IAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;IACpD,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC;QAClF,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAyE;IACnG,IAAI,EAAE,QAAQ;IACd,YAAY;IACZ,gBAAgB;IAChB,GAAG;CACN,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { emptyPerPackageSchema, enabledOnlyGlobalSchema } from "../rule.js";
2
+ const ruleName = 'noDevDependencyImports';
3
+ function findLeakedDevDependencies(bundle, packageConfig) {
4
+ const mainPackageJson = packageConfig?.mainPackageJson;
5
+ if (mainPackageJson === undefined) {
6
+ return [];
7
+ }
8
+ const runtimeDependencyNames = new Set([
9
+ ...Object.keys(mainPackageJson.dependencies ?? {}),
10
+ ...Object.keys(mainPackageJson.peerDependencies ?? {})
11
+ ]);
12
+ const devDependencyNames = new Set(Object.keys(mainPackageJson.devDependencies ?? {}));
13
+ return Array.from(bundle.externalDependencies.keys())
14
+ .filter((name) => {
15
+ return devDependencyNames.has(name) && !runtimeDependencyNames.has(name);
16
+ })
17
+ .map((name) => {
18
+ const reason = 'is only declared in devDependencies of the main package.json';
19
+ return `Package "${bundle.name}" imports "${name}" which ${reason}`;
20
+ });
21
+ }
22
+ function run(params) {
23
+ const globalConfig = params.settings?.noDevDependencyImports;
24
+ if (globalConfig?.enabled !== true) {
25
+ return [];
26
+ }
27
+ return params.bundles.flatMap((bundle) => {
28
+ return findLeakedDevDependencies(bundle, params.packageConfigs?.[bundle.name]);
29
+ });
30
+ }
31
+ export const noDevDependencyImportsRule = {
32
+ name: ruleName,
33
+ globalSchema: enabledOnlyGlobalSchema,
34
+ perPackageSchema: emptyPerPackageSchema,
35
+ run
36
+ };
37
+ //# sourceMappingURL=no-dev-dependency-imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-dev-dependency-imports.js","sourceRoot":"","sources":["../../../../../source/checks/rules/no-dev-dependency-imports.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,qBAAqB,EACrB,uBAAuB,EAI1B,MAAM,YAAY,CAAC;AAEpB,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAM1C,SAAS,yBAAyB,CAC9B,MAAsB,EACtB,aAA4C;IAE5C,MAAM,eAAe,GAAG,aAAa,EAAE,eAAe,CAAC;IACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;QACnC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,IAAI,EAAE,CAAC;KACzD,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACV,MAAM,MAAM,GAAG,8DAA8D,CAAC;QAC9E,OAAO,YAAY,MAAM,CAAC,IAAI,cAAc,IAAI,WAAW,MAAM,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,GAAG,CAAC,MAAiB;IAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC7D,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACrC,OAAO,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAyE;IAC5G,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,uBAAuB;IACrC,gBAAgB,EAAE,qBAAqB;IACvC,GAAG;CACN,CAAC"}