@superblocksteam/sdk 2.0.115-next.1 → 2.0.115-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/cli-replacement/dev-s3-restore.test.d.mts +2 -0
  3. package/dist/cli-replacement/dev-s3-restore.test.d.mts.map +1 -0
  4. package/dist/cli-replacement/dev-s3-restore.test.mjs +457 -0
  5. package/dist/cli-replacement/dev-s3-restore.test.mjs.map +1 -0
  6. package/dist/cli-replacement/dev.d.mts +7 -0
  7. package/dist/cli-replacement/dev.d.mts.map +1 -1
  8. package/dist/cli-replacement/dev.mjs +49 -2
  9. package/dist/cli-replacement/dev.mjs.map +1 -1
  10. package/dist/cli-replacement/package-json-snapshot.d.mts +26 -0
  11. package/dist/cli-replacement/package-json-snapshot.d.mts.map +1 -0
  12. package/dist/cli-replacement/package-json-snapshot.mjs +222 -0
  13. package/dist/cli-replacement/package-json-snapshot.mjs.map +1 -0
  14. package/dist/cli-replacement/package-json-snapshot.test.d.mts +2 -0
  15. package/dist/cli-replacement/package-json-snapshot.test.d.mts.map +1 -0
  16. package/dist/cli-replacement/package-json-snapshot.test.mjs +207 -0
  17. package/dist/cli-replacement/package-json-snapshot.test.mjs.map +1 -0
  18. package/dist/dev-utils/dev-server-persist.test.d.mts +2 -0
  19. package/dist/dev-utils/dev-server-persist.test.d.mts.map +1 -0
  20. package/dist/dev-utils/dev-server-persist.test.mjs +77 -0
  21. package/dist/dev-utils/dev-server-persist.test.mjs.map +1 -0
  22. package/dist/dev-utils/dev-server.d.mts +1 -0
  23. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  24. package/dist/dev-utils/dev-server.mjs +75 -53
  25. package/dist/dev-utils/dev-server.mjs.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/package.json +6 -6
  31. package/src/cli-replacement/dev-s3-restore.test.mts +599 -0
  32. package/src/cli-replacement/dev.mts +91 -2
  33. package/src/cli-replacement/package-json-snapshot.mts +328 -0
  34. package/src/cli-replacement/package-json-snapshot.test.mts +250 -0
  35. package/src/dev-utils/dev-server-persist.test.mts +96 -0
  36. package/src/dev-utils/dev-server.mts +91 -73
  37. package/src/index.ts +15 -0
  38. package/tsconfig.tsbuildinfo +1 -1
@@ -1,4 +1,4 @@
1
1
 
2
- > @superblocksteam/sdk@2.0.115-next.1 build /home/runner/work/superblocks/superblocks/packages/cli/packages/sdk
2
+ > @superblocksteam/sdk@2.0.115-next.2 build /home/runner/work/superblocks/superblocks/packages/cli/packages/sdk
3
3
  > tsc --build
