@superblocksteam/sdk 2.0.6-next.89 → 2.0.6-next.9

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 +2 -6
  2. package/dist/application-build.mjs.map +1 -1
  3. package/dist/cli-replacement/automatic-upgrades.d.ts +2 -5
  4. package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -1
  5. package/dist/cli-replacement/automatic-upgrades.js +93 -221
  6. package/dist/cli-replacement/automatic-upgrades.js.map +1 -1
  7. package/dist/cli-replacement/dev.d.mts +2 -1
  8. package/dist/cli-replacement/dev.d.mts.map +1 -1
  9. package/dist/cli-replacement/dev.mjs +32 -57
  10. package/dist/cli-replacement/dev.mjs.map +1 -1
  11. package/dist/client.d.ts +0 -34
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +1 -92
  14. package/dist/client.js.map +1 -1
  15. package/dist/dev-utils/dev-logger.d.mts +7 -17
  16. package/dist/dev-utils/dev-logger.d.mts.map +1 -1
  17. package/dist/dev-utils/dev-logger.mjs +9 -50
  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 +12 -8
  21. package/dist/dev-utils/dev-server.mjs.map +1 -1
  22. package/dist/dev-utils/dev-tracer.d.ts +0 -2
  23. package/dist/dev-utils/dev-tracer.d.ts.map +1 -1
  24. package/dist/dev-utils/dev-tracer.js +35 -42
  25. package/dist/dev-utils/dev-tracer.js.map +1 -1
  26. package/dist/dev-utils/vite-plugin-sb-cdn.d.mts.map +1 -1
  27. package/dist/dev-utils/vite-plugin-sb-cdn.mjs +3 -13
  28. package/dist/dev-utils/vite-plugin-sb-cdn.mjs.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/vite-plugin-inject-sb-ids-transform.mjs +1 -1
  34. package/dist/vite-plugin-inject-sb-ids-transform.mjs.map +1 -1
  35. package/package.json +4 -6
  36. package/src/application-build.mts +3 -6
  37. package/src/cli-replacement/automatic-upgrades.ts +113 -278
  38. package/src/cli-replacement/dev.mts +43 -77
  39. package/src/client.ts +0 -115
  40. package/src/dev-utils/dev-logger.mts +20 -94
  41. package/src/dev-utils/dev-server.mts +12 -10
  42. package/src/dev-utils/dev-tracer.ts +37 -48
  43. package/src/dev-utils/vite-plugin-sb-cdn.mts +3 -14
  44. package/src/index.ts +0 -4
  45. package/src/vite-plugin-inject-sb-ids-transform.mts +1 -1
  46. package/tsconfig.tsbuildinfo +1 -1
  47. package/dist/dev-utils/vite-plugin-build-manifest-stub.d.mts +0 -10
  48. package/dist/dev-utils/vite-plugin-build-manifest-stub.d.mts.map +0 -1
  49. package/dist/dev-utils/vite-plugin-build-manifest-stub.mjs +0 -27
  50. package/dist/dev-utils/vite-plugin-build-manifest-stub.mjs.map +0 -1
  51. package/dist/vite-plugin-generate-build-manifest.d.mts +0 -21
  52. package/dist/vite-plugin-generate-build-manifest.d.mts.map +0 -1
  53. package/dist/vite-plugin-generate-build-manifest.mjs +0 -131
  54. package/dist/vite-plugin-generate-build-manifest.mjs.map +0 -1
  55. package/src/dev-utils/vite-plugin-build-manifest-stub.mts +0 -30
  56. package/src/vite-plugin-generate-build-manifest.mts +0 -193
  57. package/test/clients.test.mts +0 -120
@@ -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";
13
12
  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 = (msg: string) => logger.info(msg);
84
+ viteLogger.info = logger.info;
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 }),
136
+ injectIndexVitePlugin({ assetsCdnUrl, logger }) as Plugin,
137
137
  customComponentsPlugin(),
138
138
  injectSuperblocksIdsPlugin(root),
139
139
  superblocksCdnPlugin({
@@ -142,15 +142,12 @@ 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",
147
145
  },
148
146
  cssImports: {
149
147
  "@superblocksteam/library/index.css": `${libraryUrl}/index.css`,
150
148
  },
151
149
  }),
152
150
  react(),
153
- generateBuildManifestPlugin(root),
154
151
 
