@pleri/olam-cli 0.1.70 → 0.1.72

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 (241) hide show
  1. package/dist/commands/create.d.ts.map +1 -1
  2. package/dist/commands/create.js +2 -0
  3. package/dist/commands/create.js.map +1 -1
  4. package/dist/commands/runbooks.d.ts +13 -0
  5. package/dist/commands/runbooks.d.ts.map +1 -0
  6. package/dist/commands/runbooks.js +189 -0
  7. package/dist/commands/runbooks.js.map +1 -0
  8. package/dist/commands/world-snapshot.d.ts +1 -0
  9. package/dist/commands/world-snapshot.d.ts.map +1 -1
  10. package/dist/commands/world-snapshot.js +126 -1
  11. package/dist/commands/world-snapshot.js.map +1 -1
  12. package/dist/commands/worldspec/compile.d.ts +20 -0
  13. package/dist/commands/worldspec/compile.d.ts.map +1 -0
  14. package/dist/commands/worldspec/compile.js +130 -0
  15. package/dist/commands/worldspec/compile.js.map +1 -0
  16. package/dist/commands/worldspec/index.d.ts +12 -0
  17. package/dist/commands/worldspec/index.d.ts.map +1 -0
  18. package/dist/commands/worldspec/index.js +23 -0
  19. package/dist/commands/worldspec/index.js.map +1 -0
  20. package/dist/commands/worldspec/init.d.ts +15 -0
  21. package/dist/commands/worldspec/init.d.ts.map +1 -0
  22. package/dist/commands/worldspec/init.js +166 -0
  23. package/dist/commands/worldspec/init.js.map +1 -0
  24. package/dist/commands/worldspec/schema.d.ts +11 -0
  25. package/dist/commands/worldspec/schema.d.ts.map +1 -0
  26. package/dist/commands/worldspec/schema.js +55 -0
  27. package/dist/commands/worldspec/schema.js.map +1 -0
  28. package/dist/commands/worldspec/validate.d.ts +15 -0
  29. package/dist/commands/worldspec/validate.d.ts.map +1 -0
  30. package/dist/commands/worldspec/validate.js +66 -0
  31. package/dist/commands/worldspec/validate.js.map +1 -0
  32. package/dist/exit-codes.d.ts +32 -0
  33. package/dist/exit-codes.d.ts.map +1 -1
  34. package/dist/exit-codes.js +32 -0
  35. package/dist/exit-codes.js.map +1 -1
  36. package/dist/image-digests.json +5 -5
  37. package/dist/index.js +4379 -897
  38. package/dist/index.js.map +1 -1
  39. package/dist/mcp-server.js +1252 -286
  40. package/host-cp/src/global-config-source.mjs +71 -0
  41. package/host-cp/src/listening-server-poller.mjs +1 -1
  42. package/host-cp/src/plan-orchestrator.mjs +20 -1
  43. package/host-cp/src/port-bridge-manager.mjs +1 -1
  44. package/host-cp/src/server.mjs +46 -7
  45. package/package.json +4 -2
  46. package/dist/__tests__/audit-publish-deps-contract.test.d.ts +0 -26
  47. package/dist/__tests__/audit-publish-deps-contract.test.d.ts.map +0 -1
  48. package/dist/__tests__/audit-publish-deps-contract.test.js +0 -86
  49. package/dist/__tests__/audit-publish-deps-contract.test.js.map +0 -1
  50. package/dist/__tests__/auth-status.test.d.ts +0 -2
  51. package/dist/__tests__/auth-status.test.d.ts.map +0 -1
  52. package/dist/__tests__/auth-status.test.js +0 -291
  53. package/dist/__tests__/auth-status.test.js.map +0 -1
  54. package/dist/__tests__/auth-upgrade.test.d.ts +0 -9
  55. package/dist/__tests__/auth-upgrade.test.d.ts.map +0 -1
  56. package/dist/__tests__/auth-upgrade.test.js +0 -397
  57. package/dist/__tests__/auth-upgrade.test.js.map +0 -1
  58. package/dist/__tests__/bootstrap-tag-mcp-auth.test.d.ts +0 -22
  59. package/dist/__tests__/bootstrap-tag-mcp-auth.test.d.ts.map +0 -1
  60. package/dist/__tests__/bootstrap-tag-mcp-auth.test.js +0 -63
  61. package/dist/__tests__/bootstrap-tag-mcp-auth.test.js.map +0 -1
  62. package/dist/__tests__/cli-mcp-revoke.test.d.ts +0 -8
  63. package/dist/__tests__/cli-mcp-revoke.test.d.ts.map +0 -1
  64. package/dist/__tests__/cli-mcp-revoke.test.js +0 -124
  65. package/dist/__tests__/cli-mcp-revoke.test.js.map +0 -1
  66. package/dist/__tests__/config.test.d.ts +0 -2
  67. package/dist/__tests__/config.test.d.ts.map +0 -1
  68. package/dist/__tests__/config.test.js +0 -95
  69. package/dist/__tests__/config.test.js.map +0 -1
  70. package/dist/__tests__/create-app-urls.test.d.ts +0 -2
  71. package/dist/__tests__/create-app-urls.test.d.ts.map +0 -1
  72. package/dist/__tests__/create-app-urls.test.js +0 -102
  73. package/dist/__tests__/create-app-urls.test.js.map +0 -1
  74. package/dist/__tests__/docker-host.test.d.ts +0 -14
  75. package/dist/__tests__/docker-host.test.d.ts.map +0 -1
  76. package/dist/__tests__/docker-host.test.js +0 -109
  77. package/dist/__tests__/docker-host.test.js.map +0 -1
  78. package/dist/__tests__/enter.test.d.ts +0 -2
  79. package/dist/__tests__/enter.test.d.ts.map +0 -1
  80. package/dist/__tests__/enter.test.js +0 -90
  81. package/dist/__tests__/enter.test.js.map +0 -1
  82. package/dist/__tests__/help-output.test.d.ts +0 -2
  83. package/dist/__tests__/help-output.test.d.ts.map +0 -1
  84. package/dist/__tests__/help-output.test.js +0 -74
  85. package/dist/__tests__/help-output.test.js.map +0 -1
  86. package/dist/__tests__/host-cp-gh-token.test.d.ts +0 -9
  87. package/dist/__tests__/host-cp-gh-token.test.d.ts.map +0 -1
  88. package/dist/__tests__/host-cp-gh-token.test.js +0 -129
  89. package/dist/__tests__/host-cp-gh-token.test.js.map +0 -1
  90. package/dist/__tests__/host-cp.test.d.ts +0 -9
  91. package/dist/__tests__/host-cp.test.d.ts.map +0 -1
  92. package/dist/__tests__/host-cp.test.js +0 -335
  93. package/dist/__tests__/host-cp.test.js.map +0 -1
  94. package/dist/__tests__/image-presence.test.d.ts +0 -2
  95. package/dist/__tests__/image-presence.test.d.ts.map +0 -1
  96. package/dist/__tests__/image-presence.test.js +0 -44
  97. package/dist/__tests__/image-presence.test.js.map +0 -1
  98. package/dist/__tests__/install-root.test.d.ts +0 -2
  99. package/dist/__tests__/install-root.test.d.ts.map +0 -1
  100. package/dist/__tests__/install-root.test.js +0 -119
  101. package/dist/__tests__/install-root.test.js.map +0 -1
  102. package/dist/__tests__/keys.test.d.ts +0 -9
  103. package/dist/__tests__/keys.test.d.ts.map +0 -1
  104. package/dist/__tests__/keys.test.js +0 -145
  105. package/dist/__tests__/keys.test.js.map +0 -1
  106. package/dist/__tests__/logs.test.d.ts +0 -9
  107. package/dist/__tests__/logs.test.d.ts.map +0 -1
  108. package/dist/__tests__/logs.test.js +0 -124
  109. package/dist/__tests__/logs.test.js.map +0 -1
  110. package/dist/__tests__/mcp-import.test.d.ts +0 -11
  111. package/dist/__tests__/mcp-import.test.d.ts.map +0 -1
  112. package/dist/__tests__/mcp-import.test.js +0 -134
  113. package/dist/__tests__/mcp-import.test.js.map +0 -1
  114. package/dist/__tests__/protocol-version.test.d.ts +0 -2
  115. package/dist/__tests__/protocol-version.test.d.ts.map +0 -1
  116. package/dist/__tests__/protocol-version.test.js +0 -170
  117. package/dist/__tests__/protocol-version.test.js.map +0 -1
  118. package/dist/__tests__/ps.test.d.ts +0 -2
  119. package/dist/__tests__/ps.test.d.ts.map +0 -1
  120. package/dist/__tests__/ps.test.js +0 -172
  121. package/dist/__tests__/ps.test.js.map +0 -1
  122. package/dist/__tests__/registry-allowlist.test.d.ts +0 -2
  123. package/dist/__tests__/registry-allowlist.test.d.ts.map +0 -1
  124. package/dist/__tests__/registry-allowlist.test.js +0 -129
  125. package/dist/__tests__/registry-allowlist.test.js.map +0 -1
  126. package/dist/__tests__/services.test.d.ts +0 -8
  127. package/dist/__tests__/services.test.d.ts.map +0 -1
  128. package/dist/__tests__/services.test.js +0 -185
  129. package/dist/__tests__/services.test.js.map +0 -1
  130. package/dist/__tests__/status-app-urls.test.d.ts +0 -2
  131. package/dist/__tests__/status-app-urls.test.d.ts.map +0 -1
  132. package/dist/__tests__/status-app-urls.test.js +0 -125
  133. package/dist/__tests__/status-app-urls.test.js.map +0 -1
  134. package/dist/__tests__/upgrade-gh-token-contract.test.d.ts +0 -19
  135. package/dist/__tests__/upgrade-gh-token-contract.test.d.ts.map +0 -1
  136. package/dist/__tests__/upgrade-gh-token-contract.test.js +0 -63
  137. package/dist/__tests__/upgrade-gh-token-contract.test.js.map +0 -1
  138. package/dist/__tests__/upgrade.test.d.ts +0 -9
  139. package/dist/__tests__/upgrade.test.d.ts.map +0 -1
  140. package/dist/__tests__/upgrade.test.js +0 -586
  141. package/dist/__tests__/upgrade.test.js.map +0 -1
  142. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.d.ts +0 -6
  143. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.d.ts.map +0 -1
  144. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.js +0 -26
  145. package/dist/commands/__tests__/__fixtures__/upgrade-helpers.js.map +0 -1
  146. package/dist/commands/__tests__/begin.test.d.ts +0 -7
  147. package/dist/commands/__tests__/begin.test.d.ts.map +0 -1
  148. package/dist/commands/__tests__/begin.test.js +0 -72
  149. package/dist/commands/__tests__/begin.test.js.map +0 -1
  150. package/dist/commands/__tests__/bootstrap.test.d.ts +0 -2
  151. package/dist/commands/__tests__/bootstrap.test.d.ts.map +0 -1
  152. package/dist/commands/__tests__/bootstrap.test.js +0 -370
  153. package/dist/commands/__tests__/bootstrap.test.js.map +0 -1
  154. package/dist/commands/__tests__/carry-uncommitted.test.d.ts +0 -14
  155. package/dist/commands/__tests__/carry-uncommitted.test.d.ts.map +0 -1
  156. package/dist/commands/__tests__/carry-uncommitted.test.js +0 -83
  157. package/dist/commands/__tests__/carry-uncommitted.test.js.map +0 -1
  158. package/dist/commands/__tests__/clean.test.d.ts +0 -9
  159. package/dist/commands/__tests__/clean.test.d.ts.map +0 -1
  160. package/dist/commands/__tests__/clean.test.js +0 -105
  161. package/dist/commands/__tests__/clean.test.js.map +0 -1
  162. package/dist/commands/__tests__/crystallize.test.d.ts +0 -2
  163. package/dist/commands/__tests__/crystallize.test.d.ts.map +0 -1
  164. package/dist/commands/__tests__/crystallize.test.js +0 -133
  165. package/dist/commands/__tests__/crystallize.test.js.map +0 -1
  166. package/dist/commands/__tests__/diagnose.test.d.ts +0 -9
  167. package/dist/commands/__tests__/diagnose.test.d.ts.map +0 -1
  168. package/dist/commands/__tests__/diagnose.test.js +0 -108
  169. package/dist/commands/__tests__/diagnose.test.js.map +0 -1
  170. package/dist/commands/__tests__/openHostCpUrl.test.d.ts +0 -2
  171. package/dist/commands/__tests__/openHostCpUrl.test.d.ts.map +0 -1
  172. package/dist/commands/__tests__/openHostCpUrl.test.js +0 -63
  173. package/dist/commands/__tests__/openHostCpUrl.test.js.map +0 -1
  174. package/dist/commands/__tests__/refresh.test.d.ts +0 -13
  175. package/dist/commands/__tests__/refresh.test.d.ts.map +0 -1
  176. package/dist/commands/__tests__/refresh.test.js +0 -170
  177. package/dist/commands/__tests__/refresh.test.js.map +0 -1
  178. package/dist/commands/__tests__/status.test.d.ts +0 -8
  179. package/dist/commands/__tests__/status.test.d.ts.map +0 -1
  180. package/dist/commands/__tests__/status.test.js +0 -62
  181. package/dist/commands/__tests__/status.test.js.map +0 -1
  182. package/dist/commands/__tests__/stop.test.d.ts +0 -5
  183. package/dist/commands/__tests__/stop.test.d.ts.map +0 -1
  184. package/dist/commands/__tests__/stop.test.js +0 -30
  185. package/dist/commands/__tests__/stop.test.js.map +0 -1
  186. package/dist/commands/__tests__/update.test.d.ts +0 -7
  187. package/dist/commands/__tests__/update.test.d.ts.map +0 -1
  188. package/dist/commands/__tests__/update.test.js +0 -224
  189. package/dist/commands/__tests__/update.test.js.map +0 -1
  190. package/dist/commands/__tests__/upgrade.all-three.test.d.ts +0 -19
  191. package/dist/commands/__tests__/upgrade.all-three.test.d.ts.map +0 -1
  192. package/dist/commands/__tests__/upgrade.all-three.test.js +0 -80
  193. package/dist/commands/__tests__/upgrade.all-three.test.js.map +0 -1
  194. package/dist/commands/__tests__/upgrade.compose-path.test.d.ts +0 -20
  195. package/dist/commands/__tests__/upgrade.compose-path.test.d.ts.map +0 -1
  196. package/dist/commands/__tests__/upgrade.compose-path.test.js +0 -140
  197. package/dist/commands/__tests__/upgrade.compose-path.test.js.map +0 -1
  198. package/dist/commands/__tests__/upgrade.history.test.d.ts +0 -15
  199. package/dist/commands/__tests__/upgrade.history.test.d.ts.map +0 -1
  200. package/dist/commands/__tests__/upgrade.history.test.js +0 -199
  201. package/dist/commands/__tests__/upgrade.history.test.js.map +0 -1
  202. package/dist/commands/__tests__/upgrade.lock.test.d.ts +0 -15
  203. package/dist/commands/__tests__/upgrade.lock.test.d.ts.map +0 -1
  204. package/dist/commands/__tests__/upgrade.lock.test.js +0 -253
  205. package/dist/commands/__tests__/upgrade.lock.test.js.map +0 -1
  206. package/dist/commands/__tests__/upgrade.olam-tag.test.d.ts +0 -21
  207. package/dist/commands/__tests__/upgrade.olam-tag.test.d.ts.map +0 -1
  208. package/dist/commands/__tests__/upgrade.olam-tag.test.js +0 -114
  209. package/dist/commands/__tests__/upgrade.olam-tag.test.js.map +0 -1
  210. package/dist/commands/__tests__/upgrade.poll.test.d.ts +0 -14
  211. package/dist/commands/__tests__/upgrade.poll.test.d.ts.map +0 -1
  212. package/dist/commands/__tests__/upgrade.poll.test.js +0 -136
  213. package/dist/commands/__tests__/upgrade.poll.test.js.map +0 -1
  214. package/dist/commands/__tests__/upgrade.recreate.test.d.ts +0 -17
  215. package/dist/commands/__tests__/upgrade.recreate.test.d.ts.map +0 -1
  216. package/dist/commands/__tests__/upgrade.recreate.test.js +0 -83
  217. package/dist/commands/__tests__/upgrade.recreate.test.js.map +0 -1
  218. package/dist/commands/__tests__/upgrade.rollback.test.d.ts +0 -12
  219. package/dist/commands/__tests__/upgrade.rollback.test.d.ts.map +0 -1
  220. package/dist/commands/__tests__/upgrade.rollback.test.js +0 -255
  221. package/dist/commands/__tests__/upgrade.rollback.test.js.map +0 -1
  222. package/dist/commands/__tests__/upgrade.sha-capture.test.d.ts +0 -12
  223. package/dist/commands/__tests__/upgrade.sha-capture.test.d.ts.map +0 -1
  224. package/dist/commands/__tests__/upgrade.sha-capture.test.js +0 -63
  225. package/dist/commands/__tests__/upgrade.sha-capture.test.js.map +0 -1
  226. package/dist/commands/__tests__/upgrade.smoke.test.d.ts +0 -19
  227. package/dist/commands/__tests__/upgrade.smoke.test.d.ts.map +0 -1
  228. package/dist/commands/__tests__/upgrade.smoke.test.js +0 -87
  229. package/dist/commands/__tests__/upgrade.smoke.test.js.map +0 -1
  230. package/dist/commands/__tests__/upgrade.swap.test.d.ts +0 -19
  231. package/dist/commands/__tests__/upgrade.swap.test.d.ts.map +0 -1
  232. package/dist/commands/__tests__/upgrade.swap.test.js +0 -312
  233. package/dist/commands/__tests__/upgrade.swap.test.js.map +0 -1
  234. package/dist/commands/__tests__/world-upgrade.test.d.ts +0 -8
  235. package/dist/commands/__tests__/world-upgrade.test.d.ts.map +0 -1
  236. package/dist/commands/__tests__/world-upgrade.test.js +0 -73
  237. package/dist/commands/__tests__/world-upgrade.test.js.map +0 -1
  238. package/dist/lib/__tests__/symlink-reconcile.test.d.ts +0 -2
  239. package/dist/lib/__tests__/symlink-reconcile.test.d.ts.map +0 -1
  240. package/dist/lib/__tests__/symlink-reconcile.test.js +0 -106
  241. package/dist/lib/__tests__/symlink-reconcile.test.js.map +0 -1