4
4
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dev-s3-restore.test.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-s3-restore.test.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dev-s3-restore.test.mts"],"names":[],"mappings":""}
@@ -0,0 +1,457 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as http from "node:http";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import { beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { packageJsonSnapshot } from "./package-json-snapshot.mjs";
7
+ const execMock = vi.fn();
8
+ vi.mock("node:child_process", () => ({
9
+ default: { exec: execMock },
10
+ exec: execMock,
11
+ }));
12
+ vi.mock("node:readline", () => ({
13
+ default: {
14
+ createInterface: vi.fn(() => ({ question: vi.fn(), close: vi.fn() })),
15
+ },
16
+ createInterface: vi.fn(() => ({ question: vi.fn(), close: vi.fn() })),
17
+ }));
18
+ vi.mock("fs-extra", () => ({
19
+ default: {
20
+ existsSync: vi.fn(() => true),
21
+ readFileSync: vi.fn(() => "{}"),
22
+ },
23
+ }));
24
+ vi.mock("package-manager-detector/detect", () => ({
25
+ detect: vi.fn(async () => ({
26
+ name: "npm",
27
+ agent: "npm",
28
+ version: "10.0.0",
29
+ })),
30
+ }));
31
+ vi.mock("package-manager-detector", () => ({
32
+ resolveCommand: vi.fn(() => ({
33
+ command: "npm",
34
+ args: ["install", "--fund=false", "--audit=false"],
35
+ })),
36
+ }));
37
+ vi.mock("read-pkg", () => ({
38
+ readPackage: vi.fn(async () => ({
39
+ name: "test-app",
40
+ dependencies: { "@superblocksteam/library": "1.0.0" },
41
+ })),
42
+ }));
43
+ const mockLogger = {
44
+ info: vi.fn(),
45
+ warn: vi.fn(),
46
+ error: vi.fn(),
47
+ debug: vi.fn(),
48
+ };
49
+ vi.mock("../telemetry/logging.js", () => ({
50
+ getLogger: () => mockLogger,
51
+ getErrorMeta: vi.fn(() => ({})),
52
+ }));
53
+ vi.mock("../telemetry/index.js", () => ({
54
+ getTracer: () => ({
55
+ startActiveSpan: vi.fn(async (_name, fn) => fn({ end: vi.fn(), setStatus: vi.fn() })),
56
+ }),
57
+ }));
58
+ vi.mock("@opentelemetry/api", () => ({
59
+ SpanStatusCode: { ERROR: 2 },
60
+ }));
61
+ vi.mock("colorette", () => ({
62
+ green: (s) => s,
63
+ }));
64
+ vi.mock("@superblocksteam/shared", () => ({
65
+ buildGithubSuperblocksSyncWorkflow: vi.fn(),
66
+ buildGithubSuperblocksSyncWorkflowFromBaseUrl: vi.fn(),
67
+ ConflictError: class ConflictError extends Error {
68
+ },
69
+ DEFAULT_NON_GIT_BRANCH: "__non_git__",
70
+ isGitHubRemoteUrl: vi.fn(() => false),
71
+ NotFoundError: class NotFoundError extends Error {
72
+ },
73
+ SUPERBLOCKS_LIVE_GIT_BRANCH: "__live__",
74
+ }));
75
+ vi.mock("@superblocksteam/util", () => ({
76
+ maskUnixSignals: async function maskUnixSignals(fn) {
77
+ return fn();
78
+ },
79
+ }));
80
+ vi.mock("@superblocksteam/vite-plugin-file-sync/ai-service", () => ({
81
+ AiService: class {
82
+ initialize = vi.fn(async () => undefined);
83
+ removeIntegrationCache = vi.fn(async () => undefined);
84
+ chatSessionStore = { invalidateCache: vi.fn() };
85
+ },
86
+ AiServiceFeatureFlags: class {
87
+ static create = vi.fn(() => ({}));
88
+ },
89
+ SnapshotManager: class {
90
+ executePendingRestore = vi.fn(async () => false);
91
+ },
92
+ isSdkApiTemplate: vi.fn(() => false),
93
+ }));
94
+ vi.mock("@superblocksteam/vite-plugin-file-sync/git-service", () => ({
95
+ createGitService: vi.fn(async () => undefined),
96
+ }));
97
+ const mockLockService = {
98
+ acquireLock: vi.fn(async () => undefined),
99
+ shutdown: vi.fn(async () => undefined),
100
+ shutdownAndExit: vi.fn(async () => undefined),
101
+ setIsRestarting: vi.fn(),
102
+ isLocked: false,
103
+ connectedUsers: [],
104
+ wasRecentlyActive: false,
105
+ timeSinceLastActivity: 0,
106
+ };
107
+ vi.mock("@superblocksteam/vite-plugin-file-sync/lock-service", () => ({
108
+ LockService: class {
109
+ acquireLock = mockLockService.acquireLock;
110
+ shutdown = mockLockService.shutdown;
111
+ shutdownAndExit = mockLockService.shutdownAndExit;
112
+ setIsRestarting = mockLockService.setIsRestarting;
113
+ isLocked = mockLockService.isLocked;
114
+ connectedUsers = mockLockService.connectedUsers;
115
+ wasRecentlyActive = mockLockService.wasRecentlyActive;
116
+ timeSinceLastActivity = mockLockService.timeSinceLastActivity;
117
+ },
118
+ LockType: { CSB: "CSB", LOCAL: "LOCAL" },
119
+ }));
120
+ vi.mock("@superblocksteam/vite-plugin-file-sync/operation-queue", () => ({
121
+ OperationQueue: class {
122
+ enqueue = vi.fn(async (fn) => fn());
123
+ },
124
+ }));
125
+ vi.mock("@superblocksteam/vite-plugin-file-sync/server-rpc", () => ({
126
+ AutoConnectingRpcClient: class {
127
+ },
128
+ }));
129
+ const mockSyncService = {
130
+ downloadDirectory: vi.fn(async () => undefined),
131
+ uploadDirectory: vi.fn(async () => undefined),
132
+ uploadDirectoryNowIfNeeded: vi.fn(async () => undefined),
133
+ cancelPendingSync: vi.fn(),
134
+ };
135
+ vi.mock("@superblocksteam/vite-plugin-file-sync/sync-service", () => ({
136
+ SyncService: class {
137
+ downloadDirectory = mockSyncService.downloadDirectory;
138
+ uploadDirectory = mockSyncService.uploadDirectory;
139
+ uploadDirectoryNowIfNeeded = mockSyncService.uploadDirectoryNowIfNeeded;
140
+ cancelPendingSync = mockSyncService.cancelPendingSync;
141
+ },
142
+ }));
143
+ vi.mock("@superblocksteam/vite-plugin-file-sync/draft-interface", () => ({}));
144
+ vi.mock("./version-detection.js", () => ({
145
+ getCurrentCliVersion: vi.fn(async () => ({
146
+ version: "2.0.0",
147
+ alias: undefined,
148
+ })),
149
+ }));
150
+ const mockCheckVersions = vi.fn(async () => ({
151
+ cliUpdated: false,
152
+ upgradePromises: [],
153
+ }));
154
+ vi.mock("./automatic-upgrades.js", () => ({
155
+ checkVersionsAndWritePackageJson: (...args) => mockCheckVersions(...args),
156
+ }));
157
+ vi.mock("./git-repo-setup.mjs", () => ({
158
+ ensureRemoteHasDefaultBranch: vi.fn(async () => undefined),
159
+ getGitErrorFields: vi.fn(() => ({})),
160
+ }));
161
+ const mockCreateDevServer = vi.fn(async () => http.createServer());
162
+ vi.mock("../dev-utils/dev-server.mjs", () => ({
163
+ createDevServer: (...args) => mockCreateDevServer(...args),
164
+ }));
165
+ vi.mock("../index.js", () => ({
166
+ AUTO_UPGRADE_EXIT_CODE: 99,
167
+ }));
168
+ function buildMockSdk() {
169
+ return {
170
+ hashLocalDirectory: vi.fn(async () => ({ hash: "same" })),
171
+ dbfsGetApplicationDirectoryHash: vi.fn(async () => "same"),
172
+ getApplicationGitConfig: vi.fn(async () => null),
173
+ fetchCurrentUser: vi.fn(async () => ({
174
+ user: {
175
+ id: "user-1",
176
+ name: "Test User",
177
+ email: "test@example.com",
178
+ currentOrganizationId: "org-1",
179
+ },
180
+ organizations: [{ id: "org-1", pluginExecutionVersions: {} }],
181
+ flagBootstrap: {},
182
+ })),
183
+ getFeatureFlagsForCurrentUser: vi.fn(async () => ({
184
+ devServerCloudInactivityTimeoutMinutes: () => 30,
185
+ devServerLocalInactivityTimeoutMinutes: () => 30,
186
+ enableSessionRecording: () => false,
187
+ })),
188
+ getFeatureFlagsForUser: vi.fn(() => ({
189
+ devServerCloudInactivityTimeoutMinutes: () => 30,
190
+ devServerLocalInactivityTimeoutMinutes: () => 30,
191
+ })),
192
+ };
193
+ }
194
+ function buildDevOptions(overrides = {}) {
195
+ return {
196
+ cwd: "/tmp/test-app",
197
+ downloadFirst: true,
198
+ applicationConfig: {
199
+ id: "app-test",
200
+ branchName: "main",
201
+ },
202
+ tokenConfig: {
203
+ superblocksBaseUrl: "https://example.test",
204
+ token: "test-token",
205
+ },
206
+ tokenManager: {
207
+ getToken: vi.fn(() => "test-token"),
208
+ onTokenRefresh: vi.fn(),
209
+ },
210
+ getCurrentToken: vi.fn(() => "test-token"),
211
+ sdk: buildMockSdk(),
212
+ ...overrides,
213
+ };
214
+ }
215
+ function setupExecMock() {
216
+ execMock.mockImplementation((_cmd, _opts, cb) => {
217
+ if (typeof _opts === "function") {
218
+ _opts(null, {
219
+ stdout: "installed",
220
+ });
221
+ }
222
+ else if (cb) {
223
+ cb(null, { stdout: "installed" });
224
+ }
225
+ });
226
+ }
227
+ function expectInstallToHaveRun() {
228
+ const installCall = execMock.mock.calls.find((call) => typeof call[0] === "string" && call[0].includes("install"));
229
+ expect(installCall).toBeDefined();
230
+ }
231
+ describe("dev startup after S3 workspace restore", () => {
232
+ beforeEach(async () => {
233
+ vi.clearAllMocks();
234
+ setupExecMock();
235
+ mockCheckVersions.mockResolvedValue({
236
+ cliUpdated: false,
237
+ upgradePromises: [],
238
+ });
239
+ const { readPackage } = await import("read-pkg");
240
+ readPackage.mockResolvedValue({
241
+ name: "test-app",
242
+ dependencies: { "@superblocksteam/library": "1.0.0" },
243
+ });
244
+ });
245
+ it("keeps the existing no-op path when package.json is unchanged", async () => {
246
+ const { dev } = await import("./dev.mjs");
247
+ await dev(buildDevOptions());
248
+ expect(execMock).not.toHaveBeenCalled();
249
+ expect(mockLogger.info).toHaveBeenCalledWith("Package install decision", expect.objectContaining({
250
+ packageJsonRequiresInstall: false,
251
+ forcePackageInstall: false,
252
+ upgradePromiseCount: 0,
253
+ }));
254
+ });
255
+ it("runs npm install when auto-upgrade only rewrites @superblocksteam/library", async () => {
256
+ const { readPackage } = await import("read-pkg");
257
+ readPackage
258
+ .mockResolvedValueOnce({
259
+ name: "test-app",
260
+ dependencies: { "@superblocksteam/library": "1.0.0" },
261
+ })
262
+ .mockResolvedValueOnce({
263
+ name: "test-app",
264
+ dependencies: { "@superblocksteam/library": "2.0.0" },
265
+ });
266
+ const { dev } = await import("./dev.mjs");
267
+ await dev(buildDevOptions());
268
+ expectInstallToHaveRun();
269
+ });
270
+ it("normalizes library drift introduced by warm DBFS download before package comparison", async () => {
271
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "sdk-dev-dbfs-"));
272
+ const warmPackageJson = {
273
+ name: "test-app",
274
+ dependencies: {
275
+ "@superblocksteam/library": "2.0.0",
276
+ react: "19.0.0",
277
+ },
278
+ };
279
+ const staleLibraryPackageJson = {
280
+ name: "test-app",
281
+ dependencies: {
282
+ "@superblocksteam/library": "1.0.0",
283
+ react: "19.0.0",
284
+ },
285
+ };
286
+ try {
287
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(warmPackageJson, null, 2));
288
+ const { readPackage } = await import("read-pkg");
289
+ readPackage.mockImplementation(async ({ cwd }) => JSON.parse(await fs.readFile(path.join(cwd, "package.json"), "utf-8")));
290
+ mockSyncService.downloadDirectory.mockImplementationOnce(async () => {
291
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(staleLibraryPackageJson, null, 2));
292
+ });
293
+ const sdk = buildMockSdk();
294
+ sdk.hashLocalDirectory = vi.fn(async () => ({ hash: "local" }));
295
+ sdk.dbfsGetApplicationDirectoryHash = vi.fn(async () => "server");
296
+ const { dev } = await import("./dev.mjs");
297
+ await dev(buildDevOptions({
298
+ cwd: tmpDir,
299
+ sdk,
300
+ normalizeManagedPackageDependencies: true,
301
+ }));
302
+ const finalPackageJson = JSON.parse(await fs.readFile(path.join(tmpDir, "package.json"), "utf-8"));
303
+ expect(finalPackageJson.dependencies["@superblocksteam/library"]).toBe("2.0.0");
304
+ expect(execMock).not.toHaveBeenCalled();
305
+ }
306
+ finally {
307
+ await fs.rm(tmpDir, { recursive: true, force: true });
308
+ }
309
+ });
310
+ it("normalizes managed template dependency drift introduced by warm DBFS download before package comparison", async () => {
311
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "sdk-dev-dbfs-"));
312
+ const warmPackageJson = {
313
+ name: "test-app",
314
+ dependencies: {
315
+ "@superblocksteam/library": "2.0.0",
316
+ "@superblocksteam/sdk-api": "2.0.0",
317
+ react: "19.0.0",
318
+ },
319
+ };
320
+ const staleManagedPackageJson = {
321
+ name: "test-app",
322
+ dependencies: {
323
+ "@superblocksteam/library": "2.0.0",
324
+ "@superblocksteam/sdk-api": "1.0.0",
325
+ react: "19.0.0",
326
+ },
327
+ };
328
+ try {
329
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(warmPackageJson, null, 2));
330
+ const { readPackage } = await import("read-pkg");
331
+ readPackage.mockImplementation(async ({ cwd }) => JSON.parse(await fs.readFile(path.join(cwd, "package.json"), "utf-8")));
332
+ mockSyncService.downloadDirectory.mockImplementationOnce(async () => {
333
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(staleManagedPackageJson, null, 2));
334
+ });
335
+ const sdk = buildMockSdk();
336
+ sdk.hashLocalDirectory = vi.fn(async () => ({ hash: "local" }));
337
+ sdk.dbfsGetApplicationDirectoryHash = vi.fn(async () => "server");
338
+ const { dev } = await import("./dev.mjs");
339
+ await dev(buildDevOptions({
340
+ cwd: tmpDir,
341
+ sdk,
342
+ normalizeManagedPackageDependencies: true,
343
+ }));
344
+ const finalPackageJson = JSON.parse(await fs.readFile(path.join(tmpDir, "package.json"), "utf-8"));
345
+ expect(finalPackageJson.dependencies["@superblocksteam/sdk-api"]).toBe("2.0.0");
346
+ expect(execMock).not.toHaveBeenCalled();
347
+ }
348
+ finally {
349
+ await fs.rm(tmpDir, { recursive: true, force: true });
350
+ }
351
+ });
352
+ it("does not normalize library drift for normal DBFS download-first startup", async () => {
353
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "sdk-dev-dbfs-"));
354
+ const localPackageJson = {
355
+ name: "test-app",
356
+ dependencies: {
357
+ "@superblocksteam/library": "2.0.0",
358
+ react: "19.0.0",
359
+ },
360
+ };
361
+ const serverPackageJson = {
362
+ name: "test-app",
363
+ dependencies: {
364
+ "@superblocksteam/library": "1.0.0",
365
+ react: "19.0.0",
366
+ },
367
+ };
368
+ try {
369
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(localPackageJson, null, 2));
370
+ const { readPackage } = await import("read-pkg");
371
+ readPackage.mockImplementation(async ({ cwd }) => JSON.parse(await fs.readFile(path.join(cwd, "package.json"), "utf-8")));
372
+ mockSyncService.downloadDirectory.mockImplementationOnce(async () => {
373
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(serverPackageJson, null, 2));
374
+ });
375
+ const sdk = buildMockSdk();
376
+ sdk.hashLocalDirectory = vi.fn(async () => ({ hash: "local" }));
377
+ sdk.dbfsGetApplicationDirectoryHash = vi.fn(async () => "server");
378
+ const { dev } = await import("./dev.mjs");
379
+ await dev(buildDevOptions({
380
+ cwd: tmpDir,
381
+ sdk,
382
+ }));
383
+ const finalPackageJson = JSON.parse(await fs.readFile(path.join(tmpDir, "package.json"), "utf-8"));
384
+ expect(finalPackageJson.dependencies["@superblocksteam/library"]).toBe("1.0.0");
385
+ expectInstallToHaveRun();
386
+ }
387
+ finally {
388
+ await fs.rm(tmpDir, { recursive: true, force: true });
389
+ }
390
+ });
391
+ it("runs npm install when S3 restore changes package.json install inputs", async () => {
392
+ const { dev } = await import("./dev.mjs");
393
+ await dev(buildDevOptions({
394
+ forcePackageInstall: true,
395
+ }));
396
+ expectInstallToHaveRun();
397
+ expect(mockLogger.info).toHaveBeenCalledWith("Package install decision", expect.objectContaining({
398
+ packageJsonRequiresInstall: false,
399
+ forcePackageInstall: true,
400
+ upgradePromiseCount: 0,
401
+ }));
402
+ });
403
+ it("uploads local package state when S3 restore forces package installation", async () => {
404
+ const { dev } = await import("./dev.mjs");
405
+ await dev(buildDevOptions({
406
+ forcePackageInstall: true,
407
+ }));
408
+ expect(mockSyncService.uploadDirectory).toHaveBeenCalledWith("cli:sdk");
409
+ expect(mockSyncService.uploadDirectoryNowIfNeeded).toHaveBeenCalledWith("cli:sdk");
410
+ });
411
+ it("clears forced npm install when DBFS restores package.json to the pre-restore install inputs", async () => {
412
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "sdk-dev-dbfs-"));
413
+ const warmPackageJson = {
414
+ name: "test-app",
415
+ dependencies: {
416
+ "@superblocksteam/library": "2.0.0",
417
+ react: "19.0.0",
418
+ },
419
+ };
420
+ const restoredPackageJson = {
421
+ name: "test-app",
422
+ dependencies: {
423
+ "@superblocksteam/library": "2.0.0",
424
+ random: "1.0.0",
425
+ react: "19.0.0",
426
+ },
427
+ };
428
+ try {
429
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(restoredPackageJson, null, 2));
430
+ const { readPackage } = await import("read-pkg");
431
+ readPackage.mockImplementation(async ({ cwd }) => JSON.parse(await fs.readFile(path.join(cwd, "package.json"), "utf-8")));
432
+ mockSyncService.downloadDirectory.mockImplementationOnce(async () => {
433
+ await fs.writeFile(path.join(tmpDir, "package.json"), JSON.stringify(warmPackageJson, null, 2));
434
+ });
435
+ const sdk = buildMockSdk();
436
+ sdk.hashLocalDirectory = vi.fn(async () => ({ hash: "local" }));
437
+ sdk.dbfsGetApplicationDirectoryHash = vi.fn(async () => "server");
438
+ const { dev } = await import("./dev.mjs");
439
+ await dev(buildDevOptions({
440
+ cwd: tmpDir,
441
+ forcePackageInstall: true,
442
+ packageJsonSnapshotBeforeRestore: packageJsonSnapshot(warmPackageJson),
443
+ sdk,
444
+ }));
445
+ expect(execMock).not.toHaveBeenCalled();
446
+ expect(mockLogger.info).toHaveBeenCalledWith("Package install decision", expect.objectContaining({
447
+ forcePackageInstall: false,
448
+ forcePackageInstallRequested: true,
449
+ packageJsonRequiresInstall: false,
450
+ }));
451
+ }
452
+ finally {
453
+ await fs.rm(tmpDir, { recursive: true, force: true });
454
+ }
455
+ });
456
+ });
457
+ //# sourceMappingURL=dev-s3-restore.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-s3-restore.test.mjs","sourceRoot":"","sources":["../../src/cli-replacement/dev-s3-restore.test.mts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Server as HttpServer } from "node:http";
2
2
  import type { AuthHotReloadServer, MultiPageApplicationWrapper, TokenManager, SuperblocksSdk } from "../index.js";
