@superblocksteam/sdk 2.0.110-next.8 → 2.0.110
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.
- package/.turbo/turbo-build.log +1 -1
- package/dist/cli-replacement/automatic-upgrades.d.ts +1 -1
- package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -1
- package/dist/cli-replacement/automatic-upgrades.js +2 -4
- package/dist/cli-replacement/automatic-upgrades.js.map +1 -1
- package/dist/cli-replacement/dev.d.mts +1 -12
- package/dist/cli-replacement/dev.d.mts.map +1 -1
- package/dist/cli-replacement/dev.mjs +3 -21
- package/dist/cli-replacement/dev.mjs.map +1 -1
- package/dist/dev-utils/dev-server.d.mts +1 -18
- package/dist/dev-utils/dev-server.d.mts.map +1 -1
- package/dist/dev-utils/dev-server.mjs +42 -228
- package/dist/dev-utils/dev-server.mjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/cli-replacement/automatic-upgrades.ts +1 -6
- package/src/cli-replacement/dev.mts +2 -27
- package/src/dev-utils/dev-server.mts +47 -281
- package/src/index.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/cli-replacement/automatic-upgrades.test.d.ts +0 -11
- package/dist/cli-replacement/automatic-upgrades.test.d.ts.map +0 -1
- package/dist/cli-replacement/automatic-upgrades.test.js +0 -175
- package/dist/cli-replacement/automatic-upgrades.test.js.map +0 -1
- package/src/cli-replacement/automatic-upgrades.test.ts +0 -251
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for checkVersionsAndWritePackageJson, specifically around the
|
|
3
|
-
* skipCliUpgrade parameter introduced for warm pool activation.
|
|
4
|
-
*
|
|
5
|
-
* Warm pods ship with the latest CLI, so an auto-upgrade would pointlessly
|
|
6
|
-
* restart the process and defeat the warm pool. But we still need the
|
|
7
|
-
* package.json version sync when resuming an existing app so the user's
|
|
8
|
-
* @superblocksteam/library pin matches the target version.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=automatic-upgrades.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"automatic-upgrades.test.d.ts","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for checkVersionsAndWritePackageJson, specifically around the
|
|
3
|
-
* skipCliUpgrade parameter introduced for warm pool activation.
|
|
4
|
-
*
|
|
5
|
-
* Warm pods ship with the latest CLI, so an auto-upgrade would pointlessly
|
|
6
|
-
* restart the process and defeat the warm pool. But we still need the
|
|
7
|
-
* package.json version sync when resuming an existing app so the user's
|
|
8
|
-
* @superblocksteam/library pin matches the target version.
|
|
9
|
-
*/
|
|
10
|
-
import fs from "node:fs/promises";
|
|
11
|
-
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
12
|
-
import { checkVersionsAndWritePackageJson } from "./automatic-upgrades.js";
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
// Mocks
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
vi.mock("node:fs/promises", () => ({
|
|
17
|
-
default: {
|
|
18
|
-
readFile: vi.fn(),
|
|
19
|
-
writeFile: vi.fn(),
|
|
20
|
-
},
|
|
21
|
-
}));
|
|
22
|
-
vi.mock("node:child_process", () => ({
|
|
23
|
-
exec: vi.fn(),
|
|
24
|
-
}));
|
|
25
|
-
const upgradeWithPackageManagerCalls = [];
|
|
26
|
-
vi.mock("package-manager-detector/detect", () => ({
|
|
27
|
-
detect: vi.fn(async () => ({
|
|
28
|
-
name: "pnpm",
|
|
29
|
-
agent: "pnpm",
|
|
30
|
-
version: "10.0.0",
|
|
31
|
-
})),
|
|
32
|
-
}));
|
|
33
|
-
vi.mock("package-manager-detector", () => ({
|
|
34
|
-
resolveCommand: vi.fn(() => ({ command: "pnpm", args: ["install"] })),
|
|
35
|
-
}));
|
|
36
|
-
vi.mock("./version-detection.js", () => ({
|
|
37
|
-
getCurrentCliVersion: vi.fn(async () => ({
|
|
38
|
-
version: "2.0.0",
|
|
39
|
-
alias: undefined,
|
|
40
|
-
})),
|
|
41
|
-
clearCliVersionCache: vi.fn(),
|
|
42
|
-
}));
|
|
43
|
-
vi.mock("../telemetry/logging.js", () => ({
|
|
44
|
-
getLogger: () => ({
|
|
45
|
-
info: vi.fn(),
|
|
46
|
-
warn: vi.fn(),
|
|
47
|
-
error: vi.fn(),
|
|
48
|
-
debug: vi.fn(),
|
|
49
|
-
}),
|
|
50
|
-
getErrorMeta: vi.fn(() => ({})),
|
|
51
|
-
}));
|
|
52
|
-
vi.mock("../telemetry/index.js", () => ({
|
|
53
|
-
getTracer: () => ({
|
|
54
|
-
startActiveSpan: vi.fn((_name, fn) => fn({ end: vi.fn() })),
|
|
55
|
-
}),
|
|
56
|
-
}));
|
|
57
|
-
vi.mock("@superblocksteam/shared", async () => {
|
|
58
|
-
return {
|
|
59
|
-
NON_SB_ORG_UPDATE_ERROR: "non_sb_org_update_error",
|
|
60
|
-
// traceFunction in tests is a passthrough — we just want the fn to run.
|
|
61
|
-
traceFunction: async ({ fn }) => {
|
|
62
|
-
return await fn();
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
});
|
|
66
|
-
// ---------------------------------------------------------------------------
|
|
67
|
-
// Test fixtures
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
|
-
const TARGET_CLI_VERSION = "2.1.0"; // newer than the mocked current 2.0.0
|
|
70
|
-
const TARGET_LIBRARY_VERSION = "1.9.0";
|
|
71
|
-
const mockLockService = {
|
|
72
|
-
shutdown: vi.fn(async () => undefined),
|
|
73
|
-
};
|
|
74
|
-
const mockConfig = {
|
|
75
|
-
id: "app-123",
|
|
76
|
-
branchName: "main",
|
|
77
|
-
superblocksBaseUrl: "https://example.test",
|
|
78
|
-
token: "test-token",
|
|
79
|
-
userId: "user-1",
|
|
80
|
-
userEmail: "test@example.com",
|
|
81
|
-
organizationId: "org-1",
|
|
82
|
-
featureFlags: {},
|
|
83
|
-
};
|
|
84
|
-
beforeEach(() => {
|
|
85
|
-
vi.clearAllMocks();
|
|
86
|
-
upgradeWithPackageManagerCalls.length = 0;
|
|
87
|
-
// Mock global fetch used by getRemoteVersions
|
|
88
|
-
global.fetch = vi.fn(async () => ({
|
|
89
|
-
ok: true,
|
|
90
|
-
json: async () => ({
|
|
91
|
-
data: {
|
|
92
|
-
cli: TARGET_CLI_VERSION,
|
|
93
|
-
library: TARGET_LIBRARY_VERSION,
|
|
94
|
-
},
|
|
95
|
-
}),
|
|
96
|
-
}));
|
|
97
|
-
// Default package.json content
|
|
98
|
-
vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify({
|
|
99
|
-
name: "test-app",
|
|
100
|
-
dependencies: {
|
|
101
|
-
"@superblocksteam/library": "1.0.0",
|
|
102
|
-
},
|
|
103
|
-
}));
|
|
104
|
-
vi.mocked(fs.writeFile).mockResolvedValue(undefined);
|
|
105
|
-
});
|
|
106
|
-
// ---------------------------------------------------------------------------
|
|
107
|
-
// Tests
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
describe("checkVersionsAndWritePackageJson", () => {
|
|
110
|
-
describe("skipCliUpgrade=true (warm pool activation)", () => {
|
|
111
|
-
it("still writes package.json with the target library version", async () => {
|
|
112
|
-
await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, // forceUpgrade
|
|
113
|
-
true);
|
|
114
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
115
|
-
const [, writtenContent] = vi.mocked(fs.writeFile).mock.calls[0];
|
|
116
|
-
const parsed = JSON.parse(writtenContent);
|
|
117
|
-
expect(parsed.dependencies["@superblocksteam/library"]).toBe(TARGET_LIBRARY_VERSION);
|
|
118
|
-
});
|
|
119
|
-
it("does NOT call the oclif CLI upgrader even when CLI is stale", async () => {
|
|
120
|
-
const { exec } = await import("node:child_process");
|
|
121
|
-
// If an upgrade were attempted, upgradeCliWithOclif would exec
|
|
122
|
-
// `which superblocks`. We assert that does not happen.
|
|
123
|
-
await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, true);
|
|
124
|
-
expect(exec).not.toHaveBeenCalled();
|
|
125
|
-
});
|
|
126
|
-
it("returns cliUpdated=false regardless of CLI version gap", async () => {
|
|
127
|
-
const result = await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, true);
|
|
128
|
-
expect(result.cliUpdated).toBe(false);
|
|
129
|
-
});
|
|
130
|
-
it("skipCliUpgrade overrides forceUpgrade", async () => {
|
|
131
|
-
const { exec } = await import("node:child_process");
|
|
132
|
-
await checkVersionsAndWritePackageJson(mockLockService, mockConfig, true, // forceUpgrade — should be overridden by skipCliUpgrade
|
|
133
|
-
true);
|
|
134
|
-
expect(exec).not.toHaveBeenCalled();
|
|
135
|
-
// But package.json still gets written
|
|
136
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
describe("skipCliUpgrade=false (default)", () => {
|
|
140
|
-
it("writes package.json with the target library version", async () => {
|
|
141
|
-
await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, false);
|
|
142
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
143
|
-
const [, writtenContent] = vi.mocked(fs.writeFile).mock.calls[0];
|
|
144
|
-
const parsed = JSON.parse(writtenContent);
|
|
145
|
-
expect(parsed.dependencies["@superblocksteam/library"]).toBe(TARGET_LIBRARY_VERSION);
|
|
146
|
-
});
|
|
147
|
-
it("defaults to false when omitted (backward compat)", async () => {
|
|
148
|
-
// 3-arg call (pre-warm-pool signature) should behave as skipCliUpgrade=false
|
|
149
|
-
const result = await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false);
|
|
150
|
-
// Still writes package.json
|
|
151
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
152
|
-
expect(result).toBeDefined();
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
describe("SNAPSHOT library versions", () => {
|
|
156
|
-
it("pins to ephemeral alias when library target is a SNAPSHOT", async () => {
|
|
157
|
-
const snapshotVersion = "1.9.0-SNAPSHOT.abc123";
|
|
158
|
-
global.fetch = vi.fn(async () => ({
|
|
159
|
-
ok: true,
|
|
160
|
-
json: async () => ({
|
|
161
|
-
data: {
|
|
162
|
-
cli: TARGET_CLI_VERSION,
|
|
163
|
-
library: snapshotVersion,
|
|
164
|
-
},
|
|
165
|
-
}),
|
|
166
|
-
}));
|
|
167
|
-
await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, true);
|
|
168
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
169
|
-
const [, writtenContent] = vi.mocked(fs.writeFile).mock.calls[0];
|
|
170
|
-
const parsed = JSON.parse(writtenContent);
|
|
171
|
-
expect(parsed.dependencies["@superblocksteam/library"]).toBe(`npm:@superblocksteam/library-ephemeral@${snapshotVersion}`);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
//# sourceMappingURL=automatic-upgrades.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"automatic-upgrades.test.js","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for checkVersionsAndWritePackageJson, specifically around the
|
|
3
|
-
* skipCliUpgrade parameter introduced for warm pool activation.
|
|
4
|
-
*
|
|
5
|
-
* Warm pods ship with the latest CLI, so an auto-upgrade would pointlessly
|
|
6
|
-
* restart the process and defeat the warm pool. But we still need the
|
|
7
|
-
* package.json version sync when resuming an existing app so the user's
|
|
8
|
-
* @superblocksteam/library pin matches the target version.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import fs from "node:fs/promises";
|
|
12
|
-
|
|
13
|
-
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
14
|
-
|
|
15
|
-
import { checkVersionsAndWritePackageJson } from "./automatic-upgrades.js";
|
|
16
|
-
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Mocks
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
|
|
21
|
-
vi.mock("node:fs/promises", () => ({
|
|
22
|
-
default: {
|
|
23
|
-
readFile: vi.fn(),
|
|
24
|
-
writeFile: vi.fn(),
|
|
25
|
-
},
|
|
26
|
-
}));
|
|
27
|
-
|
|
28
|
-
vi.mock("node:child_process", () => ({
|
|
29
|
-
exec: vi.fn(),
|
|
30
|
-
}));
|
|
31
|
-
|
|
32
|
-
const upgradeWithPackageManagerCalls: unknown[] = [];
|
|
33
|
-
vi.mock("package-manager-detector/detect", () => ({
|
|
34
|
-
detect: vi.fn(async () => ({
|
|
35
|
-
name: "pnpm",
|
|
36
|
-
agent: "pnpm",
|
|
37
|
-
version: "10.0.0",
|
|
38
|
-
})),
|
|
39
|
-
}));
|
|
40
|
-
|
|
41
|
-
vi.mock("package-manager-detector", () => ({
|
|
42
|
-
resolveCommand: vi.fn(() => ({ command: "pnpm", args: ["install"] })),
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
vi.mock("./version-detection.js", () => ({
|
|
46
|
-
getCurrentCliVersion: vi.fn(async () => ({
|
|
47
|
-
version: "2.0.0",
|
|
48
|
-
alias: undefined,
|
|
49
|
-
})),
|
|
50
|
-
clearCliVersionCache: vi.fn(),
|
|
51
|
-
}));
|
|
52
|
-
|
|
53
|
-
vi.mock("../telemetry/logging.js", () => ({
|
|
54
|
-
getLogger: () => ({
|
|
55
|
-
info: vi.fn(),
|
|
56
|
-
warn: vi.fn(),
|
|
57
|
-
error: vi.fn(),
|
|
58
|
-
debug: vi.fn(),
|
|
59
|
-
}),
|
|
60
|
-
getErrorMeta: vi.fn(() => ({})),
|
|
61
|
-
}));
|
|
62
|
-
|
|
63
|
-
vi.mock("../telemetry/index.js", () => ({
|
|
64
|
-
getTracer: () => ({
|
|
65
|
-
startActiveSpan: vi.fn((_name, fn) => fn({ end: vi.fn() })),
|
|
66
|
-
}),
|
|
67
|
-
}));
|
|
68
|
-
|
|
69
|
-
vi.mock("@superblocksteam/shared", async () => {
|
|
70
|
-
return {
|
|
71
|
-
NON_SB_ORG_UPDATE_ERROR: "non_sb_org_update_error",
|
|
72
|
-
// traceFunction in tests is a passthrough — we just want the fn to run.
|
|
73
|
-
traceFunction: async ({ fn }: { fn: () => Promise<unknown> }) => {
|
|
74
|
-
return await fn();
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// ---------------------------------------------------------------------------
|
|
80
|
-
// Test fixtures
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
|
|
83
|
-
const TARGET_CLI_VERSION = "2.1.0"; // newer than the mocked current 2.0.0
|
|
84
|
-
const TARGET_LIBRARY_VERSION = "1.9.0";
|
|
85
|
-
|
|
86
|
-
const mockLockService = {
|
|
87
|
-
shutdown: vi.fn(async () => undefined),
|
|
88
|
-
} as unknown as Parameters<typeof checkVersionsAndWritePackageJson>[0];
|
|
89
|
-
|
|
90
|
-
const mockConfig: Parameters<typeof checkVersionsAndWritePackageJson>[1] = {
|
|
91
|
-
id: "app-123",
|
|
92
|
-
branchName: "main",
|
|
93
|
-
superblocksBaseUrl: "https://example.test",
|
|
94
|
-
token: "test-token",
|
|
95
|
-
userId: "user-1",
|
|
96
|
-
userEmail: "test@example.com",
|
|
97
|
-
organizationId: "org-1",
|
|
98
|
-
featureFlags: {},
|
|
99
|
-
} as unknown as Parameters<typeof checkVersionsAndWritePackageJson>[1];
|
|
100
|
-
|
|
101
|
-
beforeEach(() => {
|
|
102
|
-
vi.clearAllMocks();
|
|
103
|
-
upgradeWithPackageManagerCalls.length = 0;
|
|
104
|
-
|
|
105
|
-
// Mock global fetch used by getRemoteVersions
|
|
106
|
-
global.fetch = vi.fn(async () => ({
|
|
107
|
-
ok: true,
|
|
108
|
-
json: async () => ({
|
|
109
|
-
data: {
|
|
110
|
-
cli: TARGET_CLI_VERSION,
|
|
111
|
-
library: TARGET_LIBRARY_VERSION,
|
|
112
|
-
},
|
|
113
|
-
}),
|
|
114
|
-
})) as unknown as typeof fetch;
|
|
115
|
-
|
|
116
|
-
// Default package.json content
|
|
117
|
-
vi.mocked(fs.readFile).mockResolvedValue(
|
|
118
|
-
JSON.stringify({
|
|
119
|
-
name: "test-app",
|
|
120
|
-
dependencies: {
|
|
121
|
-
"@superblocksteam/library": "1.0.0",
|
|
122
|
-
},
|
|
123
|
-
}),
|
|
124
|
-
);
|
|
125
|
-
vi.mocked(fs.writeFile).mockResolvedValue(undefined);
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
// Tests
|
|
130
|
-
// ---------------------------------------------------------------------------
|
|
131
|
-
|
|
132
|
-
describe("checkVersionsAndWritePackageJson", () => {
|
|
133
|
-
describe("skipCliUpgrade=true (warm pool activation)", () => {
|
|
134
|
-
it("still writes package.json with the target library version", async () => {
|
|
135
|
-
await checkVersionsAndWritePackageJson(
|
|
136
|
-
mockLockService,
|
|
137
|
-
mockConfig,
|
|
138
|
-
false, // forceUpgrade
|
|
139
|
-
true, // skipCliUpgrade — the warm pool case
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
143
|
-
const [, writtenContent] = vi.mocked(fs.writeFile).mock.calls[0];
|
|
144
|
-
const parsed = JSON.parse(writtenContent as string);
|
|
145
|
-
expect(parsed.dependencies["@superblocksteam/library"]).toBe(
|
|
146
|
-
TARGET_LIBRARY_VERSION,
|
|
147
|
-
);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it("does NOT call the oclif CLI upgrader even when CLI is stale", async () => {
|
|
151
|
-
const { exec } = await import("node:child_process");
|
|
152
|
-
// If an upgrade were attempted, upgradeCliWithOclif would exec
|
|
153
|
-
// `which superblocks`. We assert that does not happen.
|
|
154
|
-
|
|
155
|
-
await checkVersionsAndWritePackageJson(
|
|
156
|
-
mockLockService,
|
|
157
|
-
mockConfig,
|
|
158
|
-
false,
|
|
159
|
-
true,
|
|
160
|
-
);
|
|
161
|
-
|
|
162
|
-
expect(exec).not.toHaveBeenCalled();
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it("returns cliUpdated=false regardless of CLI version gap", async () => {
|
|
166
|
-
const result = await checkVersionsAndWritePackageJson(
|
|
167
|
-
mockLockService,
|
|
168
|
-
mockConfig,
|
|
169
|
-
false,
|
|
170
|
-
true,
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
expect(result.cliUpdated).toBe(false);
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it("skipCliUpgrade overrides forceUpgrade", async () => {
|
|
177
|
-
const { exec } = await import("node:child_process");
|
|
178
|
-
|
|
179
|
-
await checkVersionsAndWritePackageJson(
|
|
180
|
-
mockLockService,
|
|
181
|
-
mockConfig,
|
|
182
|
-
true, // forceUpgrade — should be overridden by skipCliUpgrade
|
|
183
|
-
true, // skipCliUpgrade wins
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
expect(exec).not.toHaveBeenCalled();
|
|
187
|
-
// But package.json still gets written
|
|
188
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
describe("skipCliUpgrade=false (default)", () => {
|
|
193
|
-
it("writes package.json with the target library version", async () => {
|
|
194
|
-
await checkVersionsAndWritePackageJson(
|
|
195
|
-
mockLockService,
|
|
196
|
-
mockConfig,
|
|
197
|
-
false,
|
|
198
|
-
false,
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
202
|
-
const [, writtenContent] = vi.mocked(fs.writeFile).mock.calls[0];
|
|
203
|
-
const parsed = JSON.parse(writtenContent as string);
|
|
204
|
-
expect(parsed.dependencies["@superblocksteam/library"]).toBe(
|
|
205
|
-
TARGET_LIBRARY_VERSION,
|
|
206
|
-
);
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
it("defaults to false when omitted (backward compat)", async () => {
|
|
210
|
-
// 3-arg call (pre-warm-pool signature) should behave as skipCliUpgrade=false
|
|
211
|
-
const result = await checkVersionsAndWritePackageJson(
|
|
212
|
-
mockLockService,
|
|
213
|
-
mockConfig,
|
|
214
|
-
false,
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
// Still writes package.json
|
|
218
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
219
|
-
expect(result).toBeDefined();
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
describe("SNAPSHOT library versions", () => {
|
|
224
|
-
it("pins to ephemeral alias when library target is a SNAPSHOT", async () => {
|
|
225
|
-
const snapshotVersion = "1.9.0-SNAPSHOT.abc123";
|
|
226
|
-
global.fetch = vi.fn(async () => ({
|
|
227
|
-
ok: true,
|
|
228
|
-
json: async () => ({
|
|
229
|
-
data: {
|
|
230
|
-
cli: TARGET_CLI_VERSION,
|
|
231
|
-
library: snapshotVersion,
|
|
232
|
-
},
|
|
233
|
-
}),
|
|
234
|
-
})) as unknown as typeof fetch;
|
|
235
|
-
|
|
236
|
-
await checkVersionsAndWritePackageJson(
|
|
237
|
-
mockLockService,
|
|
238
|
-
mockConfig,
|
|
239
|
-
false,
|
|
240
|
-
true, // warm pool
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
expect(fs.writeFile).toHaveBeenCalledTimes(1);
|
|
244
|
-
const [, writtenContent] = vi.mocked(fs.writeFile).mock.calls[0];
|
|
245
|
-
const parsed = JSON.parse(writtenContent as string);
|
|
246
|
-
expect(parsed.dependencies["@superblocksteam/library"]).toBe(
|
|
247
|
-
`npm:@superblocksteam/library-ephemeral@${snapshotVersion}`,
|
|
248
|
-
);
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
});
|