@superblocksteam/sdk 2.0.3-next.157 → 2.0.3-next.158

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;AAkBpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAU5D,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,iBAiJA"}
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,iBAkKA"}
@@ -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;
@@ -91,10 +136,22 @@ export async function dev(options) {
91
136
  if (downloadFirst && uploadFirst) {
92
137
  throw new Error("Choose either --download-first or --upload-first");
93
138
  }
94
- // TODO(code-mode): pre-process package.json to handle version upgrades
95
139
  if (downloadFirst) {
96
140
  logger.info("Starting directory sync from server before starting the local server");
141
+ // Read package.json before download
142
+ const packageJsonBefore = await readPkgJson(cwd);
97
143
  await syncService.downloadDirectory();
144
+ // Read package.json after download and compare
145
+ const packageJsonAfter = await readPkgJson(cwd);
146
+ // Check if package.json changed
147
+ if (packageJsonBefore && packageJsonAfter) {
148
+ const diff = diffJson(packageJsonBefore, packageJsonAfter);
149
+ const hasChanges = diff.some((part) => part.added || part.removed);
150
+ if (hasChanges) {
151
+ logger.info("package.json has changed, installing packages…");
152
+ await installPackages(cwd, logger);
153
+ }
154
+ }
98
155
  }
99
156
  else if (uploadFirst) {
100
157
  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":"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"}
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.157",
3
+ "version": "2.0.3-next.158",
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.157",
23
- "@superblocksteam/vite-plugin-file-sync": "2.0.3-next.157",
22
+ "@superblocksteam/util": "2.0.3-next.158",
23
+ "@superblocksteam/vite-plugin-file-sync": "2.0.3-next.158",
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;
@@ -151,12 +208,29 @@ export async function dev(options: {
151
208
  throw new Error("Choose either --download-first or --upload-first");
152
209
  }
153
210
 
154
- // TODO(code-mode): pre-process package.json to handle version upgrades
155
211
  if (downloadFirst) {
156
212
  logger.info(
157
213
  "Starting directory sync from server before starting the local server",
158
214
  );
215
+
216
+ // Read package.json before download
217
+ const packageJsonBefore = await readPkgJson(cwd);
218
+
159
219
  await syncService!.downloadDirectory();
220
+
221
+ // Read package.json after download and compare
222
+ const packageJsonAfter = await readPkgJson(cwd);
223
+
224
+ // Check if package.json changed
225
+ if (packageJsonBefore && packageJsonAfter) {
226
+ const diff = diffJson(packageJsonBefore, packageJsonAfter);
227
+ const hasChanges = diff.some((part) => part.added || part.removed);
228
+
229
+ if (hasChanges) {
230
+ logger.info("package.json has changed, installing packages…");
231
+ await installPackages(cwd, logger);
232
+ }
233
+ }
160
234
  } else if (uploadFirst) {
161
235
  logger.info("Uploading local files to server before starting");
162
236
  await syncService!.uploadDirectory();