3
3
  import type { ApplicationConfig, TokenConfig } from "../types/index.js";
4
+ import { type PackageJsonSnapshot } from "./package-json-snapshot.mjs";
4
5
  export declare enum DevServerAutoUpgradeMode {
5
6
  SKIP = "skip-upgrade",
6
7
  FORCE = "force-upgrade",
@@ -34,5 +35,11 @@ export declare function dev(options: {
34
35
  prefetchedApplication?: MultiPageApplicationWrapper;
35
36
  /** Pre-existing HTTP server from warm standby mode (avoids port gap on transition). */
36
37
  existingServer?: HttpServer;
38
+ /** Force package installation when the caller has detected dependency drift. */
39
+ forcePackageInstall?: boolean;
40
+ /** Package snapshot before S3 workspace restore; used to refresh forced install after DBFS sync. */
41
+ packageJsonSnapshotBeforeRestore?: PackageJsonSnapshot | null;
42
+ /** Restore managed warm-template package pins after DBFS download in S3 warm restore flow. */
43
+ normalizeManagedPackageDependencies?: boolean;
37
44
  }): Promise<void>;
38
45
  //# sourceMappingURL=dev.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dev.mts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAwCtD,OAAO,KAAK,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,EACZ,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,iBAAiB,EAEjB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAkM3B,oBAAY,wBAAwB;IAClC,IAAI,iBAAiB;IACrB,KAAK,kBAAkB;IACvB;;;;;;OAMG;IACH,aAAa,kBAAkB;CAChC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE;IAEjC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IAGzB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAG1C,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAG3C,MAAM,CAAC,EAAE,WAAW,CAAC;IAGrB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,GAAG,EAAE,cAAc,CAAC;IAEpB,mGAAmG;IACnG,qBAAqB,CAAC,EAAE,2BAA2B,CAAC;IAEpD,uFAAuF;IACvF,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B,iBA0uBA"}
1
+ {"version":3,"file":"dev.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dev.mts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAwCtD,OAAO,KAAK,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,EACZ,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,iBAAiB,EAEjB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAIL,KAAK,mBAAmB,EAEzB,MAAM,6BAA6B,CAAC;AA6LrC,oBAAY,wBAAwB;IAClC,IAAI,iBAAiB;IACrB,KAAK,kBAAkB;IACvB;;;;;;OAMG;IACH,aAAa,kBAAkB;CAChC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE;IAEjC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC;IAGzB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAG1C,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAG3C,MAAM,CAAC,EAAE,WAAW,CAAC;IAGrB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,GAAG,EAAE,cAAc,CAAC;IAEpB,mGAAmG;IACnG,qBAAqB,CAAC,EAAE,2BAA2B,CAAC;IAEpD,uFAAuF;IACvF,cAAc,CAAC,EAAE,UAAU,CAAC;IAE5B,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,oGAAoG;IACpG,gCAAgC,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAE9D,8FAA8F;IAC9F,mCAAmC,CAAC,EAAE,OAAO,CAAC;CAC/C,iBAmzBA"}
@@ -22,6 +22,7 @@ import { getTracer } from "../telemetry/index.js";
22
22
  import { getErrorMeta, getLogger } from "../telemetry/logging.js";
23
23
  import { checkVersionsAndWritePackageJson } from "./automatic-upgrades.js";
24
24
  import { ensureRemoteHasDefaultBranch, getGitErrorFields, } from "./git-repo-setup.mjs";
25
+ import { didPackageJsonSnapshotChange, packageJsonSnapshot, packageJsonSnapshotDiagnostic, restoreManagedPackageDependencies, } from "./package-json-snapshot.mjs";
25
26
  import { getCurrentCliVersion } from "./version-detection.js";
26
27
  const exec = promisify(child_process.exec);
27
28
  const passErrorToVSCode = (message, logger) => {
@@ -353,11 +354,17 @@ export async function dev(options) {
353
354
  throw new Error("Choose either --download-first or --upload-first");
354
355
  }
355
356
  let hasPackageChanged = false;
357
+ let packageJsonRequiresInstall = false;
358
+ const hasPackageJsonSnapshotBeforeRestore = options.packageJsonSnapshotBeforeRestore !== undefined;
356
359
  const packageJsonBefore = await readPkgJson(cwd);
357
360
  if (downloadFirst && !isSynced) {
358
361
  await tracer.startActiveSpan("downloadFirst", async (span) => {
359
362
  logger.info(`Starting download of branch '${activeDbfsBranchName}'`);
360
363
  await syncService.downloadDirectory();
364
+ if (options.normalizeManagedPackageDependencies &&
365
+ (await restoreManagedPackageDependencies(cwd, packageJsonBefore))) {
366
+ logger.info("Restored managed package dependencies to the warm template versions after DBFS download");
367
+ }
361
368
  span.end();
362
369
  });
363
370
  }
@@ -550,6 +557,9 @@ export async function dev(options) {
550
557
  });
551
558
  }
