@astrale-os/sdk 0.6.0-beta.2 → 0.6.0-beta.21

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 (403) hide show
  1. package/README.md +74 -14
  2. package/dist/application/action/action.d.ts +6 -0
  3. package/dist/application/action/authoring.d.ts +1 -1
  4. package/dist/application/action/context.d.ts +17 -8
  5. package/dist/application/action/define.d.ts +3 -3
  6. package/dist/application/action/index.d.ts +1 -1
  7. package/dist/application/define.d.ts +5 -5
  8. package/dist/application/define.js +13 -13
  9. package/dist/application/dependency/index.d.ts +1 -1
  10. package/dist/application/dependency/invoker.d.ts +11 -6
  11. package/dist/application/domain.d.ts +28 -0
  12. package/dist/application/index.d.ts +3 -3
  13. package/dist/application/index.js +1 -1
  14. package/dist/application/mutation/authoring/properties.d.ts +5 -3
  15. package/dist/application/mutation/authoring/properties.js +35 -2
  16. package/dist/application/mutation/authoring/transition.js +4 -1
  17. package/dist/application/routes/admission.d.ts +2 -2
  18. package/dist/application/routes/admission.js +1 -1
  19. package/dist/application/routes/route.d.ts +2 -2
  20. package/dist/application/runtime/actions.js +3 -0
  21. package/dist/application/runtime/workflows.d.ts +2 -0
  22. package/dist/application/runtime/workflows.js +5 -0
  23. package/dist/application/workflow/authoring.d.ts +3 -2
  24. package/dist/application/workflow/context.d.ts +8 -2
  25. package/dist/application/workflow/define.d.ts +3 -3
  26. package/dist/application/workflow/define.js +19 -3
  27. package/dist/application/workflow/durable.d.ts +83 -0
  28. package/dist/application/workflow/index.d.ts +3 -2
  29. package/dist/application/workflow/runner/inline.js +3 -4
  30. package/dist/application/workflow/runner/runner.d.ts +2 -2
  31. package/dist/application/workflow/step/output.d.ts +2 -0
  32. package/dist/application/workflow/step/output.js +73 -0
  33. package/dist/application/workflow/workflow.d.ts +12 -0
  34. package/dist/deployment/adapter/adapter.d.ts +59 -11
  35. package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
  36. package/dist/deployment/adapter/bundle/file.d.ts +10 -0
  37. package/dist/deployment/adapter/bundle/index.d.ts +2 -0
  38. package/dist/deployment/adapter/define.d.ts +25 -3
  39. package/dist/deployment/adapter/define.js +101 -24
  40. package/dist/deployment/adapter/index.d.ts +6 -3
  41. package/dist/deployment/adapter/index.js +1 -0
  42. package/dist/deployment/adapter/legacy/adapter.d.ts +40 -0
  43. package/dist/deployment/adapter/{deploy → legacy/deploy}/context.d.ts +6 -2
  44. package/dist/deployment/adapter/legacy/deploy/index.d.ts +2 -0
  45. package/dist/deployment/adapter/legacy/deploy/index.js +1 -0
  46. package/dist/deployment/adapter/legacy/deploy/result.d.ts +89 -0
  47. package/dist/deployment/adapter/legacy/deploy/result.js +1 -0
  48. package/dist/deployment/adapter/legacy/index.d.ts +24 -0
  49. package/dist/deployment/adapter/legacy/index.js +1 -0
  50. package/dist/deployment/adapter/legacy/prepare/artifact.d.ts +43 -0
  51. package/dist/deployment/adapter/legacy/prepare/artifact.js +1 -0
  52. package/dist/deployment/adapter/legacy/prepare/context.d.ts +33 -0
  53. package/dist/deployment/adapter/legacy/prepare/context.js +1 -0
  54. package/dist/deployment/adapter/legacy/prepare/index.d.ts +2 -0
  55. package/dist/deployment/adapter/legacy/prepare/index.js +1 -0
  56. package/dist/deployment/adapter/release/context.d.ts +95 -0
  57. package/dist/deployment/adapter/release/context.js +1 -0
  58. package/dist/deployment/adapter/release/index.d.ts +3 -0
  59. package/dist/deployment/adapter/release/index.js +1 -0
  60. package/dist/deployment/adapter/release/list.d.ts +53 -0
  61. package/dist/deployment/adapter/release/list.js +1 -0
  62. package/dist/deployment/adapter/release/refusal.d.ts +10 -0
  63. package/dist/deployment/adapter/release/refusal.js +14 -0
  64. package/dist/deployment/adapter/release/result.d.ts +56 -0
  65. package/dist/deployment/adapter/release/result.js +1 -0
  66. package/dist/deployment/address/configuration.d.ts +83 -0
  67. package/dist/deployment/address/configuration.js +262 -0
  68. package/dist/deployment/address/fingerprint.d.ts +5 -0
  69. package/dist/deployment/address/fingerprint.js +27 -0
  70. package/dist/deployment/address/index.d.ts +5 -0
  71. package/dist/deployment/address/index.js +5 -0
  72. package/dist/deployment/address/label.d.ts +42 -0
  73. package/dist/deployment/address/label.js +80 -0
  74. package/dist/deployment/address/line.d.ts +29 -0
  75. package/dist/deployment/address/line.js +53 -0
  76. package/dist/deployment/address/record.d.ts +52 -0
  77. package/dist/deployment/address/record.js +104 -0
  78. package/dist/deployment/address/summary.d.ts +57 -0
  79. package/dist/deployment/address/summary.js +117 -0
  80. package/dist/deployment/address/vectors.d.ts +60 -0
  81. package/dist/deployment/address/vectors.js +517 -0
  82. package/dist/deployment/build/build.d.ts +2 -2
  83. package/dist/deployment/build/compile.d.ts +4 -4
  84. package/dist/deployment/build/compile.js +17 -17
  85. package/dist/deployment/build/index.d.ts +1 -0
  86. package/dist/deployment/build/index.js +1 -0
  87. package/dist/deployment/build/manifest.d.ts +59 -0
  88. package/dist/deployment/build/manifest.js +118 -0
  89. package/dist/deployment/build/material.js +2 -2
  90. package/dist/deployment/build/schema.d.ts +2 -2
  91. package/dist/deployment/deploy.d.ts +10 -10
  92. package/dist/deployment/deploy.js +3 -3
  93. package/dist/deployment/deployment.d.ts +9 -4
  94. package/dist/deployment/environment.d.ts +6 -0
  95. package/dist/deployment/environment.js +6 -0
  96. package/dist/deployment/index.d.ts +4 -4
  97. package/dist/deployment/index.js +1 -1
  98. package/dist/deployment/release/addressing.d.ts +9 -1
  99. package/dist/deployment/release/assemble.d.ts +6 -3
  100. package/dist/deployment/release/assemble.js +12 -10
  101. package/dist/deployment/release/index.d.ts +2 -0
  102. package/dist/deployment/release/index.js +2 -0
  103. package/dist/deployment/release/legacy/admission.d.ts +3 -0
  104. package/dist/deployment/release/legacy/admission.js +8 -0
  105. package/dist/deployment/release/legacy/assemble.d.ts +5 -0
  106. package/dist/deployment/release/legacy/assemble.js +20 -0
  107. package/dist/deployment/release/legacy/index.d.ts +35 -0
  108. package/dist/deployment/release/legacy/index.js +34 -0
  109. package/dist/deployment/release/legacy/release.d.ts +12 -0
  110. package/dist/deployment/release/legacy/release.js +1 -0
  111. package/dist/deployment/release/{publication → legacy}/seal.d.ts +3 -3
  112. package/dist/deployment/release/legacy/seal.js +17 -0
  113. package/dist/deployment/release/release.d.ts +16 -5
  114. package/dist/deployment/release/runtime.d.ts +2 -0
  115. package/dist/deployment/release/runtime.js +2 -0
  116. package/dist/deployment/release/seal.d.ts +14 -0
  117. package/dist/deployment/release/seal.js +22 -0
  118. package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
  119. package/dist/deployment/release/{publication → served}/callables.js +2 -2
  120. package/dist/deployment/release/served/index.d.ts +12 -0
  121. package/dist/deployment/release/served/index.js +22 -0
  122. package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
  123. package/dist/deployment/runtime/admission.d.ts +2 -2
  124. package/dist/deployment/runtime/admission.js +5 -5
  125. package/dist/deployment/verify/index.d.ts +2 -1
  126. package/dist/deployment/verify/index.js +1 -0
  127. package/dist/deployment/verify/preflight/artifact.d.ts +1 -1
  128. package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
  129. package/dist/deployment/verify/preflight/bundle.js +71 -0
  130. package/dist/deployment/verify/preflight/index.d.ts +2 -1
  131. package/dist/deployment/verify/preflight/index.js +1 -0
  132. package/dist/deployment/verify/preflight/publication.d.ts +2 -2
  133. package/dist/deployment/verify/preflight/publication.js +4 -3
  134. package/dist/deployment/verify/readiness/deployment.js +7 -15
  135. package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
  136. package/dist/deployment/verify/readiness/fetch.js +26 -0
  137. package/dist/deployment/verify/readiness/identity.d.ts +3 -6
  138. package/dist/deployment/verify/readiness/identity.js +3 -3
  139. package/dist/deployment/verify/readiness/index.d.ts +11 -7
  140. package/dist/deployment/verify/readiness/index.js +15 -4
  141. package/dist/deployment/verify/readiness/legacy/index.d.ts +2 -0
  142. package/dist/deployment/verify/readiness/legacy/index.js +2 -0
  143. package/dist/deployment/verify/readiness/legacy/publication.d.ts +12 -0
  144. package/dist/deployment/verify/readiness/legacy/publication.js +23 -0
  145. package/dist/deployment/verify/readiness/release.d.ts +8 -0
  146. package/dist/deployment/verify/readiness/release.js +22 -0
  147. package/dist/execution/identity/authentication.d.ts +23 -2
  148. package/dist/execution/identity/authentication.js +64 -40
  149. package/dist/execution/identity/callback.d.ts +16 -15
  150. package/dist/execution/identity/callback.js +21 -16
  151. package/dist/execution/identity/delivery.d.ts +11 -4
  152. package/dist/execution/identity/delivery.js +47 -20
  153. package/dist/execution/identity/identity.d.ts +18 -3
  154. package/dist/execution/identity/identity.js +8 -4
  155. package/dist/execution/identity/jwks.js +57 -12
  156. package/dist/execution/index.d.ts +4 -2
  157. package/dist/execution/index.js +2 -1
  158. package/dist/execution/invocation/admission/authentication.d.ts +3 -8
  159. package/dist/execution/invocation/admission/authentication.js +10 -24
  160. package/dist/execution/invocation/admission/authority.d.ts +15 -8
  161. package/dist/execution/invocation/admission/authority.js +5 -0
  162. package/dist/execution/invocation/admission/input.d.ts +2 -2
  163. package/dist/execution/invocation/admission/input.js +16 -2
  164. package/dist/execution/invocation/dependency/bind.d.ts +1 -1
  165. package/dist/execution/invocation/dependency/bind.js +35 -14
  166. package/dist/execution/invocation/dispatch/context.d.ts +2 -1
  167. package/dist/execution/invocation/dispatch/context.js +1 -1
  168. package/dist/execution/invocation/invocation.js +58 -16
  169. package/dist/execution/invocation/result/project.js +41 -1
  170. package/dist/execution/node/serve.d.ts +2 -2
  171. package/dist/execution/node/serve.js +1 -1
  172. package/dist/execution/runtime/index.d.ts +1 -0
  173. package/dist/execution/runtime/index.js +1 -0
  174. package/dist/execution/runtime/load.d.ts +3 -3
  175. package/dist/execution/runtime/load.js +3 -2
  176. package/dist/execution/runtime/release.d.ts +22 -0
  177. package/dist/execution/runtime/release.js +14 -0
  178. package/dist/execution/serve.d.ts +10 -4
  179. package/dist/execution/serve.js +3 -0
  180. package/dist/execution/service/create.js +39 -7
  181. package/dist/execution/service/initialization.d.ts +4 -4
  182. package/dist/execution/service/initialization.js +23 -14
  183. package/dist/execution/service/release.d.ts +2 -2
  184. package/dist/execution/service/release.js +3 -2
  185. package/dist/execution/service/service.d.ts +15 -5
  186. package/dist/execution/service/serving/delivery.d.ts +6 -0
  187. package/dist/execution/service/{publication → serving}/delivery.js +5 -1
  188. package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
  189. package/dist/execution/service/serving/installation.d.ts +4 -0
  190. package/dist/execution/service/serving/installation.js +9 -0
  191. package/dist/execution/service/serving/legacy/index.d.ts +15 -0
  192. package/dist/execution/service/serving/legacy/index.js +19 -0
  193. package/dist/execution/service/serving/source.d.ts +18 -0
  194. package/dist/execution/service/serving/source.js +19 -0
  195. package/dist/execution/workflows/discovery.d.ts +14 -0
  196. package/dist/execution/workflows/discovery.js +151 -0
  197. package/dist/execution/workflows/engine.d.ts +52 -0
  198. package/dist/execution/workflows/engine.js +1 -0
  199. package/dist/execution/workflows/envelope.d.ts +12 -0
  200. package/dist/execution/workflows/envelope.js +46 -0
  201. package/dist/execution/workflows/failure.d.ts +11 -0
  202. package/dist/execution/workflows/failure.js +43 -0
  203. package/dist/execution/workflows/index.d.ts +4 -0
  204. package/dist/execution/workflows/index.js +3 -0
  205. package/dist/execution/workflows/options.d.ts +40 -0
  206. package/dist/execution/workflows/options.js +83 -0
  207. package/dist/execution/workflows/receiver.d.ts +22 -0
  208. package/dist/execution/workflows/receiver.js +99 -0
  209. package/dist/execution/workflows/route.d.ts +14 -0
  210. package/dist/execution/workflows/route.js +40 -0
  211. package/dist/execution/workflows/run.d.ts +22 -0
  212. package/dist/execution/workflows/run.js +211 -0
  213. package/dist/index.d.ts +3 -3
  214. package/dist/index.js +1 -1
  215. package/dist/platform/release/index.d.ts +27 -0
  216. package/dist/platform/release/index.js +27 -0
  217. package/dist/platform/schema/index.d.ts +2 -1
  218. package/dist/platform/schema/property-input.d.ts +15 -0
  219. package/dist/platform/schema/property-input.js +1 -0
  220. package/dist/platform/schema/property.d.ts +5 -0
  221. package/dist/platform/versioning/dependents.d.ts +18 -0
  222. package/dist/platform/versioning/dependents.js +15 -0
  223. package/dist/platform/versioning/index.d.ts +5 -0
  224. package/dist/platform/versioning/index.js +5 -0
  225. package/dist/platform/versioning/name.d.ts +38 -0
  226. package/dist/platform/versioning/name.js +58 -0
  227. package/dist/platform/versioning/reference.d.ts +48 -0
  228. package/dist/platform/versioning/reference.js +95 -0
  229. package/dist/platform/versioning/version.d.ts +72 -0
  230. package/dist/platform/versioning/version.js +98 -0
  231. package/dist/project/admit.js +2 -2
  232. package/dist/project/define.d.ts +4 -4
  233. package/dist/project/define.js +55 -35
  234. package/dist/project/index.d.ts +1 -1
  235. package/dist/project/install-command.d.ts +10 -0
  236. package/dist/project/install-command.js +13 -0
  237. package/dist/project/project.d.ts +10 -8
  238. package/dist/testing/dataset/builder.d.ts +3 -3
  239. package/dist/testing/dataset/define.d.ts +1 -1
  240. package/dist/testing/load.js +1 -1
  241. package/dist/tooling/cli/arguments.d.ts +10 -5
  242. package/dist/tooling/cli/arguments.js +123 -52
  243. package/dist/tooling/cli/build.d.ts +55 -0
  244. package/dist/tooling/cli/build.js +77 -0
  245. package/dist/tooling/cli/bun.d.ts +0 -1
  246. package/dist/tooling/cli/bun.js +0 -7
  247. package/dist/tooling/cli/commit.d.ts +35 -0
  248. package/dist/tooling/cli/commit.js +235 -0
  249. package/dist/tooling/cli/deploy-mode.d.ts +82 -0
  250. package/dist/tooling/cli/deploy-mode.js +135 -0
  251. package/dist/tooling/cli/deploy-result.d.ts +85 -0
  252. package/dist/tooling/cli/deploy-result.js +64 -0
  253. package/dist/tooling/cli/diff/declared.d.ts +7 -0
  254. package/dist/tooling/cli/diff/declared.js +27 -0
  255. package/dist/tooling/cli/diff/index.d.ts +30 -0
  256. package/dist/tooling/cli/diff/index.js +58 -0
  257. package/dist/tooling/cli/diff/render.d.ts +15 -0
  258. package/dist/tooling/cli/diff/render.js +131 -0
  259. package/dist/tooling/cli/diff/report.d.ts +88 -0
  260. package/dist/tooling/cli/diff/report.js +154 -0
  261. package/dist/tooling/cli/dotenv.d.ts +2 -2
  262. package/dist/tooling/cli/dotenv.js +3 -33
  263. package/dist/tooling/cli/help.js +176 -59
  264. package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
  265. package/dist/tooling/cli/immutable-deployment.js +135 -0
  266. package/dist/tooling/cli/index.d.ts +10 -4
  267. package/dist/tooling/cli/index.js +5 -3
  268. package/dist/tooling/cli/installed-on.d.ts +83 -0
  269. package/dist/tooling/cli/installed-on.js +156 -0
  270. package/dist/tooling/cli/legacy/deploy-result.d.ts +28 -0
  271. package/dist/tooling/cli/legacy/deploy-result.js +37 -0
  272. package/dist/tooling/cli/legacy/stable-target-adapter.d.ts +21 -0
  273. package/dist/tooling/cli/legacy/stable-target-adapter.js +14 -0
  274. package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +40 -0
  275. package/dist/tooling/cli/legacy/stable-target-deploy.js +102 -0
  276. package/dist/tooling/cli/legacy/uploaded-build.d.ts +11 -0
  277. package/dist/tooling/cli/legacy/uploaded-build.js +22 -0
  278. package/dist/tooling/cli/list.d.ts +154 -0
  279. package/dist/tooling/cli/list.js +381 -0
  280. package/dist/tooling/cli/log.d.ts +5 -0
  281. package/dist/tooling/cli/log.js +9 -0
  282. package/dist/tooling/cli/orchestrate.d.ts +0 -6
  283. package/dist/tooling/cli/orchestrate.js +236 -88
  284. package/dist/tooling/cli/project.d.ts +3 -3
  285. package/dist/tooling/cli/publish/index.d.ts +73 -0
  286. package/dist/tooling/cli/publish/index.js +346 -0
  287. package/dist/tooling/cli/publish/report.d.ts +49 -0
  288. package/dist/tooling/cli/publish/report.js +15 -0
  289. package/dist/tooling/cli/registry/client.d.ts +114 -0
  290. package/dist/tooling/cli/registry/client.js +346 -0
  291. package/dist/tooling/cli/registry/error.d.ts +11 -0
  292. package/dist/tooling/cli/registry/error.js +17 -0
  293. package/dist/tooling/cli/registry/executable.d.ts +29 -0
  294. package/dist/tooling/cli/registry/executable.js +90 -0
  295. package/dist/tooling/cli/registry/index.d.ts +9 -0
  296. package/dist/tooling/cli/registry/index.js +8 -0
  297. package/dist/tooling/cli/registry/installations.d.ts +67 -0
  298. package/dist/tooling/cli/registry/installations.js +108 -0
  299. package/dist/tooling/cli/registry/process.d.ts +36 -0
  300. package/dist/tooling/cli/registry/process.js +119 -0
  301. package/dist/tooling/cli/secrets.d.ts +9 -0
  302. package/dist/tooling/cli/secrets.js +19 -0
  303. package/dist/tooling/cli/yank.d.ts +34 -0
  304. package/dist/tooling/cli/yank.js +32 -0
  305. package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -1
  306. package/dist/tooling/linter/implementations/source/callable-requirements.js +10 -10
  307. package/dist/tooling/linter/implementations/source/dependencies.js +12 -10
  308. package/dist/tooling/linter/implementations/source/global.js +1 -1
  309. package/dist/tooling/linter/implementations/source/mutations.js +17 -17
  310. package/dist/tooling/linter/implementations/source/providers.js +5 -5
  311. package/dist/tooling/linter/implementations/source/views.js +2 -2
  312. package/dist/tooling/linter/policy/generated.js +16 -16
  313. package/dist/tooling/packaging/declarations/ownership.js +1 -1
  314. package/dist/tooling/packaging/finalize.d.ts +1 -1
  315. package/dist/tooling/packaging/finalize.js +1 -1
  316. package/package.json +32 -11
  317. package/dist/application/application.d.ts +0 -28
  318. package/dist/deployment/adapter/deploy/index.d.ts +0 -2
  319. package/dist/deployment/adapter/deploy/result.d.ts +0 -50
  320. package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
  321. package/dist/deployment/adapter/prepare/context.d.ts +0 -23
  322. package/dist/deployment/adapter/prepare/index.d.ts +0 -2
  323. package/dist/deployment/release/publication/index.d.ts +0 -6
  324. package/dist/deployment/release/publication/index.js +0 -6
  325. package/dist/deployment/release/publication/manifest.d.ts +0 -3
  326. package/dist/deployment/release/publication/manifest.js +0 -5
  327. package/dist/deployment/release/publication/requirements.d.ts +0 -3
  328. package/dist/deployment/release/publication/requirements.js +0 -3
  329. package/dist/deployment/release/publication/seal.js +0 -39
  330. package/dist/deployment/verify/readiness/publication.d.ts +0 -11
  331. package/dist/deployment/verify/readiness/publication.js +0 -41
  332. package/dist/execution/service/publication/delivery.d.ts +0 -2
  333. package/dist/execution/service/publication/installation.d.ts +0 -3
  334. package/dist/execution/service/publication/installation.js +0 -8
  335. package/dist/execution/service/publication/source.d.ts +0 -3
  336. package/dist/execution/service/publication/source.js +0 -11
  337. package/dist/platform/publication/index.d.ts +0 -2
  338. package/dist/platform/publication/index.js +0 -2
  339. package/dist/tooling/cli/astrale/authority.d.ts +0 -5
  340. package/dist/tooling/cli/astrale/authority.js +0 -11
  341. package/dist/tooling/cli/astrale/executable.d.ts +0 -2
  342. package/dist/tooling/cli/astrale/executable.js +0 -47
  343. package/dist/tooling/cli/astrale/failure.d.ts +0 -6
  344. package/dist/tooling/cli/astrale/failure.js +0 -48
  345. package/dist/tooling/cli/astrale/instance.d.ts +0 -11
  346. package/dist/tooling/cli/astrale/instance.js +0 -52
  347. package/dist/tooling/cli/astrale/process.d.ts +0 -13
  348. package/dist/tooling/cli/astrale/process.js +0 -94
  349. package/dist/tooling/cli/astrale/version.d.ts +0 -18
  350. package/dist/tooling/cli/astrale/version.js +0 -55
  351. package/dist/tooling/cli/credential.d.ts +0 -2
  352. package/dist/tooling/cli/credential.js +0 -57
  353. package/dist/tooling/cli/development/candidate.d.ts +0 -25
  354. package/dist/tooling/cli/development/candidate.js +0 -176
  355. package/dist/tooling/cli/development/deployment.d.ts +0 -16
  356. package/dist/tooling/cli/development/deployment.js +0 -39
  357. package/dist/tooling/cli/development/develop.d.ts +0 -11
  358. package/dist/tooling/cli/development/develop.js +0 -243
  359. package/dist/tooling/cli/development/lease.d.ts +0 -18
  360. package/dist/tooling/cli/development/lease.js +0 -163
  361. package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
  362. package/dist/tooling/cli/development/lifecycle.js +0 -43
  363. package/dist/tooling/cli/development/project-imports.d.ts +0 -22
  364. package/dist/tooling/cli/development/project-imports.js +0 -39
  365. package/dist/tooling/cli/development/project-lock.d.ts +0 -16
  366. package/dist/tooling/cli/development/project-lock.js +0 -41
  367. package/dist/tooling/cli/development/rebuild.d.ts +0 -13
  368. package/dist/tooling/cli/development/rebuild.js +0 -58
  369. package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
  370. package/dist/tooling/cli/development/release-evidence.js +0 -10
  371. package/dist/tooling/cli/development/report.d.ts +0 -6
  372. package/dist/tooling/cli/development/report.js +0 -14
  373. package/dist/tooling/cli/development/session-file.d.ts +0 -53
  374. package/dist/tooling/cli/development/session-file.js +0 -337
  375. package/dist/tooling/cli/development/source-watch.d.ts +0 -14
  376. package/dist/tooling/cli/development/source-watch.js +0 -140
  377. package/dist/tooling/cli/development/sources.d.ts +0 -7
  378. package/dist/tooling/cli/development/sources.js +0 -48
  379. package/dist/tooling/cli/development/target-lock.d.ts +0 -16
  380. package/dist/tooling/cli/development/target-lock.js +0 -68
  381. package/dist/tooling/cli/development/view.d.ts +0 -28
  382. package/dist/tooling/cli/development/view.js +0 -151
  383. package/dist/tooling/cli/environment-release.d.ts +0 -21
  384. package/dist/tooling/cli/environment-release.js +0 -46
  385. package/dist/tooling/cli/evidence.d.ts +0 -11
  386. package/dist/tooling/cli/evidence.js +0 -53
  387. package/dist/tooling/cli/installation/index.d.ts +0 -2
  388. package/dist/tooling/cli/installation/index.js +0 -1
  389. package/dist/tooling/cli/installation/observation.d.ts +0 -10
  390. package/dist/tooling/cli/installation/observation.js +0 -44
  391. package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
  392. package/dist/tooling/cli/installation/reconcile.js +0 -122
  393. /package/dist/application/{application.js → domain.js} +0 -0
  394. /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
  395. /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
  396. /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
  397. /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
  398. /package/dist/deployment/adapter/{prepare/artifact.js → legacy/adapter.js} +0 -0
  399. /package/dist/deployment/adapter/{prepare → legacy/deploy}/context.js +0 -0
  400. /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
  401. /package/dist/deployment/release/{publication → served}/routes.js +0 -0
  402. /package/dist/deployment/release/{publication → served}/views.js +0 -0
  403. /package/dist/execution/service/{publication → serving}/index.js +0 -0
