@synopackageland/cli 0.3.10 → 0.4.0

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 (280) hide show
  1. package/README.md +20 -9
  2. package/dist/bin.js +1 -2
  3. package/dist/build-spk/generator.d.ts +0 -3
  4. package/dist/build-spk/generator.js +135 -287
  5. package/dist/build-spk/native-lifecycle.js +0 -3
  6. package/dist/build-spk/native-payload.js +0 -1
  7. package/dist/cli.js +171 -151
  8. package/dist/compose/analyze.d.ts +1 -2
  9. package/dist/compose/analyze.js +5 -48
  10. package/dist/contract/unsupported-types.d.ts +10 -0
  11. package/dist/contract/unsupported-types.js +49 -0
  12. package/dist/contract/validate.js +25 -2
  13. package/dist/contract/web-launch.js +0 -2
  14. package/dist/deploy/deploy.d.ts +1 -4
  15. package/dist/deploy/deploy.js +45 -156
  16. package/dist/deploy/homes-values.js +1 -1
  17. package/dist/deploy/plan.d.ts +18 -0
  18. package/dist/deploy/plan.js +54 -0
  19. package/dist/deploy/spk-version.d.ts +2 -14
  20. package/dist/deploy/spk-version.js +25 -111
  21. package/dist/dev.d.ts +1 -3
  22. package/dist/dev.js +14 -28
  23. package/dist/error-registry.js +810 -862
  24. package/dist/host/dsm-client.js +12 -272
  25. package/dist/host/dsm-port-profile.d.ts +0 -1
  26. package/dist/host/dsm-port-profile.js +0 -2
  27. package/dist/host/types.d.ts +1 -83
  28. package/dist/index.d.ts +0 -9
  29. package/dist/index.js +0 -6
  30. package/dist/info.d.ts +0 -1
  31. package/dist/info.js +3 -10
  32. package/dist/init.d.ts +11 -1
  33. package/dist/init.js +112 -4
  34. package/dist/log.js +2 -3
  35. package/dist/native/validate.js +0 -1
  36. package/dist/standalone/binary.d.ts +9 -0
  37. package/dist/standalone/binary.js +67 -0
  38. package/dist/standalone/build.d.ts +25 -0
  39. package/dist/standalone/build.js +108 -0
  40. package/dist/standalone/dsm-window.d.ts +26 -0
  41. package/dist/standalone/dsm-window.js +251 -0
  42. package/dist/standalone/helper.d.ts +31 -0
  43. package/dist/standalone/helper.js +104 -0
  44. package/dist/standalone/i18n.d.ts +28 -0
  45. package/dist/standalone/i18n.js +161 -0
  46. package/dist/standalone/inspect-spk.d.ts +21 -0
  47. package/dist/standalone/inspect-spk.js +160 -0
  48. package/dist/standalone/manifest.d.ts +71 -0
  49. package/dist/standalone/manifest.js +276 -0
  50. package/dist/standalone/root-messages.d.ts +7 -0
  51. package/dist/standalone/root-messages.js +250 -0
  52. package/dist/standalone/root-ops.d.ts +42 -0
  53. package/dist/standalone/root-ops.js +101 -0
  54. package/dist/standalone/root-window.d.ts +35 -0
  55. package/dist/standalone/root-window.js +290 -0
  56. package/dist/standalone/spk.d.ts +22 -0
  57. package/dist/standalone/spk.js +205 -0
  58. package/dist/templates/binary/synology-app.yaml +7 -0
  59. package/dist/templates/hello-files/compose.yaml +0 -1
  60. package/dist/templates/hello-web/compose.yaml +13 -10
  61. package/dist/templates/hello-web/html/app.js +1 -23
  62. package/dist/templates/hello-web/html/index.html +1 -3
  63. package/dist/templates/hello-web-page/compose.yaml +13 -10
  64. package/dist/templates/hello-web-page/html/app.js +1 -23
  65. package/dist/templates/hello-web-page/html/index.html +1 -3
  66. package/dist/templates/native-go/README.md +268 -0
  67. package/dist/templates/native-go/backend/cmd/app/main.go +49 -0
  68. package/dist/templates/native-go/backend/cmd/helper/main.go +38 -0
  69. package/dist/templates/native-go/backend/go.mod +3 -0
  70. package/dist/templates/native-go/backend/internal/api/errors.go +33 -0
  71. package/dist/templates/native-go/backend/internal/api/registry.go +94 -0
  72. package/dist/templates/native-go/backend/internal/api/registry_test.go +329 -0
  73. package/dist/templates/native-go/backend/internal/api/server.go +155 -0
  74. package/dist/templates/native-go/backend/internal/app/root_none.go +9 -0
  75. package/dist/templates/native-go/backend/internal/app/routes.go +127 -0
  76. package/dist/templates/native-go/backend/internal/app/routes_test.go +167 -0
  77. package/dist/templates/native-go/backend/internal/dsm/auth.go +118 -0
  78. package/dist/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
  79. package/dist/templates/native-go/backend/internal/helper/control.go +219 -0
  80. package/dist/templates/native-go/backend/internal/helper/control_test.go +242 -0
  81. package/dist/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
  82. package/dist/templates/native-go/backend/internal/helper/peer_other.go +7 -0
  83. package/dist/templates/native-go/backend/internal/helper/process_linux.go +167 -0
  84. package/dist/templates/native-go/backend/internal/helper/process_other.go +5 -0
  85. package/dist/templates/native-go/backend/internal/helper/server_linux.go +83 -0
  86. package/dist/templates/native-go/backend/internal/helper/status.go +271 -0
  87. package/dist/templates/native-go/backend/internal/helper/status_test.go +205 -0
  88. package/dist/templates/native-go/backend/internal/helper/supervision.go +84 -0
  89. package/dist/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
  90. package/dist/templates/native-go/backend/internal/helper/supervisor_linux.go +192 -0
  91. package/dist/templates/native-go/backend/internal/helper/supervisor_linux_test.go +302 -0
  92. package/dist/templates/native-go/dsm-package.yaml +58 -0
  93. package/dist/templates/native-go/gitignore +1 -0
  94. package/dist/templates/native-go/i18n/glossary.json +662 -0
  95. package/dist/templates/native-go/i18n/messages/de.json +28 -0
  96. package/dist/templates/native-go/i18n/messages/en.json +28 -0
  97. package/dist/templates/native-go/i18n/messages/es.json +28 -0
  98. package/dist/templates/native-go/i18n/messages/fr.json +28 -0
  99. package/dist/templates/native-go/i18n/messages/it.json +28 -0
  100. package/dist/templates/native-go/i18n/messages/ja.json +28 -0
  101. package/dist/templates/native-go/i18n/messages/ko.json +28 -0
  102. package/dist/templates/native-go/i18n/messages/zh-CN.json +28 -0
  103. package/dist/templates/native-go/i18n/messages/zh-TW.json +28 -0
  104. package/dist/templates/native-go/ui/app.css +35 -0
  105. package/dist/templates/native-go/ui/app.js +94 -0
  106. package/dist/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
  107. package/dist/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
  108. package/dist/templates/native-go-better-auth/node/app.mjs +72 -0
  109. package/dist/templates/native-go-better-auth/node/build.mjs +2 -0
  110. package/dist/templates/native-go-better-auth/node/package-lock.json +862 -0
  111. package/dist/templates/native-go-better-auth/node/package.json +1 -0
  112. package/dist/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
  113. package/dist/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
  114. package/dist/templates/native-go-integration/backend/internal/app/personal.go +203 -0
  115. package/dist/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
  116. package/dist/templates/native-go-root/backend/internal/app/root.go +107 -0
  117. package/dist/templates/native-go-root/backend/internal/app/root_test.go +124 -0
  118. package/dist/templates/native-go-root/root/whoami.sh +6 -0
  119. package/dist/templates/native-go-vue/README.md +110 -0
  120. package/dist/templates/native-go-vue/frontend/DESIGN.md +78 -0
  121. package/dist/templates/native-go-vue/frontend/package-lock.json +2507 -0
  122. package/dist/templates/native-go-vue/frontend/package.json +6 -0
  123. package/dist/templates/native-go-vue/frontend/src/App.vue +132 -0
  124. package/dist/templates/native-go-vue/frontend/src/context.ts +17 -0
  125. package/dist/templates/native-go-vue/frontend/src/main.ts +26 -0
  126. package/dist/templates/native-go-vue/frontend/src/style.css +14 -0
  127. package/dist/templates/native-go-vue/frontend/test/apps.test.ts +148 -0
  128. package/dist/templates/native-go-vue/frontend/tsconfig.json +1 -0
  129. package/dist/templates/native-go-vue/frontend/vite.config.ts +8 -0
  130. package/dist/templates/native-go-vue/gitignore +2 -0
  131. package/dist/types.d.ts +1 -1
  132. package/dist/validate.js +11 -7
  133. package/package.json +3 -7
  134. package/schema/synology-app.schema.json +36 -37
  135. package/skills/SKILL.md +4 -48
  136. package/skills/reference/create.md +11 -83
  137. package/skills/reference/deploy.md +7 -78
  138. package/skills/reference/diagnose.md +4 -101
  139. package/skills/reference/files.md +5 -41
  140. package/skills/reference/identity.md +3 -29
  141. package/skills/reference/wrap.md +0 -2
  142. package/templates/binary/synology-app.yaml +7 -0
  143. package/templates/hello-files/compose.yaml +0 -1
  144. package/templates/hello-web/compose.yaml +13 -10
  145. package/templates/hello-web/html/app.js +1 -23
  146. package/templates/hello-web/html/index.html +1 -3
  147. package/templates/hello-web-page/compose.yaml +13 -10
  148. package/templates/hello-web-page/html/app.js +1 -23
  149. package/templates/hello-web-page/html/index.html +1 -3
  150. package/templates/native-go/README.md +268 -0
  151. package/templates/native-go/backend/cmd/app/main.go +49 -0
  152. package/templates/native-go/backend/cmd/helper/main.go +38 -0
  153. package/templates/native-go/backend/go.mod +3 -0
  154. package/templates/native-go/backend/internal/api/errors.go +33 -0
  155. package/templates/native-go/backend/internal/api/registry.go +94 -0
  156. package/templates/native-go/backend/internal/api/registry_test.go +329 -0
  157. package/templates/native-go/backend/internal/api/server.go +155 -0
  158. package/templates/native-go/backend/internal/app/root_none.go +9 -0
  159. package/templates/native-go/backend/internal/app/routes.go +127 -0
  160. package/templates/native-go/backend/internal/app/routes_test.go +167 -0
  161. package/templates/native-go/backend/internal/dsm/auth.go +118 -0
  162. package/templates/native-go/backend/internal/dsm/auth_test.go +139 -0
  163. package/templates/native-go/backend/internal/helper/control.go +219 -0
  164. package/templates/native-go/backend/internal/helper/control_test.go +242 -0
  165. package/templates/native-go/backend/internal/helper/peer_linux.go +44 -0
  166. package/templates/native-go/backend/internal/helper/peer_other.go +7 -0
  167. package/templates/native-go/backend/internal/helper/process_linux.go +167 -0
  168. package/templates/native-go/backend/internal/helper/process_other.go +5 -0
  169. package/templates/native-go/backend/internal/helper/server_linux.go +83 -0
  170. package/templates/native-go/backend/internal/helper/status.go +271 -0
  171. package/templates/native-go/backend/internal/helper/status_test.go +205 -0
  172. package/templates/native-go/backend/internal/helper/supervision.go +84 -0
  173. package/templates/native-go/backend/internal/helper/supervision_test.go +124 -0
  174. package/templates/native-go/backend/internal/helper/supervisor_linux.go +192 -0
  175. package/templates/native-go/backend/internal/helper/supervisor_linux_test.go +302 -0
  176. package/templates/native-go/dsm-package.yaml +58 -0
  177. package/templates/native-go/gitignore +1 -0
  178. package/templates/native-go/i18n/glossary.json +662 -0
  179. package/templates/native-go/i18n/messages/de.json +28 -0
  180. package/templates/native-go/i18n/messages/en.json +28 -0
  181. package/templates/native-go/i18n/messages/es.json +28 -0
  182. package/templates/native-go/i18n/messages/fr.json +28 -0
  183. package/templates/native-go/i18n/messages/it.json +28 -0
  184. package/templates/native-go/i18n/messages/ja.json +28 -0
  185. package/templates/native-go/i18n/messages/ko.json +28 -0
  186. package/templates/native-go/i18n/messages/zh-CN.json +28 -0
  187. package/templates/native-go/i18n/messages/zh-TW.json +28 -0
  188. package/templates/native-go/ui/app.css +35 -0
  189. package/templates/native-go/ui/app.js +94 -0
  190. package/templates/native-go-better-auth/backend/internal/app/identity.go +208 -0
  191. package/templates/native-go-better-auth/backend/internal/app/identity_test.go +113 -0
  192. package/templates/native-go-better-auth/node/app.mjs +72 -0
  193. package/templates/native-go-better-auth/node/build.mjs +2 -0
  194. package/templates/native-go-better-auth/node/package-lock.json +862 -0
  195. package/templates/native-go-better-auth/node/package.json +1 -0
  196. package/templates/native-go-better-auth/node/test/auth.test.mjs +31 -0
  197. package/templates/native-go-integration/backend/internal/app/identity_none.go +6 -0
  198. package/templates/native-go-integration/backend/internal/app/personal.go +203 -0
  199. package/templates/native-go-integration/backend/internal/app/personal_test.go +119 -0
  200. package/templates/native-go-root/backend/internal/app/root.go +107 -0
  201. package/templates/native-go-root/backend/internal/app/root_test.go +124 -0
  202. package/templates/native-go-root/root/whoami.sh +6 -0
  203. package/templates/native-go-vue/README.md +110 -0
  204. package/templates/native-go-vue/frontend/DESIGN.md +78 -0
  205. package/templates/native-go-vue/frontend/package-lock.json +2507 -0
  206. package/templates/native-go-vue/frontend/package.json +6 -0
  207. package/templates/native-go-vue/frontend/src/App.vue +132 -0
  208. package/templates/native-go-vue/frontend/src/context.ts +17 -0
  209. package/templates/native-go-vue/frontend/src/main.ts +26 -0
  210. package/templates/native-go-vue/frontend/src/style.css +14 -0
  211. package/templates/native-go-vue/frontend/test/apps.test.ts +148 -0
  212. package/templates/native-go-vue/frontend/tsconfig.json +1 -0
  213. package/templates/native-go-vue/frontend/vite.config.ts +8 -0
  214. package/templates/native-go-vue/gitignore +2 -0
  215. package/dist/attestation/app-package.d.ts +0 -86
  216. package/dist/attestation/app-package.js +0 -206
  217. package/dist/attestation/install-on-host.d.ts +0 -14
  218. package/dist/attestation/install-on-host.js +0 -52
  219. package/dist/attestation/keyring.d.ts +0 -21
  220. package/dist/attestation/keyring.js +0 -168
  221. package/dist/attestation/platform-service.d.ts +0 -70
  222. package/dist/attestation/platform-service.js +0 -250
  223. package/dist/build-spk/broker-glue.d.ts +0 -16
  224. package/dist/build-spk/broker-glue.js +0 -40
  225. package/dist/deploy/catalog-publish.d.ts +0 -3
  226. package/dist/deploy/catalog-publish.js +0 -7
  227. package/dist/doctor.d.ts +0 -22
  228. package/dist/doctor.js +0 -822
  229. package/dist/error-collector.d.ts +0 -2
  230. package/dist/error-collector.js +0 -46
  231. package/dist/host/broker-paths.d.ts +0 -1
  232. package/dist/host/broker-paths.js +0 -1
  233. package/dist/host/broker-upgrade-preflight.d.ts +0 -61
  234. package/dist/host/broker-upgrade-preflight.js +0 -156
  235. package/dist/host/digests.d.ts +0 -5
  236. package/dist/host/digests.js +0 -63
  237. package/dist/host/fake-nas.d.ts +0 -49
  238. package/dist/host/fake-nas.js +0 -193
  239. package/dist/mock-broker/bootstrap.d.ts +0 -2
  240. package/dist/mock-broker/bootstrap.js +0 -8
  241. package/dist/mock-broker/files.d.ts +0 -60
  242. package/dist/mock-broker/files.js +0 -408
  243. package/dist/mock-broker/oidc.d.ts +0 -31
  244. package/dist/mock-broker/oidc.js +0 -161
  245. package/dist/mock-broker/path.d.ts +0 -9
  246. package/dist/mock-broker/path.js +0 -50
  247. package/dist/mock-broker/server.d.ts +0 -19
  248. package/dist/mock-broker/server.js +0 -350
  249. package/dist/publish/build-ledger.d.ts +0 -22
  250. package/dist/publish/build-ledger.js +0 -26
  251. package/dist/publish/community-path.d.ts +0 -6
  252. package/dist/publish/community-path.js +0 -41
  253. package/dist/publish/curated-release.d.ts +0 -78
  254. package/dist/publish/curated-release.js +0 -883
  255. package/dist/publish/file-build-ledger.d.ts +0 -18
  256. package/dist/publish/file-build-ledger.js +0 -268
  257. package/dist/publish/github-pr.d.ts +0 -25
  258. package/dist/publish/github-pr.js +0 -85
  259. package/dist/publish/github-repo.d.ts +0 -8
  260. package/dist/publish/github-repo.js +0 -21
  261. package/dist/publish/platform-service-release.d.ts +0 -60
  262. package/dist/publish/platform-service-release.js +0 -333
  263. package/dist/publish/preflight.d.ts +0 -24
  264. package/dist/publish/preflight.js +0 -138
  265. package/dist/publish/publish.d.ts +0 -27
  266. package/dist/publish/publish.js +0 -136
  267. package/dist/publish/sync-definition.d.ts +0 -4
  268. package/dist/publish/sync-definition.js +0 -48
  269. package/dist/release-bin.d.ts +0 -2
  270. package/dist/release-bin.js +0 -23
  271. package/dist/templates/hello-web/html/sdk.js +0 -68
  272. package/dist/templates/hello-web-page/html/sdk.js +0 -68
  273. package/dist/templates/native/synology-app.yaml +0 -7
  274. package/dist/test-host.d.ts +0 -15
  275. package/dist/test-host.js +0 -37
  276. package/templates/hello-web/html/sdk.js +0 -68
  277. package/templates/hello-web-page/html/sdk.js +0 -68
  278. package/templates/native/synology-app.yaml +0 -7
  279. /package/dist/templates/{native → binary}/native.yaml +0 -0
  280. /package/templates/{native → binary}/native.yaml +0 -0
