@superblocksteam/cli 2.0.3-next.209 → 2.0.3-next.210

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/README.md CHANGED
@@ -14,7 +14,7 @@ $ npm install -g @superblocksteam/cli
14
14
  $ superblocks COMMAND
15
15
  running command...
16
16
  $ superblocks (--version)
17
- @superblocksteam/cli/2.0.3-next.209 linux-x64 node-v20.19.0
17
+ @superblocksteam/cli/2.0.3-next.210 linux-x64 node-v20.19.0
18
18
  $ superblocks --help [COMMAND]
19
19
  USAGE
20
20
  $ superblocks COMMAND
package/dist/index.js CHANGED
@@ -297973,9 +297973,9 @@ var require_execAsync = __commonJS({
297973
297973
  init_cjs_shims();
297974
297974
  Object.defineProperty(exports2, "__esModule", { value: true });
297975
297975
  exports2.execAsync = void 0;
297976
- var child_process3 = __require("child_process");
297976
+ var child_process4 = __require("child_process");
297977
297977
  var util7 = __require("util");
297978
- exports2.execAsync = util7.promisify(child_process3.exec);
297978
+ exports2.execAsync = util7.promisify(child_process4.exec);
297979
297979
  }
297980
297980
  });
297981
297981
 
@@ -318489,9 +318489,9 @@ var require_execAsync2 = __commonJS({
318489
318489
  init_cjs_shims();
318490
318490
  Object.defineProperty(exports2, "__esModule", { value: true });
318491
318491
  exports2.execAsync = void 0;
318492
- var child_process3 = __require("child_process");
318492
+ var child_process4 = __require("child_process");
318493
318493
  var util7 = __require("util");
318494
- exports2.execAsync = util7.promisify(child_process3.exec);
318494
+ exports2.execAsync = util7.promisify(child_process4.exec);
318495
318495
  }
318496
318496
  });
318497
318497
 
@@ -418482,7 +418482,7 @@ var import_util28 = __toESM(require_dist3(), 1);
418482
418482
  // ../sdk/package.json