@@ -0,0 +1,77 @@
1
+ import { verifyBundle } from '../../deployment/index.js';
2
+ /**
3
+ * The distinct bundlers of a Project's Environments, in declaration order. Environments whose
4
+ * adapters declare one bundler object share its build. Two copies of one bundler (two installed
5
+ * versions of its package) are two bundlers even under one id and version, since their code can
6
+ * differ.
7
+ */
8
+ export function projectBundlers(project) {
9
+ const bundlers = new Map();
10
+ for (const [name, environment] of Object.entries(project.environments)) {
11
+ const adapter = environment.deployment.adapter;
12
+ const environments = bundlers.get(adapter.bundler) ?? [];
13
+ environments.push(Object.freeze({ name, adapter: `${adapter.name}@${adapter.version}` }));
14
+ bundlers.set(adapter.bundler, environments);
15
+ }
16
+ return Object.freeze([...bundlers].map(([bundler, environments]) => Object.freeze({ bundler, environments: Object.freeze(environments) })));
17
+ }
18
+ /** Bundle one Build without any Environment and identify the bytes by their build digest. */
19
+ export async function bundleBuild(input) {
20
+ const source = await input.bundler.bundle({
21
+ projectDir: input.projectDir,
22
+ build: input.build,
23
+ runtime: input.runtime,
24
+ signal: input.signal,
25
+ });
26
+ return verifyBundle({
27
+ build: input.build,
28
+ runtime: input.runtime,
29
+ bundler: input.bundler,
30
+ source,
31
+ });
32
+ }
33
+ /**
34
+ * One entry per distinct build: copies of one bundler that produced the same bytes give one entry,
35
+ * copies that produced different bytes give one entry each.
36
+ */
37
+ export function buildResult(build, bundles) {
38
+ const builds = new Map();
39
+ for (const bundle of bundles) {
40
+ const { id, version } = bundle.manifest.bundler;
41
+ const key = JSON.stringify([id, version, bundle.digest]);
42
+ if (builds.has(key))
43
+ continue;
44
+ builds.set(key, Object.freeze({ bundler: Object.freeze({ id, version }), digest: bundle.digest }));
45
+ }
46
+ return Object.freeze({
47
+ format: 'astrale.build-result',
48
+ version: 1,
49
+ origin: build.schema.compiled.root.origin,
50
+ schema: Object.freeze({ revision: build.schema.compiled.root.revision }),
51
+ builds: Object.freeze([...builds.values()]),
52
+ });
53
+ }
54
+ /**
55
+ * A warning for every bundler id and version whose copies produced different bytes: each copy's
56
+ * Environments deploy their own build, so the Project has more than one build for that bundler.
57
+ */
58
+ export function bundlerCopyWarnings(built) {
59
+ const byBundler = new Map();
60
+ for (const { source, bundle } of built) {
61
+ const { id, version } = bundle.manifest.bundler;
62
+ const name = `${id}@${version}`;
63
+ const digests = byBundler.get(name) ?? new Map();
64
+ const environments = digests.get(bundle.digest) ?? [];
65
+ environments.push(...source.environments.map((environment) => `${environment.name}: ${environment.adapter}`));
66
+ digests.set(bundle.digest, environments);
67
+ byBundler.set(name, digests);
68
+ }
69
+ return Object.freeze([...byBundler]
70
+ .filter(([, digests]) => digests.size > 1)
71
+ .map(([name, digests]) => `Bundler ${name} gives ${digests.size} build digests for this tree: ` +
72
+ [...digests]
73
+ .map(([digest, environments]) => `${digest} (${environments.join(', ')})`)
74
+ .join('; ') +
75
+ '. These adapters load different copies of the bundler; align their versions ' +
76
+ '(`astrale-domain upgrade`) so that it gives one build.'));
77
+ }
@@ -10,6 +10,5 @@ export type BunOutcome = {
10
10
  };