552
559
  const packageJsonAfter = await readPkgJson(cwd);
560
+ let packageJsonSnapshotBefore = null;
561
+ let packageJsonSnapshotAfter = null;
562
+ let packageJsonInstallBaselineSnapshot = null;
553
563
  if (packageJsonBefore && packageJsonAfter) {
554
564
  hasPackageChanged =
555
565
  JSON.stringify(packageJsonBefore, null, 2) !==
@@ -557,9 +567,45 @@ export async function dev(options) {
557
567
  }
558
568
  else if (packageJsonAfter) {
559
569
  hasPackageChanged = true;
570
+ }
571
+ if (packageJsonBefore) {
572
+ packageJsonSnapshotBefore =
573
+ packageJsonSnapshot(packageJsonBefore);
574
+ }
575
+ if (packageJsonAfter) {
576
+ packageJsonSnapshotAfter = packageJsonSnapshot(packageJsonAfter);
577
+ }
578
+ packageJsonInstallBaselineSnapshot =
579
+ hasPackageJsonSnapshotBeforeRestore
580
+ ? (options.packageJsonSnapshotBeforeRestore ?? null)
581
+ : packageJsonSnapshotBefore;
582
+ if (packageJsonAfter) {
583
+ packageJsonRequiresInstall = didPackageJsonSnapshotChange(packageJsonInstallBaselineSnapshot, packageJsonSnapshotAfter);
584
+ }
585
+ if (!packageJsonBefore && packageJsonRequiresInstall) {
560
586
  logger.info("package.json was created, installing packages…");
561
587
  }
562
- if (hasPackageChanged || upgradePromises.length > 0) {
588
+ const forcePackageInstallRequested = !!options.forcePackageInstall;
589
+ let forcePackageInstall = forcePackageInstallRequested;
590
+ if (forcePackageInstallRequested &&
591
+ hasPackageJsonSnapshotBeforeRestore) {
592
+ forcePackageInstall = packageJsonRequiresInstall;
593
+ }
594
+ logger.info("Package install decision", {
595
+ packageJsonBeforePresent: !!packageJsonBefore,
596
+ packageJsonAfterPresent: !!packageJsonAfter,
597
+ hasPackageChanged,
598
+ packageJsonRequiresInstall,
599
+ forcePackageInstall,
600
+ forcePackageInstallRequested,
601
+ upgradePromiseCount: upgradePromises.length,
602
+ packageJsonSnapshotBefore: packageJsonSnapshotDiagnostic(packageJsonSnapshotBefore),
603
+ packageJsonInstallBaselineSnapshot: packageJsonSnapshotDiagnostic(packageJsonInstallBaselineSnapshot),
604
+ packageJsonSnapshotAfter: packageJsonSnapshotDiagnostic(packageJsonSnapshotAfter),
605
+ });
606
+ if (packageJsonRequiresInstall ||
607
+ upgradePromises.length > 0 ||
608
+ forcePackageInstall) {
563
609
  logger.info("Installing packages…");
564
610
  await tracer.startActiveSpan("installPackages", async (span) => {
565
611
  try {
@@ -577,7 +623,8 @@ export async function dev(options) {
577
623
  else {
578
624
  logger.info("package.json has not changed, skipping package installation");
579
625
  }
580
- if (hasPackageChanged || uploadFirst) {
626
+ const shouldUploadPackageState = hasPackageChanged || forcePackageInstall;
627
+ if (shouldUploadPackageState || uploadFirst) {
581
628
  logger.info(`Uploading local files to branch '${activeDbfsBranchName}' on server before starting`);
582
629
  await tracer.startActiveSpan("uploadFirstOrPackageChanged", async (span) => {
583
630
  await syncService.uploadDirectory("cli:sdk");