@superblocksteam/sdk 2.0.3-next.157 → 2.0.3-next.159
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dev.mts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dev.mts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AAwBpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA6D5D,wBAAsB,GAAG,CAAC,OAAO,EAAE;IAEjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAGnC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,iBAyKA"}
|
|
@@ -1,21 +1,66 @@
|
|
|
1
1
|
import "../dev-utils/dev-tracer.js";
|
|
2
|
+
import * as child_process from "node:child_process";
|
|
2
3
|
import * as fsp from "node:fs/promises";
|
|
4
|
+
import { promisify } from "node:util";
|
|
3
5
|
import { maskUnixSignals } from "@superblocksteam/util";
|
|
4
6
|
import { AiService } from "@superblocksteam/vite-plugin-file-sync/ai-service";
|
|
5
7
|
import { LockService, LockType, } from "@superblocksteam/vite-plugin-file-sync/lock-service";
|
|
6
8
|
import { OperationQueue } from "@superblocksteam/vite-plugin-file-sync/operation-queue";
|
|
7
9
|
import { SyncService } from "@superblocksteam/vite-plugin-file-sync/sync-service";
|
|
8
10
|
import { green } from "colorette";
|
|
11
|
+
import { diffJson } from "diff";
|
|
12
|
+
import { resolveCommand } from "package-manager-detector";
|
|
13
|
+
import { detect } from "package-manager-detector/detect";
|
|
14
|
+
import { readPackage } from "read-pkg";
|
|
9
15
|
import { getLogger } from "../dev-utils/dev-logger.mjs";
|
|
10
16
|
import { createDevServer } from "../dev-utils/dev-server.mjs";
|
|
11
17
|
import { SuperblocksSdk } from "../sdk.js";
|
|
12
18
|
import { checkVersionsAndUpgrade } from "./automatic-upgrades.js";
|
|
19
|
+
const exec = promisify(child_process.exec);
|
|
13
20
|
const passErrorToVSCode = (message, logger) => {
|
|
14
21
|
if (message) {
|
|
15
22
|
// Prefixing with `clierr:` will make the VS code extension capture this message and show it to the user.
|
|
16
23
|
logger.error(`clierr: ${JSON.stringify({ message })}`);
|
|
17
24
|
}
|
|
18
25
|
};
|
|
26
|
+
async function readPkgJson(cwd) {
|
|
27
|
+
try {
|
|
28
|
+
return await readPackage({ cwd });
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function installPackages(cwd, logger) {
|
|
35
|
+
try {
|
|
36
|
+
const pm = await detect({
|
|
37
|
+
strategies: [
|
|
38
|
+
"packageManager-field",
|
|
39
|
+
"lockfile",
|
|
40
|
+
"install-metadata",
|
|
41
|
+
"devEngines-field",
|
|
42
|
+
],
|
|
43
|
+
cwd,
|
|
44
|
+
});
|
|
45
|
+
if (!pm) {
|
|
46
|
+
logger.warn("Could not detect package manager, skipping package installation");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const installCommand = resolveCommand(pm.agent, "install", []);
|
|
50
|
+
if (!installCommand) {
|
|
51
|
+
logger.warn(`Could not determine install command for ${pm.agent}, skipping package installation`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const { command, args } = installCommand;
|
|
55
|
+
logger.info(`Running ${command} ${args.join(" ")} to install dependencies…`);
|
|
56
|
+
await exec(`${command} ${args.join(" ")}`, { cwd });
|
|
57
|
+
logger.info("Package installation completed successfully");
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger.error(`Error during package installation: ${error}`);
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
19
64
|
export async function dev(options) {
|
|
20
65
|
const logger = getLogger(options.logger);
|
|
21
66
|
const { cwd, pidfilePath, devServerPort, downloadFirst, uploadFirst, skipSync, applicationConfig, } = options;
|
|
@@ -53,7 +98,11 @@ export async function dev(options) {
|
|
|
53
98
|
if (lockService) {
|
|
54
99
|
try {
|
|
55
100
|
await lockService.acquireLock();
|
|
56
|
-
|
|
101
|
+
// TODO(code-mode): package naming is preventing upgrade in ephemeral environments
|
|
102
|
+
if (!process.env.PACKAGE_SUFFIX ||
|
|
103
|
+
process.env.PACKAGE_SUFFIX === "") {
|
|
104
|
+
await checkVersionsAndUpgrade(lockService, applicationConfig);
|
|
105
|
+
}
|
|
57
106
|
}
|
|
58
107
|
catch (error) {
|
|
59
108
|
logger.error("Failed to acquire lock on application", error);
|
|
@@ -91,10 +140,22 @@ export async function dev(options) {
|
|
|
91
140
|
if (downloadFirst && uploadFirst) {
|
|
92
141
|
throw new Error("Choose either --download-first or --upload-first");
|
|
93
142
|
}
|
|
94
|
-
// TODO(code-mode): pre-process package.json to handle version upgrades
|
|
95
143
|
if (downloadFirst) {
|
|
96
144
|
logger.info("Starting directory sync from server before starting the local server");
|
|
145
|
+
// Read package.json before download
|
|
146
|
+
const packageJsonBefore = await readPkgJson(cwd);
|
|
97
147
|
await syncService.downloadDirectory();
|
|
148
|
+
// Read package.json after download and compare
|
|
149
|
+
const packageJsonAfter = await readPkgJson(cwd);
|
|
150
|
+
// Check if package.json changed
|
|
151
|
+
if (packageJsonBefore && packageJsonAfter) {
|
|
152
|
+
const diff = diffJson(packageJsonBefore, packageJsonAfter);
|
|
153
|
+
const hasChanges = diff.some((part) => part.added || part.removed);
|
|
154
|
+
if (hasChanges) {
|
|
155
|
+
logger.info("package.json has changed, installing packages…");
|
|
156
|
+
await installPackages(cwd, logger);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
98
159
|
}
|
|
99
160
|
else if (uploadFirst) {
|
|
100
161
|
logger.info("Uploading local files to server before starting");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.mjs","sourceRoot":"","sources":["../../src/cli-replacement/dev.mts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AAEpC,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,mDAAmD,CAAC;AAC9E,OAAO,EACL,WAAW,EACX,QAAQ,GACT,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,qDAAqD,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.mjs","sourceRoot":"","sources":["../../src/cli-replacement/dev.mts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superblocksteam/sdk",
|
|
3
|
-
"version": "2.0.3-next.
|
|
3
|
+
"version": "2.0.3-next.159",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Superblocks JS SDK",
|
|
6
6
|
"homepage": "https://www.superblocks.com",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"@rollup/wasm-node": "^4.35.0",
|
|
20
20
|
"@superblocksteam/bucketeer-sdk": "0.4.1",
|
|
21
21
|
"@superblocksteam/shared": "0.9120.0",
|
|
22
|
-
"@superblocksteam/util": "2.0.3-next.
|
|
23
|
-
"@superblocksteam/vite-plugin-file-sync": "2.0.3-next.
|
|
22
|
+
"@superblocksteam/util": "2.0.3-next.159",
|
|
23
|
+
"@superblocksteam/vite-plugin-file-sync": "2.0.3-next.159",
|
|
24
24
|
"@vitejs/plugin-react": "^4.3.4",
|
|
25
25
|
"axios": "^1.4.0",
|
|
26
26
|
"chokidar": "^4.0.3",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"cors": "^2.8.5",
|
|
30
30
|
"dd-trace": "^5.49.0",
|
|
31
31
|
"debug": "^4.4.0",
|
|
32
|
+
"diff": "^8.0.2",
|
|
32
33
|
"es-module-lexer": "^1.6.0",
|
|
33
34
|
"express": "^4.21.1",
|
|
34
35
|
"fast-glob": "^3.3.3",
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
"lodash-es": "^4.17.21",
|
|
38
39
|
"package-manager-detector": "^1.3.0",
|
|
39
40
|
"prettier": "^3.5.3",
|
|
41
|
+
"read-pkg": "^9.0.1",
|
|
40
42
|
"semver": "^7.5.4",
|
|
41
43
|
"simple-git": "^3.20.0",
|
|
42
44
|
"slugify": "^1.6.6",
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import "../dev-utils/dev-tracer.js";
|
|
2
2
|
|
|
3
|
+
import * as child_process from "node:child_process";
|
|
3
4
|
import * as fsp from "node:fs/promises";
|
|
5
|
+
import { promisify } from "node:util";
|
|
4
6
|
import { maskUnixSignals } from "@superblocksteam/util";
|
|
5
7
|
import { AiService } from "@superblocksteam/vite-plugin-file-sync/ai-service";
|
|
6
8
|
import {
|
|
@@ -10,6 +12,10 @@ import {
|
|
|
10
12
|
import { OperationQueue } from "@superblocksteam/vite-plugin-file-sync/operation-queue";
|
|
11
13
|
import { SyncService } from "@superblocksteam/vite-plugin-file-sync/sync-service";
|
|
12
14
|
import { green } from "colorette";
|
|
15
|
+
import { diffJson } from "diff";
|
|
16
|
+
import { resolveCommand } from "package-manager-detector";
|
|
17
|
+
import { detect } from "package-manager-detector/detect";
|
|
18
|
+
import { readPackage } from "read-pkg";
|
|
13
19
|
|
|
14
20
|
import { getLogger } from "../dev-utils/dev-logger.mjs";
|
|
15
21
|
import { createDevServer } from "../dev-utils/dev-server.mjs";
|
|
@@ -19,6 +25,8 @@ import type { DevLogger } from "../dev-utils/dev-logger.mjs";
|
|
|
19
25
|
import type { ApplicationConfig } from "../types/common.js";
|
|
20
26
|
import type { DraftInterface } from "@superblocksteam/vite-plugin-file-sync/draft-interface";
|
|
21
27
|
|
|
28
|
+
const exec = promisify(child_process.exec);
|
|
29
|
+
|
|
22
30
|
const passErrorToVSCode = (message: string | undefined, logger: DevLogger) => {
|
|
23
31
|
if (message) {
|
|
24
32
|
// Prefixing with `clierr:` will make the VS code extension capture this message and show it to the user.
|
|
@@ -26,6 +34,55 @@ const passErrorToVSCode = (message: string | undefined, logger: DevLogger) => {
|
|
|
26
34
|
}
|
|
27
35
|
};
|
|
28
36
|
|
|
37
|
+
async function readPkgJson(cwd: string) {
|
|
38
|
+
try {
|
|
39
|
+
return await readPackage({ cwd });
|
|
40
|
+
} catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function installPackages(cwd: string, logger: DevLogger) {
|
|
46
|
+
try {
|
|
47
|
+
const pm = await detect({
|
|
48
|
+
strategies: [
|
|
49
|
+
"packageManager-field",
|
|
50
|
+
"lockfile",
|
|
51
|
+
"install-metadata",
|
|
52
|
+
"devEngines-field",
|
|
53
|
+
],
|
|
54
|
+
cwd,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (!pm) {
|
|
58
|
+
logger.warn(
|
|
59
|
+
"Could not detect package manager, skipping package installation",
|
|
60
|
+
);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const installCommand = resolveCommand(pm.agent, "install", []);
|
|
65
|
+
|
|
66
|
+
if (!installCommand) {
|
|
67
|
+
logger.warn(
|
|
68
|
+
`Could not determine install command for ${pm.agent}, skipping package installation`,
|
|
69
|
+
);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const { command, args } = installCommand;
|
|
74
|
+
logger.info(
|
|
75
|
+
`Running ${command} ${args.join(" ")} to install dependencies…`,
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
await exec(`${command} ${args.join(" ")}`, { cwd });
|
|
79
|
+
logger.info("Package installation completed successfully");
|
|
80
|
+
} catch (error) {
|
|
81
|
+
logger.error(`Error during package installation: ${error}`);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
29
86
|
export async function dev(options: {
|
|
30
87
|
/* cwd is required */
|
|
31
88
|
cwd: string;
|
|
@@ -102,7 +159,14 @@ export async function dev(options: {
|
|
|
102
159
|
if (lockService) {
|
|
103
160
|
try {
|
|
104
161
|
await lockService!.acquireLock();
|
|
105
|
-
|
|
162
|
+
|
|
163
|
+
// TODO(code-mode): package naming is preventing upgrade in ephemeral environments
|
|
164
|
+
if (
|
|
165
|
+
!process.env.PACKAGE_SUFFIX ||
|
|
166
|
+
process.env.PACKAGE_SUFFIX === ""
|
|
167
|
+
) {
|
|
168
|
+
await checkVersionsAndUpgrade(lockService, applicationConfig);
|
|
169
|
+
}
|
|
106
170
|
} catch (error) {
|
|
107
171
|
logger.error("Failed to acquire lock on application", error);
|
|
108
172
|
passErrorToVSCode(
|
|
@@ -151,12 +215,29 @@ export async function dev(options: {
|
|
|
151
215
|
throw new Error("Choose either --download-first or --upload-first");
|
|
152
216
|
}
|
|
153
217
|
|
|
154
|
-
// TODO(code-mode): pre-process package.json to handle version upgrades
|
|
155
218
|
if (downloadFirst) {
|
|
156
219
|
logger.info(
|
|
157
220
|
"Starting directory sync from server before starting the local server",
|
|
158
221
|
);
|
|
222
|
+
|
|
223
|
+
// Read package.json before download
|
|
224
|
+
const packageJsonBefore = await readPkgJson(cwd);
|
|
225
|
+
|
|
159
226
|
await syncService!.downloadDirectory();
|
|
227
|
+
|
|
228
|
+
// Read package.json after download and compare
|
|
229
|
+
const packageJsonAfter = await readPkgJson(cwd);
|
|
230
|
+
|
|
231
|
+
// Check if package.json changed
|
|
232
|
+
if (packageJsonBefore && packageJsonAfter) {
|
|
233
|
+
const diff = diffJson(packageJsonBefore, packageJsonAfter);
|
|
234
|
+
const hasChanges = diff.some((part) => part.added || part.removed);
|
|
235
|
+
|
|
236
|
+
if (hasChanges) {
|
|
237
|
+
logger.info("package.json has changed, installing packages…");
|
|
238
|
+
await installPackages(cwd, logger);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
160
241
|
} else if (uploadFirst) {
|
|
161
242
|
logger.info("Uploading local files to server before starting");
|
|
162
243
|
await syncService!.uploadDirectory();
|