418483
418483
  var package_default = {
418484
418484
  name: "@superblocksteam/sdk",
418485
- version: "2.0.3-next.209",
418485
+ version: "2.0.3-next.210",
418486
418486
  type: "module",
418487
418487
  description: "Superblocks JS SDK",
418488
418488
  homepage: "https://www.superblocks.com",
@@ -418524,8 +418524,8 @@ var package_default = {
418524
418524
  "@rollup/wasm-node": "^4.35.0",
418525
418525
  "@superblocksteam/bucketeer-sdk": "0.5.0",
418526
418526
  "@superblocksteam/shared": "0.9160.0",
418527
- "@superblocksteam/util": "2.0.3-next.209",
418528
- "@superblocksteam/vite-plugin-file-sync": "2.0.3-next.209",
418527
+ "@superblocksteam/util": "2.0.3-next.210",
418528
+ "@superblocksteam/vite-plugin-file-sync": "2.0.3-next.210",
418529
418529
  "@vitejs/plugin-react": "^4.3.4",
418530
418530
  axios: "^1.4.0",
418531
418531
  chokidar: "^4.0.3",
@@ -425327,291 +425327,11 @@ function relativeToCurrentDir(applicationConfigPath) {
425327
425327
  return `./${path34.relative(process.cwd(), applicationConfigPath)}`;
425328
425328
  }
425329
425329
 
425330
- // ../sdk/dist/dev-utils/dev-server.mjs
425331
- init_cjs_shims();
425332
- var import_util33 = __toESM(require_dist3(), 1);
425333
- import net from "node:net";
425334
- import os4 from "node:os";
425335
- import path35 from "node:path";
425336
- import react3 from "@vitejs/plugin-react";
425337
- var import_cors = __toESM(require_lib37(), 1);
425338
- var import_express = __toESM(require_express2(), 1);
425339
- import { createLogger as createLogger5, createServer, loadEnv } from "vite";
425340
- var httpServer;
425341
- async function createDevServer({ root: root2, mode, fsOperationQueue, syncService, lockService, aiService, logger: loggerOverride, port }) {
425342
- const logger3 = getLogger2(loggerOverride);
425343
- if (httpServer) {
425344
- logger3.debug("Dev server already running");
425345
- return httpServer;
425346
- }
425347
- const resourceConfig = await (0, import_util33.getSuperblocksResourceConfigIfExists)();
425348
- if (resourceConfig?.configType !== "APPLICATION_V2") {
425349
- throw new Error("Invalid resource configuration type");
425350
- }
425351
- const healthResponse = {
425352
- status: "healthy",
425353
- applicationId: resourceConfig.id,
425354
- // TODO(code-mode): add branch name
425355
- cliVersion: package_default.version
425356
- };
425357
- let viteServer;
425358
- const app = (0, import_express.default)();
425359
- let isViteServerInitialized = false;
425360
- let viteResolve;
425361
- let viteReject;
425362
- const vitePromise = new Promise((resolve9, reject) => {
425363
- viteResolve = resolve9;
425364
- viteReject = reject;
425365
- });
425366
- async function gracefulShutdown({ logger: logger4, serverInitiated, switchingTo, initiatedByEmail }) {
425367
- try {
425368
- await lockService?.shutdown({
425369
- serverInitiated,
425370
- switchingTo,
425371
- initiatedByEmail
425372
- });
425373
- if (viteServer) {
425374
- await viteServer?.close();
425375
- viteServer = null;
425376
- isViteServerInitialized = false;
425377
- }
425378
- } catch (e) {
425379
- logger4.error(`Error during graceful shutdown: ${e}`);
425380
- } finally {
425381
- const closeTimeout = setTimeout(() => {
425382
- logger4.info("Dev server closed");
425383
- process.exit(0);
425384
- }, 1e3);
425385
- httpServer.close(() => {
425386
- logger4.info("Dev server closed");
425387
- clearTimeout(closeTimeout);
425388
- process.exit(0);
425389
- });
425390
- }
425391
- }
425392
- app.use((0, import_cors.default)({
425393
- origin: true,
425394
- credentials: true
425395
- }));
425396
- app.use(import_express.default.json());
425397
- app.use((req, res, next) => {
425398
- res.setHeader("Cache-Control", "no-store, max-age=0");
425399
- if (req.url === "/_sb_connect" || req.url === "/_sb_disconnect" || req.url === "/_sb_health" || req.url === "/_sb_status") {
425400
- return next();
425401
- }
425402
- vitePromise.then(() => {
425403
- if (isViteServerInitialized) {
425404
- next();
425405
- } else {
425406
- res.status(500).send("Dev server is not running");
425407
- }
425408
- });
425409
- });
425410
- app.get("/_sb_health", async (_req, res) => {
425411
- res.setHeader("Content-Type", "application/json");
425412
- res.send(JSON.stringify(healthResponse));
425413
- });
425414
- app.get("/_sb_connect", async (_req, res) => {
425415
- res.setHeader("Content-Type", "application/json");
425416
- if (isViteServerInitialized) {
425417
- res.send(JSON.stringify(healthResponse));
425418
- return;
425419
- }
425420
- isViteServerInitialized = true;
425421
- startVite({
425422
- port,
425423
- app,
425424
- root: root2,
425425
- mode,
425426
- fsOperationQueue,
425427
- syncService,
425428
- lockService,
425429
- aiService,
425430
- logger: loggerOverride,
425431
- httpServer
425432
- }).then((server) => {
425433
- viteResolve();
425434
- viteServer = server;
425435
- res.send(JSON.stringify(healthResponse));
425436
- }, viteReject);
425437
- });
425438
- app.get("/_sb_disconnect", async (_req, res) => {
425439
- console.log("GET /_sb_disconnect");
425440
- await gracefulShutdown({ logger: logger3, serverInitiated: false });
425441
- res.send("ok");
425442
- });
425443
- app.post("/_sb_disconnect", async (req, res) => {
425444
- const { initiatedByEmail, switchingTo } = req.body;
425445
- try {
425446
- await gracefulShutdown({
425447
- logger: logger3,
425448
- serverInitiated: true,
425449
- switchingTo,
425450
- initiatedByEmail
425451
- });
425452
- res.send("ok");
425453
- } catch (e) {
425454
- console.error("Error disconnecting from dev server", e);
425455
- res.status(500).send("Error disconnecting from dev server");
425456
- }
425457
- });
425458
- app.get("/_sb_status", async (_req, res) => {
425459
- res.setHeader("Content-Type", "application/json");
425460
- if (lockService?.isLocked) {
425461
- res.send({
425462
- connectedUsers: lockService.connectedUsers
425463
- });
425464
- } else {
425465
- res.send({
425466
- connectedUsers: []
425467
- });
425468
- }
425469
- });
425470
- process.on("SIGINT", async () => {
425471
- logger3.info("SIGINT received");
425472
- await gracefulShutdown({ logger: logger3, serverInitiated: false });
425473
- });
425474
- process.on("SIGTERM", async () => {
425475
- logger3.info("SIGTERM received");
425476
- await gracefulShutdown({ logger: logger3, serverInitiated: false });
425477
- });
425478
- process.on("SIGABRT", async () => {
425479
- logger3.info("SIGABRT received");
425480
- await gracefulShutdown({ logger: logger3, serverInitiated: false });
425481
- });
425482
- httpServer = await app.listen(port);
425483
- return httpServer;
425484
- }
425485
- async function startVite({ app, httpServer: httpServer2, root: root2, mode, port, fsOperationQueue, syncService, lockService, aiService, logger: loggerOverride }) {
425486
- const viteLogger = createLogger5();
425487
- const logger3 = getLogger2(loggerOverride);
425488
- viteLogger.info = logger3.info;
425489
- viteLogger.warn = (msg) => {
425490
- logger3.warn(yellow(msg));
425491
- };
425492
- viteLogger.warnOnce = (msg) => {
425493
- logger3.warn(yellow(msg));
425494
- };
425495
- viteLogger.error = (msg) => {
425496
- logger3.error(red(msg));
425497
- };
425498
- viteLogger.clearScreen = () => {
425499
- };
425500
- const isCustomBuildEnabled2 = await isCustomComponentsEnabled();
425501
- const customFolder = path35.join(root2, "custom");
425502
- const cdnUrl = "https://assets-cdn.superblocks.com/library/2.0.3-next.209";
425503
- const env3 = loadEnv(mode, root2, "");
425504
- const hmrPort = await getFreePort();
425505
- const hmrOptions = {
425506
- port: hmrPort,
425507
- clientPort: port,
425508
- server: httpServer2
425509
- };
425510
- if (process.env.CSB_BASE_PREVIEW_HOST) {
425511
- const hmrHost = `${os4.hostname()}-${port}.${process.env.CSB_BASE_PREVIEW_HOST}`;
425512
- hmrOptions.host = hmrHost;
425513
- hmrOptions.clientPort = 443;
425514
- }
425515
- const viteServer = await createServer({
425516
- root: root2,
425517
- mode,
425518
- resolve: {
425519
- alias: {
425520
- "react-router": "@superblocksteam/library"
425521
- }
425522
- },
425523
- clearScreen: process.env.SUPERBLOCKS_CLI_ENV !== "local",
425524
- optimizeDeps: {
425525
- include: ["lodash", "react-is"],
425526
- exclude: []
425527
- },
425528
- // See https://vite.dev/config/server-options.html#server-middlewaremode
425529
- // appType: "custom",
425530
- server: {
425531
- middlewareMode: true,
425532
- watch: {
425533
- ignored: [`${customFolder}/**/*`]
425534
- },
425535
- hmr: hmrOptions,
425536
- cors: {
425537
- origin: true,
425538
- credentials: true
425539
- }
425540
- },
425541
- build: {
425542
- commonjsOptions: {
425543
- include: ["react-is"]
425544
- },
425545
- rollupOptions: {
425546
- external: [`${customFolder}/**/*`]
425547
- }
425548
- },
425549
- plugins: [
425550
- src_default(),
425551
- customComponentsPlugin(),
425552
- // TODO(omar): there is a type mismatch in the monorepo
425553
- fileSyncVitePlugin({
425554
- fsOperationQueue,
425555
- syncService,
425556
- lockService,
425557
- aiService,
425558
- httpServer: httpServer2,
425559
- tracer: dev_tracer_default,
425560
- logger: logger3
425561
- }, { isCustomBuildEnabled: isCustomBuildEnabled2 }),
425562
- // for now, only use the CDN locally
425563
- superblocksCdnPlugin({
425564
- imports: {
425565
- "@superblocksteam/library": getValidFileUrl(cdnUrl, "index.js")
425566
- },
425567
- cssImports: {
425568
- "@superblocksteam/library/index.css": getValidFileUrl(cdnUrl, "index.css")
425569
- }
425570
- }),
425571
- react3(),
425572
- ddRumPlugin({
425573
- clientToken: env3.SUPERBLOCKS_LIBRARY_DD_CLIENT_TOKEN ?? "",
425574
- applicationId: env3.SUPERBLOCKS_LIBRARY_DD_APPLICATION_ID ?? "",
425575
- env: env3.SUPERBLOCKS_LIBRARY_ENV ?? "prod",
425576
- // TODO: Version should be injected from the library. Replace once we have the autoupgrade feature.
425577
- version: "1.0.0"
425578
- })
425579
- ]
425580
- });
425581
- app.use(viteServer.middlewares);
425582
- return viteServer;
425583
- }
425584
- var DEFAULT_HMR_PORT = 24678;
425585
- function getFreePort() {
425586
- return new Promise((resolve9) => {
425587
- const server = net.createServer();
425588
- server.listen(0, () => {
425589
- const address = server.address();
425590
- if (typeof address === "string") {
425591
- resolve9(DEFAULT_HMR_PORT);
425592
- return;
425593
- }
425594
- const port = address?.port;
425595
- if (!port) {
425596
- resolve9(DEFAULT_HMR_PORT);
425597
- return;
425598
- }
425599
- server.close(() => resolve9(port));
425600
- });
425601
- });
425602
- }
425603
- function getValidFileUrl(url3, file) {
425604
- return new URL(file, url3.endsWith("/") ? url3 : url3 + "/").href;
425605
- }
425606
-
425607
- // ../sdk/dist/cli-replacement/dev.mjs
425330
+ // ../sdk/dist/cli-replacement/automatic-upgrades.js
425608
425331
  init_cjs_shims();
425609
- var import_util34 = __toESM(require_dist3(), 1);
425610
- import * as child_process2 from "node:child_process";
425611
- import * as fsp5 from "node:fs/promises";
425612
- import path37 from "node:path";
425613
- import { promisify as promisify2 } from "node:util";
425614
- var import_fs_extra5 = __toESM(require_lib(), 1);
425332
+ import * as child_process from "node:child_process";
425333
+ import { promisify } from "node:util";
425334
+ import { isNativeError } from "node:util/types";
425615
425335
 
425616
425336
  // ../../../../node_modules/.pnpm/package-manager-detector@1.3.0/node_modules/package-manager-detector/dist/index.mjs
425617
425337
  init_cjs_shims();
@@ -425784,7 +425504,7 @@ var INSTALL_METADATA = {
425784
425504
  // ../../../../node_modules/.pnpm/package-manager-detector@1.3.0/node_modules/package-manager-detector/dist/detect.mjs
425785
425505
  init_cjs_shims();
425786
425506
  import fs18 from "node:fs/promises";
425787
- import path36 from "node:path";
425507
+ import path35 from "node:path";
425788
425508
  import process4 from "node:process";
425789
425509
  async function pathExists(path210, type2) {
425790
425510
  try {
@@ -425795,11 +425515,11 @@ async function pathExists(path210, type2) {
425795
425515
  }
425796
425516
  }
425797
425517
  function* lookup(cwd = process4.cwd()) {
425798
- let directory = path36.resolve(cwd);
425799
- const { root: root2 } = path36.parse(directory);
425518
+ let directory = path35.resolve(cwd);
425519
+ const { root: root2 } = path35.parse(directory);
425800
425520
  while (directory && directory !== root2) {
425801
425521
  yield directory;
425802
- directory = path36.dirname(directory);
425522
+ directory = path35.dirname(directory);
425803
425523
  }
425804
425524
  }
425805
425525
  async function parsePackageJson(filepath, onUnknown) {
@@ -425813,7 +425533,7 @@ async function detect(options9 = {}) {
425813
425533
  } = options9;
425814
425534
  let stopDir;
425815
425535
  if (typeof options9.stopDir === "string") {
425816
- const resolved = path36.resolve(options9.stopDir);
425536
+ const resolved = path35.resolve(options9.stopDir);
425817
425537
  stopDir = (dir) => dir === resolved;
425818
425538
  } else {
425819
425539
  stopDir = options9.stopDir;
@@ -425823,9 +425543,9 @@ async function detect(options9 = {}) {
425823
425543
  switch (strategy) {
425824
425544
  case "lockfile": {
425825
425545
  for (const lock of Object.keys(LOCKS)) {
425826
- if (await pathExists(path36.join(directory, lock), "file")) {
425546
+ if (await pathExists(path35.join(directory, lock), "file")) {
425827
425547
  const name18 = LOCKS[lock];
425828
- const result = await parsePackageJson(path36.join(directory, "package.json"), onUnknown);
425548
+ const result = await parsePackageJson(path35.join(directory, "package.json"), onUnknown);
425829
425549
  if (result)
425830
425550
  return result;
425831
425551
  else
@@ -425836,7 +425556,7 @@ async function detect(options9 = {}) {
425836
425556
  }
425837
425557
  case "packageManager-field":
425838
425558
  case "devEngines-field": {
425839
- const result = await parsePackageJson(path36.join(directory, "package.json"), onUnknown);
425559
+ const result = await parsePackageJson(path35.join(directory, "package.json"), onUnknown);
425840
425560
  if (result)
425841
425561
  return result;
425842
425562
  break;
@@ -425844,7 +425564,7 @@ async function detect(options9 = {}) {
425844
425564
  case "install-metadata": {
425845
425565
  for (const metadata of Object.keys(INSTALL_METADATA)) {
425846
425566
  const fileOrDir = metadata.endsWith("/") ? "dir" : "file";
425847
- if (await pathExists(path36.join(directory, metadata), fileOrDir)) {
425567
+ if (await pathExists(path35.join(directory, metadata), fileOrDir)) {
425848
425568
  const name18 = INSTALL_METADATA[metadata];
425849
425569
  const agent = name18 === "yarn" ? isMetadataYarnClassic(metadata) ? "yarn" : "yarn@berry" : name18;
425850
425570
  return { name: name18, agent };
@@ -425905,12 +425625,9 @@ function isMetadataYarnClassic(metadataPath) {
425905
425625
  }
425906
425626
 
425907
425627
  // ../sdk/dist/cli-replacement/automatic-upgrades.js
425908
- init_cjs_shims();
425909
- import * as child_process from "node:child_process";
425910
- import { promisify } from "node:util";
425911
- import { isNativeError } from "node:util/types";
425912
425628
  var import_gt = __toESM(require_gt(), 1);
425913
425629
  var import_valid = __toESM(require_valid(), 1);
425630
+ var AUTO_UPGRADE_EXIT_CODE = 99;
425914
425631
  var exec3 = promisify(child_process.exec);
425915
425632
  var logger2 = getLogger2();
425916
425633
  async function getRemoteVersions(config2) {
@@ -426046,16 +425763,6 @@ async function upgradePackageWithPackageManager(pm, packageName, targetVersion,
426046
425763
  const { command, args } = installCommand;
426047
425764
  await exec3(`${command} ${args.join(" ")}`);
426048
425765
  }
426049
- async function restartCli() {
426050
- const args = process.argv.slice(1);
426051
- const child = child_process.spawn(process.execPath, [...args], {
426052
- detached: true,
426053
- stdio: "inherit",
426054
- env: process.env
426055
- });
426056
- child.unref();
426057
- process.nextTick(() => process.exit(0));
426058
- }
426059
425766
  async function getCurrentLibraryVersionWithoutPM() {
426060
425767
  const pm = await detect({
426061
425768
  strategies: [
@@ -426128,11 +425835,295 @@ async function checkVersionsAndUpgrade(lockService, config2) {
426128
425835
  if (cliUpdated || libraryUpdated) {
426129
425836
  logger2.info("Restarting the CLI\u2026");
426130
425837
  await lockService.releaseLock();
426131
- await restartCli();
425838
+ process.exit(AUTO_UPGRADE_EXIT_CODE);
425839
+ }
425840
+ }
425841
+
425842
+ // ../sdk/dist/dev-utils/dev-server.mjs
425843
+ init_cjs_shims();
425844
+ var import_util33 = __toESM(require_dist3(), 1);
425845
+ import net from "node:net";
425846
+ import os4 from "node:os";
425847
+ import path36 from "node:path";
425848
+ import react3 from "@vitejs/plugin-react";
425849
+ var import_cors = __toESM(require_lib37(), 1);
425850
+ var import_express = __toESM(require_express2(), 1);
425851
+ import { createLogger as createLogger5, createServer, loadEnv } from "vite";
425852
+ var httpServer;
425853
+ async function createDevServer({ root: root2, mode, fsOperationQueue, syncService, lockService, aiService, logger: loggerOverride, port }) {
425854
+ const logger3 = getLogger2(loggerOverride);
425855
+ if (httpServer) {
425856
+ logger3.debug("Dev server already running");
425857
+ return httpServer;
425858
+ }
425859
+ const resourceConfig = await (0, import_util33.getSuperblocksResourceConfigIfExists)();
425860
+ if (resourceConfig?.configType !== "APPLICATION_V2") {
425861
+ throw new Error("Invalid resource configuration type");
425862
+ }
425863
+ const healthResponse = {
425864
+ status: "healthy",
425865
+ applicationId: resourceConfig.id,
425866
+ // TODO(code-mode): add branch name
425867
+ cliVersion: package_default.version
425868
+ };
425869
+ let viteServer;
425870
+ const app = (0, import_express.default)();
425871
+ let isViteServerInitialized = false;
425872
+ let viteResolve;
425873
+ let viteReject;
425874
+ const vitePromise = new Promise((resolve9, reject) => {
425875
+ viteResolve = resolve9;
425876
+ viteReject = reject;
425877
+ });
425878
+ async function gracefulShutdown({ logger: logger4, serverInitiated, switchingTo, initiatedByEmail }) {
425879
+ try {
425880
+ await lockService?.shutdown({
425881
+ serverInitiated,
425882
+ switchingTo,
425883
+ initiatedByEmail
425884
+ });
425885
+ if (viteServer) {
425886
+ await viteServer?.close();
425887
+ viteServer = null;
425888
+ isViteServerInitialized = false;
425889
+ }
425890
+ } catch (e) {
425891
+ logger4.error(`Error during graceful shutdown: ${e}`);
425892
+ } finally {
425893
+ const closeTimeout = setTimeout(() => {
425894
+ logger4.info("Dev server closed");
425895
+ process.exit(0);
425896
+ }, 1e3);
425897
+ httpServer.close(() => {
425898
+ logger4.info("Dev server closed");
425899
+ clearTimeout(closeTimeout);
425900
+ process.exit(0);
425901
+ });
425902
+ }
425903
+ }
425904
+ app.use((0, import_cors.default)({
425905
+ origin: true,
425906
+ credentials: true
425907
+ }));
425908
+ app.use(import_express.default.json());
425909
+ app.use((req, res, next) => {
425910
+ res.setHeader("Cache-Control", "no-store, max-age=0");
425911
+ if (req.url === "/_sb_connect" || req.url === "/_sb_disconnect" || req.url === "/_sb_health" || req.url === "/_sb_status") {
425912
+ return next();
425913
+ }
425914
+ vitePromise.then(() => {
425915
+ if (isViteServerInitialized) {
425916
+ next();
425917
+ } else {
425918
+ res.status(500).send("Dev server is not running");
425919
+ }
425920
+ });
425921
+ });
425922
+ app.get("/_sb_health", async (_req, res) => {
425923
+ res.setHeader("Content-Type", "application/json");
425924
+ res.send(JSON.stringify(healthResponse));
425925
+ });
425926
+ app.get("/_sb_connect", async (_req, res) => {
425927
+ res.setHeader("Content-Type", "application/json");
425928
+ if (isViteServerInitialized) {
425929
+ res.send(JSON.stringify(healthResponse));
425930
+ return;
425931
+ }
425932
+ isViteServerInitialized = true;
425933
+ startVite({
425934
+ port,
425935
+ app,
425936
+ root: root2,
425937
+ mode,
425938
+ fsOperationQueue,
425939
+ syncService,
425940
+ lockService,
425941
+ aiService,
425942
+ logger: loggerOverride,
425943
+ httpServer
425944
+ }).then((server) => {
425945
+ viteResolve();
425946
+ viteServer = server;
425947
+ res.send(JSON.stringify(healthResponse));
425948
+ }, viteReject);
425949
+ });
425950
+ app.get("/_sb_disconnect", async (_req, res) => {
425951
+ console.log("GET /_sb_disconnect");
425952
+ await gracefulShutdown({ logger: logger3, serverInitiated: false });
425953
+ res.send("ok");
425954
+ });
425955
+ app.post("/_sb_disconnect", async (req, res) => {
425956
+ const { initiatedByEmail, switchingTo } = req.body;
425957
+ try {
425958
+ await gracefulShutdown({
425959
+ logger: logger3,
425960
+ serverInitiated: true,
425961
+ switchingTo,
425962
+ initiatedByEmail
425963
+ });
425964
+ res.send("ok");
425965
+ } catch (e) {
425966
+ console.error("Error disconnecting from dev server", e);
425967
+ res.status(500).send("Error disconnecting from dev server");
425968
+ }
425969
+ });
425970
+ app.get("/_sb_status", async (_req, res) => {
425971
+ res.setHeader("Content-Type", "application/json");
425972
+ if (lockService?.isLocked) {
425973
+ res.send({
425974
+ connectedUsers: lockService.connectedUsers
425975
+ });
425976
+ } else {
425977
+ res.send({
425978
+ connectedUsers: []
425979
+ });
425980
+ }
425981
+ });
425982
+ process.on("SIGINT", async () => {
425983
+ logger3.info("SIGINT received");
425984
+ await gracefulShutdown({ logger: logger3, serverInitiated: false });
425985
+ });
425986
+ process.on("SIGTERM", async () => {
425987
+ logger3.info("SIGTERM received");
425988
+ await gracefulShutdown({ logger: logger3, serverInitiated: false });
425989
+ });
425990
+ process.on("SIGABRT", async () => {
425991
+ logger3.info("SIGABRT received");
425992
+ await gracefulShutdown({ logger: logger3, serverInitiated: false });
425993
+ });
425994
+ httpServer = await app.listen(port);
425995
+ return httpServer;
425996
+ }
425997
+ async function startVite({ app, httpServer: httpServer2, root: root2, mode, port, fsOperationQueue, syncService, lockService, aiService, logger: loggerOverride }) {
425998
+ const viteLogger = createLogger5();
425999
+ const logger3 = getLogger2(loggerOverride);
426000
+ viteLogger.info = logger3.info;
426001
+ viteLogger.warn = (msg) => {
426002
+ logger3.warn(yellow(msg));
426003
+ };
426004
+ viteLogger.warnOnce = (msg) => {
426005
+ logger3.warn(yellow(msg));
426006
+ };
426007
+ viteLogger.error = (msg) => {
426008
+ logger3.error(red(msg));
426009
+ };
426010
+ viteLogger.clearScreen = () => {
426011
+ };
426012
+ const isCustomBuildEnabled2 = await isCustomComponentsEnabled();
426013
+ const customFolder = path36.join(root2, "custom");
426014
+ const cdnUrl = "https://assets-cdn.superblocks.com/library/2.0.3-next.210";
426015
+ const env3 = loadEnv(mode, root2, "");
426016
+ const hmrPort = await getFreePort();
426017
+ const hmrOptions = {
426018
+ port: hmrPort,
426019
+ clientPort: port,
426020
+ server: httpServer2
426021
+ };
426022
+ if (process.env.CSB_BASE_PREVIEW_HOST) {
426023
+ const hmrHost = `${os4.hostname()}-${port}.${process.env.CSB_BASE_PREVIEW_HOST}`;
426024
+ hmrOptions.host = hmrHost;
426025
+ hmrOptions.clientPort = 443;
426132
426026
  }
426027
+ const viteServer = await createServer({
426028
+ root: root2,
426029
+ mode,
426030
+ resolve: {
426031
+ alias: {
426032
+ "react-router": "@superblocksteam/library"
426033
+ }
426034
+ },
426035
+ clearScreen: process.env.SUPERBLOCKS_CLI_ENV !== "local",
426036
+ optimizeDeps: {
426037
+ include: ["lodash", "react-is"],
426038
+ exclude: []
426039
+ },
426040
+ // See https://vite.dev/config/server-options.html#server-middlewaremode
426041
+ // appType: "custom",
426042
+ server: {
426043
+ middlewareMode: true,
426044
+ watch: {
426045
+ ignored: [`${customFolder}/**/*`]
426046
+ },
426047
+ hmr: hmrOptions,
426048
+ cors: {
426049
+ origin: true,
426050
+ credentials: true
426051
+ }
426052
+ },
426053
+ build: {
426054
+ commonjsOptions: {
426055
+ include: ["react-is"]
426056
+ },
426057
+ rollupOptions: {
426058
+ external: [`${customFolder}/**/*`]
426059
+ }
426060
+ },
426061
+ plugins: [
426062
+ src_default(),
426063
+ customComponentsPlugin(),
426064
+ // TODO(omar): there is a type mismatch in the monorepo
426065
+ fileSyncVitePlugin({
426066
+ fsOperationQueue,
426067
+ syncService,
426068
+ lockService,
426069
+ aiService,
426070
+ httpServer: httpServer2,
426071
+ tracer: dev_tracer_default,
426072
+ logger: logger3
426073
+ }, { isCustomBuildEnabled: isCustomBuildEnabled2 }),
426074
+ // for now, only use the CDN locally
426075
+ superblocksCdnPlugin({
426076
+ imports: {
426077
+ "@superblocksteam/library": getValidFileUrl(cdnUrl, "index.js")
426078
+ },
426079
+ cssImports: {
426080
+ "@superblocksteam/library/index.css": getValidFileUrl(cdnUrl, "index.css")
426081
+ }
426082
+ }),
426083
+ react3(),
426084
+ ddRumPlugin({
426085
+ clientToken: env3.SUPERBLOCKS_LIBRARY_DD_CLIENT_TOKEN ?? "",
426086
+ applicationId: env3.SUPERBLOCKS_LIBRARY_DD_APPLICATION_ID ?? "",
426087
+ env: env3.SUPERBLOCKS_LIBRARY_ENV ?? "prod",
426088
+ // TODO: Version should be injected from the library. Replace once we have the autoupgrade feature.
426089
+ version: "1.0.0"
426090
+ })
426091
+ ]
426092
+ });
426093
+ app.use(viteServer.middlewares);
426094
+ return viteServer;
426095
+ }
426096
+ var DEFAULT_HMR_PORT = 24678;
426097
+ function getFreePort() {
426098
+ return new Promise((resolve9) => {
426099
+ const server = net.createServer();
426100
+ server.listen(0, () => {
426101
+ const address = server.address();
426102
+ if (typeof address === "string") {
426103
+ resolve9(DEFAULT_HMR_PORT);
426104
+ return;
426105
+ }
426106
+ const port = address?.port;
426107
+ if (!port) {
426108
+ resolve9(DEFAULT_HMR_PORT);
426109
+ return;
426110
+ }
426111
+ server.close(() => resolve9(port));
426112
+ });
426113
+ });
426114
+ }
426115
+ function getValidFileUrl(url3, file) {
426116
+ return new URL(file, url3.endsWith("/") ? url3 : url3 + "/").href;
426133
426117
  }
426134
426118
 
426135
426119
  // ../sdk/dist/cli-replacement/dev.mjs
426120
+ init_cjs_shims();
426121
+ var import_util34 = __toESM(require_dist3(), 1);
426122
+ import * as child_process2 from "node:child_process";
426123
+ import * as fsp5 from "node:fs/promises";
426124
+ import path37 from "node:path";
426125
+ import { promisify as promisify2 } from "node:util";
426126
+ var import_fs_extra5 = __toESM(require_lib(), 1);
426136
426127
  var exec5 = promisify2(child_process2.exec);
426137
426128
  var passErrorToVSCode = (message, logger3) => {
426138
426129
  if (message) {
@@ -426178,7 +426169,7 @@ async function installPackages(cwd, logger3) {
426178
426169
  }
426179
426170
  async function dev(options9) {
426180
426171
  const logger3 = getLogger2(options9.logger);
426181
- const { cwd, pidfilePath, devServerPort, downloadFirst, uploadFirst, skipSync, applicationConfig } = options9;
426172
+ const { cwd, pidfilePath, devServerPort, downloadFirst, uploadFirst, skipSync, applicationConfig, skipAutoUpgrade } = options9;
426182
426173
  const cliVersion = await getCurrentCliVersion();
426183
426174
  const libraryVersion = await getCurrentLibraryVersionWithoutPM();
426184
426175
  logger3.info(`Running command: ${options9.superblocksPath} dev${options9.uploadFirst ? " --upload-first" : ""}${options9.downloadFirst ? " --download-first" : ""} with baseUrl: ${applicationConfig?.superblocksBaseUrl}, cliVersion: ${cliVersion}, libraryVersion: ${libraryVersion?.alias} ${libraryVersion?.version}`);
@@ -426220,7 +426211,7 @@ async function dev(options9) {
426220
426211
  if (lockService) {
426221
426212
  try {
426222
426213
  await lockService.acquireLock();
426223
- if (!process.env.PACKAGE_SUFFIX || process.env.PACKAGE_SUFFIX === "") {
426214
+ if (!process.env.PACKAGE_SUFFIX || process.env.PACKAGE_SUFFIX === "" || !skipAutoUpgrade) {
426224
426215
  await checkVersionsAndUpgrade(lockService, applicationConfig);
426225
426216
  }
426226
426217
  } catch (error) {
@@ -430348,6 +430339,7 @@ var SetSuperblocksConfig = class _SetSuperblocksConfig extends Command2 {
430348
430339
 
430349
430340
  // src/commands/dev.mts
430350
430341
  init_cjs_shims();
430342
+ import * as child_process3 from "node:child_process";
430351
430343
  import { resolve as resolve8 } from "node:path";
430352
430344
  import { Flags as Flags4 } from "@oclif/core";
430353
430345
 
@@ -430415,8 +430407,30 @@ var Dev = class _Dev extends AuthenticatedApplicationV2Command {
430415
430407
  description: "Download from Superblocks before starting, can overwrite your local files",
430416
430408
  default: false,
430417
430409
  aliases: ["d"]
430410
+ }),
430411
+ child: Flags4.boolean({
430412
+ name: "child",
430413
+ description: "Run the dev server as a child process",
430414
+ default: false,
430415
+ hidden: true
430416
+ // We don't want to expose this flag to the user. This is the child process that runs the dev server under the wrapper of the parent process
430417
+ }),
430418
+ "skip-auto-upgrade": Flags4.boolean({
430419
+ name: "skip-auto-upgrade",
430420
+ // This is added to avoid retrying the auto-upgrade again if it failed the first time
430421
+ description: "Skip automatic upgrades",
430422
+ default: false,
430423
+ hidden: true
430424
+ // We don't want to expose this flag. This is used for a second dev server start after an attempt to upgrade
430418
430425
  })
430419
430426
  };
430427
+ async init() {
430428
+ const { flags } = await this.parse(_Dev);
430429
+ if (flags["child"]) {
430430
+ await super.init();
430431
+ showKoalaGreeting();
430432
+ }
430433
+ }
430420
430434
  async run() {
430421
430435
  try {
430422
430436
  const { flags } = await this.parse(_Dev);
@@ -430425,26 +430439,72 @@ var Dev = class _Dev extends AuthenticatedApplicationV2Command {
430425
430439
  "This command requires either the --upload-first or --download-first flag"
430426
430440
  );
430427
430441
  }
430428
- showKoalaGreeting();
430429
- const applicationConfig = {
430430
- superblocksBaseUrl: this.getSdk().superblocksBaseUrl,
430431
- token: this.getSdk().token,
430432
- id: this.applicationConfig.id,
430433
- // TODO(george): when we support revision control, we should use the proper branch name here
430434
- branchName: DEFAULT_BRANCH
430435
- };
430436
- await dev({
430437
- applicationConfig,
430438
- cwd: process.cwd(),
430439
- pidfilePath: flags.pidfile,
430440
- devServerPort: flags.port,
430441
- uploadFirst: flags["upload-first"],
430442
- downloadFirst: flags["download-first"],
430443
- logger: (message) => {
430444
- this.log(message);
430445
- },
430446
- superblocksPath: resolve8(process.argv[1])
430447
- });
430442
+ if (flags["child"]) {
430443
+ const applicationConfig = {
430444
+ superblocksBaseUrl: this.getSdk().superblocksBaseUrl,
430445
+ token: this.getSdk().token,
430446
+ id: this.applicationConfig.id,
430447
+ // TODO(george): when we support revision control, we should use the proper branch name here
430448
+ branchName: DEFAULT_BRANCH
430449
+ };
430450
+ await dev({
430451
+ applicationConfig,
430452
+ cwd: process.cwd(),
430453
+ pidfilePath: flags.pidfile,
430454
+ devServerPort: flags.port,
430455
+ uploadFirst: flags["upload-first"],
430456
+ downloadFirst: flags["download-first"],
430457
+ superblocksPath: resolve8(process.argv[1]),
430458
+ logger: (message) => {
430459
+ this.log(message);
430460
+ },
430461
+ skipAutoUpgrade: flags["skip-auto-upgrade"]
430462
+ });
430463
+ } else {
430464
+ const args = process.argv.slice(1);
430465
+ let child = child_process3.spawn(
430466
+ process.execPath,
430467
+ [...args, "--child"],
430468
+ {
430469
+ detached: false,
430470
+ stdio: "inherit",
430471
+ env: process.env
430472
+ }
430473
+ );
430474
+ const setupSignalHandlers = (childProcess) => {
430475
+ process.on("SIGINT", () => childProcess.kill("SIGINT"));
430476
+ process.on("SIGHUP", () => childProcess.kill("SIGHUP"));
430477
+ process.on("SIGTERM", () => childProcess.kill("SIGTERM"));
430478
+ process.on("SIGQUIT", () => childProcess.kill("SIGQUIT"));
430479
+ process.on("SIGABRT", () => childProcess.kill("SIGABRT"));
430480
+ };
430481
+ setupSignalHandlers(child);
430482
+ child.on("exit", (code, signal) => {
430483
+ if (code === AUTO_UPGRADE_EXIT_CODE) {
430484
+ this.log("Dev server exited due to automatic upgrade");
430485
+ const baseArgs = args.filter((arg) => arg !== "--child");
430486
+ child = child_process3.spawn(
430487
+ process.execPath,
430488
+ [...baseArgs, "--child", "--skip-auto-upgrade"],
430489
+ {
430490
+ detached: false,
430491
+ stdio: "inherit",
430492
+ env: process.env
430493
+ }
430494
+ );
430495
+ setupSignalHandlers(child);
430496
+ } else if (code === 0) {
430497
+ this.log("Dev server exited successfully");
430498
+ } else {
430499
+ this.error(
430500
+ `Dev server exited with code ${code} and signal ${signal}`
430501
+ );
430502
+ }
430503
+ if (code !== AUTO_UPGRADE_EXIT_CODE) {
430504
+ process.exit(code);
430505
+ }
430506
+ });
430507
+ }
430448
430508
  } catch (error) {
430449
430509
  this.error(error.message);
430450
430510
  }
@@ -320,6 +320,20 @@
320
320
  "name": "download-first",
321
321
  "allowNo": false,
322
322
  "type": "boolean"
323
+ },
324
+ "child": {
325
+ "description": "Run the dev server as a child process",
326
+ "hidden": true,
327
+ "name": "child",
328
+ "allowNo": false,
329
+ "type": "boolean"
330
+ },
331
+ "skip-auto-upgrade": {
332
+ "description": "Skip automatic upgrades",
333
+ "hidden": true,
334
+ "name": "skip-auto-upgrade",
335
+ "allowNo": false,
336
+ "type": "boolean"
323
337
  }
324
338
  },
325
339
  "hasDynamicHelp": false,
@@ -571,5 +585,5 @@
571
585
  "strict": true
572
586
  }
573
587
  },
574
- "version": "2.0.3-next.209"
588
+ "version": "2.0.3-next.210"
575
589
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/cli",
3
- "version": "2.0.3-next.209",
3
+ "version": "2.0.3-next.210",
4
4
  "type": "module",
5
5
  "description": "Official Superblocks CLI",
6
6
  "homepage": "https://www.superblocks.com",
@@ -42,9 +42,9 @@
42
42
  "devDependencies": {
43
43
  "@eslint/js": "^9.16.0",
44
44
  "@oclif/test": "^4.1.11",
45
- "@superblocksteam/sdk": "2.0.3-next.209",
45
+ "@superblocksteam/sdk": "2.0.3-next.210",
46
46
  "@superblocksteam/shared": "0.9160.0",
47
- "@superblocksteam/util": "2.0.3-next.209",
47
+ "@superblocksteam/util": "2.0.3-next.210",
48
48
  "@types/babel__core": "^7.20.0",
49
49
  "@types/chai": "^4",
50
50
  "@types/fs-extra": "^11.0.1",