@todesktop/cli 1.19.0 → 1.19.1-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.
package/README.md CHANGED
@@ -48,7 +48,7 @@ Create a `todesktop.json` file in the root of your Electron project.
48
48
 
49
49
  ```json
50
50
  {
51
- "$schema": "https://unpkg.com/@todesktop/cli@1.19.0-1/schemas/schema.json",
51
+ "$schema": "https://unpkg.com/@todesktop/cli@1.19.1-1/schemas/schema.json",
52
52
  "schemaVersion": 1
53
53
  "id": "your-todesktop-id",
54
54
  "icon": "./desktop-icon.png",
@@ -413,7 +413,7 @@ To enable JSON validation and IntelliSense for your `todesktop.json` file in com
413
413
  - For example, if using a hosted version of the schema:
414
414
  ```json
415
415
  {
416
- "$schema": "https://unpkg.com/@todesktop/cli@1.19.0-1/schemas/schema.json",
416
+ "$schema": "https://unpkg.com/@todesktop/cli@1.19.1-1/schemas/schema.json",
417
417
  "id": "your-todesktop-id"
418
418
  }
419
419
  ```
@@ -1039,11 +1039,11 @@ effective `package.json` that ToDesktop will use.
1039
1039
 
1040
1040
  ### `packageManager` - (optional) string
1041
1041
 
1042
- Default: If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used.
1042
+ Default: If `bun.lockb` or `bun.lock` exists, `bun` is used. If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used.
1043
1043
 
1044
1044
  Example: `yarn`
1045
1045
 
1046
- The package manager to use when installing dependencies. Valid values are `npm`, `yarn` or `pnpm`.
1046
+ The package manager to use when installing dependencies. Valid values are `npm`, `yarn`, `pnpm` or `bun`.
1047
1047
 
1048
1048
  ### `pnpmVersion` - string
1049
1049
 
@@ -1625,6 +1625,13 @@ Now, when we build your app on ToDesktop servers, it will also run your custom
1625
1625
 
1626
1626
  ## Changelog
1627
1627
 
1628
+ ### 1.20.0
1629
+
1630
+ #### Minor Changes
1631
+
1632
+ - 3ae0eaf: Add support for Electron Fuses configuration
1633
+ - 6e11f24: Add Bun package manager support
1634
+
1628
1635
  ### 1.19.0
1629
1636
 
1630
1637
  #### Minor Changes
package/dist/cli.js CHANGED
@@ -399,7 +399,87 @@ function BreakpointNotice({ plan }) {
399
399
  // src/components/BreakpointPrompt.tsx
400
400
  var import_ink4 = require("ink");
401
401
  var import_react2 = require("react");
402
- var import_shared2 = require("@todesktop/shared");
402
+
403
+ // ../shared/lib/esm/desktopify.js
404
+ var PlatformName;
405
+ (function(PlatformName3) {
406
+ PlatformName3["linux"] = "linux";
407
+ PlatformName3["mac"] = "mac";
408
+ PlatformName3["windows"] = "windows";
409
+ })(PlatformName || (PlatformName = {}));
410
+ var PackageManager;
411
+ (function(PackageManager2) {
412
+ PackageManager2["bun"] = "bun";
413
+ PackageManager2["npm"] = "npm";
414
+ PackageManager2["pnpm"] = "pnpm";
415
+ PackageManager2["yarn"] = "yarn";
416
+ })(PackageManager || (PackageManager = {}));
417
+ var BuildStatus;
418
+ (function(BuildStatus2) {
419
+ BuildStatus2["building"] = "building";
420
+ BuildStatus2["cancelled"] = "cancelled";
421
+ BuildStatus2["failed"] = "failed";
422
+ BuildStatus2["preparation"] = "preparation";
423
+ BuildStatus2["queued"] = "queued";
424
+ BuildStatus2["succeeded"] = "succeeded";
425
+ })(BuildStatus || (BuildStatus = {}));
426
+ var AnalysisStatus;
427
+ (function(AnalysisStatus2) {
428
+ AnalysisStatus2["analyzing"] = "analyzing";
429
+ AnalysisStatus2["done"] = "done";
430
+ AnalysisStatus2["downloading"] = "downloading";
431
+ AnalysisStatus2["error"] = "error";
432
+ AnalysisStatus2["extracting"] = "extracting";
433
+ AnalysisStatus2["initializing"] = "initializing";
434
+ AnalysisStatus2["notStarted"] = "notStarted";
435
+ })(AnalysisStatus || (AnalysisStatus = {}));
436
+ var ManifestCategory;
437
+ (function(ManifestCategory2) {
438
+ ManifestCategory2["buildStamped"] = "build-stamped";
439
+ ManifestCategory2["primary"] = "primary";
440
+ ManifestCategory2["versioned"] = "versioned";
441
+ })(ManifestCategory || (ManifestCategory = {}));
442
+
443
+ // ../shared/lib/esm/introspection/breakpoints.js
444
+ var MINUTE = 60 * 1e3;
445
+ var BREAKPOINT_DEFAULT_LEASE_MS = 20 * MINUTE;
446
+ var BREAKPOINT_RENEW_INCREMENT_MS = 10 * MINUTE;
447
+ var BREAKPOINT_MAX_REMAINING_MS = 20 * MINUTE;
448
+
449
+ // ../shared/lib/esm/introspection/status.js
450
+ function formatIntrospectionStatus(breakpointStatus, shellStatus) {
451
+ if (breakpointStatus === "paused") {
452
+ if (shellStatus === "connected") {
453
+ return "paused (shell connected)";
454
+ }
455
+ if (shellStatus === "disconnected") {
456
+ return "paused (shell disconnected)";
457
+ }
458
+ return "paused";
459
+ }
460
+ if (breakpointStatus === "ready") {
461
+ if (shellStatus === "connected") {
462
+ return "ready (shell connected)";
463
+ }
464
+ if (shellStatus === "disconnected") {
465
+ return "ready (shell disconnected)";
466
+ }
467
+ return "ready";
468
+ }
469
+ if (breakpointStatus === "resuming") {
470
+ return "resuming";
471
+ }
472
+ if (breakpointStatus === "initializing") {
473
+ return "initializing";
474
+ }
475
+ if (breakpointStatus === "finished") {
476
+ return "finished";
477
+ }
478
+ if (breakpointStatus === "error" || shellStatus === "error") {
479
+ return "error";
480
+ }
481
+ return "status unknown";
482
+ }
403
483
 
404
484
  // src/utilities/useInput.ts
405
485
  var import_is_ci = __toESM(require("is-ci"));
@@ -902,7 +982,6 @@ if (firebaseFunctionsBase.includes("localhost")) {
902
982
  var getCallableFirebaseFunction_default = (functionName) => (0, import_functions.httpsCallable)(functions, functionName);
903
983
 
904
984
  // src/utilities/introspectionStatus.ts
905
- var import_shared = require("@todesktop/shared");
906
985
  function getIntrospectionStatusIndicator(breakpointStatus, shellStatus) {
907
986
  if (shellStatus === "connected") {
908
987
  return "\u25C6";
@@ -1042,14 +1121,14 @@ function BreakpointPrompt({
1042
1121
  const { shellStatus } = data;
1043
1122
  const expiresAtMs = ((_a2 = toDateSafe(breakpoint.expiresAt)) == null ? void 0 : _a2.getTime()) ?? NaN;
1044
1123
  const remainingMs = expiresAtMs - now;
1045
- const canRenew = remainingMs < import_shared2.BREAKPOINT_MAX_REMAINING_MS;
1124
+ const canRenew = remainingMs < BREAKPOINT_MAX_REMAINING_MS;
1046
1125
  const formattedBreakpoint = formatBreakpoint(toBreakpointConfig(breakpoint));
1047
1126
  const renewalsDescription = describeRenewals(breakpoint.renewals);
1048
1127
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_ink4.Box, { flexDirection: "column", marginBottom: 1, children: [
1049
1128
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_ink4.Text, { color: "yellow", children: [
1050
1129
  platform,
1051
1130
  " ",
1052
- (0, import_shared.formatIntrospectionStatus)(breakpointStatus, shellStatus),
1131
+ formatIntrospectionStatus(breakpointStatus, shellStatus),
1053
1132
  " at",
1054
1133
  " ",
1055
1134
  formattedBreakpoint,
@@ -2398,6 +2477,7 @@ var schema_default = {
2398
2477
  }
2399
2478
  },
2400
2479
  bytenode: { $ref: "#/definitions/bytenodeConfigProperty" },
2480
+ fuses: { $ref: "#/definitions/fusesConfigProperty" },
2401
2481
  asar: { $ref: "#/definitions/asarProperty" },
2402
2482
  asarUnpack: { $ref: "#/definitions/asarUnpackProperty" },
2403
2483
  buildVersion: { $ref: "#/definitions/buildVersionProperty" },
@@ -2444,6 +2524,7 @@ var schema_default = {
2444
2524
  nodeVersion: { $ref: "#/definitions/nodeVersionProperty" },
2445
2525
  npmVersion: { $ref: "#/definitions/npmVersionProperty" },
2446
2526
  pnpmVersion: { $ref: "#/definitions/pnpmVersionProperty" },
2527
+ bunVersion: { $ref: "#/definitions/bunVersionProperty" },
2447
2528
  packageJson: { $ref: "#/definitions/packageJsonProperty" },
2448
2529
  packageManager: { $ref: "#/definitions/packageManagerProperty" },
2449
2530
  rebuildLibrary: { $ref: "#/definitions/rebuildLibraryProperty" },
@@ -2518,6 +2599,45 @@ var schema_default = {
2518
2599
  }
2519
2600
  ]
2520
2601
  },
2602
+ fusesConfigProperty: {
2603
+ type: "object",
2604
+ additionalProperties: false,
2605
+ description: "Configure Electron Fuses to enable or disable certain Electron features at package time. Fuses are compile-time feature flags that cannot be changed at runtime, providing security benefits. See https://www.electronjs.org/docs/latest/tutorial/fuses for more information.",
2606
+ properties: {
2607
+ runAsNode: {
2608
+ type: "boolean",
2609
+ description: "Controls whether the ELECTRON_RUN_AS_NODE environment variable is respected. When disabled, the env variable will be ignored. Default: true (enabled)."
2610
+ },
2611
+ enableCookieEncryption: {
2612
+ type: "boolean",
2613
+ description: "Controls whether the cookie store on disk is encrypted using OS-level cryptography. Default: false (disabled)."
2614
+ },
2615
+ enableNodeOptionsEnvironmentVariable: {
2616
+ type: "boolean",
2617
+ description: "Controls whether the NODE_OPTIONS environment variable is respected. When disabled, the env variable will be ignored. Default: true (enabled)."
2618
+ },
2619
+ enableNodeCliInspectArguments: {
2620
+ type: "boolean",
2621
+ description: "Controls whether command line arguments like --inspect are respected. When disabled, these arguments will be ignored. Default: true (enabled)."
2622
+ },
2623
+ enableEmbeddedAsarIntegrityValidation: {
2624
+ type: "boolean",
2625
+ description: "Controls whether Electron validates the integrity of the app.asar file. Requires the integrity block in the asar header. Default: false (disabled)."
2626
+ },
2627
+ onlyLoadAppFromAsar: {
2628
+ type: "boolean",
2629
+ description: "Controls whether Electron only loads the app from an asar archive. When enabled, Electron will not search for loose files. Default: false (disabled)."
2630
+ },
2631
+ loadBrowserProcessSpecificV8Snapshot: {
2632
+ type: "boolean",
2633
+ description: "Controls whether the browser process uses a V8 snapshot file located at browser_v8_context_snapshot.bin. Default: false (disabled)."
2634
+ },
2635
+ grantFileProtocolExtraPrivileges: {
2636
+ type: "boolean",
2637
+ description: "Controls whether pages loaded via file:// protocol get extra privileges. When disabled, file:// pages are more restricted. Requires Electron 29+. Default: true (enabled)."
2638
+ }
2639
+ }
2640
+ },
2521
2641
  appFilesProperty: {
2522
2642
  type: "array",
2523
2643
  description: "This option allows you to decide which files get uploaded to be built on the ToDesktop servers. By default, all files in your app path are included in your app, except for `node_modules` and `.git`. Dependencies are installed on our build servers as there could be platform-specific postinstall steps.",
@@ -3011,6 +3131,13 @@ var schema_default = {
3011
3131
  description: "The version of pnpm that ToDesktop should use for installation.",
3012
3132
  examples: ["8.10.5"]
3013
3133
  },
3134
+ bunVersionProperty: {
3135
+ type: "string",
3136
+ validSemver: {},
3137
+ minLength: 1,
3138
+ description: "The version of Bun that ToDesktop should use for installation.",
3139
+ examples: ["1.3.6"]
3140
+ },
3014
3141
  packageJsonProperty: {
3015
3142
  type: "object",
3016
3143
  description: "If you want to override the default `package.json` configuration, use the `packageJson` property. For example, you can use this to override the `productName` or `version` properties.",
@@ -3018,10 +3145,10 @@ var schema_default = {
3018
3145
  },
3019
3146
  packageManagerProperty: {
3020
3147
  type: "string",
3021
- enum: ["npm", "yarn", "pnpm"],
3022
- description: "The package manager to use when installing dependencies. Valid values are `npm`, `yarn` or `pnpm`.",
3148
+ enum: ["npm", "yarn", "pnpm", "bun"],
3149
+ description: "The package manager to use when installing dependencies. Valid values are `npm`, `yarn`, `pnpm` or `bun`.",
3023
3150
  examples: ["yarn"],
3024
- default: "If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used."
3151
+ default: "If `bun.lockb` or `bun.lock` exists, `bun` is used. If `yarn.lock` exists, `yarn` is used. If `pnpm-lock.yaml` or `shrinkwrap.yaml` exists, `pnpm` is used. Otherwise, `npm` is used."
3025
3152
  },
3026
3153
  rebuildLibraryProperty: {
3027
3154
  type: "string",
@@ -3273,6 +3400,7 @@ var schema_default = {
3273
3400
  },
3274
3401
  appPath: { $ref: "#/definitions/appPathProperty" },
3275
3402
  bytenode: { $ref: "#/definitions/bytenodeConfigProperty" },
3403
+ fuses: { $ref: "#/definitions/fusesConfigProperty" },
3276
3404
  asar: { $ref: "#/definitions/asarProperty" },
3277
3405
  asarUnpack: { $ref: "#/definitions/asarUnpackProperty" },
3278
3406
  buildVersion: { $ref: "#/definitions/buildVersionProperty" },
@@ -3300,6 +3428,7 @@ var schema_default = {
3300
3428
  nodeVersion: { $ref: "#/definitions/nodeVersionProperty" },
3301
3429
  npmVersion: { $ref: "#/definitions/npmVersionProperty" },
3302
3430
  pnpmVersion: { $ref: "#/definitions/pnpmVersionProperty" },
3431
+ bunVersion: { $ref: "#/definitions/bunVersionProperty" },
3303
3432
  packageJson: { $ref: "#/definitions/packageJsonProperty" },
3304
3433
  packageManager: { $ref: "#/definitions/packageManagerProperty" },
3305
3434
  rebuildLibrary: { $ref: "#/definitions/rebuildLibraryProperty" },
@@ -4339,7 +4468,9 @@ var getAppFiles = async (globsInput, appPath, appPkgJson) => {
4339
4468
  path8.join(appPath, "package-lock.json"),
4340
4469
  path8.join(appPath, "yarn.lock"),
4341
4470
  path8.join(appPath, "pnpm-lock.yaml"),
4342
- path8.join(appPath, "shrinkwrap.yaml")
4471
+ path8.join(appPath, "shrinkwrap.yaml"),
4472
+ path8.join(appPath, "bun.lockb"),
4473
+ path8.join(appPath, "bun.lock")
4343
4474
  );
4344
4475
  } else {
4345
4476
  globs.push("**");
@@ -6889,7 +7020,6 @@ function useBuildTableState({
6889
7020
 
6890
7021
  // src/commands/introspect/utilities/buildQueries.ts
6891
7022
  var import_firestore23 = require("firebase/firestore");
6892
- var import_shared3 = require("@todesktop/shared");
6893
7023
  async function getRunningBuildsWithIntrospection(configPath) {
6894
7024
  const { id: appId } = getProjectConfig(configPath).config;
6895
7025
  const { id: userId } = await findAppUserId_default(appId);
@@ -6900,7 +7030,7 @@ async function getRunningBuildsWithIntrospection(configPath) {
6900
7030
  );
6901
7031
  const q = (0, import_firestore23.query)(
6902
7032
  buildsCollection,
6903
- (0, import_firestore23.where)("status", "in", [import_shared3.BuildStatus.building, import_shared3.BuildStatus.preparation]),
7033
+ (0, import_firestore23.where)("status", "in", [BuildStatus.building, BuildStatus.preparation]),
6904
7034
  (0, import_firestore23.orderBy)("createdAt", "desc"),
6905
7035
  (0, import_firestore23.limit)(10)
6906
7036
  );
@@ -7109,7 +7239,7 @@ function PlatformSelector({
7109
7239
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ErrorDisplay, { commandUsed: "todesktop introspect", error: state.error });
7110
7240
  case "show-platforms": {
7111
7241
  const items = state.platforms.map((platform) => {
7112
- const statusLabel = (0, import_shared.formatIntrospectionStatus)(
7242
+ const statusLabel = formatIntrospectionStatus(
7113
7243
  platform.breakpointStatus,
7114
7244
  platform.shellStatus
7115
7245
  );
@@ -7445,7 +7575,8 @@ async function getBuildAttributes({
7445
7575
  id: appId,
7446
7576
  nodeVersion,
7447
7577
  npmVersion,
7448
- pnpmVersion
7578
+ pnpmVersion,
7579
+ bunVersion
7449
7580
  } = getProjectConfig(configPath).config;
7450
7581
  const { id: userId } = await findAppUserId_default(appId);
7451
7582
  const contextUserId = (_a2 = currentUser()) == null ? void 0 : _a2.uid;
@@ -7458,6 +7589,7 @@ async function getBuildAttributes({
7458
7589
  nodeVersion,
7459
7590
  npmVersion,
7460
7591
  pnpmVersion,
7592
+ bunVersion,
7461
7593
  userId
7462
7594
  };
7463
7595
  }
@@ -8556,7 +8688,7 @@ var package_default = {
8556
8688
  access: "public"
8557
8689
  },
8558
8690
  name: "@todesktop/cli",
8559
- version: "1.19.0-1",
8691
+ version: "1.19.1-1",
8560
8692
  license: "MIT",
8561
8693
  author: "Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)",
8562
8694
  homepage: "https://todesktop.com/cli",
@@ -8571,7 +8703,7 @@ var package_default = {
8571
8703
  node: ">=16"
8572
8704
  },
8573
8705
  scripts: {
8574
- build: "node scripts/esbuild.js",
8706
+ build: "npm run docs:generate && npm run types:generate && node scripts/esbuild.js",
8575
8707
  dev: "node scripts/esbuild.js --link --watch --stage dev",
8576
8708
  "dev:local:prod": "node scripts/esbuild.js --link --watch --stage prod-local",
8577
8709
  "dev:prod": "node scripts/esbuild.js --link --watch",
@@ -8579,8 +8711,6 @@ var package_default = {
8579
8711
  format: "prettier . --write && eslint --fix",
8580
8712
  lint: "prettier . --check && eslint",
8581
8713
  "types:generate": "node scripts/generate-types.js",
8582
- release: "npm run docs:generate && npm run build && pnpx np --tag=latest",
8583
- "release-beta": "npm run docs:generate && npm run build && npx np --any-branch --no-tests --tag=beta",
8584
8714
  test: "ava",
8585
8715
  "test:e2e": "node test/output-snapshots/output.test.js",
8586
8716
  "test--watch": "npm test -- --watch",
@@ -8641,7 +8771,7 @@ var package_default = {
8641
8771
  },
8642
8772
  devDependencies: {
8643
8773
  "@todesktop/dev-config": "workspace:*",
8644
- "@todesktop/shared": "^7.193.0",
8774
+ "@todesktop/shared": "workspace:*",
8645
8775
  "@types/bunyan": "^1.8.11",
8646
8776
  "@types/ink-testing-library": "^1.0.4",
8647
8777
  "@types/is-ci": "^3.0.4",
@@ -8749,7 +8879,6 @@ var onCommand_default = ({ sentry = true, exitIfOutOfDate = true } = {}) => {
8749
8879
  };
8750
8880
 
8751
8881
  // src/commands/build/utilities/continueBreakpoint.ts
8752
- var import_shared4 = require("@todesktop/shared");
8753
8882
  async function continueBreakpoint({
8754
8883
  buildId,
8755
8884
  platform,
@@ -8781,7 +8910,7 @@ async function continueBreakpoint({
8781
8910
  );
8782
8911
  }
8783
8912
  function isValidPlatform(value) {
8784
- return typeof value === "string" && Object.values(import_shared4.PlatformName).includes(value);
8913
+ return typeof value === "string" && Object.values(PlatformName).includes(value);
8785
8914
  }
8786
8915
 
8787
8916
  // src/index.ts