@@ -1,586 +0,0 @@
1
- /**
2
- * Unit tests for upgrade.ts pure helpers.
3
- *
4
- * Only tests the stateless, side-effect-free helpers. The full upgrade
5
- * pipeline (git, npm, docker) is too side-effectful to integration-test
6
- * inside the devbox — same philosophy as host-cp.test.ts.
7
- */
8
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
9
- import * as fs from 'node:fs';
10
- import * as os from 'node:os';
11
- import * as path from 'node:path';
12
- import { validateRepoRoot, parseUpgradeOpts, extractBundleHash, isNodeModulesInSync, shouldSkipInstall, runUpgradePullByDigest, } from '../commands/upgrade.js';
13
- import {} from '../commands/bootstrap.js';
14
- import { EXIT_BOOTSTRAP_PULL_FAILED, EXIT_GENERIC_ERROR, EXIT_PROTOCOL_MISMATCH, } from '../exit-codes.js';
15
- // ── validateRepoRoot ──────────────────────────────────────────────
16
- describe('validateRepoRoot', () => {
17
- let tmpDir;
18
- beforeEach(() => {
19
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-upgrade-test-'));
20
- });
21
- afterEach(() => {
22
- fs.rmSync(tmpDir, { recursive: true, force: true });
23
- });
24
- it('returns ok:false when the marker file is absent', () => {
25
- const result = validateRepoRoot(tmpDir);
26
- expect(result.ok).toBe(false);
27
- if (!result.ok) {
28
- expect(result.error).toMatch(/packages\/host-cp\/compose\.yaml/);
29
- expect(result.error).toMatch(/olam repo root/i);
30
- }
31
- });
32
- it('returns ok:true when packages/host-cp/compose.yaml exists', () => {
33
- const marker = path.join(tmpDir, 'packages/host-cp');
34
- fs.mkdirSync(marker, { recursive: true });
35
- fs.writeFileSync(path.join(marker, 'compose.yaml'), 'services: {}');
36
- const result = validateRepoRoot(tmpDir);
37
- expect(result.ok).toBe(true);
38
- });
39
- it('error message includes the expected path', () => {
40
- const result = validateRepoRoot('/nonexistent-definitely-not-a-real-path');
41
- expect(result.ok).toBe(false);
42
- if (!result.ok) {
43
- expect(result.error).toContain('compose.yaml');
44
- }
45
- });
46
- it('is case-sensitive (compose.yaml != Compose.yaml)', () => {
47
- const marker = path.join(tmpDir, 'packages/host-cp');
48
- fs.mkdirSync(marker, { recursive: true });
49
- fs.writeFileSync(path.join(marker, 'Compose.yaml'), 'services: {}');
50
- // Only exact match should pass
51
- const result = validateRepoRoot(tmpDir);
52
- // On case-sensitive filesystems this should be false
53
- // On case-insensitive (macOS) it may be true — accept either
54
- expect(typeof result.ok).toBe('boolean');
55
- });
56
- });
57
- // ── parseUpgradeOpts ──────────────────────────────────────────────
58
- describe('parseUpgradeOpts', () => {
59
- it('defaults all options to false/null when called with empty object', () => {
60
- const opts = parseUpgradeOpts({});
61
- expect(opts.yes).toBe(false);
62
- expect(opts.skipImage).toBe(false);
63
- expect(opts.branch).toBeNull();
64
- });
65
- it('sets yes:true when raw.yes is true', () => {
66
- expect(parseUpgradeOpts({ yes: true }).yes).toBe(true);
67
- });
68
- it('sets yes:false when raw.yes is false', () => {
69
- expect(parseUpgradeOpts({ yes: false }).yes).toBe(false);
70
- });
71
- it('sets yes:false when raw.yes is undefined', () => {
72
- expect(parseUpgradeOpts({ yes: undefined }).yes).toBe(false);
73
- });
74
- it('sets skipImage:true when raw.skipImage is true', () => {
75
- expect(parseUpgradeOpts({ skipImage: true }).skipImage).toBe(true);
76
- });
77
- it('sets skipImage:false when raw.skipImage is undefined', () => {
78
- expect(parseUpgradeOpts({}).skipImage).toBe(false);
79
- });
80
- it('sets branch to the provided string', () => {
81
- expect(parseUpgradeOpts({ branch: 'main' }).branch).toBe('main');
82
- });
83
- it('sets branch to null when raw.branch is undefined', () => {
84
- expect(parseUpgradeOpts({}).branch).toBeNull();
85
- });
86
- it('accepts all three options at once', () => {
87
- const opts = parseUpgradeOpts({ yes: true, skipImage: true, branch: 'feat/foo' });
88
- expect(opts.yes).toBe(true);
89
- expect(opts.skipImage).toBe(true);
90
- expect(opts.branch).toBe('feat/foo');
91
- });
92
- it('result is a plain object (no mutation of input)', () => {
93
- const raw = { yes: true };
94
- const opts = parseUpgradeOpts(raw);
95
- expect(opts).not.toBe(raw);
96
- });
97
- });
98
- // ── extractBundleHash ─────────────────────────────────────────────
99
- describe('extractBundleHash', () => {
100
- const sampleHtml = `<!doctype html>
101
- <html>
102
- <head>
103
- <script type="module" crossorigin src="/assets/index-Cp8kX3Zq.js"></script>
104
- <link rel="stylesheet" crossorigin href="/assets/index-BvXm2OiK.css">
105
- </head>
106
- <body><div id="root"></div></body>
107
- </html>`;
108
- it('extracts the hash from the JS bundle reference', () => {
109
- expect(extractBundleHash(sampleHtml)).toBe('Cp8kX3Zq');
110
- });
111
- it('returns null for empty string', () => {
112
- expect(extractBundleHash('')).toBeNull();
113
- });
114
- it('returns null when no /assets/index-*.js reference exists', () => {
115
- expect(extractBundleHash('<html><body>hello</body></html>')).toBeNull();
116
- });
117
- it('handles hashes with underscores and hyphens', () => {
118
- const html = '<script src="/assets/index-A_b-C123.js"></script>';
119
- expect(extractBundleHash(html)).toBe('A_b-C123');
120
- });
121
- it('handles longer hashes (Vite typically emits 8 chars but can vary)', () => {
122
- const html = '<script src="/assets/index-abcdef0123456789.js"></script>';
123
- expect(extractBundleHash(html)).toBe('abcdef0123456789');
124
- });
125
- it('returns the first match when multiple script tags are present', () => {
126
- const html = `
127
- <script src="/assets/index-FIRST1234.js"></script>
128
- <script src="/assets/index-SECOND567.js"></script>
129
- `;
130
- expect(extractBundleHash(html)).toBe('FIRST1234');
131
- });
132
- it('is not confused by non-index bundle references', () => {
133
- // Should only match /assets/index-<hash>.js, not other chunks
134
- const html = '<script src="/assets/vendor-ABC123.js"></script>';
135
- expect(extractBundleHash(html)).toBeNull();
136
- });
137
- });
138
- // ── parseUpgradeOpts — skipInstall ────────────────────────────────
139
- describe('parseUpgradeOpts — skipInstall field', () => {
140
- it('defaults skipInstall to false', () => {
141
- expect(parseUpgradeOpts({}).skipInstall).toBe(false);
142
- });
143
- it('sets skipInstall:true when raw.skipInstall is true', () => {
144
- expect(parseUpgradeOpts({ skipInstall: true }).skipInstall).toBe(true);
145
- });
146
- it('sets skipInstall:false when raw.skipInstall is false', () => {
147
- expect(parseUpgradeOpts({ skipInstall: false }).skipInstall).toBe(false);
148
- });
149
- it('accepts all four options at once', () => {
150
- const opts = parseUpgradeOpts({ yes: true, skipImage: true, skipInstall: true, branch: 'feat/x' });
151
- expect(opts.yes).toBe(true);
152
- expect(opts.skipImage).toBe(true);
153
- expect(opts.skipInstall).toBe(true);
154
- expect(opts.branch).toBe('feat/x');
155
- });
156
- });
157
- // ── parseUpgradeOpts — fromSource ─────────────────────────────────
158
- describe('parseUpgradeOpts — fromSource field', () => {
159
- it('defaults fromSource to false', () => {
160
- expect(parseUpgradeOpts({}).fromSource).toBe(false);
161
- });
162
- it('sets fromSource:true when raw.fromSource is true', () => {
163
- expect(parseUpgradeOpts({ fromSource: true }).fromSource).toBe(true);
164
- });
165
- it('sets fromSource:false when raw.fromSource is undefined', () => {
166
- expect(parseUpgradeOpts({}).fromSource).toBe(false);
167
- });
168
- });
169
- // ── isNodeModulesInSync ───────────────────────────────────────────
170
- describe('isNodeModulesInSync', () => {
171
- let tmpDir;
172
- beforeEach(() => {
173
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-sync-test-'));
174
- });
175
- afterEach(() => {
176
- fs.rmSync(tmpDir, { recursive: true, force: true });
177
- });
178
- function writeLock(content = '{"lockfileVersion":3}') {
179
- fs.writeFileSync(path.join(tmpDir, 'package-lock.json'), content);
180
- }
181
- function writeMarker(content = '{"lockfileVersion":3}', mtimeOffsetMs = 100) {
182
- const markerDir = path.join(tmpDir, 'node_modules');
183
- fs.mkdirSync(markerDir, { recursive: true });
184
- const markerPath = path.join(markerDir, '.package-lock.json');
185
- fs.writeFileSync(markerPath, content);
186
- // Bump mtime so marker is newer than lockfile by default.
187
- const lockStat = fs.statSync(path.join(tmpDir, 'package-lock.json'));
188
- const newMtime = new Date(lockStat.mtimeMs + mtimeOffsetMs);
189
- fs.utimesSync(markerPath, newMtime, newMtime);
190
- }
191
- it('returns false when package-lock.json is absent', () => {
192
- // no lockfile, no marker
193
- expect(isNodeModulesInSync(tmpDir)).toBe(false);
194
- });
195
- it('returns false when node_modules/.package-lock.json is absent', () => {
196
- writeLock();
197
- // no marker
198
- expect(isNodeModulesInSync(tmpDir)).toBe(false);
199
- });
200
- it('returns true when marker mtime >= lockfile mtime (install ran after last lock change)', () => {
201
- writeLock();
202
- writeMarker('{}', 200); // marker is 200ms newer than lockfile
203
- expect(isNodeModulesInSync(tmpDir)).toBe(true);
204
- });
205
- it('returns false when lockfile mtime > marker mtime (lockfile changed after last install)', () => {
206
- writeLock();
207
- // Write marker with mtime older than the lockfile.
208
- const markerDir = path.join(tmpDir, 'node_modules');
209
- fs.mkdirSync(markerDir, { recursive: true });
210
- const markerPath = path.join(markerDir, '.package-lock.json');
211
- fs.writeFileSync(markerPath, '{}');
212
- // Set marker mtime to 1 second before lockfile.
213
- const lockStat = fs.statSync(path.join(tmpDir, 'package-lock.json'));
214
- const oldMtime = new Date(lockStat.mtimeMs - 1000);
215
- fs.utimesSync(markerPath, oldMtime, oldMtime);
216
- expect(isNodeModulesInSync(tmpDir)).toBe(false);
217
- });
218
- it('returns true when marker mtime is 1ms after lockfile mtime (boundary)', () => {
219
- writeLock();
220
- writeMarker('{}', 1); // 1ms newer
221
- expect(isNodeModulesInSync(tmpDir)).toBe(true);
222
- });
223
- });
224
- // ── shouldSkipInstall ─────────────────────────────────────────────
225
- describe('shouldSkipInstall', () => {
226
- let tmpDir;
227
- beforeEach(() => {
228
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-skip-test-'));
229
- });
230
- afterEach(() => {
231
- fs.rmSync(tmpDir, { recursive: true, force: true });
232
- });
233
- it('skips when --skip-install flag is set (regardless of sync state)', () => {
234
- // No lockfile / marker at all — would normally not skip.
235
- const result = shouldSkipInstall({ skipInstall: true }, tmpDir);
236
- expect(result.skip).toBe(true);
237
- if (result.skip) {
238
- expect(result.reason).toMatch(/--skip-install/i);
239
- }
240
- });
241
- it('skips when flag is false but node_modules is in sync', () => {
242
- // Write lockfile and a newer marker.
243
- fs.writeFileSync(path.join(tmpDir, 'package-lock.json'), '{}');
244
- const markerDir = path.join(tmpDir, 'node_modules');
245
- fs.mkdirSync(markerDir, { recursive: true });
246
- const markerPath = path.join(markerDir, '.package-lock.json');
247
- fs.writeFileSync(markerPath, '{}');
248
- const lockStat = fs.statSync(path.join(tmpDir, 'package-lock.json'));
249
- const newerMtime = new Date(lockStat.mtimeMs + 500);
250
- fs.utimesSync(markerPath, newerMtime, newerMtime);
251
- const result = shouldSkipInstall({ skipInstall: false }, tmpDir);
252
- expect(result.skip).toBe(true);
253
- if (result.skip) {
254
- expect(result.reason).toMatch(/in sync/i);
255
- }
256
- });
257
- it('does not skip when flag is false and node_modules is NOT in sync', () => {
258
- // No marker → not in sync.
259
- fs.writeFileSync(path.join(tmpDir, 'package-lock.json'), '{}');
260
- const result = shouldSkipInstall({ skipInstall: false }, tmpDir);
261
- expect(result.skip).toBe(false);
262
- });
263
- it('does not skip when flag is false and marker is older than lockfile', () => {
264
- fs.writeFileSync(path.join(tmpDir, 'package-lock.json'), '{}');
265
- const markerDir = path.join(tmpDir, 'node_modules');
266
- fs.mkdirSync(markerDir, { recursive: true });
267
- const markerPath = path.join(markerDir, '.package-lock.json');
268
- fs.writeFileSync(markerPath, '{}');
269
- const lockStat = fs.statSync(path.join(tmpDir, 'package-lock.json'));
270
- const oldMtime = new Date(lockStat.mtimeMs - 2000);
271
- fs.utimesSync(markerPath, oldMtime, oldMtime);
272
- const result = shouldSkipInstall({ skipInstall: false }, tmpDir);
273
- expect(result.skip).toBe(false);
274
- });
275
- });
276
- // ── runUpgradePullByDigest — orchestrator (Phase C — C6) ─────────
277
- //
278
- // Mirrors the DockerImpl mock pattern from bootstrap.test.ts so retry
279
- // + coalesce semantics carry through unchanged. The compose driver and
280
- // auth-recreate driver are also injected to keep the test hermetic.
281
- const FIXTURE_DIGESTS = {
282
- 'host-cp': 'sha256:' + 'a'.repeat(64),
283
- auth: 'sha256:' + 'b'.repeat(64),
284
- devbox: 'sha256:' + 'c'.repeat(64),
285
- $registry: 'ghcr.io/pleri',
286
- $published_version: '0.1.16',
287
- };
288
- function ok(stdout = '') {
289
- return { exitCode: 0, stdout, stderr: '' };
290
- }
291
- function err(stderr, exitCode = 1) {
292
- return { exitCode, stdout: '', stderr };
293
- }
294
- function makeMockDocker(opts = {}) {
295
- const calls = opts.calls ?? { pull: [], inspect: [] };
296
- return {
297
- info: vi.fn(async () => (opts.infoOk === false ? err('cannot connect to docker') : ok())),
298
- pull: vi.fn(async (ref) => {
299
- calls.pull.push(ref);
300
- return opts.pullResults?.get(ref) ?? ok();
301
- }),
302
- inspectLabel: vi.fn(async (ref, label) => {
303
- calls.inspect.push(`${ref}#${label}`);
304
- const value = opts.inspectLabels?.get(ref) ?? '1';
305
- return ok(`${value}\n`);
306
- }),
307
- tag: vi.fn(async () => ok()),
308
- };
309
- }
310
- describe('runUpgradePullByDigest — happy path', () => {
311
- beforeEach(() => {
312
- vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
313
- vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
314
- });
315
- afterEach(() => {
316
- vi.restoreAllMocks();
317
- });
318
- it('exits 0 when daemon up + pulls succeed + handshake passes + recreate succeeds', async () => {
319
- const docker = makeMockDocker();
320
- const composeCalls = [];
321
- let authRecreated = 0;
322
- const result = await runUpgradePullByDigest({
323
- docker,
324
- digests: FIXTURE_DIGESTS,
325
- composeFile: '/tmp/test-compose.yaml',
326
- authSecret: 'test-secret',
327
- runComposeImpl: (args, composeFile) => {
328
- composeCalls.push({ args: [...args], composeFile });
329
- return { ok: true, stdout: '', stderr: '' };
330
- },
331
- recreateAuth: async () => {
332
- authRecreated++;
333
- return { ok: true };
334
- },
335
- tagImpl: () => ({ ok: true }),
336
- });
337
- expect(result.exitCode).toBe(0);
338
- expect(result.summary).toContain('upgraded');
339
- expect(composeCalls).toHaveLength(1);
340
- expect(composeCalls[0]?.args).toEqual(['up', '-d', '--force-recreate', '--no-deps', 'host-cp']);
341
- expect(composeCalls[0]?.composeFile).toBe('/tmp/test-compose.yaml');
342
- expect(authRecreated).toBe(1);
343
- });
344
- it('pulls all 3 images by digest with the correct refs', async () => {
345
- const calls = { pull: [], inspect: [] };
346
- const docker = makeMockDocker({ calls });
347
- await runUpgradePullByDigest({
348
- docker,
349
- digests: FIXTURE_DIGESTS,
350
- composeFile: '/tmp/test-compose.yaml',
351
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
352
- recreateAuth: async () => ({ ok: true }),
353
- tagImpl: () => ({ ok: true }),
354
- });
355
- expect(calls.pull).toHaveLength(3);
356
- expect(calls.pull).toContain(`ghcr.io/pleri/olam-host-cp@${FIXTURE_DIGESTS['host-cp']}`);
357
- expect(calls.pull).toContain(`ghcr.io/pleri/olam-auth@${FIXTURE_DIGESTS.auth}`);
358
- expect(calls.pull).toContain(`ghcr.io/pleri/olam-devbox@${FIXTURE_DIGESTS.devbox}`);
359
- });
360
- it('honours --registry override via deps.registry', async () => {
361
- const calls = { pull: [], inspect: [] };
362
- const docker = makeMockDocker({ calls });
363
- await runUpgradePullByDigest({
364
- docker,
365
- digests: FIXTURE_DIGESTS,
366
- registry: 'localhost:5000/test',
367
- composeFile: '/tmp/test-compose.yaml',
368
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
369
- recreateAuth: async () => ({ ok: true }),
370
- tagImpl: () => ({ ok: true }),
371
- });
372
- expect(calls.pull[0]).toContain('localhost:5000/test/olam-host-cp');
373
- });
374
- it('retags BOTH bare-name + registry-prefixed refs (compose uses ghcr.io/...)', async () => {
375
- // Regression for the upgrade-doesn't-update-:latest bug. compose.yaml
376
- // uses `image: ghcr.io/pleri/olam-host-cp:latest`; if we only retag
377
- // the bare-name `olam-host-cp:latest`, compose's recreate picks the
378
- // OLD image because the registry-prefixed tag still points there.
379
- // The fix retags both names per image (6 retags total).
380
- const tagCalls = [];
381
- const docker = makeMockDocker({});
382
- await runUpgradePullByDigest({
383
- docker,
384
- digests: FIXTURE_DIGESTS,
385
- composeFile: '/tmp/test-compose.yaml',
386
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
387
- recreateAuth: async () => ({ ok: true }),
388
- tagImpl: (from, to) => {
389
- tagCalls.push({ from, to });
390
- return { ok: true };
391
- },
392
- });
393
- // 6 retags: 3 images × {bare, registry-prefixed}.
394
- expect(tagCalls).toHaveLength(6);
395
- const targets = tagCalls.map((c) => c.to);
396
- expect(targets).toContain('olam-host-cp:latest');
397
- expect(targets).toContain('ghcr.io/pleri/olam-host-cp:latest');
398
- expect(targets).toContain('olam-auth:local');
399
- expect(targets).toContain('ghcr.io/pleri/olam-auth:latest');
400
- expect(targets).toContain('olam-devbox:latest');
401
- expect(targets).toContain('ghcr.io/pleri/olam-devbox:latest');
402
- // Each retag's `from` is the registry-prefixed digest ref (what was just pulled).
403
- for (const c of tagCalls) {
404
- expect(c.from).toMatch(/^ghcr\.io\/pleri\/olam-(host-cp|auth|devbox)@sha256:/);
405
- }
406
- });
407
- });
408
- describe('runUpgradePullByDigest — failure paths', () => {
409
- beforeEach(() => {
410
- vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
411
- vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
412
- });
413
- afterEach(() => {
414
- vi.restoreAllMocks();
415
- });
416
- it('exits EXIT_GENERIC_ERROR (1) when docker daemon not reachable', async () => {
417
- const docker = makeMockDocker({ infoOk: false });
418
- const result = await runUpgradePullByDigest({
419
- docker,
420
- digests: FIXTURE_DIGESTS,
421
- composeFile: '/tmp/test-compose.yaml',
422
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
423
- recreateAuth: async () => ({ ok: true }),
424
- tagImpl: () => ({ ok: true }),
425
- });
426
- expect(result.exitCode).toBe(EXIT_GENERIC_ERROR);
427
- expect(result.summary).toContain('docker daemon');
428
- });
429
- it('exits EXIT_BOOTSTRAP_PULL_FAILED (3) when an image pull fails terminally', async () => {
430
- const docker = makeMockDocker({
431
- pullResults: new Map([
432
- [`ghcr.io/pleri/olam-devbox@${FIXTURE_DIGESTS.devbox}`, err('manifest unknown', 1)],
433
- ]),
434
- });
435
- let composeCalled = 0;
436
- const result = await runUpgradePullByDigest({
437
- docker,
438
- digests: FIXTURE_DIGESTS,
439
- composeFile: '/tmp/test-compose.yaml',
440
- runComposeImpl: () => {
441
- composeCalled++;
442
- return { ok: true, stdout: '', stderr: '' };
443
- },
444
- recreateAuth: async () => ({ ok: true }),
445
- });
446
- expect(result.exitCode).toBe(EXIT_BOOTSTRAP_PULL_FAILED);
447
- expect(result.summary).toContain('pull failed');
448
- expect(composeCalled).toBe(0); // bailed before recreate
449
- });
450
- it('exits EXIT_PROTOCOL_MISMATCH (4) when auth image LABEL declares non-overlapping versions', async () => {
451
- const docker = makeMockDocker({
452
- inspectLabels: new Map([
453
- [`ghcr.io/pleri/olam-auth@${FIXTURE_DIGESTS.auth}`, '99'],
454
- ]),
455
- });
456
- const result = await runUpgradePullByDigest({
457
- docker,
458
- digests: FIXTURE_DIGESTS,
459
- composeFile: '/tmp/test-compose.yaml',
460
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
461
- recreateAuth: async () => ({ ok: true }),
462
- tagImpl: () => ({ ok: true }),
463
- });
464
- expect(result.exitCode).toBe(EXIT_PROTOCOL_MISMATCH);
465
- expect(result.summary).toContain('auth');
466
- });
467
- it('exits EXIT_PROTOCOL_MISMATCH when a LABEL is missing (devbox)', async () => {
468
- const docker = makeMockDocker({
469
- inspectLabels: new Map([
470
- [`ghcr.io/pleri/olam-devbox@${FIXTURE_DIGESTS.devbox}`, '<no value>'],
471
- ]),
472
- });
473
- const result = await runUpgradePullByDigest({
474
- docker,
475
- digests: FIXTURE_DIGESTS,
476
- composeFile: '/tmp/test-compose.yaml',
477
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
478
- recreateAuth: async () => ({ ok: true }),
479
- tagImpl: () => ({ ok: true }),
480
- });
481
- expect(result.exitCode).toBe(EXIT_PROTOCOL_MISMATCH);
482
- expect(result.summary).toContain('devbox');
483
- });
484
- it('exits EXIT_GENERIC_ERROR when docker compose recreate fails', async () => {
485
- const docker = makeMockDocker();
486
- const result = await runUpgradePullByDigest({
487
- docker,
488
- digests: FIXTURE_DIGESTS,
489
- composeFile: '/tmp/test-compose.yaml',
490
- runComposeImpl: () => ({ ok: false, stdout: '', stderr: 'no such network' }),
491
- recreateAuth: async () => ({ ok: true }),
492
- tagImpl: () => ({ ok: true }),
493
- });
494
- expect(result.exitCode).toBe(EXIT_GENERIC_ERROR);
495
- expect(result.summary).toContain('compose');
496
- });
497
- it('exits EXIT_GENERIC_ERROR when auth recreate fails', async () => {
498
- const docker = makeMockDocker();
499
- const result = await runUpgradePullByDigest({
500
- docker,
501
- digests: FIXTURE_DIGESTS,
502
- composeFile: '/tmp/test-compose.yaml',
503
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
504
- recreateAuth: async () => ({ ok: false, error: 'health check failed' }),
505
- tagImpl: () => ({ ok: true }),
506
- });
507
- expect(result.exitCode).toBe(EXIT_GENERIC_ERROR);
508
- expect(result.summary).toContain('auth');
509
- });
510
- it('exits EXIT_GENERIC_ERROR when docker tag fails', async () => {
511
- const docker = makeMockDocker();
512
- const result = await runUpgradePullByDigest({
513
- docker,
514
- digests: FIXTURE_DIGESTS,
515
- composeFile: '/tmp/test-compose.yaml',
516
- runComposeImpl: () => ({ ok: true, stdout: '', stderr: '' }),
517
- recreateAuth: async () => ({ ok: true }),
518
- tagImpl: () => ({ ok: false, error: 'image not found' }),
519
- });
520
- expect(result.exitCode).toBe(EXIT_GENERIC_ERROR);
521
- expect(result.summary).toContain('tag failed');
522
- });
523
- });
524
- // ── --from-source dev-mode gating (Phase C — C6) ──────────────────
525
- //
526
- // The flag-routing logic lives inside registerUpgrade's commander
527
- // action. We test it via the underlying isDevMode + MissingBuildScriptError
528
- // surface that the action consults. The actual handleUpgrade handler is
529
- // too coupled to side effects (lock file, git, npm) to drive end-to-end
530
- // from a unit test — those paths are the existing source-build tests in
531
- // upgrade.test.ts plus the e2e-fresh-install workflow.
532
- describe('--from-source flag gating — outside dev mode', () => {
533
- let originalDev;
534
- beforeEach(() => {
535
- originalDev = process.env.OLAM_DEV;
536
- delete process.env.OLAM_DEV;
537
- });
538
- afterEach(() => {
539
- if (originalDev === undefined) {
540
- delete process.env.OLAM_DEV;
541
- }
542
- else {
543
- process.env.OLAM_DEV = originalDev;
544
- }
545
- });
546
- it('MissingBuildScriptError is the hint surfaced when --from-source runs outside dev mode', async () => {
547
- // import the same module the action consults so the test moves with
548
- // any future rename.
549
- const { isDevMode, MissingBuildScriptError } = await import('../install-root.js');
550
- expect(isDevMode()).toBe(false);
551
- const e = new MissingBuildScriptError('packages/adapters/src/docker/build-*.sh');
552
- expect(e.message).toMatch(/Build script .* not available/);
553
- expect(e.message).toMatch(/OLAM_DEV=1/);
554
- expect(e.message).toMatch(/--from-source/);
555
- });
556
- });
557
- describe('--from-source flag gating — inside dev mode', () => {
558
- let originalDev;
559
- let tmpDir;
560
- beforeEach(() => {
561
- originalDev = process.env.OLAM_DEV;
562
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-c6-fromsource-'));
563
- process.env.OLAM_DEV = '1';
564
- });
565
- afterEach(() => {
566
- if (originalDev === undefined) {
567
- delete process.env.OLAM_DEV;
568
- }
569
- else {
570
- process.env.OLAM_DEV = originalDev;
571
- }
572
- fs.rmSync(tmpDir, { recursive: true, force: true });
573
- });
574
- it('isDevMode returns true when OLAM_DEV=1 + packages/ sibling exists at injected install root', async () => {
575
- // tmpDir layout: <tmp>/repo/packages-cli/ (installRoot is one level above)
576
- // isDevMode walks up two levels from installRootDir to find packages/ + package.json.
577
- const repoRoot = path.join(tmpDir, 'repo');
578
- const installRootDir = path.join(repoRoot, 'packages', 'cli');
579
- fs.mkdirSync(installRootDir, { recursive: true });
580
- fs.mkdirSync(path.join(repoRoot, 'packages'), { recursive: true });
581
- fs.writeFileSync(path.join(repoRoot, 'package.json'), '{}');
582
- const { isDevMode } = await import('../install-root.js');
583
- expect(isDevMode(process.env, installRootDir)).toBe(true);
584
- });
585
- });
586
- //# sourceMappingURL=upgrade.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upgrade.test.js","sourceRoot":"","sources":["../../src/__tests__/upgrade.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export declare function findRepoRoot(start: string): string;
2
- export declare function dockerAvailable(): boolean;
3
- export declare const REPO_ROOT: string;
4
- /** Shared fixture dir for Docker atomic-swap tests (swap + rollback suites). */
5
- export declare const ATOMIC_SWAP_FIXTURE_DIR: string;
6
- //# sourceMappingURL=upgrade-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upgrade-helpers.d.ts","sourceRoot":"","sources":["../../../../src/commands/__tests__/__fixtures__/upgrade-helpers.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED,eAAO,MAAM,SAAS,QAA8B,CAAC;AAErD,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,QAA2D,CAAC"}