@mannyc1/ts-release 0.0.7 → 0.2.2

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 (635) hide show
  1. package/ARCHITECTURE.md +124 -92
  2. package/CHANGELOG.md +115 -0
  3. package/LICENSE +21 -0
  4. package/README.md +278 -324
  5. package/SPEC.md +206 -310
  6. package/apps/release-ts/README.md +32 -0
  7. package/apps/release-ts/src/cli/command.ts +164 -0
  8. package/apps/release-ts/src/cli/commands.ts +351 -0
  9. package/apps/release-ts/src/cli/main.ts +43 -0
  10. package/apps/release-ts/src/cli/node-main.ts +49 -0
  11. package/apps/ts-release-agents/LICENSE +21 -0
  12. package/apps/ts-release-agents/README.md +21 -0
  13. package/apps/ts-release-agents/evals/cases.json +11 -0
  14. package/apps/ts-release-agents/manifests/claude.json +5 -0
  15. package/apps/ts-release-agents/manifests/codex.json +5 -0
  16. package/apps/ts-release-agents/package.json +11 -0
  17. package/apps/ts-release-agents/skills/release/SKILL.md +48 -0
  18. package/apps/ts-release-agents/skills/release/references/configuration.md +18 -0
  19. package/apps/ts-release-agents/skills/release/references/recovery.md +10 -0
  20. package/apps/ts-release-agents/skills/release/references/staged-workflow.md +12 -0
  21. package/apps/ts-release-agents/skills/release/references/target-selection.md +13 -0
  22. package/apps/ts-release-agents/skills/release/references/verification.md +14 -0
  23. package/apps/ts-release-agents/src/build.ts +105 -0
  24. package/apps/ts-release-agents/src/check.ts +117 -0
  25. package/apps/ts-release-agents/src/install.ts +121 -0
  26. package/apps/ts-release-agents/test/contract.test.ts +56 -0
  27. package/apps/ts-release-agents/tsconfig.json +5 -0
  28. package/dist/api/api.d.ts +15 -0
  29. package/dist/api/api.d.ts.map +1 -0
  30. package/dist/api/api.js +244 -0
  31. package/dist/api/api.js.map +1 -0
  32. package/dist/api/errors.d.ts +39 -0
  33. package/dist/api/errors.d.ts.map +1 -0
  34. package/dist/api/errors.js +32 -0
  35. package/dist/api/errors.js.map +1 -0
  36. package/dist/api/input.d.ts +10 -0
  37. package/dist/api/input.d.ts.map +1 -0
  38. package/dist/api/input.js +73 -0
  39. package/dist/api/input.js.map +1 -0
  40. package/dist/api/runtime.d.ts +18 -0
  41. package/dist/api/runtime.d.ts.map +1 -0
  42. package/dist/api/runtime.js +7 -0
  43. package/dist/api/runtime.js.map +1 -0
  44. package/dist/api/types.d.ts +76 -0
  45. package/dist/api/types.d.ts.map +1 -0
  46. package/dist/api/types.js +17 -0
  47. package/dist/api/types.js.map +1 -0
  48. package/dist/bin/ts-release.js +39239 -0
  49. package/dist/capabilities/bun-targets.d.ts +3 -0
  50. package/dist/capabilities/bun-targets.d.ts.map +1 -0
  51. package/dist/capabilities/bun-targets.js +3 -0
  52. package/dist/capabilities/bun-targets.js.map +1 -0
  53. package/dist/capabilities/field-ownership.d.ts +17 -0
  54. package/dist/capabilities/field-ownership.d.ts.map +1 -0
  55. package/dist/capabilities/field-ownership.js +40 -0
  56. package/dist/capabilities/field-ownership.js.map +1 -0
  57. package/dist/capabilities/module.d.ts +91 -0
  58. package/dist/capabilities/module.d.ts.map +1 -0
  59. package/dist/capabilities/module.js +2 -0
  60. package/dist/capabilities/module.js.map +1 -0
  61. package/dist/capabilities/registry.d.ts +829 -0
  62. package/dist/capabilities/registry.d.ts.map +1 -0
  63. package/dist/capabilities/registry.js +291 -0
  64. package/dist/capabilities/registry.js.map +1 -0
  65. package/dist/config/config.d.ts +6 -0
  66. package/dist/config/config.d.ts.map +1 -0
  67. package/dist/config/config.js +42 -0
  68. package/dist/config/config.js.map +1 -0
  69. package/dist/correction/coordinator.d.ts +248 -0
  70. package/dist/correction/coordinator.d.ts.map +1 -0
  71. package/dist/correction/coordinator.js +274 -0
  72. package/dist/correction/coordinator.js.map +1 -0
  73. package/dist/correction/index.d.ts +3 -0
  74. package/dist/correction/index.d.ts.map +1 -0
  75. package/dist/correction/index.js +3 -0
  76. package/dist/correction/index.js.map +1 -0
  77. package/dist/correction/intent.d.ts +111 -0
  78. package/dist/correction/intent.d.ts.map +1 -0
  79. package/dist/correction/intent.js +146 -0
  80. package/dist/correction/intent.js.map +1 -0
  81. package/dist/drivers/archive.d.ts +8 -0
  82. package/dist/drivers/archive.d.ts.map +1 -0
  83. package/dist/drivers/archive.js +101 -0
  84. package/dist/drivers/archive.js.map +1 -0
  85. package/dist/drivers/contain.d.ts +6 -0
  86. package/dist/drivers/contain.d.ts.map +1 -0
  87. package/dist/drivers/contain.js +17 -0
  88. package/dist/drivers/contain.js.map +1 -0
  89. package/dist/drivers/environment.d.ts +4 -0
  90. package/dist/drivers/environment.d.ts.map +1 -0
  91. package/dist/drivers/environment.js +18 -0
  92. package/dist/drivers/environment.js.map +1 -0
  93. package/dist/drivers/errors.d.ts +9 -0
  94. package/dist/drivers/errors.d.ts.map +1 -0
  95. package/dist/drivers/errors.js +6 -0
  96. package/dist/drivers/errors.js.map +1 -0
  97. package/dist/drivers/glob.d.ts +2 -0
  98. package/dist/drivers/glob.d.ts.map +1 -0
  99. package/dist/drivers/glob.js +162 -0
  100. package/dist/drivers/glob.js.map +1 -0
  101. package/dist/drivers/process.d.ts +48 -0
  102. package/dist/drivers/process.d.ts.map +1 -0
  103. package/dist/drivers/process.js +257 -0
  104. package/dist/drivers/process.js.map +1 -0
  105. package/dist/drivers/redact.d.ts +4 -0
  106. package/dist/drivers/redact.d.ts.map +1 -0
  107. package/dist/drivers/redact.js +24 -0
  108. package/dist/drivers/redact.js.map +1 -0
  109. package/dist/drivers/seccomp-helper-source.d.ts +7 -0
  110. package/dist/drivers/seccomp-helper-source.d.ts.map +1 -0
  111. package/dist/drivers/seccomp-helper-source.js +121 -0
  112. package/dist/drivers/seccomp-helper-source.js.map +1 -0
  113. package/dist/drivers/utils.d.ts +4 -0
  114. package/dist/drivers/utils.d.ts.map +1 -0
  115. package/dist/drivers/utils.js +5 -0
  116. package/dist/drivers/utils.js.map +1 -0
  117. package/dist/drivers/workspace.d.ts +6 -0
  118. package/dist/drivers/workspace.d.ts.map +1 -0
  119. package/dist/drivers/workspace.js +49 -0
  120. package/dist/drivers/workspace.js.map +1 -0
  121. package/dist/extensions/provider-adapter.d.ts +48 -0
  122. package/dist/extensions/provider-adapter.d.ts.map +1 -0
  123. package/dist/extensions/provider-adapter.js +64 -0
  124. package/dist/extensions/provider-adapter.js.map +1 -0
  125. package/dist/host.d.ts +33 -0
  126. package/dist/host.d.ts.map +1 -0
  127. package/dist/host.js +20 -0
  128. package/dist/host.js.map +1 -0
  129. package/dist/index.d.ts +19 -1
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +12 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/model/artifact-collection.d.ts +84 -0
  134. package/dist/model/artifact-collection.d.ts.map +1 -0
  135. package/dist/model/artifact-collection.js +185 -0
  136. package/dist/model/artifact-collection.js.map +1 -0
  137. package/dist/model/authority.d.ts +89 -0
  138. package/dist/model/authority.d.ts.map +1 -0
  139. package/dist/model/authority.js +80 -0
  140. package/dist/model/authority.js.map +1 -0
  141. package/dist/model/bun-targets.d.ts +34 -0
  142. package/dist/model/bun-targets.d.ts.map +1 -0
  143. package/dist/model/bun-targets.js +17 -0
  144. package/dist/model/bun-targets.js.map +1 -0
  145. package/dist/model/canonical.d.ts +8 -0
  146. package/dist/model/canonical.d.ts.map +1 -0
  147. package/dist/model/canonical.js +205 -0
  148. package/dist/model/canonical.js.map +1 -0
  149. package/dist/model/catalog.d.ts +76 -0
  150. package/dist/model/catalog.d.ts.map +1 -0
  151. package/dist/model/catalog.js +174 -0
  152. package/dist/model/catalog.js.map +1 -0
  153. package/dist/model/digest.d.ts +53 -0
  154. package/dist/model/digest.d.ts.map +1 -0
  155. package/dist/model/digest.js +127 -0
  156. package/dist/model/digest.js.map +1 -0
  157. package/dist/model/errors.d.ts +14 -0
  158. package/dist/model/errors.d.ts.map +1 -0
  159. package/dist/model/errors.js +8 -0
  160. package/dist/model/errors.js.map +1 -0
  161. package/dist/model/primitives.d.ts +19 -0
  162. package/dist/model/primitives.d.ts.map +1 -0
  163. package/dist/model/primitives.js +18 -0
  164. package/dist/model/primitives.js.map +1 -0
  165. package/dist/model/pypi.d.ts +12 -0
  166. package/dist/model/pypi.d.ts.map +1 -0
  167. package/dist/model/pypi.js +20 -0
  168. package/dist/model/pypi.js.map +1 -0
  169. package/dist/model/python-distribution.d.ts +33 -0
  170. package/dist/model/python-distribution.d.ts.map +1 -0
  171. package/dist/model/python-distribution.js +367 -0
  172. package/dist/model/python-distribution.js.map +1 -0
  173. package/dist/model/secret-patterns.d.ts +2 -0
  174. package/dist/model/secret-patterns.d.ts.map +1 -0
  175. package/dist/model/secret-patterns.js +12 -0
  176. package/dist/model/secret-patterns.js.map +1 -0
  177. package/dist/platform/bun.d.ts +7 -0
  178. package/dist/platform/bun.d.ts.map +1 -0
  179. package/dist/platform/bun.js +15 -0
  180. package/dist/platform/bun.js.map +1 -0
  181. package/dist/platform/credentials.d.ts +32 -0
  182. package/dist/platform/credentials.d.ts.map +1 -0
  183. package/dist/platform/credentials.js +772 -0
  184. package/dist/platform/credentials.js.map +1 -0
  185. package/dist/platform/host-support.d.ts +2 -0
  186. package/dist/platform/host-support.d.ts.map +1 -0
  187. package/dist/platform/host-support.js +4 -0
  188. package/dist/platform/host-support.js.map +1 -0
  189. package/dist/platform/node.d.ts +7 -0
  190. package/dist/platform/node.d.ts.map +1 -0
  191. package/dist/platform/node.js +15 -0
  192. package/dist/platform/node.js.map +1 -0
  193. package/dist/platform/release-runtime.d.ts +11 -0
  194. package/dist/platform/release-runtime.d.ts.map +1 -0
  195. package/dist/platform/release-runtime.js +34 -0
  196. package/dist/platform/release-runtime.js.map +1 -0
  197. package/dist/platform/services.d.ts +15 -0
  198. package/dist/platform/services.d.ts.map +1 -0
  199. package/dist/platform/services.js +30 -0
  200. package/dist/platform/services.js.map +1 -0
  201. package/dist/platform/source-observer.d.ts +5 -0
  202. package/dist/platform/source-observer.d.ts.map +1 -0
  203. package/dist/platform/source-observer.js +159 -0
  204. package/dist/platform/source-observer.js.map +1 -0
  205. package/dist/provider-sdk.d.ts +14 -0
  206. package/dist/provider-sdk.d.ts.map +1 -0
  207. package/dist/provider-sdk.js +10 -0
  208. package/dist/provider-sdk.js.map +1 -0
  209. package/dist/publication/adapter.d.ts +212 -0
  210. package/dist/publication/adapter.d.ts.map +1 -0
  211. package/dist/publication/adapter.js +83 -0
  212. package/dist/publication/adapter.js.map +1 -0
  213. package/dist/publication/authority.d.ts +137 -0
  214. package/dist/publication/authority.d.ts.map +1 -0
  215. package/dist/publication/authority.js +233 -0
  216. package/dist/publication/authority.js.map +1 -0
  217. package/dist/publication/catalog-git.d.ts +37 -0
  218. package/dist/publication/catalog-git.d.ts.map +1 -0
  219. package/dist/publication/catalog-git.js +451 -0
  220. package/dist/publication/catalog-git.js.map +1 -0
  221. package/dist/publication/claim.d.ts +39 -0
  222. package/dist/publication/claim.d.ts.map +1 -0
  223. package/dist/publication/claim.js +31 -0
  224. package/dist/publication/claim.js.map +1 -0
  225. package/dist/publication/coordinator.d.ts +246 -0
  226. package/dist/publication/coordinator.d.ts.map +1 -0
  227. package/dist/publication/coordinator.js +370 -0
  228. package/dist/publication/coordinator.js.map +1 -0
  229. package/dist/publication/github.d.ts +36 -0
  230. package/dist/publication/github.d.ts.map +1 -0
  231. package/dist/publication/github.js +644 -0
  232. package/dist/publication/github.js.map +1 -0
  233. package/dist/publication/http.d.ts +69 -0
  234. package/dist/publication/http.d.ts.map +1 -0
  235. package/dist/publication/http.js +29 -0
  236. package/dist/publication/http.js.map +1 -0
  237. package/dist/publication/index.d.ts +5 -0
  238. package/dist/publication/index.d.ts.map +1 -0
  239. package/dist/publication/index.js +5 -0
  240. package/dist/publication/index.js.map +1 -0
  241. package/dist/publication/npm.d.ts +40 -0
  242. package/dist/publication/npm.d.ts.map +1 -0
  243. package/dist/publication/npm.js +359 -0
  244. package/dist/publication/npm.js.map +1 -0
  245. package/dist/publication/profiles.d.ts +136 -0
  246. package/dist/publication/profiles.d.ts.map +1 -0
  247. package/dist/publication/profiles.js +90 -0
  248. package/dist/publication/profiles.js.map +1 -0
  249. package/dist/publication/publisher.d.ts +82 -0
  250. package/dist/publication/publisher.d.ts.map +1 -0
  251. package/dist/publication/publisher.js +53 -0
  252. package/dist/publication/publisher.js.map +1 -0
  253. package/dist/publication/pypi.d.ts +45 -0
  254. package/dist/publication/pypi.d.ts.map +1 -0
  255. package/dist/publication/pypi.js +369 -0
  256. package/dist/publication/pypi.js.map +1 -0
  257. package/dist/publication/recovery.d.ts +663 -0
  258. package/dist/publication/recovery.d.ts.map +1 -0
  259. package/dist/publication/recovery.js +252 -0
  260. package/dist/publication/recovery.js.map +1 -0
  261. package/dist/publication/report.d.ts +1061 -0
  262. package/dist/publication/report.d.ts.map +1 -0
  263. package/dist/publication/report.js +441 -0
  264. package/dist/publication/report.js.map +1 -0
  265. package/dist/recipes/config.d.ts +296 -0
  266. package/dist/recipes/config.d.ts.map +1 -0
  267. package/dist/recipes/config.js +325 -0
  268. package/dist/recipes/config.js.map +1 -0
  269. package/dist/release/capabilities.d.ts +12 -0
  270. package/dist/release/capabilities.d.ts.map +1 -0
  271. package/dist/release/capabilities.js +395 -0
  272. package/dist/release/capabilities.js.map +1 -0
  273. package/dist/release/compiler.d.ts +5 -0
  274. package/dist/release/compiler.d.ts.map +1 -0
  275. package/dist/release/compiler.js +19 -0
  276. package/dist/release/compiler.js.map +1 -0
  277. package/dist/release/config.d.ts +5 -0
  278. package/dist/release/config.d.ts.map +1 -0
  279. package/dist/release/config.js +10 -0
  280. package/dist/release/config.js.map +1 -0
  281. package/dist/release/context.d.ts +96 -0
  282. package/dist/release/context.d.ts.map +1 -0
  283. package/dist/release/context.js +168 -0
  284. package/dist/release/context.js.map +1 -0
  285. package/dist/release/graph.d.ts +271 -0
  286. package/dist/release/graph.d.ts.map +1 -0
  287. package/dist/release/graph.js +766 -0
  288. package/dist/release/graph.js.map +1 -0
  289. package/dist/release/inspect.d.ts +88 -0
  290. package/dist/release/inspect.d.ts.map +1 -0
  291. package/dist/release/inspect.js +75 -0
  292. package/dist/release/inspect.js.map +1 -0
  293. package/dist/release/prepare.d.ts +24 -0
  294. package/dist/release/prepare.d.ts.map +1 -0
  295. package/dist/release/prepare.js +1116 -0
  296. package/dist/release/prepare.js.map +1 -0
  297. package/dist/release/prepared-ref.d.ts +60 -0
  298. package/dist/release/prepared-ref.d.ts.map +1 -0
  299. package/dist/release/prepared-ref.js +131 -0
  300. package/dist/release/prepared-ref.js.map +1 -0
  301. package/dist/release/prepared-store.d.ts +90 -0
  302. package/dist/release/prepared-store.d.ts.map +1 -0
  303. package/dist/release/prepared-store.js +337 -0
  304. package/dist/release/prepared-store.js.map +1 -0
  305. package/dist/release/prepared.d.ts +172 -0
  306. package/dist/release/prepared.d.ts.map +1 -0
  307. package/dist/release/prepared.js +268 -0
  308. package/dist/release/prepared.js.map +1 -0
  309. package/dist/release/staging.d.ts +31 -0
  310. package/dist/release/staging.d.ts.map +1 -0
  311. package/dist/release/staging.js +218 -0
  312. package/dist/release/staging.js.map +1 -0
  313. package/dist/resolve/authored.d.ts +53 -0
  314. package/dist/resolve/authored.d.ts.map +1 -0
  315. package/dist/resolve/authored.js +55 -0
  316. package/dist/resolve/authored.js.map +1 -0
  317. package/dist/resolve/encode.d.ts +3 -0
  318. package/dist/resolve/encode.d.ts.map +1 -0
  319. package/dist/resolve/encode.js +21 -0
  320. package/dist/resolve/encode.js.map +1 -0
  321. package/dist/resolve/errors.d.ts +7 -0
  322. package/dist/resolve/errors.d.ts.map +1 -0
  323. package/dist/resolve/errors.js +17 -0
  324. package/dist/resolve/errors.js.map +1 -0
  325. package/dist/resolve/facts.d.ts +12 -0
  326. package/dist/resolve/facts.d.ts.map +1 -0
  327. package/dist/resolve/facts.js +18 -0
  328. package/dist/resolve/facts.js.map +1 -0
  329. package/dist/resolve/resolve.d.ts +10 -0
  330. package/dist/resolve/resolve.d.ts.map +1 -0
  331. package/dist/resolve/resolve.js +242 -0
  332. package/dist/resolve/resolve.js.map +1 -0
  333. package/dist/store.d.ts +11 -0
  334. package/dist/store.d.ts.map +1 -0
  335. package/dist/store.js +9 -0
  336. package/dist/store.js.map +1 -0
  337. package/examples/README.md +20 -30
  338. package/examples/github-release/release.config.json +11 -18
  339. package/examples/homebrew-tap/README.md +11 -0
  340. package/examples/homebrew-tap/release.config.json +40 -28
  341. package/examples/multi-target/release.config.json +28 -53
  342. package/examples/npm-first-publish/release.config.json +23 -25
  343. package/examples/npm-only/release.config.json +22 -30
  344. package/examples/portable-cli/README.md +17 -0
  345. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-arm64 +1 -0
  346. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-x64 +1 -0
  347. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-arm64 +1 -0
  348. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-x64 +1 -0
  349. package/examples/portable-cli/artifacts/portable-example-0.1.0-windows-x64.exe +1 -0
  350. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_10_15_x86_64.whl +1 -0
  351. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_11_0_arm64.whl +1 -0
  352. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_aarch64.whl +1 -0
  353. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_x86_64.whl +1 -0
  354. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-win_amd64.whl +1 -0
  355. package/examples/portable-cli/package.json +9 -0
  356. package/examples/portable-cli/release.config.json +53 -0
  357. package/examples/portable-cli/src/cli.ts +3 -0
  358. package/examples/pypi-registry/README.md +8 -0
  359. package/examples/scoop-bucket/README.md +10 -0
  360. package/examples/scoop-bucket/release.config.json +40 -30
  361. package/package.json +60 -156
  362. package/src/api/api.ts +365 -0
  363. package/src/api/errors.ts +36 -0
  364. package/src/api/input.ts +92 -0
  365. package/src/api/runtime.ts +14 -0
  366. package/src/api/types.ts +103 -0
  367. package/src/capabilities/bun-targets.ts +2 -0
  368. package/src/capabilities/field-ownership.ts +60 -0
  369. package/src/capabilities/module.ts +158 -0
  370. package/src/capabilities/registry.ts +333 -0
  371. package/src/config/config.ts +48 -0
  372. package/src/correction/coordinator.ts +336 -0
  373. package/src/correction/index.ts +2 -0
  374. package/src/correction/intent.ts +172 -0
  375. package/src/drivers/archive.ts +102 -0
  376. package/src/drivers/contain.ts +20 -0
  377. package/src/drivers/environment.ts +28 -0
  378. package/src/drivers/errors.ts +6 -0
  379. package/src/drivers/glob.ts +137 -0
  380. package/src/drivers/process.ts +340 -0
  381. package/src/drivers/redact.ts +31 -0
  382. package/src/drivers/seccomp-helper-source.ts +121 -0
  383. package/src/drivers/utils.ts +10 -0
  384. package/src/drivers/workspace.ts +40 -0
  385. package/src/extensions/provider-adapter.ts +99 -0
  386. package/src/host.ts +140 -0
  387. package/src/index.ts +64 -0
  388. package/src/model/artifact-collection.ts +237 -0
  389. package/src/model/authority.ts +116 -0
  390. package/src/model/bun-targets.ts +34 -0
  391. package/src/model/canonical.ts +205 -0
  392. package/src/model/catalog.ts +220 -0
  393. package/src/model/digest.ts +172 -0
  394. package/src/model/errors.ts +6 -0
  395. package/src/model/primitives.ts +37 -0
  396. package/src/model/pypi.ts +30 -0
  397. package/src/model/python-distribution.ts +360 -0
  398. package/src/model/secret-patterns.ts +11 -0
  399. package/src/platform/bun.ts +38 -0
  400. package/src/platform/credentials.ts +1083 -0
  401. package/src/platform/host-support.ts +4 -0
  402. package/src/platform/node.ts +38 -0
  403. package/src/platform/release-runtime.ts +47 -0
  404. package/src/platform/services.ts +57 -0
  405. package/src/platform/source-observer.ts +193 -0
  406. package/src/provider-sdk.ts +48 -0
  407. package/src/publication/adapter.ts +132 -0
  408. package/src/publication/authority.ts +397 -0
  409. package/src/publication/catalog-git.ts +603 -0
  410. package/src/publication/claim.ts +51 -0
  411. package/src/publication/coordinator.ts +578 -0
  412. package/src/publication/github.ts +954 -0
  413. package/src/publication/http.ts +101 -0
  414. package/src/publication/index.ts +4 -0
  415. package/src/publication/npm.ts +525 -0
  416. package/src/publication/profiles.ts +94 -0
  417. package/src/publication/publisher.ts +130 -0
  418. package/src/publication/pypi.ts +463 -0
  419. package/src/publication/recovery.ts +349 -0
  420. package/src/publication/report.ts +628 -0
  421. package/src/recipes/config.ts +395 -0
  422. package/src/release/capabilities.ts +459 -0
  423. package/src/release/compiler.ts +28 -0
  424. package/src/release/config.ts +12 -0
  425. package/src/release/context.ts +223 -0
  426. package/src/release/graph.ts +866 -0
  427. package/src/release/inspect.ts +83 -0
  428. package/src/release/prepare.ts +1331 -0
  429. package/src/release/prepared-ref.ts +193 -0
  430. package/src/release/prepared-store.ts +377 -0
  431. package/src/release/prepared.ts +299 -0
  432. package/src/release/staging.ts +257 -0
  433. package/src/resolve/authored.ts +64 -0
  434. package/src/resolve/encode.ts +22 -0
  435. package/src/resolve/errors.ts +15 -0
  436. package/src/resolve/facts.ts +18 -0
  437. package/src/resolve/resolve.ts +328 -0
  438. package/src/store.ts +28 -0
  439. package/templates/README.md +55 -72
  440. package/templates/bun-cli-github/README.md +7 -9
  441. package/templates/bun-cli-github/release.config.json +35 -73
  442. package/templates/github-actions/release.yml +57 -0
  443. package/templates/github-actions/reviewed-release.yml +80 -0
  444. package/templates/multi-target-homebrew/README.md +10 -0
  445. package/templates/multi-target-homebrew/release.config.json +43 -60
  446. package/templates/multi-target-scoop/README.md +10 -0
  447. package/templates/multi-target-scoop/release.config.json +43 -62
  448. package/templates/npm-github/release.config.json +25 -38
  449. package/templates/npm-github/reviewed-release.config.json +37 -0
  450. package/templates/npm-only/README.md +10 -0
  451. package/templates/npm-only/release.config.json +15 -30
  452. package/templates/portable-cli/README.md +13 -0
  453. package/templates/portable-cli/release.config.json +53 -0
  454. package/dist/artifacts/adapter.d.ts +0 -39
  455. package/dist/artifacts/adapter.d.ts.map +0 -1
  456. package/dist/artifacts/adapter.js +0 -23
  457. package/dist/artifacts/adapter.js.map +0 -1
  458. package/dist/artifacts/registry.d.ts +0 -21
  459. package/dist/artifacts/registry.d.ts.map +0 -1
  460. package/dist/artifacts/registry.js +0 -21
  461. package/dist/artifacts/registry.js.map +0 -1
  462. package/dist/config/errors.d.ts +0 -24
  463. package/dist/config/errors.d.ts.map +0 -1
  464. package/dist/config/errors.js +0 -19
  465. package/dist/config/errors.js.map +0 -1
  466. package/dist/config/load.d.ts +0 -9
  467. package/dist/config/load.d.ts.map +0 -1
  468. package/dist/config/load.js +0 -29
  469. package/dist/config/load.js.map +0 -1
  470. package/dist/config/schema.d.ts +0 -12
  471. package/dist/config/schema.d.ts.map +0 -1
  472. package/dist/config/schema.js +0 -19
  473. package/dist/config/schema.js.map +0 -1
  474. package/dist/domain/artifact.d.ts +0 -118
  475. package/dist/domain/artifact.d.ts.map +0 -1
  476. package/dist/domain/artifact.js +0 -197
  477. package/dist/domain/artifact.js.map +0 -1
  478. package/dist/domain/evidence.d.ts +0 -59
  479. package/dist/domain/evidence.d.ts.map +0 -1
  480. package/dist/domain/evidence.js +0 -51
  481. package/dist/domain/evidence.js.map +0 -1
  482. package/dist/domain/operation.d.ts +0 -143
  483. package/dist/domain/operation.d.ts.map +0 -1
  484. package/dist/domain/operation.js +0 -198
  485. package/dist/domain/operation.js.map +0 -1
  486. package/dist/domain/release.d.ts +0 -93
  487. package/dist/domain/release.d.ts.map +0 -1
  488. package/dist/domain/release.js +0 -82
  489. package/dist/domain/release.js.map +0 -1
  490. package/dist/domain/remote-state.d.ts +0 -58
  491. package/dist/domain/remote-state.d.ts.map +0 -1
  492. package/dist/domain/remote-state.js +0 -55
  493. package/dist/domain/remote-state.js.map +0 -1
  494. package/dist/domain/target.d.ts +0 -148
  495. package/dist/domain/target.d.ts.map +0 -1
  496. package/dist/domain/target.js +0 -151
  497. package/dist/domain/target.js.map +0 -1
  498. package/dist/host/host.d.ts +0 -32
  499. package/dist/host/host.d.ts.map +0 -1
  500. package/dist/host/host.js +0 -24
  501. package/dist/host/host.js.map +0 -1
  502. package/dist/host/http-live.d.ts +0 -6
  503. package/dist/host/http-live.d.ts.map +0 -1
  504. package/dist/host/http-live.js +0 -86
  505. package/dist/host/http-live.js.map +0 -1
  506. package/dist/host/http.d.ts +0 -43
  507. package/dist/host/http.d.ts.map +0 -1
  508. package/dist/host/http.js +0 -59
  509. package/dist/host/http.js.map +0 -1
  510. package/dist/host/platform.d.ts +0 -10
  511. package/dist/host/platform.d.ts.map +0 -1
  512. package/dist/host/platform.js +0 -114
  513. package/dist/host/platform.js.map +0 -1
  514. package/dist/host/test.d.ts +0 -23
  515. package/dist/host/test.d.ts.map +0 -1
  516. package/dist/host/test.js +0 -222
  517. package/dist/host/test.js.map +0 -1
  518. package/dist/internal/workspace-path.d.ts +0 -15
  519. package/dist/internal/workspace-path.d.ts.map +0 -1
  520. package/dist/internal/workspace-path.js +0 -36
  521. package/dist/internal/workspace-path.js.map +0 -1
  522. package/dist/planner/artifact-inventory.d.ts +0 -9
  523. package/dist/planner/artifact-inventory.d.ts.map +0 -1
  524. package/dist/planner/artifact-inventory.js +0 -86
  525. package/dist/planner/artifact-inventory.js.map +0 -1
  526. package/dist/planner/create-release-plan.d.ts +0 -5
  527. package/dist/planner/create-release-plan.d.ts.map +0 -1
  528. package/dist/planner/create-release-plan.js +0 -25
  529. package/dist/planner/create-release-plan.js.map +0 -1
  530. package/dist/planner/errors.d.ts +0 -67
  531. package/dist/planner/errors.d.ts.map +0 -1
  532. package/dist/planner/errors.js +0 -58
  533. package/dist/planner/errors.js.map +0 -1
  534. package/dist/planner/evidence-recorder.d.ts +0 -28
  535. package/dist/planner/evidence-recorder.d.ts.map +0 -1
  536. package/dist/planner/evidence-recorder.js +0 -362
  537. package/dist/planner/evidence-recorder.js.map +0 -1
  538. package/dist/planner/executor.d.ts +0 -58
  539. package/dist/planner/executor.d.ts.map +0 -1
  540. package/dist/planner/executor.js +0 -147
  541. package/dist/planner/executor.js.map +0 -1
  542. package/dist/planner/normalize-release.d.ts +0 -19
  543. package/dist/planner/normalize-release.d.ts.map +0 -1
  544. package/dist/planner/normalize-release.js +0 -342
  545. package/dist/planner/normalize-release.js.map +0 -1
  546. package/dist/planner/reconcile.d.ts +0 -17
  547. package/dist/planner/reconcile.d.ts.map +0 -1
  548. package/dist/planner/reconcile.js +0 -259
  549. package/dist/planner/reconcile.js.map +0 -1
  550. package/dist/planner/render-plan.d.ts +0 -15
  551. package/dist/planner/render-plan.d.ts.map +0 -1
  552. package/dist/planner/render-plan.js +0 -231
  553. package/dist/planner/render-plan.js.map +0 -1
  554. package/dist/targets/adapter-helpers.d.ts +0 -79
  555. package/dist/targets/adapter-helpers.d.ts.map +0 -1
  556. package/dist/targets/adapter-helpers.js +0 -194
  557. package/dist/targets/adapter-helpers.js.map +0 -1
  558. package/dist/targets/adapter.d.ts +0 -17
  559. package/dist/targets/adapter.d.ts.map +0 -1
  560. package/dist/targets/adapter.js +0 -2
  561. package/dist/targets/adapter.js.map +0 -1
  562. package/dist/targets/github-release.d.ts +0 -25
  563. package/dist/targets/github-release.d.ts.map +0 -1
  564. package/dist/targets/github-release.js +0 -82
  565. package/dist/targets/github-release.js.map +0 -1
  566. package/dist/targets/github.d.ts +0 -11
  567. package/dist/targets/github.d.ts.map +0 -1
  568. package/dist/targets/github.js +0 -117
  569. package/dist/targets/github.js.map +0 -1
  570. package/dist/targets/homebrew.d.ts +0 -11
  571. package/dist/targets/homebrew.d.ts.map +0 -1
  572. package/dist/targets/homebrew.js +0 -210
  573. package/dist/targets/homebrew.js.map +0 -1
  574. package/dist/targets/live.d.ts +0 -5
  575. package/dist/targets/live.d.ts.map +0 -1
  576. package/dist/targets/live.js +0 -50
  577. package/dist/targets/live.js.map +0 -1
  578. package/dist/targets/npm.d.ts +0 -10
  579. package/dist/targets/npm.d.ts.map +0 -1
  580. package/dist/targets/npm.js +0 -112
  581. package/dist/targets/npm.js.map +0 -1
  582. package/dist/targets/pypi.d.ts +0 -11
  583. package/dist/targets/pypi.d.ts.map +0 -1
  584. package/dist/targets/pypi.js +0 -141
  585. package/dist/targets/pypi.js.map +0 -1
  586. package/dist/targets/registry.d.ts +0 -25
  587. package/dist/targets/registry.d.ts.map +0 -1
  588. package/dist/targets/registry.js +0 -34
  589. package/dist/targets/registry.js.map +0 -1
  590. package/dist/targets/scoop.d.ts +0 -11
  591. package/dist/targets/scoop.d.ts.map +0 -1
  592. package/dist/targets/scoop.js +0 -88
  593. package/dist/targets/scoop.js.map +0 -1
  594. package/dist/types/effect-internal.d.ts +0 -5
  595. package/dist/types/effect-internal.d.ts.map +0 -1
  596. package/dist/types/effect-internal.js +0 -2
  597. package/dist/types/effect-internal.js.map +0 -1
  598. package/dist/workflows/config.d.ts +0 -202
  599. package/dist/workflows/config.d.ts.map +0 -1
  600. package/dist/workflows/config.js +0 -420
  601. package/dist/workflows/config.js.map +0 -1
  602. package/dist/workflows/diagnostics.d.ts +0 -62
  603. package/dist/workflows/diagnostics.d.ts.map +0 -1
  604. package/dist/workflows/diagnostics.js +0 -530
  605. package/dist/workflows/diagnostics.js.map +0 -1
  606. package/dist/workflows/distribution.d.ts +0 -25
  607. package/dist/workflows/distribution.d.ts.map +0 -1
  608. package/dist/workflows/distribution.js +0 -24
  609. package/dist/workflows/distribution.js.map +0 -1
  610. package/dist/workflows/evidence.d.ts +0 -17
  611. package/dist/workflows/evidence.d.ts.map +0 -1
  612. package/dist/workflows/evidence.js +0 -32
  613. package/dist/workflows/evidence.js.map +0 -1
  614. package/dist/workflows/index.d.ts +0 -8
  615. package/dist/workflows/index.d.ts.map +0 -1
  616. package/dist/workflows/index.js +0 -7
  617. package/dist/workflows/index.js.map +0 -1
  618. package/dist/workflows/init.d.ts +0 -84
  619. package/dist/workflows/init.d.ts.map +0 -1
  620. package/dist/workflows/init.js +0 -487
  621. package/dist/workflows/init.js.map +0 -1
  622. package/dist/workflows/live.d.ts +0 -9
  623. package/dist/workflows/live.d.ts.map +0 -1
  624. package/dist/workflows/live.js +0 -7
  625. package/dist/workflows/live.js.map +0 -1
  626. package/dist/workflows/options.d.ts +0 -30
  627. package/dist/workflows/options.d.ts.map +0 -1
  628. package/dist/workflows/options.js +0 -16
  629. package/dist/workflows/options.js.map +0 -1
  630. package/examples/non-strict-skips/artifacts/release-example-skips-0.1.0.tgz +0 -1
  631. package/examples/non-strict-skips/release.config.json +0 -31
  632. package/examples/pypi-registry/release.config.json +0 -31
  633. package/templates/github-actions/plan-and-approved-execute.yml +0 -58
  634. package/templates/github-actions/plan-only.yml +0 -33
  635. package/templates/github-actions/trusted-publishing.yml +0 -61