11
11
  /** Re-enter the published executable under Bun only when authored TypeScript must be imported. */
12
12
  export declare function runWithBun(executable: string, argv: readonly string[]): Promise<BunOutcome>;
13
- export declare function isolateDevelopmentProcessGroup(argv: readonly string[], platform?: NodeJS.Platform): boolean;
14
13
  /** Prefer the generated project's exact Bun package binary over an ambient executable or shim. */
15
14
  export declare function resolveBunExecutable(cwd: string): string;
@@ -14,10 +14,6 @@ export function runWithBun(executable, argv) {
14
14
  return new Promise((resolve, reject) => {
15
15
  const child = spawn(resolveBunExecutable(process.cwd()), [executable, ...argv], {
16
16
  stdio: 'inherit',
17
- // Keep a long-lived development runtime outside the launcher's terminal
18
- // process group. The launcher receives Ctrl-C, forwards it exactly once,
19
- // and remains alive until Bun finishes provider and Kernel cleanup.
20
- detached: isolateDevelopmentProcessGroup(argv),
21
17
  });
22
18
  const handlers = FORWARDED_SIGNALS.map((signal) => [signal, () => child.kill(signal)]);
23
19
  for (const [signal, handler] of handlers)
@@ -44,9 +40,6 @@ export function runWithBun(executable, argv) {
44
40
  });
45
41
  });
