@superblocksteam/sdk 2.0.6-next.7 → 2.0.6-next.70

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 (57) hide show
  1. package/dist/application-build.mjs +6 -2
  2. package/dist/application-build.mjs.map +1 -1
  3. package/dist/cli-replacement/automatic-upgrades.d.ts +5 -2
  4. package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -1
  5. package/dist/cli-replacement/automatic-upgrades.js +199 -93
  6. package/dist/cli-replacement/automatic-upgrades.js.map +1 -1
  7. package/dist/cli-replacement/dev.d.mts +1 -2
  8. package/dist/cli-replacement/dev.d.mts.map +1 -1
  9. package/dist/cli-replacement/dev.mjs +57 -32
  10. package/dist/cli-replacement/dev.mjs.map +1 -1
  11. package/dist/client.d.ts +34 -0
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +92 -1
  14. package/dist/client.js.map +1 -1
  15. package/dist/dev-utils/dev-logger.d.mts +17 -7
  16. package/dist/dev-utils/dev-logger.d.mts.map +1 -1
  17. package/dist/dev-utils/dev-logger.mjs +50 -9
  18. package/dist/dev-utils/dev-logger.mjs.map +1 -1
  19. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  20. package/dist/dev-utils/dev-server.mjs +8 -12
  21. package/dist/dev-utils/dev-server.mjs.map +1 -1
  22. package/dist/dev-utils/dev-tracer.d.ts +2 -0
  23. package/dist/dev-utils/dev-tracer.d.ts.map +1 -1
  24. package/dist/dev-utils/dev-tracer.js +42 -35
  25. package/dist/dev-utils/dev-tracer.js.map +1 -1
  26. package/dist/dev-utils/vite-plugin-build-manifest-stub.d.mts +10 -0
  27. package/dist/dev-utils/vite-plugin-build-manifest-stub.d.mts.map +1 -0
  28. package/dist/dev-utils/vite-plugin-build-manifest-stub.mjs +27 -0
  29. package/dist/dev-utils/vite-plugin-build-manifest-stub.mjs.map +1 -0
  30. package/dist/dev-utils/vite-plugin-sb-cdn.d.mts.map +1 -1
  31. package/dist/dev-utils/vite-plugin-sb-cdn.mjs +13 -3
  32. package/dist/dev-utils/vite-plugin-sb-cdn.mjs.map +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/vite-plugin-generate-build-manifest.d.mts +21 -0
  38. package/dist/vite-plugin-generate-build-manifest.d.mts.map +1 -0
  39. package/dist/vite-plugin-generate-build-manifest.mjs +131 -0
  40. package/dist/vite-plugin-generate-build-manifest.mjs.map +1 -0
  41. package/dist/vite-plugin-inject-sb-ids-transform.mjs +1 -1
  42. package/dist/vite-plugin-inject-sb-ids-transform.mjs.map +1 -1
  43. package/package.json +6 -4
  44. package/src/application-build.mts +6 -3
  45. package/src/cli-replacement/automatic-upgrades.ts +253 -113
  46. package/src/cli-replacement/dev.mts +77 -43
  47. package/src/client.ts +115 -0
  48. package/src/dev-utils/dev-logger.mts +94 -20
  49. package/src/dev-utils/dev-server.mts +10 -12
  50. package/src/dev-utils/dev-tracer.ts +48 -37
  51. package/src/dev-utils/vite-plugin-build-manifest-stub.mts +30 -0
  52. package/src/dev-utils/vite-plugin-sb-cdn.mts +14 -3
  53. package/src/index.ts +4 -0
  54. package/src/vite-plugin-generate-build-manifest.mts +193 -0
  55. package/src/vite-plugin-inject-sb-ids-transform.mts +1 -1
  56. package/test/clients.test.mts +120 -0
  57. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,131 @@