@@ -0,0 +1,268 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { encodeCanonicalJson, parseStrictJson } from "../model/canonical.js";
3
+ import { ArtifactCollectionContract, ArtifactCollectionMember, cardinalityAccepts, cardinalityIssue, collectionContractIssue, collectionMemberId, collectionMemberPath } from "../model/artifact-collection.js";
4
+ import { Sha256Digest } from "../model/digest.js";
5
+ import { CatalogRepositoryPath, GitBranchName, GitHubRepositoryCoordinate, PreparedCatalogRenderer } from "../model/catalog.js";
6
+ import { PythonDistribution } from "../model/python-distribution.js";
7
+ import { NonEmptyName, OutputId, SafeRelativePath, Version } from "../model/primitives.js";
8
+ import { ExplicitInputSnapshot, StagingSnapshot } from "./context.js";
9
+ import { CanonicalNpmRegistryEndpoint, NpmAccess, NpmAuthentication, NpmDistTag, NpmProvenancePolicy, PyPiAuthentication, PyPiProjectName, PyPiRepository } from "../recipes/config.js";
10
+ import { PublicationAuthorityIntent, catalogPublicationAuthorityIssue, githubPublicationAuthorityIssue, npmPublicationAuthorityIssue, pyPiPublicationAuthorityIssue } from "./graph.js";
11
+ const optional = Schema.optionalKey;
12
+ const artifactKind = Schema.Literals(["file", "executable", "archive", "package", "digest"]);
13
+ export class PreparedSource extends Schema.Class("PreparedSource")({
14
+ commit: NonEmptyName, tree: NonEmptyName, clean: Schema.Literal(true),
15
+ packageManifestPath: SafeRelativePath, packageManifestDigest: Sha256Digest,
16
+ materialized: StagingSnapshot
17
+ }) {
18
+ }
19
+ export class PreparedProject extends Schema.Class("PreparedProject")({
20
+ name: NonEmptyName, packageName: optional(NonEmptyName), version: Version, tag: NonEmptyName,
21
+ repository: optional(Schema.NonEmptyString)
22
+ }) {
23
+ }
24
+ export class PreparedArtifact extends Schema.Class("PreparedArtifact")({
25
+ id: OutputId, path: SafeRelativePath, kind: artifactKind, size: Schema.Number.check(Schema.makeFilter((value) => Number.isSafeInteger(value) && value >= 0
26
+ ? undefined : "Prepared artifact size must be a nonnegative safe integer.")), digest: Sha256Digest, blob: Sha256Digest, mediaType: optional(Schema.NonEmptyString),
27
+ producer: NonEmptyName,
28
+ inputBasis: Sha256Digest
29
+ }) {
30
+ }
31
+ /** Durable collection provenance; the graph itself remains ephemeral. */
32
+ export class PreparedArtifactCollection extends Schema.Class("PreparedArtifactCollection")({
33
+ contract: ArtifactCollectionContract,
34
+ members: Schema.Array(ArtifactCollectionMember)
35
+ }) {
36
+ }
37
+ export class PreparedExecutionInputs extends Schema.Class("PreparedExecutionInputs")({
38
+ environment: Schema.Literal("closed"),
39
+ network: Schema.Literal("prohibited"),
40
+ timezone: Schema.Literal("UTC"),
41
+ locale: Schema.Literal("C"),
42
+ clock: Schema.Literal("source-date-epoch=0;host-clock-not-isolated"),
43
+ randomness: Schema.Literal("host-randomness-not-isolated"),
44
+ platform: Schema.NonEmptyString,
45
+ runtime: Schema.NonEmptyString,
46
+ networkIsolation: Schema.NonEmptyString,
47
+ bunCompileRuntimes: Schema.NonEmptyString,
48
+ npmPack: Schema.NonEmptyString,
49
+ releaseGraph: Sha256Digest,
50
+ preparer: Schema.NonEmptyString
51
+ }) {
52
+ }
53
+ export class PreparedProvenance extends Schema.Class("PreparedProvenance")({
54
+ source: StagingSnapshot,
55
+ externalInputs: Schema.Array(ExplicitInputSnapshot),
56
+ execution: PreparedExecutionInputs,
57
+ inputBasis: Sha256Digest,
58
+ reproducibility: Schema.Literal("not-asserted")
59
+ }) {
60
+ }
61
+ export class PreparedNpmPublication extends Schema.TaggedClass()("PreparedNpmPublication", {
62
+ id: NonEmptyName,
63
+ artifactId: OutputId,
64
+ packageName: NonEmptyName,
65
+ version: Version,
66
+ registryUrl: CanonicalNpmRegistryEndpoint,
67
+ distTag: NpmDistTag,
68
+ access: NpmAccess,
69
+ authentication: NpmAuthentication,
70
+ provenance: NpmProvenancePolicy,
71
+ authority: PublicationAuthorityIntent
72
+ }) {
73
+ }
74
+ export class PreparedGitHubAsset extends Schema.Class("PreparedGitHubAsset")({
75
+ artifactId: OutputId, name: Schema.NonEmptyString, mediaType: Schema.NonEmptyString
76
+ }) {
77
+ }
78
+ export class PreparedGitHubPublication extends Schema.TaggedClass()("PreparedGitHubPublication", {
79
+ id: NonEmptyName, repository: Schema.NonEmptyString, tag: NonEmptyName, title: NonEmptyName,
80
+ draft: Schema.Boolean, prerelease: Schema.Boolean, targetCommit: NonEmptyName, body: optional(Schema.String),
81
+ assets: Schema.Array(PreparedGitHubAsset), authority: PublicationAuthorityIntent
82
+ }) {
83
+ }
84
+ export class PreparedPyPiFile extends Schema.Class("PreparedPyPiFile")({
85
+ artifactId: OutputId,
86
+ filename: NonEmptyName,
87
+ size: Schema.Number.check(Schema.makeFilter((value) => Number.isSafeInteger(value) && value >= 0 ? undefined : "PyPI file size must be a nonnegative safe integer.")),
88
+ sha256: Sha256Digest,
89
+ mediaType: Schema.Literals(["application/zip", "application/gzip"]),
90
+ distribution: PythonDistribution,
91
+ authority: PublicationAuthorityIntent
92
+ }) {
93
+ }
94
+ export class PreparedPyPiPublication extends Schema.TaggedClass()("PreparedPyPiPublication", {
95
+ id: NonEmptyName,
96
+ project: PyPiProjectName,
97
+ version: Version,
98
+ repository: PyPiRepository,
99
+ simpleBaseUrl: Schema.NonEmptyString,
100
+ projectUrl: Schema.NonEmptyString,
101
+ uploadUrl: Schema.NonEmptyString,
102
+ authentication: PyPiAuthentication,
103
+ files: Schema.NonEmptyArray(PreparedPyPiFile)
104
+ }) {
105
+ }
106
+ export class PreparedCatalogPublication extends Schema.TaggedClass()("PreparedCatalogPublication", {
107
+ id: NonEmptyName,
108
+ catalogId: NonEmptyName,
109
+ targetArtifactId: OutputId,
110
+ stateArtifactId: OutputId,
111
+ targetDigest: Sha256Digest,
112
+ stateDigest: Sha256Digest,
113
+ repository: GitHubRepositoryCoordinate,
114
+ branch: GitBranchName,
115
+ targetPath: CatalogRepositoryPath,
116
+ statePath: CatalogRepositoryPath,
117
+ version: Version,
118
+ sourceRepository: GitHubRepositoryCoordinate,
119
+ sourceTag: NonEmptyName,
120
+ renderer: PreparedCatalogRenderer,
121
+ authority: PublicationAuthorityIntent
122
+ }) {
123
+ }
124
+ const PreparedPublicationVariants = Schema.Union([
125
+ PreparedNpmPublication, PreparedPyPiPublication, PreparedGitHubPublication, PreparedCatalogPublication
126
+ ]);
127
+ export const PreparedPublication = PreparedPublicationVariants.pipe(Schema.check(Schema.makeFilter((publication) => publication._tag === "PreparedNpmPublication"
128
+ ? npmPublicationAuthorityIssue(publication)
129
+ : publication._tag === "PreparedPyPiPublication"
130
+ ? pyPiPublicationAuthorityIssue(publication)
131
+ : publication._tag === "PreparedGitHubPublication"
132
+ ? githubPublicationAuthorityIssue(publication)
133
+ : catalogPublicationAuthorityIssue(publication))));
134
+ export class PreparedReleaseV2 extends Schema.Class("PreparedReleaseV2")({
135
+ kind: Schema.Literal("complete"),
136
+ schemaVersion: Schema.Literal("prepared-release/v2"), source: PreparedSource, project: PreparedProject,
137
+ provenance: PreparedProvenance,
138
+ artifacts: Schema.Array(PreparedArtifact),
139
+ collections: Schema.Array(PreparedArtifactCollection),
140
+ publications: Schema.Array(PreparedPublication)
141
+ }) {
142
+ }
143
+ export class PreparedManifestError extends Schema.TaggedErrorClass()("PreparedManifestError", {
144
+ reason: Schema.String
145
+ }) {
146
+ }
147
+ const assertCompletePreparedRelease = (manifest) => {
148
+ if (manifest.kind !== "complete")
149
+ throw new Error("prepared manifest kind must be 'complete'");
150
+ if (manifest.source.materialized.digest.hex !== manifest.provenance.source.digest.hex) {
151
+ throw new Error("prepared source materialization must match provenance source");
152
+ }
153
+ for (const publication of manifest.publications) {
154
+ if (publication._tag === "PreparedNpmPublication" &&
155
+ publication.authority.publishStrategy.kind === "trusted-publishing" &&
156
+ publication.authority.publishStrategy.sourceCommit.toString() !== manifest.source.commit.toString()) {
157
+ throw new Error(`prepared npm publication ${publication.id} source commit disagrees with the verified source`);
158
+ }
159
+ if (publication._tag === "PreparedPyPiPublication" &&
160
+ publication.authentication.strategy === "trusted-publishing" &&
161
+ publication.files.some((file) => file.authority.publishStrategy.kind !== "trusted-publishing" ||
162
+ file.authority.publishStrategy.sourceCommit.toString() !== manifest.source.commit.toString())) {
163
+ throw new Error(`prepared PyPI publication ${publication.id} source commit disagrees with the verified source`);
164
+ }
165
+ }
166
+ for (const artifact of manifest.artifacts) {
167
+ if (artifact.inputBasis.hex !== manifest.provenance.inputBasis.hex) {
168
+ throw new Error(`prepared artifact ${artifact.id} has a foreign input basis`);
169
+ }
170
+ }
171
+ const artifacts = new Map(manifest.artifacts.map((artifact) => [artifact.id.toString(), artifact]));
172
+ for (const publication of manifest.publications) {
173
+ if (publication._tag !== "PreparedCatalogPublication")
174
+ continue;
175
+ const target = artifacts.get(publication.targetArtifactId.toString());
176
+ const state = artifacts.get(publication.stateArtifactId.toString());
177
+ if (target === undefined || state === undefined || target.digest.hex !== publication.targetDigest.hex ||
178
+ state.digest.hex !== publication.stateDigest.hex || target.kind !== "file" || state.kind !== "file") {
179
+ throw new Error(`prepared catalog publication ${publication.id} does not bind its exact target/state artifacts`);
180
+ }
181
+ }
182
+ const collectionIds = new Set();
183
+ const collectionRoots = new Map();
184
+ const collectionProducers = new Set();
185
+ const memberArtifacts = new Set();
186
+ let previousCollection = "";
187
+ for (const collection of manifest.collections) {
188
+ const { contract } = collection;
189
+ const id = contract.id.toString();
190
+ if (id <= previousCollection)
191
+ throw new Error("prepared artifact collections must have unique code-point-sorted ids");
192
+ previousCollection = id;
193
+ const foldedId = id.toLocaleLowerCase("en-US");
194
+ if (collectionIds.has(foldedId))
195
+ throw new Error(`prepared artifact collection ${id} has a case-colliding id`);
196
+ collectionIds.add(foldedId);
197
+ const foldedRoot = contract.root.toString().toLocaleLowerCase("en-US");
198
+ const overlappingRoot = [...collectionRoots.entries()].find(([root]) => foldedRoot === root || foldedRoot.startsWith(`${root}/`) || root.startsWith(`${foldedRoot}/`));
199
+ if (overlappingRoot !== undefined) {
200
+ throw new Error(`prepared artifact collection ${id} root overlaps collection ${overlappingRoot[1]}`);
201
+ }
202
+ collectionRoots.set(foldedRoot, id);
203
+ if (collectionProducers.has(contract.producer.toString())) {
204
+ throw new Error(`prepared artifact collection ${id} repeats producer ${contract.producer}`);
205
+ }
206
+ collectionProducers.add(contract.producer.toString());
207
+ const issue = cardinalityIssue(contract.cardinality);
208
+ if (issue !== undefined)
209
+ throw new Error(`prepared artifact collection ${id}: ${issue}`);
210
+ const contractIssue = collectionContractIssue(contract);
211
+ if (contractIssue !== undefined)
212
+ throw new Error(`prepared artifact collection ${id}: ${contractIssue}`);
213
+ if (!cardinalityAccepts(contract.cardinality, collection.members.length)) {
214
+ throw new Error(`prepared artifact collection ${id} has ${collection.members.length} members outside its declared cardinality`);
215
+ }
216
+ const keys = new Set();
217
+ let previousKey = "";
218
+ for (const member of collection.members) {
219
+ const key = member.key.toString();
220
+ if (key <= previousKey)
221
+ throw new Error(`prepared artifact collection ${id} member keys must be unique and code-point sorted`);
222
+ previousKey = key;
223
+ const foldedKey = key.toLocaleLowerCase("en-US");
224
+ if (keys.has(foldedKey))
225
+ throw new Error(`prepared artifact collection ${id} has duplicate normalized member key ${key}`);
226
+ keys.add(foldedKey);
227
+ const expectedId = collectionMemberId(contract, member.key);
228
+ if (member.artifactId !== expectedId)
229
+ throw new Error(`prepared artifact collection ${id} member ${key} has an invalid stable artifact id`);
230
+ const artifact = artifacts.get(member.artifactId.toString());
231
+ if (artifact === undefined)
232
+ throw new Error(`prepared artifact collection ${id} member ${key} references no artifact`);
233
+ if (artifact.path !== collectionMemberPath(contract, member.key) || artifact.kind !== contract.artifactKind ||
234
+ artifact.mediaType !== contract.mediaType || artifact.producer.toString() !== contract.producer.toString()) {
235
+ throw new Error(`prepared artifact collection ${id} member ${key} disagrees with its contract`);
236
+ }
237
+ if (memberArtifacts.has(member.artifactId.toString())) {
238
+ throw new Error(`prepared artifact ${member.artifactId} belongs to more than one collection`);
239
+ }
240
+ memberArtifacts.add(member.artifactId.toString());
241
+ }
242
+ }
243
+ for (const artifact of manifest.artifacts) {
244
+ if (collectionProducers.has(artifact.producer.toString()) && !memberArtifacts.has(artifact.id.toString())) {
245
+ throw new Error(`prepared collection producer ${artifact.producer} has unclaimed artifact ${artifact.id}`);
246
+ }
247
+ }
248
+ };
249
+ export const encodePreparedRelease = (manifest) => {
250
+ assertCompletePreparedRelease(manifest);
251
+ return new TextEncoder().encode(encodeCanonicalJson(Schema.encodeSync(PreparedReleaseV2)(manifest)));
252
+ };
253
+ export const decodePreparedRelease = (bytes) => {
254
+ try {
255
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
256
+ const value = Schema.decodeUnknownSync(PreparedReleaseV2, { onExcessProperty: "error" })(parseStrictJson(text));
257
+ assertCompletePreparedRelease(value);
258
+ const canonical = encodePreparedRelease(value);
259
+ if (canonical.length !== bytes.length || canonical.some((byte, index) => byte !== bytes[index])) {
260
+ throw new Error("manifest bytes are not canonical");
261
+ }
262
+ return value;
263
+ }
264
+ catch (cause) {
265
+ throw PreparedManifestError.make({ reason: cause instanceof Error ? cause.message : String(cause) });
266
+ }
267
+ };
268
+ //# sourceMappingURL=prepared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared.js","sourceRoot":"","sources":["../../src/release/prepared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type Sha256Digest } from "../model/digest.js";
2
+ import { SafeRelativePath } from "../model/primitives.js";
3
+ import { ExplicitInputSnapshot, StagingSnapshot } from "./context.js";
4
+ /** Paths in staging manifests are portable POSIX-style relative paths. */
5
+ export declare const canonicalStagingPath: (value: string) => SafeRelativePath;
6
+ export interface SnapshotOptions {
7
+ /** Canonical roots omitted from a mutation comparison (declared outputs and scratch only). */
8
+ readonly exclude?: ReadonlyArray<SafeRelativePath | string>;
9
+ }
10
+ /** Canonical path/type/digest manifest for a private staging tree. */
11
+ export declare const snapshotStaging: (rootValue: string, options?: SnapshotOptions) => StagingSnapshot;
12
+ export declare const snapshotsEqual: (left: StagingSnapshot, right: StagingSnapshot) => boolean;
13
+ /** Select canonical roots from a whole-stage snapshot without following links again. */
14
+ export declare const selectStagingSnapshot: (snapshot: StagingSnapshot, roots: ReadonlyArray<SafeRelativePath | string>) => StagingSnapshot;
15
+ export declare const snapshotDifference: (before: StagingSnapshot, after: StagingSnapshot) => string;
16
+ export declare const assertSnapshotPresent: (root: string, expected: StagingSnapshot, label: string, options?: SnapshotOptions) => void;
17
+ /**
18
+ * Copy/reflink one declared non-Git input into private staging and return the
19
+ * digest that becomes part of prepared provenance. The destination must not
20
+ * already exist; source bytes can therefore never overwrite verified Git
21
+ * materialization.
22
+ */
23
+ export declare const materializeExplicitInput: (input: {
24
+ readonly id: string;
25
+ readonly sourceWorkspace: string;
26
+ readonly stageRoot: string;
27
+ readonly path: SafeRelativePath;
28
+ }) => ExplicitInputSnapshot;
29
+ /** Digest a set of preparation influences without asserting reproducibility. */
30
+ export declare const preparationBasisDigest: (source: StagingSnapshot, inputs: ReadonlyArray<ExplicitInputSnapshot>, execution: Readonly<Record<string, string>>) => Sha256Digest;
31
+ //# sourceMappingURL=staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../src/release/staging.ts"],"names":[],"mappings":"AAcA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EACL,qBAAqB,EAErB,eAAe,EAChB,MAAM,cAAc,CAAA;AAOrB,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,gBAOpD,CAAA;AA+BD,MAAM,WAAW,eAAe;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAA;CAC5D;AAED,sEAAsE;AACtE,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,EAAE,UAAS,eAAoB,KAAG,eA8ClF,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,eAAe,EAAE,OAAO,eAAe,KAAG,OACzC,CAAA;AAStC,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,GAChC,UAAU,eAAe,EACzB,OAAO,aAAa,CAAC,gBAAgB,GAAG,MAAM,CAAC,KAC9C,eASF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,QAAQ,eAAe,EAAE,OAAO,eAAe,KAAG,MAUpF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,UAAU,eAAe,EACzB,OAAO,MAAM,EACb,UAAS,eAAoB,KAC5B,IAYF,CAAA;AA0BD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAChC,KAAG,qBA8BH,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,eAAe,EACvB,QAAQ,aAAa,CAAC,qBAAqB,CAAC,EAC5C,WAAW,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,iBASzC,CAAA"}
@@ -0,0 +1,218 @@
1
+ import { constants, copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, readdirSync, realpathSync, symlinkSync } from "node:fs";
2
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
+ import { encodeCanonicalJson } from "../model/canonical.js";
4
+ import { sha256Digest } from "../model/digest.js";
5
+ import { SafeRelativePath } from "../model/primitives.js";
6
+ import { ExplicitInputSnapshot, StagingEntry, StagingSnapshot } from "./context.js";
7
+ const utf8 = new TextEncoder();
8
+ const byCodepoint = (left, right) => left < right ? -1 : left > right ? 1 : 0;
9
+ const fail = (reason) => { throw new Error(reason); };
10
+ /** Paths in staging manifests are portable POSIX-style relative paths. */
11
+ export const canonicalStagingPath = (value) => {
12
+ const path = value.split(sep).join("/");
13
+ if (path === "." || path.includes("\\") || path.includes("\0") ||
14
+ path.split("/").some((part) => part.length === 0 || part === "." || part === "..")) {
15
+ return fail(`Staging path ${JSON.stringify(value)} is not canonical and portable.`);
16
+ }
17
+ return SafeRelativePath.make(path);
18
+ };
19
+ const lexicalContainment = (root, candidate) => {
20
+ const path = relative(root, candidate);
21
+ return path === "" || (path !== ".." && !path.startsWith(`..${sep}`) && !isAbsolute(path));
22
+ };
23
+ const relativePath = (root, path) => canonicalStagingPath(relative(root, path));
24
+ const entryDigest = (kind, path) => {
25
+ if (kind === "directory")
26
+ return { digest: sha256Digest(utf8.encode("")), size: 0 };
27
+ const bytes = kind === "symlink" ? utf8.encode(readlinkSync(path)) : new Uint8Array(readFileSync(path));
28
+ return { digest: sha256Digest(bytes), size: bytes.length };
29
+ };
30
+ const assertSafeSymlink = (root, path) => {
31
+ const target = readlinkSync(path);
32
+ if (target.length === 0 || isAbsolute(target))
33
+ fail(`Staging symlink ${relative(root, path)} has an absolute or empty target.`);
34
+ const landed = resolve(dirname(path), target);
35
+ if (!lexicalContainment(root, landed))
36
+ fail(`Staging symlink ${relative(root, path)} escapes the private root.`);
37
+ if (!existsSync(landed))
38
+ fail(`Staging symlink ${relative(root, path)} is dangling.`);
39
+ const real = realpathSync(path);
40
+ if (!lexicalContainment(root, real))
41
+ fail(`Staging symlink ${relative(root, path)} resolves outside the private root.`);
42
+ };
43
+ const isExcluded = (path, excluded) => excluded.some((root) => path === root || path.startsWith(`${root}/`));
44
+ const isExcludedAncestor = (path, excluded) => excluded.some((root) => root.startsWith(`${path}/`));
45
+ /** Canonical path/type/digest manifest for a private staging tree. */
46
+ export const snapshotStaging = (rootValue, options = {}) => {
47
+ const root = realpathSync(rootValue);
48
+ if (lstatSync(root).isSymbolicLink() || !lstatSync(root).isDirectory())
49
+ fail("Staging root must be a real directory.");
50
+ const excluded = (options.exclude ?? []).map(String).sort(byCodepoint);
51
+ const entries = [];
52
+ const folded = new Map();
53
+ const walk = (directory) => {
54
+ for (const child of readdirSync(directory, { withFileTypes: true }).sort((left, right) => byCodepoint(left.name, right.name))) {
55
+ const path = join(directory, child.name);
56
+ const name = relativePath(root, path).toString();
57
+ if (isExcluded(name, excluded))
58
+ continue;
59
+ const collision = folded.get(name.toLocaleLowerCase("en-US"));
60
+ if (collision !== undefined && collision !== name)
61
+ fail(`Staging paths ${collision} and ${name} collide under case folding.`);
62
+ folded.set(name.toLocaleLowerCase("en-US"), name);
63
+ const stat = lstatSync(path);
64
+ const kind = stat.isSymbolicLink()
65
+ ? "symlink"
66
+ : stat.isDirectory()
67
+ ? "directory"
68
+ : stat.isFile()
69
+ ? (stat.mode & 0o111) === 0 ? "file" : "executable"
70
+ : fail(`Staging path ${name} has an unsupported filesystem kind.`);
71
+ if (kind === "symlink")
72
+ assertSafeSymlink(root, path);
73
+ const value = entryDigest(kind, path);
74
+ // Ancestor directories of an excluded writable root are traversal-only:
75
+ // creating `.release` in order to create `.release/assets` must not look
76
+ // like an undeclared mutation, while siblings under `.release` remain
77
+ // fully snapshotted and protected.
78
+ if (!(kind === "directory" && isExcludedAncestor(name, excluded))) {
79
+ entries.push(StagingEntry.make({
80
+ path: canonicalStagingPath(name),
81
+ kind,
82
+ mode: kind === "executable" ? 0o755 : kind === "directory" ? 0o755 : kind === "symlink" ? 0o777 : 0o644,
83
+ size: value.size,
84
+ digest: value.digest
85
+ }));
86
+ }
87
+ if (kind === "directory")
88
+ walk(path);
89
+ }
90
+ };
91
+ walk(root);
92
+ const canonical = encodeCanonicalJson(entries.map((entry) => ({
93
+ path: entry.path.toString(), kind: entry.kind, mode: entry.mode, size: entry.size,
94
+ digest: entry.digest.hex
95
+ })));
96
+ return StagingSnapshot.make({ entries, digest: sha256Digest(utf8.encode(canonical)) });
97
+ };
98
+ export const snapshotsEqual = (left, right) => left.digest.hex === right.digest.hex;
99
+ const snapshotDigest = (entries) => sha256Digest(utf8.encode(encodeCanonicalJson(entries.map((entry) => ({
100
+ path: entry.path.toString(), kind: entry.kind, mode: entry.mode, size: entry.size,
101
+ digest: entry.digest.hex
102
+ })))));
103
+ /** Select canonical roots from a whole-stage snapshot without following links again. */
104
+ export const selectStagingSnapshot = (snapshot, roots) => {
105
+ const names = roots.map(String);
106
+ const selected = snapshot.entries.map((entry) => {
107
+ const root = names.find((candidate) => entry.path.toString().startsWith(`${candidate}/`));
108
+ if (root === undefined)
109
+ return undefined;
110
+ const path = canonicalStagingPath(entry.path.toString().slice(root.length + 1));
111
+ return StagingEntry.make({ ...entry, path });
112
+ }).filter((entry) => entry !== undefined);
113
+ return StagingSnapshot.make({ entries: selected, digest: snapshotDigest(selected) });
114
+ };
115
+ export const snapshotDifference = (before, after) => {
116
+ const left = new Map(before.entries.map((entry) => [entry.path.toString(), entry]));
117
+ const right = new Map(after.entries.map((entry) => [entry.path.toString(), entry]));
118
+ const paths = [...new Set([...left.keys(), ...right.keys()])].sort(byCodepoint);
119
+ const changed = paths.filter((path) => {
120
+ const a = left.get(path);
121
+ const b = right.get(path);
122
+ return a === undefined || b === undefined || a.kind !== b.kind || a.mode !== b.mode ||
123
+ a.size !== b.size || a.digest.hex !== b.digest.hex;
124
+ });
125
+ return changed.slice(0, 8).join(", ") + (changed.length > 8 ? ` (+${changed.length - 8} more)` : "");
126
+ };
127
+ export const assertSnapshotPresent = (root, expected, label, options = {}) => {
128
+ const current = snapshotStaging(root, options);
129
+ const available = new Map(current.entries.map((entry) => [entry.path.toString(), entry]));
130
+ const excluded = (options.exclude ?? []).map(String);
131
+ for (const entry of expected.entries) {
132
+ if (isExcluded(entry.path.toString(), excluded))
133
+ continue;
134
+ const actual = available.get(entry.path.toString());
135
+ if (actual === undefined || actual.kind !== entry.kind || actual.mode !== entry.mode ||
136
+ actual.size !== entry.size || actual.digest.hex !== entry.digest.hex) {
137
+ fail(`${label} changed at ${entry.path}.`);
138
+ }
139
+ }
140
+ };
141
+ const copyPrivateTree = (sourceRoot, destinationRoot) => {
142
+ const source = realpathSync(sourceRoot);
143
+ const walk = (from, to) => {
144
+ const stat = lstatSync(from);
145
+ if (stat.isSymbolicLink()) {
146
+ const landed = realpathSync(from);
147
+ if (!lexicalContainment(source, landed))
148
+ fail(`Explicit input symlink ${from} escapes its declared root.`);
149
+ const target = readlinkSync(from);
150
+ symlinkSync(target, to, stat.isDirectory() ? "dir" : "file");
151
+ return;
152
+ }
153
+ if (stat.isDirectory()) {
154
+ mkdirSync(to, { recursive: false, mode: 0o700 });
155
+ for (const child of readdirSync(from).sort(byCodepoint))
156
+ walk(join(from, child), join(to, child));
157
+ return;
158
+ }
159
+ if (!stat.isFile())
160
+ fail(`Explicit input ${from} has an unsupported filesystem kind.`);
161
+ copyFileSync(from, to, constants.COPYFILE_FICLONE);
162
+ };
163
+ walk(sourceRoot, destinationRoot);
164
+ // Re-snapshot to reject copied links that only appeared safe in the source topology.
165
+ if (lstatSync(destinationRoot).isDirectory())
166
+ snapshotStaging(destinationRoot);
167
+ };
168
+ /**
169
+ * Copy/reflink one declared non-Git input into private staging and return the
170
+ * digest that becomes part of prepared provenance. The destination must not
171
+ * already exist; source bytes can therefore never overwrite verified Git
172
+ * materialization.
173
+ */
174
+ export const materializeExplicitInput = (input) => {
175
+ const sourceRoot = realpathSync(input.sourceWorkspace);
176
+ const source = join(sourceRoot, input.path.toString());
177
+ const destination = join(input.stageRoot, input.path.toString());
178
+ if (!lexicalContainment(sourceRoot, source) || !lexicalContainment(realpathSync(input.stageRoot), destination)) {
179
+ return fail(`Explicit input ${input.id} escapes its declared root.`);
180
+ }
181
+ if (!existsSync(source))
182
+ return fail(`Explicit input ${input.id} does not exist at ${input.path}.`);
183
+ if (existsSync(destination))
184
+ return fail(`Explicit input ${input.id} overlaps verified source at ${input.path}.`);
185
+ mkdirSync(dirname(destination), { recursive: true, mode: 0o700 });
186
+ const sourceStat = lstatSync(source);
187
+ if (sourceStat.isSymbolicLink())
188
+ return fail(`Explicit input ${input.id} cannot be a symlink.`);
189
+ copyPrivateTree(source, destination);
190
+ const kind = sourceStat.isDirectory() ? "directory" : "file";
191
+ const snapshot = sourceStat.isDirectory() ? snapshotStaging(destination) : undefined;
192
+ const size = sourceStat.isDirectory()
193
+ ? snapshot.entries.filter((entry) => entry.kind !== "directory").reduce((sum, entry) => sum + entry.size, 0)
194
+ : sourceStat.size;
195
+ const digest = sourceStat.isDirectory()
196
+ ? snapshot.digest
197
+ : sha256Digest(new Uint8Array(readFileSync(destination)));
198
+ return ExplicitInputSnapshot.make({
199
+ id: input.id,
200
+ path: input.path,
201
+ kind,
202
+ size,
203
+ digest,
204
+ materializer: "private-copy-or-reflink/v1",
205
+ materializationBasis: [digest]
206
+ });
207
+ };
208
+ /** Digest a set of preparation influences without asserting reproducibility. */
209
+ export const preparationBasisDigest = (source, inputs, execution) => sha256Digest(utf8.encode(encodeCanonicalJson({
210
+ source: source.digest.hex,
211
+ inputs: [...inputs].sort((left, right) => byCodepoint(left.id, right.id)).map((input) => ({
212
+ id: input.id, path: input.path.toString(), kind: input.kind, size: input.size, digest: input.digest.hex,
213
+ materializer: input.materializer,
214
+ materializationBasis: input.materializationBasis.map((digest) => digest.hex)
215
+ })),
216
+ execution
217
+ })));
218
+ //# sourceMappingURL=staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/release/staging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import * as Schema from "effect/Schema";
2
+ declare const AuthoredProject_base: Schema.Class<AuthoredProject, Schema.Struct<{
3
+ readonly name: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "NonEmptyName">>;
4
+ readonly version: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "Version">>;
5
+ readonly tag: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "NonEmptyName">>;
6
+ readonly tagTemplate: Schema.optionalKey<Schema.NonEmptyString>;
7
+ readonly packageName: Schema.optionalKey<Schema.NonEmptyString>;
8
+ readonly repository: Schema.optionalKey<Schema.NonEmptyString>;
9
+ }>, {}>;
10
+ export declare class AuthoredProject extends AuthoredProject_base {
11
+ }
12
+ declare const AuthoredNpmPublish_base: Schema.Class<AuthoredNpmPublish, Schema.Struct<{
13
+ readonly registry: Schema.optionalKey<Schema.NonEmptyString>;
14
+ readonly distTag: Schema.optionalKey<Schema.NonEmptyString>;
15
+ readonly access: Schema.optionalKey<Schema.Literals<readonly ["public", "restricted"]>>;
16
+ readonly authentication: Schema.Union<readonly [typeof import("../recipes/config.js").NpmTokenAuthentication, typeof import("../recipes/config.js").NpmTrustedPublishingAuthentication]>;
17
+ readonly provenance: Schema.optionalKey<Schema.Literals<readonly ["automatic", "required", "disabled"]>>;
18
+ }>, {}>;
19
+ /** Human-authored npm policy. Resolution fills only documented deterministic defaults. */
20
+ export declare class AuthoredNpmPublish extends AuthoredNpmPublish_base {
21
+ }
22
+ declare const AuthoredPyPiPublish_base: Schema.Class<AuthoredPyPiPublish, Schema.Struct<{
23
+ readonly artifacts: Schema.NonEmptyArray<Schema.NonEmptyString>;
24
+ readonly repository: Schema.optionalKey<Schema.Literals<readonly ["pypi", "testpypi"]>>;
25
+ readonly authentication: Schema.Union<readonly [typeof import("../recipes/config.js").PyPiTokenAuthentication, typeof import("../recipes/config.js").PyPiExternalTrustedPublishingAuthentication]>;
26
+ }>, {}>;
27
+ export declare class AuthoredPyPiPublish extends AuthoredPyPiPublish_base {
28
+ }
29
+ declare const AuthoredPublish_base: Schema.Class<AuthoredPublish, Schema.Struct<{
30
+ readonly npm: Schema.optionalKey<typeof AuthoredNpmPublish>;
31
+ readonly pypi: Schema.optionalKey<typeof AuthoredPyPiPublish>;
32
+ readonly catalogGit: Schema.optionalKey<Schema.NonEmptyArray<typeof import("../recipes/config.js").CandidateCatalogGitDestination>>;
33
+ readonly github: Schema.optionalKey<typeof import("../recipes/config.js").CandidateGitHubPublish>;
34
+ }>, {}>;
35
+ export declare class AuthoredPublish extends AuthoredPublish_base {
36
+ }
37
+ declare const AuthoredConfig_base: Schema.Class<AuthoredConfig, Schema.Struct<{
38
+ readonly project: typeof AuthoredProject;
39
+ readonly publish: Schema.optionalKey<typeof AuthoredPublish>;
40
+ readonly versionFrom: Schema.optionalKey<Schema.Literals<readonly ["manifest", "git-tag"]>>;
41
+ readonly $schema: Schema.optionalKey<Schema.String>;
42
+ readonly builds: Schema.optionalKey<Schema.NonEmptyArray<Schema.Union<readonly [typeof import("../recipes/config.js").CandidateBunBuild, typeof import("../recipes/config.js").CandidateCommandBuild, typeof import("../recipes/config.js").CandidatePrebuiltBuild]>>>;
43
+ readonly preparations: Schema.optionalKey<Schema.NonEmptyArray<Schema.Union<readonly [typeof import("../recipes/config.js").CandidateCheckPreparation, typeof import("../recipes/config.js").CandidateArtifactPreparation, typeof import("../recipes/config.js").CandidateCollectionPreparation]>>>;
44
+ readonly npmPackage: Schema.optionalKey<typeof import("../recipes/config.js").CandidateNpmPackage>;
45
+ readonly artifacts: Schema.optionalKey<Schema.NonEmptyArray<typeof import("../recipes/config.js").CandidateArtifact>>;
46
+ readonly archives: Schema.optionalKey<Schema.NonEmptyArray<typeof import("../recipes/config.js").CandidateArchive>>;
47
+ readonly checksum: Schema.optionalKey<typeof import("../recipes/config.js").CandidateChecksum>;
48
+ readonly catalogs: Schema.optionalKey<typeof import("../recipes/config.js").CandidateCatalogs>;
49
+ }>, {}>;
50
+ export declare class AuthoredConfig extends AuthoredConfig_base {
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=authored.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored.d.ts","sourceRoot":"","sources":["../../src/resolve/authored.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;;;;;;AAevC,qBAAa,eAAgB,SAAQ,oBAanC;CAAG;;;;;;;;AAEL,0FAA0F;AAC1F,qBAAa,kBAAmB,SAAQ,uBAMtC;CAAG;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAIvC;CAAG;;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAInC;CAAG;;;;;;;;;;;;;;AAEL,qBAAa,cAAe,SAAQ,mBAKlC;CAAG"}