46
42
  }
47
- export function isolateDevelopmentProcessGroup(argv, platform = process.platform) {
48
- return platform !== 'win32' && argv[0] === 'dev';
49
- }
50
43
  /** Prefer the generated project's exact Bun package binary over an ambient executable or shim. */
51
44
  export function resolveBunExecutable(cwd) {
52
45
  const projectRequire = createRequire(join(cwd, 'package.json'));
@@ -0,0 +1,35 @@
1
+ import type { DeploymentCommitV1 } from '../../deployment/address/index.js';
2
+ /**
3
+ * The commit provenance a canonical deploy declares in its deployment record (CT18 `commit`): the
4
+ * commit of the repository the Project lives in, whether the working tree holds changes that
5
+ * commit does not, and the last release of the Domain before it, as `git describe` finds it.
6
+ *
7
+ * - `dirty` covers tracked changes and untracked files, over the whole working tree; ignored files
8
+ * never count. Unlike `git describe --dirty`, an untracked file counts, since a build can import
9
+ * it.
10
+ * - `base` is the nearest release tag of the package the Domain is released from: the
11
+ * release-please package that holds the Domain's runtime module (see {@link releaseTagPrefixes}).
12
+ * The tag prefix is stripped, and a tag whose rest is not a canonical SemVer version is left
13
+ * out, so the record never carries a base a deployment name would refuse (AM-57). A Domain no
14
+ * release line holds declares no base: it is never given another package's version.
15
+ * - Outside a git repository, without git, or in a repository whose commits are not SHA-1, the
16
+ * deploy declares no commit (`null`); a deploy never fails for want of provenance.
17
+ */
18
+ export declare function deploymentCommit(input: {
19
+ readonly projectDir: string;
20
+ /** The Domain's runtime module, as the Project's `entrypoints.runtime` resolves it. */
21
+ readonly runtimeModule: string;
22
+ readonly signal: AbortSignal;
23
+ }): Promise<DeploymentCommitV1 | null>;
24
+ /**
25
+ * Whether a remote-tracking branch of the repository already holds a commit. A Publication records
26
+ * the commit it was built from, and release-please computes the next number from the pushed
27
+ * history: publishing a commit nobody pushed risks the same number being computed again (tech
28
+ * Versioning [.73872]). Nothing when git cannot tell. Reads the local remote-tracking refs only,
29
+ * never the network.
30
+ */
31
+ export declare function commitPushed(input: {
32
+ readonly projectDir: string;
33
+ readonly sha: string;
34
+ readonly signal: AbortSignal;
35
+ }): Promise<boolean | undefined>;
@@ -0,0 +1,235 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { isVersion } from '../../platform/versioning/version.js';
5
+ /** A commit as `DeploymentCommitV1` holds it: the full SHA-1 git prints, in lower case. */
6
+ const SHA = /^[0-9a-f]{40}$/u;
7
+ /** `git describe --long` output: `<tag>-<commits since the tag>-g<abbreviated commit>`. */
8
+ const DESCRIBED = /^(?<tag>.+)-(?<distance>\d+)-g[0-9a-f]+$/u;
9
+ /** A tag prefix this module can hand to `git describe --match` without escaping a glob. */
10
+ const LITERAL_PREFIX = /^[^*?[\]\\\s]*$/u;
11
+ /** The configuration files release-please reads at a repository root, the dotted name first. */
12
+ const RELEASE_PLEASE_CONFIGS = ['.release-please-config.json', 'release-please-config.json'];
13
+ const GIT_TIMEOUT_MS = 30_000;
14
+ /**
15
+ * The commit provenance a canonical deploy declares in its deployment record (CT18 `commit`): the
16
+ * commit of the repository the Project lives in, whether the working tree holds changes that
17
+ * commit does not, and the last release of the Domain before it, as `git describe` finds it.
18
+ *
19
+ * - `dirty` covers tracked changes and untracked files, over the whole working tree; ignored files
20
+ * never count. Unlike `git describe --dirty`, an untracked file counts, since a build can import
21
+ * it.
22
+ * - `base` is the nearest release tag of the package the Domain is released from: the
23
+ * release-please package that holds the Domain's runtime module (see {@link releaseTagPrefixes}).
24
+ * The tag prefix is stripped, and a tag whose rest is not a canonical SemVer version is left
25
+ * out, so the record never carries a base a deployment name would refuse (AM-57). A Domain no
26
+ * release line holds declares no base: it is never given another package's version.
27
+ * - Outside a git repository, without git, or in a repository whose commits are not SHA-1, the
28
+ * deploy declares no commit (`null`); a deploy never fails for want of provenance.
29
+ */
30
+ export async function deploymentCommit(input) {
31
+ const head = await git(input.projectDir, input.signal, ['rev-parse', '--verify', 'HEAD']);
32
+ if (head === undefined || !SHA.test(head))
33
+ return null;
34
+ const status = await git(input.projectDir, input.signal, [
35
+ 'status',
36
+ '--porcelain',
37
+ '--untracked-files=normal',
38
+ ]);
39
+ if (status === undefined)
40
+ return null;
41
+ const prefixes = await releaseTagPrefixes(input);
42
+ const base = prefixes === undefined ? undefined : await describedBase(input, prefixes);
43
+ return Object.freeze({
44
+ sha: head,
45
+ dirty: status.length > 0,
46
+ ...(base === undefined ? {} : { base }),
47
+ });
48
+ }
49
+ /**
50
+ * Whether a remote-tracking branch of the repository already holds a commit. A Publication records
51
+ * the commit it was built from, and release-please computes the next number from the pushed
52
+ * history: publishing a commit nobody pushed risks the same number being computed again (tech
53
+ * Versioning [.73872]). Nothing when git cannot tell. Reads the local remote-tracking refs only,
54
+ * never the network.
55
+ */
56
+ export async function commitPushed(input) {
57
+ if (!SHA.test(input.sha))
58
+ return undefined;
59
+ const branches = await git(input.projectDir, input.signal, [
60
+ 'branch',
61
+ '--remotes',
62
+ '--contains',
63
+ input.sha,
64
+ '--format=%(refname)',
65
+ ]);
66
+ return branches === undefined ? undefined : branches.length > 0;
67
+ }
68
+ /**
69
+ * The prefixes of the release tags of the package the Domain is released from, or nothing when
70
+ * no release line holds the Domain.
71
+ *
72
+ * In a repository with a release-please configuration at its root, that package is the configured
73
+ * package whose path is the nearest one holding the runtime module's directory, unless one of its
74
+ * `exclude-paths` holds it. Its tags are named as release-please names them: `<component>`, its
75
+ * `tag-separator` (`-`) and `v` before the version, without the component when
76
+ * `include-component-in-tag` is false and without the `v` when `include-v-in-tag` is false; the
77
+ * component is the package's `component`, else its unscoped `package-name`, else the unscoped name
78
+ * in its `package.json`. Root-level options are the packages' defaults, as in release-please.
79
+ *
80
+ * Without a configuration, the tags are those `npm version` writes (`v<version>`) and
81
+ * `<name>-v<version>`, where the name is the unscoped one in the Project's `package.json`.
82
+ */
83
+ async function releaseTagPrefixes(input) {
84
+ const root = await git(input.projectDir, input.signal, ['rev-parse', '--show-toplevel']);
85
+ if (root === undefined)
86
+ return undefined;
87
+ const config = await releasePleaseConfig(root);
88
+ if (config === undefined) {
89
+ const name = unscoped(await packageName(input.projectDir));
90
+ return literal(['v', ...(name === undefined ? [] : [`${name}-v`])]);
91
+ }
92
+ // Git names the module's directory relative to its repository, symbolic links resolved.
93
+ const located = await git(dirname(input.runtimeModule), input.signal, [
94
+ 'rev-parse',
95
+ '--show-toplevel',
96
+ '--show-prefix',
97
+ ]);
98
+ const [moduleRoot, prefix = ''] = located?.split('\n') ?? [];
99
+ if (moduleRoot !== root)
100
+ return undefined;
101
+ const path = prefix.replace(/\/$/u, '');
102
+ const found = releasePackage(config, path);
103
+ if (found === undefined)
104
+ return undefined;
105
+ const option = (key) => found.options[key] ?? config[key];
106
+ const v = option('include-v-in-tag') === false ? '' : 'v';
107
+ if (option('include-component-in-tag') === false)
108
+ return literal([v]);
109
+ const separator = option('tag-separator') ?? '-';
110
+ const component = option('component') ??
111
+ unscoped(option('package-name')) ??
112
+ unscoped(await packageName(join(root, found.path)));
113
+ if (typeof component !== 'string' || component.length === 0 || typeof separator !== 'string') {
114
+ return undefined;
115
+ }
116
+ return literal([`${component}${separator}${v}`]);
117
+ }
118
+ /**
119
+ * The configured package that holds `path` (relative to the repository root, `''` for the root),
120
+ * the nearest one first, or nothing when none holds it or its `exclude-paths` do.
121
+ */
122
+ function releasePackage(config, path) {
123
+ const packages = config.packages;
124
+ if (packages === null || typeof packages !== 'object' || Array.isArray(packages))
125
+ return undefined;
126
+ let found;
127
+ for (const [key, options] of Object.entries(packages)) {
128
+ if (options === null || typeof options !== 'object' || Array.isArray(options))
129
+ continue;
130
+ const packagePath = key === '.' ? '' : key.replace(/^\.\//u, '').replace(/\/$/u, '');
131
+ if (!holds(packagePath, path))
132
+ continue;
133
+ if (found === undefined || packagePath.length > found.path.length) {
134
+ found = { path: packagePath, options: options };
135
+ }
136
+ }
137
+ if (found === undefined)
138
+ return undefined;
139
+ const excluded = found.options['exclude-paths'] ?? config['exclude-paths'];
140
+ if (Array.isArray(excluded)) {
141
+ for (const exclusion of excluded) {
142
+ if (typeof exclusion !== 'string')
143
+ continue;
144
+ const relative = exclusion.replace(/^\.\//u, '').replace(/\/$/u, '');
145
+ if (holds(found.path === '' ? relative : `${found.path}/${relative}`, path))
146
+ return undefined;
147
+ }
148
+ }
149
+ return found;
150
+ }
151
+ /** Whether the directory `outer` holds `inner`, both relative to the repository root. */
152
+ function holds(outer, inner) {
153
+ return outer === '' || inner === outer || inner.startsWith(`${outer}/`);
154
+ }
155
+ /** The canonical version and distance of the nearest tag with one of these prefixes, or nothing. */
156
+ async function describedBase(input, prefixes) {
157
+ const described = await git(input.projectDir, input.signal, [
158
+ 'describe',
159
+ '--tags',
160
+ '--long',
161
+ '--abbrev=40',
162
+ ...prefixes.flatMap((prefix) => ['--match', `${prefix}[0-9]*`]),
163
+ 'HEAD',
164
+ ]);
165
+ const match = described === undefined ? null : DESCRIBED.exec(described);
166
+ if (match?.groups === undefined)
167
+ return undefined;
168
+ const tag = match.groups.tag;
169
+ const distance = Number(match.groups.distance);
170
+ const version = prefixes
171
+ .filter((prefix) => tag.startsWith(prefix))
172
+ .map((prefix) => tag.slice(prefix.length))
173
+ .find((rest) => isVersion(rest));
174
+ if (version === undefined || !Number.isSafeInteger(distance))
175
+ return undefined;
176
+ return Object.freeze({ version, distance });
177
+ }
178
+ /** The repository's release-please configuration, if its root has one that is a JSON object. */
179
+ async function releasePleaseConfig(root) {
180
+ for (const name of RELEASE_PLEASE_CONFIGS) {
181
+ const config = await readJson(join(root, name));
182
+ if (config !== undefined)
183
+ return config;
184
+ }
185
+ return undefined;
186
+ }
187
+ /** The `name` of the `package.json` in a directory, if it has one. */
188
+ async function packageName(directory) {
189
+ return (await readJson(join(directory, 'package.json')))?.name;
190
+ }
191
+ /** A package name without its npm scope, as release-please makes a component of it. */
192
+ function unscoped(name) {
193
+ if (typeof name !== 'string' || name.length === 0)
194
+ return undefined;
195
+ return name.startsWith('@') ? name.slice(name.indexOf('/') + 1) || undefined : name;
196
+ }
197
+ /** The prefixes, unless one would be read as a glob by `git describe --match`. */
198
+ function literal(prefixes) {
199
+ return prefixes.every((prefix) => LITERAL_PREFIX.test(prefix)) ? prefixes : undefined;
200
+ }
201
+ async function readJson(path) {
202
+ let value;
203
+ try {
204
+ value = JSON.parse(await readFile(path, 'utf8'));
205
+ }
206
+ catch {
207
+ return undefined;
208
+ }
209
+ return value !== null && typeof value === 'object' && !Array.isArray(value)
210
+ ? value
211
+ : undefined;
212
+ }
213
+ /**
214
+ * Run one read-only git command in a directory and return its trimmed stdout, or nothing when git
215
+ * is missing or the command fails. An interrupted deploy still stops here.
216
+ */
217
+ function git(cwd, signal, args) {
218
+ signal.throwIfAborted();
219
+ return new Promise((resolve, reject) => {
220
+ execFile('git', [...args], {
221
+ cwd,
222
+ // Never take the index lock: a deploy only reads the repository.
223
+ env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' },
224
+ signal,
225
+ timeout: GIT_TIMEOUT_MS,
226
+ windowsHide: true,
227
+ }, (error, stdout) => {
228
+ if (signal.aborted) {
229
+ reject(signal.reason);
230
+ return;
231
+ }
232
+ resolve(error === null ? stdout.trim() : undefined);
233
+ });
234
+ });
235
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * The deploy mode of one Environment for one command (CT33), chosen by the configuration itself:
3
+ * an unchanged configuration keeps its mode, and so its behaviour, across an SDK upgrade, as long as
4
+ * that mode still has a consumer (AM-16, AM-72).
5
+ *
6
+ * - `canonical`: an immutable deployment of one sealed release through the adapter's
7
+ * `deployRelease`, with a key generated for it, and no call to any instance.
8
+ * - `legacy-direct`: today's stable target, replaced in place through `prepare` and `deploy`, which
9
+ * serves a v3 Publication only. Its `reasons` name what selected it.
10
+ * - `refused`: a shape no deploy of this SDK serves, refused before any effect. Each refusal
11
+ * carries the configuration or command to write instead.
12
+ *
13
+ * A deploy never installs, so two shapes are refused before a mode is selected at all: an
14
+ * Environment that declares `installation` by `defineProject`, and `--deploy-only` by the
15
+ * command-line parser (AM-72).
16
+ */
17
+ export type DeployMode = {
18
+ readonly kind: 'canonical';
19
+ } | {
20
+ readonly kind: 'legacy-direct';
21
+ readonly reasons: readonly LegacyDirectReason[];
22
+ } | {
23
+ readonly kind: 'refused';
24
+ readonly refusals: readonly DeployRefusal[];
25
+ };
26
+ /** What puts an Environment on the legacy direct-mode path. */
27
+ export type LegacyDirectReason =
28
+ /** An adapter-cloudflare parameter of direct mode. */
29
+ {
30
+ readonly reason: 'direct-parameter';
31
+ readonly parameter: CloudflareDirectParameter;
32
+ }
33
+ /** adapter-cloudflare without a dispatch `namespace`: direct mode is its default. */
34
+ | {
35
+ readonly reason: 'no-namespace';
36
+ }
37
+ /** An adapter that declares no `deployRelease`: the contract before adapter interface v2. */
38
+ | {
39
+ readonly reason: 'no-deploy-release';
40
+ };
41
+ export type CloudflareDirectParameter = 'route' | 'workerName' | 'identityIssuer' | 'addressing' | 'signingIdentity';
42
+ export interface DeployRefusal {
43
+ readonly reason: 'astrale-instance' | 'astrale-signing-identity' | 'mixed-parameters' | 'scheduled-triggers' | 'publish-legacy-direct';
44
+ /** The configuration or command to write instead, for the author. */
45
+ readonly guidance: string;
46
+ }
47
+ /**
48
+ * The commands that select a deploy mode. `publish` names only an immutable deployment, so it
49
+ * refuses every Environment that is not canonical (CT33, R-G03).
50
+ */
51
+ export type DeployModeCommand = 'deploy' | 'publish';
52
+ /**
53
+ * Select the deploy mode of one Environment (CT33). It reads the configuration and the command
54
+ * only, and has no effect.
55
+ *
56
+ * A refusal wins over every other reason. adapter-astrale deploys immutable deployments only
57
+ * (`deployRelease`): its removed instance mode's `instance` and `signingIdentity` are refused
58
+ * before any effect, since their one consumer pins an older SDK (AM-72). Otherwise the Environment
59
+ * is on the legacy direct-mode path when adapter-cloudflare names a direct-mode parameter or no
60
+ * `namespace`, or when its adapter declares no `deployRelease`. Everything else is canonical,
61
+ * and `publish` refuses the legacy direct-mode path: a stable target serves no release, so no
62
+ * version can name it.
63
+ *
64
+ * Within canonical adapter-cloudflare (with `namespace`), a direct-mode parameter is refused
65
+ * rather than silently selecting either mode, and so is `wrangler.triggers`: an immutable
66
+ * deployment runs no cron of its own (D13). The bundling-affecting `wrangler` keys are refused by
67
+ * adapter-cloudflare itself for every Environment (AM-51).
68
+ */
69
+ export declare function selectDeployMode(input: {
70
+ readonly command: DeployModeCommand;
71
+ readonly environment: string;
72
+ /** The Environment's definition, of which selection reads only the adapter and its parameters. */
73
+ readonly definition: {
74
+ readonly deployment: {
75
+ readonly adapter: {
76
+ readonly name: string;
77
+ readonly deployRelease?: unknown;
78
+ };
79
+ readonly parameters: object;
80
+ };
81
+ };
82
+ }): DeployMode;
@@ -0,0 +1,135 @@
1
+ import { installCommand } from '../../project/install-command.js';
2
+ /** The adapter names of the first-party adapters whose parameters CT33 classifies. */
3
+ const CLOUDFLARE = 'cloudflare';
4
+ const ASTRALE = 'astrale';
5
+ /** The parameters that named the stable Service of adapter-astrale's removed instance mode. */
6
+ const ASTRALE_SERVICE_PARAMETERS = ['serviceKey', 'name'];
7
+ const CLOUDFLARE_DIRECT_PARAMETERS = [
8
+ 'route',
9
+ 'workerName',
10
+ 'identityIssuer',
11
+ 'addressing',
12
+ 'signingIdentity',
13
+ ];
14
+ /**
15
+ * Select the deploy mode of one Environment (CT33). It reads the configuration and the command
16
+ * only, and has no effect.
17
+ *
18
+ * A refusal wins over every other reason. adapter-astrale deploys immutable deployments only
19
+ * (`deployRelease`): its removed instance mode's `instance` and `signingIdentity` are refused
20
+ * before any effect, since their one consumer pins an older SDK (AM-72). Otherwise the Environment
21
+ * is on the legacy direct-mode path when adapter-cloudflare names a direct-mode parameter or no
22
+ * `namespace`, or when its adapter declares no `deployRelease`. Everything else is canonical,
23
+ * and `publish` refuses the legacy direct-mode path: a stable target serves no release, so no
24
+ * version can name it.
25
+ *
26
+ * Within canonical adapter-cloudflare (with `namespace`), a direct-mode parameter is refused
27
+ * rather than silently selecting either mode, and so is `wrangler.triggers`: an immutable
28
+ * deployment runs no cron of its own (D13). The bundling-affecting `wrangler` keys are refused by
29
+ * adapter-cloudflare itself for every Environment (AM-51).
30
+ */
31
+ export function selectDeployMode(input) {
32
+ const { command, environment, definition } = input;
33
+ const { adapter } = definition.deployment;
34
+ const parameters = definition.deployment.parameters;
35
+ const refusals = [];
36
+ const reasons = [];
37
+ const releases = 'deployRelease' in adapter && typeof adapter.deployRelease === 'function';
38
+ if (adapter.name === ASTRALE && releases) {
39
+ if (declares(parameters, 'instance')) {
40
+ refusals.push({
41
+ reason: 'astrale-instance',
42
+ guidance: astraleInstanceGuidance(parameters, environment),
43
+ });
44
+ }
45
+ if (declares(parameters, 'signingIdentity')) {
46
+ refusals.push({
47
+ reason: 'astrale-signing-identity',
48
+ guidance: 'astrale({ signingIdentity }) is no longer accepted: each deployment gets a signing key ' +
49
+ 'generated when it is deployed. Remove `signingIdentity`.',
50
+ });
51
+ }
52
+ }
53
+ if (adapter.name === CLOUDFLARE) {
54
+ const direct = CLOUDFLARE_DIRECT_PARAMETERS.filter((name) => declares(parameters, name));
55
+ if (declares(parameters, 'namespace')) {
56
+ if (direct.length > 0) {
57
+ refusals.push({
58
+ reason: 'mixed-parameters',
59
+ guidance: `cloudflare({ namespace }) deploys immutable deployments and cannot also name ` +
60
+ `${direct.join(', ')}, which select the legacy direct mode. Keep \`namespace\` and ` +
61
+ `remove ${direct.join(', ')}, or remove \`namespace\` to stay on the direct mode.`,
62
+ });
63
+ }
64
+ const wrangler = parameters.wrangler;
65
+ if (wrangler !== undefined && declares(wrangler, 'triggers')) {
66
+ refusals.push({
67
+ reason: 'scheduled-triggers',
68
+ guidance: 'cloudflare({ namespace }) refuses `wrangler.triggers`: an immutable deployment runs ' +
69
+ 'no cron of its own. Remove `wrangler.triggers`, or keep the cron on a direct-mode ' +
70
+ 'Environment.',
71
+ });
72
+ }
73
+ }
74
+ else {
75
+ reasons.push(...direct.map((parameter) => ({ reason: 'direct-parameter', parameter })), { reason: 'no-namespace' });
76
+ }
77
+ }
78
+ if (!releases)
79
+ reasons.push({ reason: 'no-deploy-release' });
80
+ if (refusals.length > 0)
81
+ return Object.freeze({ kind: 'refused', refusals: freeze(refusals) });
82
+ if (reasons.length > 0 && command === 'publish') {
83
+ return Object.freeze({
84
+ kind: 'refused',
85
+ refusals: freeze([
86
+ { reason: 'publish-legacy-direct', guidance: publishGuidance(environment, reasons) },
87
+ ]),
88
+ });
89
+ }
90
+ if (reasons.length > 0)
91
+ return Object.freeze({ kind: 'legacy-direct', reasons: freeze(reasons) });
92
+ return Object.freeze({ kind: 'canonical' });
93
+ }
94
+ /**
95
+ * How an adapter-astrale Environment of the removed instance mode deploys now: without `instance`
96
+ * (nor `serviceKey` and `name`, which named its stable Service), then installed by URL on the
97
+ * instance it used to deploy through.
98
+ */
99
+ function astraleInstanceGuidance(parameters, environment) {
100
+ const instance = String(parameters.instance);
101
+ const service = ASTRALE_SERVICE_PARAMETERS.filter((name) => declares(parameters, name));
102
+ const removed = service.length === 0
103
+ ? 'Remove `instance`'
104
+ : `Remove \`instance\` with ${service.map((name) => `\`${name}\``).join(' and ')}, ` +
105
+ `which named its stable Service`;
106
+ return (`astrale({ instance: '${instance}' }) deployed through that instance's Services, which no ` +
107
+ `longer hosts deployments. ${removed}: \`astrale-domain deploy ${environment}\` ` +
108
+ `makes an immutable deployment on Admin's Services, and \`${installCommand(instance)}\` ` +
109
+ 'installs it.');
110
+ }
111
+ /**
112
+ * Why a legacy direct-mode Environment cannot be published, and the configuration that makes it
113
+ * publishable: a version names an immutable deployment's release, which a stable target never
114
+ * serves.
115
+ */
116
+ function publishGuidance(environment, reasons) {
117
+ const deploys = `\`astrale-domain publish ${environment}\` names an immutable deployment's release, and ${environment} deploys`;
118
+ if (reasons.some(({ reason }) => reason === 'no-deploy-release')) {
119
+ return (`${deploys} through an adapter without deployRelease, which replaces a stable target in ` +
120
+ 'place and serves no release. Use an adapter that implements deployRelease (adapter ' +
121
+ "interface v2), such as astrale() on Admin's Services.");
122
+ }
123
+ const direct = reasons.flatMap((reason) => reason.reason === 'direct-parameter' ? [reason.parameter] : []);
124
+ return (`${deploys} on cloudflare()'s legacy direct mode, which serves no release. Deploy it into a ` +
125
+ 'dispatch namespace with cloudflare({ namespace })' +
126
+ (direct.length === 0 ? '' : ` and remove ${direct.join(', ')}`) +
127
+ ", or on Admin's Services with astrale().");
128
+ }
129
+ /** A parameter is declared when its value is not `undefined`, as optional adapter parameters read. */
130
+ function declares(parameters, name) {
131
+ return Object.hasOwn(parameters, name) && parameters[name] !== undefined;
132
+ }
133
+ function freeze(values) {
134
+ return Object.freeze(values.map((value) => Object.freeze(value)));
135
+ }