@scalar/cli 2.1.0 → 2.5.1

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 (88) hide show
  1. package/README.md +28 -24
  2. package/chunks/{action-CYP4VDK3.js → action-37EV4UHW.js} +12 -35
  3. package/chunks/{action-MENXFJH3.js → action-4XI7XJR4.js} +9 -9
  4. package/chunks/{action-H5OHT2GV.js → action-5IU77OII.js} +7 -3
  5. package/chunks/{action-STIEAXOE.js → action-B3KKREWQ.js} +16 -5
  6. package/chunks/{action-BYZUBXVB.js → action-CH24QGTE.js} +8 -4
  7. package/chunks/action-F3UX5E3M.js +522 -0
  8. package/chunks/{action-GB6DM53B.js → action-FDB7NEOK.js} +21 -10
  9. package/chunks/action-FIXBOJEW.js +244 -0
  10. package/chunks/{action-DFKHSDFV.js → action-G26LSVZ7.js} +7 -3
  11. package/chunks/{action-Q5UJ32D6.js → action-H3RTILLM.js} +1 -1
  12. package/chunks/{action-GEBRPNRT.js → action-HGBBV353.js} +15 -16
  13. package/chunks/{action-5R5FDF6S.js → action-IUE4IOWO.js} +67 -22
  14. package/chunks/{action-TPBKPHNS.js → action-JZLZ7ZAD.js} +22 -22
  15. package/chunks/action-LA6KVAXQ.js +374 -0
  16. package/chunks/{action-PVDDRIM6.js → action-M7RQKBSB.js} +65 -26
  17. package/chunks/{action-F4Y6Q2VB.js → action-MSLBC2SO.js} +21 -21
  18. package/chunks/{action-BNEGJBUH.js → action-NVSZT2ZD.js} +8 -9
  19. package/chunks/{action-ANU5HGC4.js → action-OGQSTRMX.js} +17 -14
  20. package/chunks/{action-CLSD7O2R.js → action-PAGJ5PWC.js} +10 -10
  21. package/chunks/action-QE2ZQQX7.js +250 -0
  22. package/chunks/{action-HD2T6BFJ.js → action-QPUSPD5M.js} +10 -10
  23. package/chunks/{action-45OGQB2M.js → action-R7IMFHQ5.js} +17 -8
  24. package/chunks/{action-UDZUUJSI.js → action-SH4UUXPL.js} +18 -7
  25. package/chunks/action-SNLCIBQC.js +84 -0
  26. package/chunks/{action-C5VB4ITT.js → action-SQG3JAII.js} +36 -18
  27. package/chunks/action-UZQJNYK4.js +18 -0
  28. package/chunks/{action-HNKM3Q65.js → action-VC4DCVST.js} +17 -14
  29. package/chunks/{action-BMFXENMX.js → action-VTVFY2MP.js} +39 -34
  30. package/chunks/{action-TZ5KGAQT.js → action-WFWYGY7O.js} +17 -14
  31. package/chunks/{action-W5BATF4Q.js → action-XMNX5ZYT.js} +24 -24
  32. package/chunks/{agent-XGLOHXNA.js → agent-HCQRMHQ5.js} +25 -5
  33. package/chunks/asyncapi-QM76O55R.js +105 -0
  34. package/chunks/{build.action-LKOILPA6.js → build.action-P7FCIMYU.js} +22 -22
  35. package/chunks/{chunk-23I5PKZZ.js → chunk-24WAOKGG.js} +32 -5
  36. package/chunks/chunk-3L6DLIXJ.js +25530 -0
  37. package/chunks/chunk-3ZJYGGAA.js +30 -0
  38. package/chunks/{chunk-ZTVWAKNJ.js → chunk-4NHMAG6F.js} +1 -1
  39. package/chunks/{chunk-IX7LJ3AD.js → chunk-4ORL4MST.js} +2 -3
  40. package/chunks/{chunk-OAXFCOJV.js → chunk-4ZDQXWBT.js} +2 -1
  41. package/chunks/{chunk-ASMHW5AY.js → chunk-6ZMT63IV.js} +1 -1
  42. package/chunks/{chunk-P2VH7DOC.js → chunk-7AGLC7WV.js} +6 -6
  43. package/chunks/{chunk-SXYALPYK.js → chunk-AO3F5XWR.js} +498 -60
  44. package/chunks/{chunk-B6QZJWCQ.js → chunk-B2MHTD3R.js} +4 -6
  45. package/chunks/{chunk-4QS7SJTG.js → chunk-CISTON3A.js} +51 -36
  46. package/chunks/chunk-COBPBRQF.js +25 -0
  47. package/chunks/{chunk-2BSG2QHO.js → chunk-F467BYYR.js} +133 -20
  48. package/chunks/{chunk-TLFMATXR.js → chunk-GSGZHE26.js} +33 -25
  49. package/chunks/{chunk-UPUTMFD4.js → chunk-HCPN3KNF.js} +185 -13
  50. package/chunks/{chunk-P646T2WH.js → chunk-HPL3ZZ2P.js} +131 -13
  51. package/chunks/{chunk-H2WRMLYY.js → chunk-IKT5F47M.js} +3571 -7
  52. package/chunks/{chunk-AHWWJ3MD.js → chunk-K4DTP5TV.js} +1 -1
  53. package/chunks/{chunk-TQ5XC2E3.js → chunk-LFU5ZUAP.js} +77 -11
  54. package/chunks/{chunk-5BISXQX4.js → chunk-M37TP6U2.js} +11 -13
  55. package/chunks/chunk-OQKDBLOZ.js +741 -0
  56. package/chunks/chunk-P7H7GY5A.js +14 -0
  57. package/chunks/{chunk-47Y4L5IT.js → chunk-PBXZN65A.js} +1031 -481
  58. package/chunks/{chunk-HQKBZOYU.js → chunk-PT5TI77I.js} +3 -3
  59. package/chunks/chunk-Q7DOQHZN.js +404 -0
  60. package/chunks/{chunk-X4QLDBB5.js → chunk-T5HJUAWB.js} +24 -3
  61. package/chunks/{chunk-NUXPNUSS.js → chunk-UGGNHILG.js} +1 -1
  62. package/chunks/{chunk-4DGQIAJX.js → chunk-VNYE4R7N.js} +154 -14
  63. package/chunks/{chunk-KWOL7A6J.js → chunk-X5T526CE.js} +2 -2
  64. package/chunks/chunk-XCSR4RIT.js +210 -0
  65. package/chunks/{chunk-SHSHFGA7.js → chunk-Z2KMGFE6.js} +4 -6
  66. package/chunks/{create.action-FFQLBSJH.js → create.action-HDD2WUON.js} +22 -22
  67. package/chunks/{delete.action-STHQHP4F.js → delete.action-7GOZY7ID.js} +22 -22
  68. package/chunks/{delete.action-QNN3LC2F.js → delete.action-VE66JFDS.js} +22 -22
  69. package/chunks/{get.action-OTKYOP3Z.js → get.action-2745EB4N.js} +15 -16
  70. package/chunks/{list.action-KDM5RHEH.js → list.action-3VTXQJRA.js} +19 -19
  71. package/chunks/{list.action-6I5EZAVB.js → list.action-4QDCZLSZ.js} +22 -22
  72. package/chunks/{publish.action-PODTVRXS.js → publish.action-ULQLZKWU.js} +44 -36
  73. package/chunks/{update.action-KMD4ZM75.js → update.action-6QEFP7NA.js} +22 -22
  74. package/chunks/{update.action-4F6STTEQ.js → update.action-OROQSP2S.js} +22 -22
  75. package/docs.html +104 -103
  76. package/index.js +84 -68
  77. package/package.json +16 -12
  78. package/chunks/action-CCW66QJN.js +0 -72
  79. package/chunks/action-CQ56FVES.js +0 -65
  80. package/chunks/action-JOSVV6YA.js +0 -71
  81. package/chunks/action-P7LN6FGY.js +0 -13
  82. package/chunks/action-R6ZZO26F.js +0 -299
  83. package/chunks/action-TWFJNQ2R.js +0 -95
  84. package/chunks/chunk-5BPPGTUU.js +0 -463
  85. package/chunks/chunk-DOVIWNKQ.js +0 -108
  86. package/chunks/chunk-ISGLWBXZ.js +0 -4265
  87. package/chunks/chunk-T7MDADON.js +0 -17
  88. package/chunks/chunk-VTYTPSXO.js +0 -161