1
+ import path from "node:path";
2
+ import { parse } from "@babel/parser";
3
+ import { getClientApiId } from "@superblocksteam/library-shared";
4
+ import { resolveLanguageSpecificStepContentFromBlocks } from "@superblocksteam/util";
5
+ import { getPageName } from "@superblocksteam/vite-plugin-file-sync";
6
+ import { extractIdentifierPathsFromApi, extractApiDependencies, } from "@superblocksteam/vite-plugin-file-sync/binding-extraction";
7
+ import { getScope, extractImportsFromAst, } from "@superblocksteam/vite-plugin-file-sync/parsing";
8
+ import { yellow, red } from "colorette";
9
+ import fg from "fast-glob";
10
+ import fs from "fs-extra";
11
+ import { createLogger } from "vite";
12
+ import yaml from "yaml";
13
+ import { getLogger } from "./dev-utils/dev-logger.mjs";
14
+ export const scopeFileBaseName = "scope.ts";
15
+ export const apiFileBaseName = "api.yaml";
16
+ /**
17
+ * Vite plugin that generates a build manifest for the application.
18
+ *
19
+ * This plugin will:
20
+ * 1. Read all api.yaml and api.yml files in the application
21
+ * 2. Read all scope.ts files in the application
22
+ * 3. Generate a build manifest for the application
23
+ * 4. Write the build manifest to a file in the build output directory
24
+ *
25
+ * The build manifest is a JSON object with the following properties:
26
+ * - apis: a map of all apis in the application keyed by their file path
27
+ * - apiDependencies: an array where each item represents an api and its dependencies
28
+ *
29
+ * @param root - The root directory of the application
30
+ * @returns A Vite plugin that generates a build manifest for the application
31
+ */
32
+ export function generateBuildManifestPlugin(root) {
33
+ const viteLogger = createLogger();
34
+ const logger = getLogger();
35
+ viteLogger.info = (msg) => logger.info(msg);
36
+ viteLogger.warn = (msg) => {
37
+ logger.warn(yellow(msg));
38
+ };
39
+ viteLogger.warnOnce = (msg) => {
40
+ logger.warn(yellow(msg));
41
+ };
42
+ viteLogger.error = (msg) => {
43
+ logger.error(red(msg));
44
+ };
45
+ viteLogger.clearScreen = () => { };
46
+ const scopesByPage = {};
47
+ const apiFiles = {};
48
+ let buildManifest = { apis: {}, apiDependencies: [] };
49
+ return {
50
+ name: "sb-generate-build-manifest",
51
+ apply: "build",
52
+ enforce: "pre",
53
+ async buildStart() {
54
+ const apiDocuments = await fg(["**/api.yaml", "**/api.yml"], {
55
+ cwd: root,
56
+ });
57
+ for (const apiFilePath of apiDocuments) {
58
+ const absoluteApiFilePath = path.join(root, apiFilePath);
59
+ const document = await fs.readFile(absoluteApiFilePath, "utf-8");
60
+ const apiPb = yaml.parse(document);
61
+ await resolveLanguageSpecificStepContentFromBlocks(path.dirname(absoluteApiFilePath), apiPb.blocks ?? [], {});
62
+ const pageName = getPageName(apiFilePath);
63
+ apiPb.metadata.id = getClientApiId(apiPb.metadata.name, pageName);
64
+ apiFiles[apiFilePath] = { apiPb, pageName };
65
+ }
66
+ },
67
+ transform(code, id) {
68
+ if (id.endsWith(scopeFileBaseName)) {
69
+ const ast = parse(code, {
70
+ sourceType: "module",
71
+ sourceFilename: id,
72
+ plugins: [["typescript", {}]],
73
+ });
74
+ const scopeFileMeta = {
75
+ code,
76
+ ast,
77
+ imports: extractImportsFromAst(ast),
78
+ };
79
+ const scope = getScope(id, scopeFileMeta);
80
+ scopesByPage[getPageName(id)] = scope;
81
+ }
82
+ return code;
83
+ },
84
+ async generateBundle() {
85
+ const allApiNames = getAllUniqueApiNames(apiFiles);
86
+ const allApis = Object.entries(apiFiles).reduce((acc, [id, api]) => {
87
+ acc[id] = {
88
+ api,
89
+ scopeId: scopesByPage[api.pageName]?.scopeId ?? "",
90
+ };
91
+ return acc;
92
+ }, {});
93
+ const deps = await getApiDependencies(allApiNames, apiFiles);
94
+ buildManifest = {
95
+ apis: allApis,
96
+ apiDependencies: deps,
97
+ };
98
+ this.emitFile({
99
+ type: "prebuilt-chunk",
100
+ fileName: "assets/build-manifest.js",
101
+ code: `export default ${JSON.stringify(buildManifest)}`,
102
+ exports: ["default"],
103
+ });
104
+ },
105
+ };
106
+ }
107
+ function getAllUniqueApiNames(apiFiles) {
108
+ const allApiNamesSet = new Set(Object.values(apiFiles).map((api) => api.apiPb.metadata.name));
109
+ return Array.from(allApiNamesSet);
110
+ }
111
+ async function getApiDependencies(apiNames, apiFiles) {
112
+ const deps = [];
113
+ // TODO: This logic is a copy of the extractApiParamsAndDependencies function in the
114
+ // fileSyncVitePlugin (https://github.com/superblocksteam/superblocks/blob/474c0b11d79a1d6988864fb20d5ec26f92931fde/packages/vite-plugin-file-sync/src/file-sync-vite-plugin.ts#L261-L280).
115
+ //
116
+ // This logic should be refactored so that it can be shared between the two plugins.
117
+ await Promise.all([
118
+ ...Object.values(apiFiles).map(async (api) => {
119
+ const bindings = await extractIdentifierPathsFromApi(api);
120
+ const allIdentifiers = bindings.flatMap((binding) => binding.bindings);
121
+ const apiDependencies = extractApiDependencies(apiNames, bindings);
122
+ deps.push({
123
+ apiName: api.apiPb.metadata.name,
124
+ params: allIdentifiers,
125
+ dependencies: apiDependencies,
126
+ });
127
+ }),
128
+ ]);
129
+ return deps;
130
+ }
131
+ //# sourceMappingURL=vite-plugin-generate-build-manifest.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin-generate-build-manifest.mjs","sourceRoot":"","sources":["../src/vite-plugin-generate-build-manifest.mts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ const routesFileBaseName = "routes.json";
22
22
  export async function injectSuperblocksIdsPlugin(root) {
23
23
  const viteLogger = createLogger();
24
24
  const logger = getLogger();
25
- viteLogger.info = logger.info;
25
+ viteLogger.info = (msg) => logger.info(msg);
26
26
  viteLogger.warn = (msg) => {
27
27
  logger.warn(yellow(msg));
28
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin-inject-sb-ids-transform.mjs","sourceRoot":"","sources":["../src/vite-plugin-inject-sb-ids-transform.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-plugin-inject-sb-ids-transform.mjs","sourceRoot":"","sources":["../src/vite-plugin-inject-sb-ids-transform.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.6-next.7",
3
+ "version": "2.0.6-next.70",
4
4
  "type": "module",
5
5
  "description": "Superblocks JS SDK",
6
6
  "homepage": "https://www.superblocks.com",
@@ -30,9 +30,11 @@
30
30
  "@opentelemetry/semantic-conventions": "^1.28.0",
31
31
  "@rollup/wasm-node": "^4.35.0",
32
32
  "@superblocksteam/bucketeer-sdk": "0.5.0",
33
- "@superblocksteam/shared": "0.9160.0",
34
- "@superblocksteam/util": "2.0.6-next.7",
35
- "@superblocksteam/vite-plugin-file-sync": "2.0.6-next.7",
33
+ "@superblocksteam/library": "2.0.6-next.70",
34
+ "@superblocksteam/library-shared": "2.0.6-next.70",
35
+ "@superblocksteam/shared": "0.9198.0",
36
+ "@superblocksteam/util": "2.0.6-next.70",
37
+ "@superblocksteam/vite-plugin-file-sync": "2.0.6-next.70",
36
38
  "@vitejs/plugin-react": "^4.3.4",
37
39
  "axios": "^1.4.0",
38
40
  "chokidar": "^4.0.3",
@@ -9,8 +9,8 @@ import { customComponentsPlugin } from "./dev-utils/custom-build.mjs";
9
9
  import { getLogger } from "./dev-utils/dev-logger.mjs";
10
10
  import { ddRumPlugin } from "./dev-utils/vite-plugin-dd-rum.mjs";
11
11
  import { superblocksCdnPlugin } from "./dev-utils/vite-plugin-sb-cdn.mjs";
12
+ import { generateBuildManifestPlugin } from "./vite-plugin-generate-build-manifest.mjs";
12
13
  import { injectSuperblocksIdsPlugin } from "./vite-plugin-inject-sb-ids-transform.mjs";
13
- import type { Plugin } from "vite";
14
14
 
15
15
  export async function buildApplication({
16
16
  root,
@@ -81,7 +81,7 @@ async function buildWithVite({
81
81
  }) {
82
82
  const viteLogger = createLogger();
83
83
  const logger = getLogger();
84
- viteLogger.info = logger.info;
84
+ viteLogger.info = (msg: string) => logger.info(msg);
85
85
  viteLogger.warn = (msg: string) => {
86
86
  logger.warn(yellow(msg));
87
87
  };
@@ -133,7 +133,7 @@ async function buildWithVite({
133
133
  logLevel: "info",
134
134
  plugins: [
135
135
  tsconfigPaths(),
136
- injectIndexVitePlugin({ assetsCdnUrl, logger }) as Plugin,
136
+ injectIndexVitePlugin({ assetsCdnUrl }),
137
137
  customComponentsPlugin(),
138
138
  injectSuperblocksIdsPlugin(root),
139
139
  superblocksCdnPlugin({
@@ -142,12 +142,15 @@ async function buildWithVite({
142
142
  "react/jsx-runtime": "https://esm.sh/react@18.2.0/jsx-runtime.mjs",
143
143
  "react/jsx-dev-runtime":
144
144
  "https://esm.sh/react@18.2.0/jsx-dev-runtime.mjs",
145
+ "./user-facing/build-manifest.js": "/assets/build-manifest.js",
146
+ "/assets/user-facing/build-manifest.js": "/assets/build-manifest.js",
145
147
  },
146
148
  cssImports: {
147
149
  "@superblocksteam/library/index.css": `${libraryUrl}/index.css`,
148
150
  },
149
151
  }),
150
152
  react(),
153
+ generateBuildManifestPlugin(root),
151
154
 
152
155
  ddRumPlugin({
153
156
  clientToken: ddClientToken ?? "",
@@ -1,11 +1,13 @@
1
1
  import * as child_process from "node:child_process";
2
2
  import { promisify } from "node:util";
3
3
  import { isNativeError } from "node:util/types";
4
+ import { traceFunction } from "@superblocksteam/shared";
4
5
  import { resolveCommand, type DetectResult } from "package-manager-detector";
5
6
  import { detect } from "package-manager-detector/detect";
6
7
  import gt from "semver/functions/gt.js";
7
8
  import valid from "semver/functions/valid.js";
8
- import { getLogger } from "../dev-utils/dev-logger.mjs";
9
+ import { getErrorMeta, getLogger } from "../dev-utils/dev-logger.mjs";
10
+ import tracer from "../dev-utils/dev-tracer.js";
9
11
  import type { ResponseMeta } from "../socket/handlers.js";
10
12
  import type { ApplicationConfig } from "../types/common.js";
11
13
  import type { LockService } from "@superblocksteam/vite-plugin-file-sync/lock-service";
@@ -55,7 +57,7 @@ async function getRemoteVersions(
55
57
  return data.data;
56
58
  } else {
57
59
  const error = (await response.json()) as CheckVersionsErrorResponse;
58
- console.log(
60
+ logger.error(
59
61
  `Could not get latest CLI version: ${error.responseMeta.message}`,
60
62
  );
61
63
  }
@@ -68,7 +70,9 @@ async function getRemoteVersions(
68
70
  }
69
71
  }
70
72
 
71
- export async function getCurrentCliVersion(): Promise<string | undefined> {
73
+ export async function getCurrentCliVersion(): Promise<
74
+ PackageVersionInfo | undefined
75
+ > {
72
76
  try {
73
77
  const command = process.platform === "win32" ? "where" : "which";
74
78
  const { stdout } = await exec(`${command} superblocks`);
@@ -85,7 +89,16 @@ export async function getCurrentCliVersion(): Promise<string | undefined> {
85
89
  /@superblocksteam\/cli(-ephemeral)?\//,
86
90
  "",
87
91
  );
88
- return version;
92
+
93
+ const aliasMatch = json.cliVersion?.match(/@superblocksteam\/([^\/]+)/);
94
+ if (aliasMatch && aliasMatch[1] !== "cli") {
95
+ return {
96
+ version: version,
97
+ alias: `@superblocksteam/${aliasMatch[1]}`,
98
+ };
99
+ }
100
+
101
+ return { version };
89
102
  } catch (error) {
90
103
  if (isNativeError(error)) {
91
104
  logger.error(`Error getting CLI version: ${error.message}`);
@@ -104,16 +117,16 @@ export async function getCurrentLibraryVersion(
104
117
  case "pnpm":
105
118
  return await getPnpmLibraryVersion();
106
119
  default:
107
- console.error(
120
+ logger.error(
108
121
  `${pm.agent} is currently not supported for automatic upgrades.`,
109
122
  );
110
123
  return undefined;
111
124
  }
112
125
  } catch (error) {
113
- console.error(
126
+ logger.error(
114
127
  "Could not resolve current library version. Skipping automatic upgrade.",
128
+ getErrorMeta(error),
115
129
  );
116
- console.error(error);
117
130
  return undefined;
118
131
  }
119
132
  }
@@ -200,10 +213,10 @@ async function upgradeCliWithOclif(targetVersion: string): Promise<boolean> {
200
213
 
201
214
  if (!superblocksPath) return false;
202
215
 
203
- const { stdout: updateOutput } = await exec(
216
+ const { stdout: updateOutput, stderr: updateErrorOutput } = await exec(
204
217
  `${superblocksPath} update --version=${targetVersion}`,
205
218
  );
206
- return !updateOutput.includes("not updatable");
219
+ return !(updateOutput + updateErrorOutput).includes("not updatable");
207
220
  } catch (error) {
208
221
  if (isNativeError(error)) {
209
222
  logger.error(`Error checking CLI updatability: ${error.message}`);
@@ -216,21 +229,61 @@ async function upgradePackageWithPackageManager(
216
229
  pm: DetectResult,
217
230
  packageName: string,
218
231
  targetVersion: string,
219
- alias?: string,
232
+ {
233
+ alias,
234
+ global,
235
+ }: {
236
+ alias?: string;
237
+ global?: boolean;
238
+ },
220
239
  ): Promise<void> {
221
240
  const packageSpec = alias
222
241
  ? `@superblocksteam/${packageName}@npm:${alias}@${targetVersion}`
223
242
  : `@superblocksteam/${packageName}@${targetVersion}`;
224
243
 
225
- const installCommand = resolveCommand(pm.agent, "install", [packageSpec]);
244
+ const installCommand = resolveCommand(
245
+ pm.agent,
246
+ global ? "global" : "install",
247
+ [packageSpec],
248
+ );
226
249
 
227
250
  if (!installCommand) {
228
- console.error("Could not determine how to upgrade Superblocks packages.");
251
+ logger.error("Could not determine how to upgrade Superblocks packages.");
229
252
  return;
230
253
  }
231
254
 
232
255
  const { command, args } = installCommand;
233
- await exec(`${command} ${args.join(" ")}`);
256
+ logger.info(
257
+ `Running ${command} ${args.join(" ")} to upgrade ${packageName}...`,
258
+ );
259
+ let resolver: (value: void | PromiseLike<void>) => void;
260
+ let rejecter: (reason?: any) => void;
261
+ const promise = new Promise<void>((resolve, reject) => {
262
+ resolver = resolve;
263
+ rejecter = reject;
264
+ });
265
+ const cp = child_process.exec(
266
+ `${command} ${args.join(" ")}`,
267
+ {
268
+ cwd: process.cwd(),
269
+ },
270
+ (error) => {
271
+ if (error) {
272
+ logger.error(`Failed to upgrade ${packageName} to ${targetVersion}`);
273
+ rejecter(error);
274
+ } else {
275
+ logger.info(`Successfully upgraded ${packageName} to ${targetVersion}`);
276
+ resolver();
277
+ }
278
+ },
279
+ );
280
+ cp.stdout?.on("data", (data) => {
281
+ logger.info(data);
282
+ });
283
+ cp.stderr?.on("data", (data) => {
284
+ logger.warn(data);
285
+ });
286
+ return promise;
234
287
  }
235
288
 
236
289
  export async function getCurrentLibraryVersionWithoutPM(): Promise<
@@ -255,109 +308,196 @@ export async function getCurrentLibraryVersionWithoutPM(): Promise<
255
308
  export async function checkVersionsAndUpgrade(
256
309
  lockService: LockService,
257
310
  config?: ApplicationConfig,
258
- ) {
259
- // Detect package manager
260
- const pm = await detect({
261
- strategies: [
262
- "packageManager-field",
263
- "lockfile",
264
- "install-metadata",
265
- "devEngines-field",
266
- ],
267
- cwd: process.cwd(),
268
- });
269
-
270
- if (!pm || !config?.id) return;
271
-
272
- // Get current versions
273
- const currentCliVersion = await getCurrentCliVersion();
274
- const currentLibraryInfo = await getCurrentLibraryVersion(pm);
275
-
276
- // Skip if we're in local development
277
- if (
278
- !currentCliVersion ||
279
- !valid(currentCliVersion) ||
280
- currentCliVersion.startsWith("file:") ||
281
- currentCliVersion.startsWith("link:") ||
282
- !currentLibraryInfo ||
283
- !valid(currentLibraryInfo.version) ||
284
- currentLibraryInfo.version.startsWith("file:") ||
285
- currentLibraryInfo.version.startsWith("link:")
286
- ) {
287
- return;
288
- }
311
+ ): Promise<{
312
+ cliUpdated: boolean;
313
+ libraryUpdated: boolean;
314
+ }> {
315
+ const cliUpdated = false;
316
+ const libraryUpdated = false;
317
+ let hasFailedToUpgrade = false;
318
+
319
+ logger.info("Checking versions");
320
+
321
+ await traceFunction({
322
+ name: "checkVersionsAndUpgrade",
323
+ tracer,
324
+ fn: async () => {
325
+ // Detect package manager
326
+ const pm = await traceFunction({
327
+ name: "detectPackageManager",
328
+ tracer,
329
+ fn: async () => {
330
+ return await detect({
331
+ strategies: [
332
+ "packageManager-field",
333
+ "lockfile",
334
+ "install-metadata",
335
+ "devEngines-field",
336
+ ],
337
+ cwd: process.cwd(),
338
+ });
339
+ },
340
+ });
341
+
342
+ if (!pm || !config?.id) return;
343
+
344
+ // Get current versions
345
+ const currentCliInfo = await traceFunction({
346
+ name: "getCurrentCliVersion",
347
+ tracer,
348
+ fn: async () => {
349
+ return await getCurrentCliVersion();
350
+ },
351
+ });
352
+ const currentLibraryInfo = await traceFunction({
353
+ name: "getCurrentLibraryVersion",
354
+ tracer,
355
+ fn: async () => {
356
+ return await getCurrentLibraryVersion(pm);
357
+ },
358
+ });
359
+
360
+ // Skip if we're in local development
361
+ if (
362
+ !currentCliInfo ||
363
+ !valid(currentCliInfo.version) ||
364
+ currentCliInfo.version.startsWith("file:") ||
365
+ currentCliInfo.version.startsWith("link:") ||
366
+ !currentLibraryInfo ||
367
+ !valid(currentLibraryInfo.version) ||
368
+ currentLibraryInfo.version.startsWith("file:") ||
369
+ currentLibraryInfo.version.startsWith("link:")
370
+ ) {
371
+ return;
372
+ }
373
+
374
+ // Get target versions from server
375
+ const targetVersions = await traceFunction({
376
+ name: "getRemoteVersions",
377
+ tracer,
378
+ fn: async () => {
379
+ return await getRemoteVersions(config);
380
+ },
381
+ });
382
+ if (!targetVersions) return;
383
+
384
+ let cliNeedsUpgrade: boolean | string;
385
+ let libraryNeedsUpgrade: boolean | string;
386
+ try {
387
+ // If version is latest, then semver can throw an error
388
+ // Check if CLI needs upgrade
389
+ cliNeedsUpgrade =
390
+ targetVersions.cli && gt(targetVersions.cli, currentCliInfo.version);
391
+
392
+ // Check if library needs upgrade
393
+ libraryNeedsUpgrade =
394
+ targetVersions.library &&
395
+ gt(targetVersions.library, currentLibraryInfo.version);
396
+ } catch (error) {
397
+ logger.error(
398
+ "Error checking versions to upgrade, releasing lock and exiting",
399
+ getErrorMeta(error),
400
+ );
401
+ await traceFunction({
402
+ name: "shutdownLockService",
403
+ tracer,
404
+ fn: async () => {
405
+ await lockService.shutdown({
406
+ serverInitiated: false,
407
+ });
408
+ },
409
+ });
410
+ hasFailedToUpgrade = true;
411
+ return;
412
+ }
413
+
414
+ if (!cliNeedsUpgrade && !libraryNeedsUpgrade) {
415
+ return; // Everything is up to date
416
+ }
417
+
418
+ let cliUpdated = false;
419
+ let libraryUpdated = false;
420
+
421
+ // Upgrade CLI if needed
422
+ if (cliNeedsUpgrade) {
423
+ logger.info(
424
+ `Beginning CLI upgrade from ${currentCliInfo.version} to ${targetVersions.cli}`,
425
+ );
289
426
 
290
- // Get target versions from server
291
- const targetVersions = await getRemoteVersions(config);
292
- if (!targetVersions) return;
427
+ const oclifUpgradeSucceeded = await traceFunction({
428
+ name: "upgradeCliWithOclif",
429
+ tracer,
430
+ fn: async () => {
431
+ return await upgradeCliWithOclif(targetVersions.cli);
432
+ },
433
+ });
434
+ if (!oclifUpgradeSucceeded) {
435
+ logger.info(`Falling back to package manager upgrade for CLI`);
436
+ // Fall back to package manager upgrade
437
+ await traceFunction({
438
+ name: "upgradePackageWithPackageManager - cli",
439
+ tracer,
440
+ fn: async () => {
441
+ await upgradePackageWithPackageManager(
442
+ pm,
443
+ "cli",
444
+ targetVersions.cli,
445
+ {
446
+ alias: currentCliInfo.alias,
447
+ global: true,
448
+ },
449
+ );
450
+ },
451
+ });
452
+ cliUpdated = true;
453
+ }
454
+ }
455
+
456
+ // Upgrade library if needed
457
+ if (libraryNeedsUpgrade) {
458
+ logger.info(
459
+ `Beginning library upgrade from ${currentLibraryInfo.version} to ${targetVersions.library}`,
460
+ );
461
+ await traceFunction({
462
+ name: "upgradePackageWithPackageManager - library",
463
+ tracer,
464
+ fn: async () => {
465
+ await upgradePackageWithPackageManager(
466
+ pm,
467
+ "library",
468
+ targetVersions.library,
469
+ {
470
+ alias: currentLibraryInfo.alias,
471
+ global: false,
472
+ },
473
+ );
474
+ },
475
+ });
476
+ libraryUpdated = true;
477
+ }
478
+
479
+ // Log what was updated
480
+ if (cliUpdated && libraryUpdated) {
481
+ logger.info(
482
+ "@superblocksteam/cli and @superblocksteam/library have been updated.",
483
+ );
484
+ } else if (cliUpdated) {
485
+ logger.info("@superblocksteam/cli has been updated.");
486
+ } else if (libraryUpdated) {
487
+ logger.info("@superblocksteam/library has been updated.");
488
+ } else {
489
+ logger.info("No upgrades needed");
490
+ }
491
+ },
492
+ });
293
493
 
294
- let cliNeedsUpgrade: boolean | string;
295
- let libraryNeedsUpgrade: boolean | string;
296
- try {
297
- // If version is latest, then semver can throw an error
298
- // Check if CLI needs upgrade
299
- cliNeedsUpgrade =
300
- targetVersions.cli && gt(targetVersions.cli, currentCliVersion);
301
-
302
- // Check if library needs upgrade
303
- libraryNeedsUpgrade =
304
- targetVersions.library &&
305
- gt(targetVersions.library, currentLibraryInfo.version);
306
- } catch (error) {
307
- console.warn(
308
- "Error checking versions to upgrade, releasing lock and exiting",
309
- error,
310
- );
311
- await lockService.shutdown({
312
- serverInitiated: false,
313
- });
494
+ // Restart CLI if anything was updated
495
+ if (hasFailedToUpgrade) {
314
496
  process.exit(1);
315
497
  }
316
498
 
317
- if (!cliNeedsUpgrade && !libraryNeedsUpgrade) {
318
- return; // Everything is up to date
319
- }
320
-
321
- let cliUpdated = false;
322
- let libraryUpdated = false;
323
-
324
- // Upgrade CLI if needed
325
- if (cliNeedsUpgrade) {
326
- const oclifUpgradeSucceeded = await upgradeCliWithOclif(targetVersions.cli);
327
-
328
- if (!oclifUpgradeSucceeded) {
329
- // Fall back to package manager upgrade
330
- await upgradePackageWithPackageManager(pm, "cli", targetVersions.cli);
331
- cliUpdated = true;
332
- }
333
- }
334
-
335
- // Upgrade library if needed
336
- if (libraryNeedsUpgrade) {
337
- await upgradePackageWithPackageManager(
338
- pm,
339
- "library",
340
- targetVersions.library,
341
- currentLibraryInfo.alias,
342
- );
343
- libraryUpdated = true;
344
- }
345
-
346
- // Log what was updated
347
- if (cliUpdated && libraryUpdated) {
348
- logger.info(
349
- "@superblocksteam/cli and @superblocksteam/library have been updated.",
350
- );
351
- } else if (cliUpdated) {
352
- logger.info("@superblocksteam/cli has been updated.");
353
- } else if (libraryUpdated) {
354
- logger.info("@superblocksteam/library has been updated.");
355
- }
356
-
357
- // Restart CLI if anything was updated
358
- if (cliUpdated || libraryUpdated) {
359
- logger.info("Restarting the CLI…");
360
- await lockService.releaseLock();
361
- process.exit(AUTO_UPGRADE_EXIT_CODE);
362
- }
499
+ return {
500
+ cliUpdated,
501
+ libraryUpdated,
502
+ };
363
503
  }