155
152
  ddRumPlugin({
156
153
  clientToken: ddClientToken ?? "",
@@ -1,13 +1,11 @@
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";
5
4
  import { resolveCommand, type DetectResult } from "package-manager-detector";
6
5
  import { detect } from "package-manager-detector/detect";
7
6
  import gt from "semver/functions/gt.js";
8
7
  import valid from "semver/functions/valid.js";
9
- import { getErrorMeta, getLogger } from "../dev-utils/dev-logger.mjs";
10
- import tracer from "../dev-utils/dev-tracer.js";
8
+ import { getLogger } from "../dev-utils/dev-logger.mjs";
11
9
  import type { ResponseMeta } from "../socket/handlers.js";
12
10
  import type { ApplicationConfig } from "../types/common.js";
13
11
  import type { LockService } from "@superblocksteam/vite-plugin-file-sync/lock-service";
@@ -57,7 +55,7 @@ async function getRemoteVersions(
57
55
  return data.data;
58
56
  } else {
59
57
  const error = (await response.json()) as CheckVersionsErrorResponse;
60
- logger.error(
58
+ console.log(
61
59
  `Could not get latest CLI version: ${error.responseMeta.message}`,
62
60
  );
63
61
  }
@@ -70,9 +68,7 @@ async function getRemoteVersions(
70
68
  }
71
69
  }
72
70
 
73
- export async function getCurrentCliVersion(): Promise<
74
- PackageVersionInfo | undefined
75
- > {
71
+ export async function getCurrentCliVersion(): Promise<string | undefined> {
76
72
  try {
77
73
  const command = process.platform === "win32" ? "where" : "which";
78
74
  const { stdout } = await exec(`${command} superblocks`);
@@ -89,16 +85,7 @@ export async function getCurrentCliVersion(): Promise<
89
85
  /@superblocksteam\/cli(-ephemeral)?\//,
90
86
  "",
91
87
  );
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 };
88
+ return version;
102
89
  } catch (error) {
103
90
  if (isNativeError(error)) {
104
91
  logger.error(`Error getting CLI version: ${error.message}`);
@@ -117,16 +104,16 @@ export async function getCurrentLibraryVersion(
117
104
  case "pnpm":
118
105
  return await getPnpmLibraryVersion();
119
106
  default:
120
- logger.error(
107
+ console.error(
121
108
  `${pm.agent} is currently not supported for automatic upgrades.`,
122
109
  );
123
110
  return undefined;
124
111
  }
125
112
  } catch (error) {
126
- logger.error(
113
+ console.error(
127
114
  "Could not resolve current library version. Skipping automatic upgrade.",
128
- getErrorMeta(error),
129
115
  );
116
+ console.error(error);
130
117
  return undefined;
131
118
  }
132
119
  }
@@ -213,10 +200,10 @@ async function upgradeCliWithOclif(targetVersion: string): Promise<boolean> {
213
200
 
214
201
  if (!superblocksPath) return false;
215
202
 
216
- const { stdout: updateOutput, stderr: updateErrorOutput } = await exec(
203
+ const { stdout: updateOutput } = await exec(
217
204
  `${superblocksPath} update --version=${targetVersion}`,
218
205
  );
219
- return !(updateOutput + updateErrorOutput).includes("not updatable");
206
+ return !updateOutput.includes("not updatable");
220
207
  } catch (error) {
221
208
  if (isNativeError(error)) {
222
209
  logger.error(`Error checking CLI updatability: ${error.message}`);
@@ -229,70 +216,21 @@ async function upgradePackageWithPackageManager(
229
216
  pm: DetectResult,
230
217
  packageName: string,
231
218
  targetVersion: string,
232
- {
233
- alias,
234
- global,
235
- }: {
236
- alias?: string;
237
- global?: boolean;
238
- },
219
+ alias?: string,
239
220
  ): Promise<void> {
240
221
  const packageSpec = alias
241
222
  ? `@superblocksteam/${packageName}@npm:${alias}@${targetVersion}`
242
223
  : `@superblocksteam/${packageName}@${targetVersion}`;
243
224
 
244
- // --prefer-offline will skip some staleness checks that are slow
245
- const installArgs = [packageSpec, "--fund=false"];
246
- if (pm.agent === "npm") {
247
- installArgs.push("--audit=false");
248
- }
249
- if (packageName === "cli") {
250
- installArgs.push("--force");
251
- }
252
-
253
- const installCommand = resolveCommand(
254
- pm.agent,
255
- global ? "global" : "install",
256
- installArgs,
257
- );
225
+ const installCommand = resolveCommand(pm.agent, "install", [packageSpec]);
258
226
 
259
227
  if (!installCommand) {
260
- logger.error("Could not determine how to upgrade Superblocks packages.");
228
+ console.error("Could not determine how to upgrade Superblocks packages.");
261
229
  return;
262
230
  }
263
231
 
264
232
  const { command, args } = installCommand;
265
- logger.info(
266
- `Running ${command} ${args.join(" ")} to upgrade ${packageName}...`,
267
- );
268
- let resolver: (value: void | PromiseLike<void>) => void;
269
- let rejecter: (reason?: any) => void;
270
- const promise = new Promise<void>((resolve, reject) => {
271
- resolver = resolve;
272
- rejecter = reject;
273
- });
274
- const cp = child_process.exec(
275
- `${command} ${args.join(" ")}`,
276
- {
277
- cwd: process.cwd(),
278
- },
279
- (error) => {
280
- if (error) {
281
- logger.error(`Failed to upgrade ${packageName} to ${targetVersion}`);
282
- rejecter(error);
283
- } else {
284
- logger.info(`Successfully upgraded ${packageName} to ${targetVersion}`);
285
- resolver();
286
- }
287
- },
288
- );
289
- cp.stdout?.on("data", (data) => {
290
- logger.info(data);
291
- });
292
- cp.stderr?.on("data", (data) => {
293
- logger.warn(data);
294
- });
295
- return promise;
233
+ await exec(`${command} ${args.join(" ")}`);
296
234
  }
297
235
 
298
236
  export async function getCurrentLibraryVersionWithoutPM(): Promise<
@@ -317,212 +255,109 @@ export async function getCurrentLibraryVersionWithoutPM(): Promise<
317
255
  export async function checkVersionsAndUpgrade(
318
256
  lockService: LockService,
319
257
  config?: ApplicationConfig,
320
- ): Promise<{
321
- cliUpdated: boolean;
322
- libraryUpdated: boolean;
323
- }> {
324
- const cliUpdated = false;
325
- const libraryUpdated = false;
326
- let hasFailedToUpgrade = false;
327
-
328
- logger.info("Checking versions");
329
-
330
- await traceFunction({
331
- name: "checkVersionsAndUpgrade",
332
- tracer,
333
- fn: async () => {
334
- // Detect package manager
335
- const pm = await traceFunction({
336
- name: "detectPackageManager",
337
- tracer,
338
- fn: async () => {
339
- return await detect({
340
- strategies: [
341
- "packageManager-field",
342
- "lockfile",
343
- "install-metadata",
344
- "devEngines-field",
345
- ],
346
- cwd: process.cwd(),
347
- });
348
- },
349
- });
350
-
351
- if (!pm || !config?.id) return;
352
-
353
- // Get current versions
354
- const currentCliInfo = await traceFunction({
355
- name: "getCurrentCliVersion",
356
- tracer,
357
- fn: async () => {
358
- return await getCurrentCliVersion();
359
- },
360
- });
361
- const currentLibraryInfo = await traceFunction({
362
- name: "getCurrentLibraryVersion",
363
- tracer,
364
- fn: async () => {
365
- return await getCurrentLibraryVersion(pm);
366
- },
367
- });
368
-
369
- // Skip if we're in local development
370
- if (
371
- !currentCliInfo ||
372
- !valid(currentCliInfo.version) ||
373
- currentCliInfo.version.startsWith("file:") ||
374
- currentCliInfo.version.startsWith("link:") ||
375
- !currentLibraryInfo ||
376
- !valid(currentLibraryInfo.version) ||
377
- currentLibraryInfo.version.startsWith("file:") ||
378
- currentLibraryInfo.version.startsWith("link:")
379
- ) {
380
- return;
381
- }
382
-
383
- // Get target versions from server
384
- const targetVersions = await traceFunction({
385
- name: "getRemoteVersions",
386
- tracer,
387
- fn: async () => {
388
- return await getRemoteVersions(config);
389
- },
390
- });
391
- if (!targetVersions) return;
392
-
393
- let cliNeedsUpgrade: boolean | string;
394
- let libraryNeedsUpgrade: boolean | string;
395
- try {
396
- // If version is latest, then semver can throw an error
397
- // Check if CLI needs upgrade
398
- cliNeedsUpgrade =
399
- targetVersions.cli && gt(targetVersions.cli, currentCliInfo.version);
400
-
401
- // Check if library needs upgrade
402
- libraryNeedsUpgrade =
403
- targetVersions.library &&
404
- gt(targetVersions.library, currentLibraryInfo.version);
405
- } catch (error) {
406
- logger.error(
407
- "Error checking versions to upgrade, releasing lock and exiting",
408
- getErrorMeta(error),
409
- );
410
- await traceFunction({
411
- name: "shutdownLockService",
412
- tracer,
413
- fn: async () => {
414
- await lockService.shutdown({
415
- serverInitiated: false,
416
- });
417
- },
418
- });
419
- hasFailedToUpgrade = true;
420
- return;
421
- }
422
-
423
- if (!cliNeedsUpgrade && !libraryNeedsUpgrade) {
424
- return; // Everything is up to date
425
- }
426
-
427
- let cliUpdated = false;
428
- let libraryUpdated = false;
429
-
430
- try {
431
- const upgradePromises = [];
432
-
433
- if (cliNeedsUpgrade) {
434
- const cliUpgradePromise = traceFunction({
435
- name: "upgradeCli",
436
- tracer,
437
- fn: async () => {
438
- logger.info(
439
- `Beginning CLI upgrade from ${currentCliInfo.version} to ${targetVersions.cli}`,
440
- );
441
- const oclifUpgradeSucceeded = await traceFunction({
442
- name: "upgradeCliWithOclif",
443
- tracer,
444
- fn: async () => {
445
- return await upgradeCliWithOclif(targetVersions.cli);
446
- },
447
- });
448
- if (!oclifUpgradeSucceeded) {
449
- logger.info(`Falling back to package manager upgrade for CLI`);
450
- // Fall back to package manager upgrade
451
- await traceFunction({
452
- name: "upgradePackageWithPackageManager - cli",
453
- tracer,
454
- fn: async () => {
455
- await upgradePackageWithPackageManager(
456
- pm,
457
- "cli",
458
- targetVersions.cli,
459
- {
460
- alias: currentCliInfo.alias,
461
- global: true,
462
- },
463
- );
464
- },
465
- });
466
- cliUpdated = true;
467
- }
468
- },
469
- });
470
- upgradePromises.push(cliUpgradePromise);
471
- }
472
-
473
- if (libraryNeedsUpgrade) {
474
- const libraryUpgradePromise = traceFunction({
475
- name: "upgradePackageWithPackageManager - library",
476
- tracer,
477
- fn: async () => {
478
- logger.info(
479
- `Beginning library upgrade from ${currentLibraryInfo.version} to ${targetVersions.library}`,
480
- );
481
- await upgradePackageWithPackageManager(
482
- pm,
483
- "library",
484
- targetVersions.library,
485
- {
486
- alias: currentLibraryInfo.alias,
487
- global: false,
488
- },
489
- );
490
- libraryUpdated = true;
491
- },
492
- });
493
- upgradePromises.push(libraryUpgradePromise);
494
- }
495
- await Promise.all(upgradePromises);
496
- } catch (error) {
497
- logger.error(
498
- "Error upgrading packages, releasing lock and exiting",
499
- getErrorMeta(error),
500
- );
501
- hasFailedToUpgrade = true;
502
- }
503
-
504
- // Log what was updated
505
- if (cliUpdated && libraryUpdated) {
506
- logger.info(
507
- "@superblocksteam/cli and @superblocksteam/library have been updated.",
508
- );
509
- } else if (cliUpdated) {
510
- logger.info("@superblocksteam/cli has been updated.");
511
- } else if (libraryUpdated) {
512
- logger.info("@superblocksteam/library has been updated.");
513
- } else {
514
- logger.info("No upgrades needed");
515
- }
516
- },
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(),
517
268
  });
518
269
 
519
- // Restart CLI if anything was updated
520
- if (hasFailedToUpgrade) {
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
+ }
289
+
290
+ // Get target versions from server
291
+ const targetVersions = await getRemoteVersions(config);
292
+ if (!targetVersions) return;
293
+
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
+ });
521
314
  process.exit(1);
522
315
  }
523
316
 
524
- return {
525
- cliUpdated,
526
- libraryUpdated,
527
- };
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
+ }
528
363
  }