@@ -1,117 +1,31 @@
1
1
  import { loadContract } from "../contract/load.js";
2
- import { comparePackageVersions, CURATED_BUILD_OFFSET, PERSONAL_BUILD_MAX, } from "@synopackageland/package-source/index-manifest";
3
- import { fetchPackageSourceManifest, fetchPackageSourceManifestFromR2, resolvePublishTarget, } from "@synopackageland/package-source/publish-spk";
4
- import { publishBuiltSpk } from "./catalog-publish.js";
5
- import { isDevelopmentPackageIdentity } from "./identity-shared.js";
6
- const LIVE_TEST_FALLBACK_ORIGIN = "https://syno-package-source-throwaway.bidacumen.workers.dev";
7
- export class DeployPersonalBuildExhaustedError extends Error {
8
- code = "DEPLOY_PERSONAL_BUILD_EXHAUSTED";
9
- constructor() {
10
- super(`Personal Package Build range exhausted at ${PERSONAL_BUILD_MAX}`);
11
- this.name = "DeployPersonalBuildExhaustedError";
12
- }
13
- }
14
- export class DeployVersionNotAscendingError extends Error {
15
- code = "DEPLOY_VERSION_NOT_ASCENDING";
16
- constructor(contractVersion, proposedVersion, existingVersion) {
17
- super(`Contract version ${contractVersion} would produce ${proposedVersion}, which is not higher than installed package version ${existingVersion}.`);
18
- this.name = "DeployVersionNotAscendingError";
19
- }
20
- }
21
- function baseVersion(version) {
22
- const match = /^(.+)-(\d+)$/.exec(version);
23
- return match ? match[1] : version;
24
- }
25
- function buildNumber(version) {
26
- const match = /^.+-(\d+)$/.exec(version);
27
- if (!match) {
28
- return undefined;
29
- }
30
- const build = Number(match[1]);
31
- return Number.isSafeInteger(build) ? build : undefined;
32
- }
33
- function personalBuildNumber(version) {
34
- const build = buildNumber(version);
35
- return build !== undefined && build >= 1 && build <= PERSONAL_BUILD_MAX ? build : undefined;
36
- }
37
- export function resolvePersonalDeploySpkVersion(contractVersion, candidates = {}) {
38
- const base = baseVersion(contractVersion);
39
- const existingVersions = [candidates.installed, candidates.feed].filter((version) => typeof version === "string" && version.length > 0);
40
- const latestExisting = existingVersions.sort(comparePackageVersions).at(-1);
41
- let proposedVersion;
42
- if (!latestExisting || baseVersion(latestExisting) !== base) {
43
- proposedVersion = `${base}-0001`;
44
- }
45
- else {
46
- const latestBuild = buildNumber(latestExisting);
47
- if (latestBuild === undefined || latestBuild >= CURATED_BUILD_OFFSET) {
48
- throw new DeployPersonalBuildExhaustedError();
2
+ /** Increment the installed build only for the same application version. */
3
+ export function nextDeployVersion(version, installed) {
4
+ const match = /^(\d+(?:\.\d+)*)(?:-(\d+))?$/.exec(version);
5
+ if (!match)
6
+ throw new Error(`Invalid package version: ${version}`);
7
+ const base = match[1];
8
+ let build = Number(match[2] ?? 1);
9
+ if (installed) {
10
+ const previous = /^(\d+(?:\.\d+)*)(?:-(\d+))?$/.exec(installed);
11
+ if (!previous)
12
+ throw new Error(`Cannot compare installed version: ${installed}`);
13
+ const a = base.split('.').map(Number), b = previous[1].split('.').map(Number);
14
+ let order = 0;
15
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
16
+ order = (a[i] ?? 0) - (b[i] ?? 0);
17
+ if (order !== 0)
18
+ break;
49
19
  }
50
- const nextBuild = latestBuild + 1;
51
- if (nextBuild > PERSONAL_BUILD_MAX) {
52
- throw new DeployPersonalBuildExhaustedError();
53
- }
54
- proposedVersion = `${base}-${String(nextBuild).padStart(4, "0")}`;
55
- }
56
- if (candidates.installed &&
57
- comparePackageVersions(proposedVersion, candidates.installed) <= 0) {
58
- throw new DeployVersionNotAscendingError(contractVersion, proposedVersion, candidates.installed);
20
+ if (order < 0)
21
+ throw new Error(`Refusing downgrade from ${installed} to ${version}`);
22
+ if (order === 0)
23
+ build = Math.max(build, Number(previous[2] ?? 0) + 1);
59
24
  }
60
- return proposedVersion;
61
- }
62
- function latestPersonalFeedVersion(packageId, manifest) {
63
- return (manifest?.packages ?? [])
64
- .filter((entry) => entry.package === packageId)
65
- .map((entry) => entry.version)
66
- .filter((version) => personalBuildNumber(version) !== undefined)
67
- .sort(comparePackageVersions)
68
- .at(-1);
69
- }
70
- async function resolvePackageSourceManifest(origin) {
71
- try {
72
- const manifest = await fetchPackageSourceManifest(origin);
73
- if (manifest) {
74
- return manifest;
75
- }
76
- if (origin !== LIVE_TEST_FALLBACK_ORIGIN) {
77
- return fetchPackageSourceManifest(LIVE_TEST_FALLBACK_ORIGIN);
78
- }
79
- }
80
- catch {
81
- return null;
82
- }
83
- return null;
84
- }
85
- async function resolveOfflineDeploySpkVersion(project, host, packageId) {
86
- const contract = loadContract(project.contractPath).contract;
87
- const contractVersion = String(contract.version ?? "1.0.0");
88
- const installed = (await host.isPackageInstalled(packageId))
89
- ? await host.getInstalledPackageVersion?.(packageId)
90
- : undefined;
91
- return resolvePersonalDeploySpkVersion(contractVersion, { installed });
25
+ if (!Number.isSafeInteger(build) || build < 1)
26
+ throw new Error('Invalid build number');
27
+ return `${base}-${String(build).padStart(4, '0')}`;
92
28
  }
93
29
  export async function resolveDeploySpkVersion(project, host, packageId) {
94
- try {
95
- if (host.installationId !== "live-nas" || isDevelopmentPackageIdentity(packageId)) {
96
- return resolveOfflineDeploySpkVersion(project, host, packageId);
97
- }
98
- const contract = loadContract(project.contractPath).contract;
99
- const target = resolvePublishTarget();
100
- const manifest = (await fetchPackageSourceManifestFromR2(target)) ??
101
- (await resolvePackageSourceManifest(target.origin));
102
- const contractVersion = String(contract.version ?? "1.0.0");
103
- const installed = await host.getInstalledPackageVersion?.(packageId);
104
- const feed = latestPersonalFeedVersion(packageId, manifest);
105
- return resolvePersonalDeploySpkVersion(contractVersion, { installed, feed });
106
- }
107
- catch (error) {
108
- if (error.code === "PERSONAL_BUILD_EXHAUSTED") {
109
- throw new DeployPersonalBuildExhaustedError();
110
- }
111
- throw error;
112
- }
113
- }
114
- export async function publishDeploySpk(spkPath) {
115
- const published = await publishBuiltSpk(spkPath);
116
- return published.version;
30
+ return nextDeployVersion(String(loadContract(project.contractPath).contract.version), await host.getInstalledPackageVersion?.(packageId));
117
31
  }
package/dist/dev.d.ts CHANGED
@@ -2,12 +2,10 @@ import type { ProjectRoot } from "./discovery.js";
2
2
  import type { ComposeRunner } from "./compose/runner.js";
3
3
  export interface DevOptions {
4
4
  project: ProjectRoot;
5
- filesRoot?: string;
6
5
  composeRunner?: ComposeRunner;
7
6
  }
8
7
  export interface DevHandle {
9
- brokerBaseUrl: string;
10
- bootstrapPath: string;
11
8
  close(): Promise<void>;
12
9
  }
10
+ /** Run the application's own Compose project locally. */
13
11
  export declare function runDev(options: DevOptions): Promise<DevHandle>;
package/dist/dev.js CHANGED
@@ -1,31 +1,17 @@
1
- import { loadContract } from "./contract/load.js";
2
- import { writeMockBrokerBootstrap } from "./mock-broker/bootstrap.js";
3
- import { startMockBroker } from "./mock-broker/server.js";
1
+ import { existsSync } from "node:fs";
4
2
  import { createDockerComposeRunner } from "./compose/runner.js";
3
+ /** Run the application's own Compose project locally. */
5
4
  export async function runDev(options) {
6
- const parsed = loadContract(options.project.contractPath);
7
- const packageId = String(parsed.contract.package);
8
- const broker = await startMockBroker({
9
- packageId,
10
- filesRoot: options.filesRoot,
11
- });
12
- const bootstrapPath = writeMockBrokerBootstrap(options.project.root, {
13
- brokerBaseUrl: broker.baseUrl,
14
- jwksUrl: broker.jwksUrl,
15
- packageId,
16
- mock: true,
17
- });
18
- const composeRunner = options.composeRunner ?? createDockerComposeRunner();
19
- await composeRunner.up(options.project.root);
20
- await composeRunner.waitReady(options.project.root);
21
- return {
22
- brokerBaseUrl: broker.baseUrl,
23
- bootstrapPath,
24
- close: async () => {
25
- if (composeRunner.down) {
26
- await composeRunner.down(options.project.root);
27
- }
28
- await broker.close();
29
- },
30
- };
5
+ if (!existsSync(options.project.composePath))
6
+ throw new Error('dev requires compose.yaml');
7
+ const runner = options.composeRunner ?? createDockerComposeRunner();
8
+ try {
9
+ await runner.up(options.project.root);
10
+ await runner.waitReady(options.project.root);
11
+ }
12
+ catch (error) {
13
+ await runner.down?.(options.project.root);
14
+ throw error;
15
+ }
16
+ return { close: async () => { await runner.down?.(options.project.root); } };
31
17
  }