@@ -20,7 +20,7 @@ function BundleCommand() {
20
20
  "Maximum number of URLs to fetch during bundling at the same time"
21
21
  );
22
22
  cmd.action(async (...args) => {
23
- const { bundleAction } = await import("./action-BYZUBXVB.js");
23
+ const { bundleAction } = await import("./action-CH24QGTE.js");
24
24
  return bundleAction(...args);
25
25
  });
26
26
  return cmd;
@@ -1,14 +1,17 @@
1
1
  import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
2
+ import {
3
+ displayError
4
+ } from "./chunk-3ZJYGGAA.js";
2
5
  import {
3
6
  ISOLATE_DIR,
4
7
  ISOLATE_EXTRACTION_DIR
5
- } from "./chunk-KWOL7A6J.js";
8
+ } from "./chunk-X5T526CE.js";
6
9
  import {
7
10
  config
8
- } from "./chunk-OAXFCOJV.js";
11
+ } from "./chunk-4ZDQXWBT.js";
9
12
  import {
10
13
  output
11
- } from "./chunk-X4QLDBB5.js";
14
+ } from "./chunk-T5HJUAWB.js";
12
15
 
13
16
  // src/domains/project/download-isolate/action.ts
14
17
  import { execFile } from "node:child_process";
@@ -40,6 +43,12 @@ function getIsolateDownloadUrls(options) {
40
43
 
41
44
  // src/domains/project/download-isolate/action.ts
42
45
  var execFileAsync = promisify(execFile);
46
+ var IsolateDownloadError = class extends Error {
47
+ constructor(message, options) {
48
+ super(message, options);
49
+ this.name = "IsolateDownloadError";
50
+ }
51
+ };
43
52
  var DOWNLOAD_TIMEOUT_MS = 10 * 60 * 1e3;
44
53
  var EXTRACTION_ALLOWANCE_MS = 5 * 60 * 1e3;
45
54
  async function getExistingIsolateVersion() {
@@ -128,10 +137,53 @@ async function assertIsolateLayout(destinationDir, url) {
128
137
  await fs.access(path.join(destinationDir, "isolate", "package.json"));
129
138
  } catch {
130
139
  throw new Error(
131
- `The isolate tarball downloaded from ${url} did not contain an isolate directory.`
140
+ `The download from ${url} did not contain a valid docs preview server.`
132
141
  );
133
142
  }
134
143
  }
144
+ var DISK_WRITE_ERROR_CODES = /* @__PURE__ */ new Set([
145
+ "ENOSPC",
146
+ // No space left on device
147
+ "EACCES",
148
+ // Permission denied
149
+ "EPERM",
150
+ // Operation not permitted
151
+ "EBUSY",
152
+ // Resource busy or locked
153
+ "EROFS",
154
+ // Read-only filesystem
155
+ "EDQUOT",
156
+ // Disk quota exceeded
157
+ "EMFILE",
158
+ // Too many open files
159
+ "ENFILE"
160
+ // File table overflow
161
+ ]);
162
+ var DISK_WRITE_ERROR_MESSAGES = [
163
+ "no space left on device",
164
+ // ENOSPC / bsdtar
165
+ "not enough space",
166
+ // Windows disk-full phrasing
167
+ "disk quota exceeded",
168
+ // EDQUOT
169
+ "permission denied",
170
+ // EACCES
171
+ "access is denied",
172
+ // Windows permission phrasing
173
+ "operation not permitted",
174
+ // EPERM
175
+ "read-only file system"
176
+ // EROFS
177
+ ];
178
+ function isDiskWriteError(error) {
179
+ if (!(error instanceof Error)) return false;
180
+ const code = error.code;
181
+ if (typeof code === "string" && DISK_WRITE_ERROR_CODES.has(code)) {
182
+ return true;
183
+ }
184
+ const details = `${error.message} ${error.stderr ?? ""}`.toLowerCase();
185
+ return DISK_WRITE_ERROR_MESSAGES.some((phrase) => details.includes(phrase));
186
+ }
135
187
  async function downloadFirstAvailable(urls, destinationDir, options) {
136
188
  const failures = [];
137
189
  for (const url of urls) {
@@ -141,15 +193,16 @@ async function downloadFirstAvailable(urls, destinationDir, options) {
141
193
  await assertIsolateLayout(destinationDir, url);
142
194
  return url;
143
195
  } catch (error) {
196
+ if (isDiskWriteError(error)) throw error;
144
197
  failures.push(
145
198
  ` - ${url}: ${error instanceof Error ? error.message : String(error)}`
146
199
  );
147
200
  }
148
201
  }
149
- throw new Error(
150
- `Failed to download the docs isolate. Attempted:
202
+ throw new IsolateDownloadError(
203
+ `Failed to download the docs preview server. Attempted:
151
204
  ${failures.join("\n")}
152
- Your existing isolate (if any) was left untouched. Check your network connection and try again.`
205
+ Your existing preview server (if any) was left untouched. Check your network connection and try again.`
153
206
  );
154
207
  }
155
208
  async function removeQuarantineAttributes(isolateDir) {
@@ -177,7 +230,7 @@ async function swapIsolateDirectory(newIsolateDir, isolateDir) {
177
230
  await fs.rename(backupDir, isolateDir);
178
231
  } catch {
179
232
  throw new Error(
180
- `Failed to install the new isolate and could not restore the previous one. Your previous isolate is preserved at ${backupDir} \u2014 rename it back to ${isolateDir} to recover.`,
233
+ `Failed to install the new docs preview server and could not restore the previous one. Your previous preview server is preserved at ${backupDir} \u2014 rename it back to ${isolateDir} to recover.`,
181
234
  { cause: error }
182
235
  );
183
236
  }
@@ -260,7 +313,7 @@ async function updateIsolate(options) {
260
313
  async function downloadIsolate() {
261
314
  const existingIsolateVersion = await getExistingIsolateVersion();
262
315
  if (config.ssgDocsIsolateVersion === existingIsolateVersion) return;
263
- const logger = output.info({ animate: true }).loader("Downloading docs isolate. This may take a minute...");
316
+ const logger = output.info({ animate: true }).loader("Downloading the docs preview server. This may take a minute...");
264
317
  const urls = getIsolateDownloadUrls({
265
318
  cdnUrl: config.cdnUrl,
266
319
  version: config.ssgDocsIsolateVersion,
@@ -270,15 +323,28 @@ async function downloadIsolate() {
270
323
  try {
271
324
  await updateIsolate({ urls, extractionDir: ISOLATE_EXTRACTION_DIR });
272
325
  } catch (error) {
273
- logger.update("loader", 0, { content: "Download failed." });
326
+ const isDownloadFailure = error instanceof IsolateDownloadError;
327
+ logger.update("loader", 0, {
328
+ content: isDownloadFailure ? "Download failed." : "Installation failed.",
329
+ status: "error"
330
+ });
274
331
  logger.finish();
275
- throw error;
332
+ return output.error().title(
333
+ isDownloadFailure ? "Could not download the docs preview server" : "Could not install the docs preview server"
334
+ ).message(
335
+ [
336
+ displayError(error),
337
+ error instanceof Error && error.cause ? displayError(error.cause) : ""
338
+ ].filter(Boolean).join("\n\n")
339
+ ).exit("error");
276
340
  }
277
341
  logger.update("loader", 0, { content: "Download complete." });
278
342
  logger.finish();
279
343
  }
280
344
 
281
345
  export {
346
+ IsolateDownloadError,
347
+ isDiskWriteError,
282
348
  updateIsolate,
283
349
  downloadIsolate
284
350
  };
@@ -1,26 +1,24 @@
1
1
  import { createRequire as $$cR } from "node:module"; const require = $$cR(import.meta.url);
2
2
  import {
3
3
  config
4
- } from "./chunk-OAXFCOJV.js";
4
+ } from "./chunk-4ZDQXWBT.js";
5
5
  import {
6
6
  roleSchema
7
- } from "./chunk-4DGQIAJX.js";
7
+ } from "./chunk-VNYE4R7N.js";
8
+ import {
9
+ isUrl
10
+ } from "./chunk-4ORL4MST.js";
11
+ import {
12
+ output
13
+ } from "./chunk-T5HJUAWB.js";
8
14
  import {
9
15
  emailSchema,
10
16
  entitySchema,
11
- nanoidSchema,
12
- timestampSchema
13
- } from "./chunk-ISGLWBXZ.js";
14
- import {
15
17
  external_exports,
18
+ nanoidSchema,
19
+ timestampSchema,
16
20
  zod_default
17
- } from "./chunk-H2WRMLYY.js";
18
- import {
19
- isUrl
20
- } from "./chunk-IX7LJ3AD.js";
21
- import {
22
- output
23
- } from "./chunk-X4QLDBB5.js";
21
+ } from "./chunk-IKT5F47M.js";
24
22
 
25
23
  // src/helpers/node-version.ts
26
24
  import semver from "semver";