@cordy/electro-cli 1.0.9 → 1.1.0

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 (2) hide show
  1. package/dist/index.mjs +52 -70
  2. package/package.json +4 -4
package/dist/index.mjs CHANGED
@@ -490,7 +490,7 @@ const cac = (name = "") => new CAC(name);
490
490
 
491
491
  //#endregion
492
492
  //#region package.json
493
- var version$1 = "1.0.9";
493
+ var version$1 = "1.1.0";
494
494
 
495
495
  //#endregion
496
496
  //#region src/dev/logger.ts
@@ -714,23 +714,23 @@ function validateConfig(config) {
714
714
  error(`Main entry not found: ${mainEntry}`);
715
715
  process.exit(1);
716
716
  }
717
- const windows = config.windows ?? [];
717
+ const views = config.views ?? [];
718
718
  const names = /* @__PURE__ */ new Set();
719
- for (const win of windows) {
720
- if (names.has(win.name)) {
721
- error(`Duplicate window name "${win.name}". Window names must be unique.`);
719
+ for (const view of views) {
720
+ if (names.has(view.name)) {
721
+ error(`Duplicate view name "${view.name}". View names must be unique.`);
722
722
  process.exit(1);
723
723
  }
724
- names.add(win.name);
724
+ names.add(view.name);
725
725
  }
726
- for (const win of windows) {
727
- const winEntry = resolve(dirname(win.__source), win.entry);
728
- if (!existsSync(winEntry)) {
729
- error(`Window "${win.name}" entry not found: ${winEntry}`);
726
+ for (const view of views) {
727
+ const viewEntry = resolve(dirname(view.__source), view.entry);
728
+ if (!existsSync(viewEntry)) {
729
+ error(`View "${view.name}" entry not found: ${viewEntry}`);
730
730
  process.exit(1);
731
731
  }
732
732
  }
733
- for (const win of windows) if (win.features && win.features.length === 0) warn(`Window "${win.name}" has an empty features array — it won't have access to any services.`);
733
+ for (const view of views) if (view.features && view.features.length === 0) warn(`View "${view.name}" has an empty features array — it won't have access to any services.`);
734
734
  }
735
735
  /** Validate --sourcemap CLI value. Warns on unrecognized values. */
736
736
  function validateSourcemap(value) {
@@ -905,9 +905,9 @@ function resolveSourcemap(mode) {
905
905
  }
906
906
  function createRendererConfig(opts) {
907
907
  const input = {};
908
- for (const win of opts.windows) {
909
- const sourceDir = dirname(win.__source);
910
- input[win.name] = resolve(sourceDir, win.entry);
908
+ for (const view of opts.views) {
909
+ const sourceDir = dirname(view.__source);
910
+ input[view.name] = resolve(sourceDir, view.entry);
911
911
  }
912
912
  const isBuild = !!opts.outDir;
913
913
  const config = {
@@ -2636,15 +2636,15 @@ async function build$1(options) {
2636
2636
  const root = loaded.root;
2637
2637
  const outDir = resolve(root, options.outDir);
2638
2638
  const codegenDir = resolve(root, ".electro");
2639
- const windows = config.windows ?? [];
2639
+ const views = config.views ?? [];
2640
2640
  const srcDir = resolve(root, "src");
2641
2641
  session({
2642
2642
  root,
2643
2643
  main: resolve(dirname(config.runtime.__source), config.runtime.entry),
2644
- preload: windows.length > 0 ? resolve(codegenDir, "generated/preload") : null,
2645
- renderer: windows.length > 0 ? resolve(root, dirname(relative(root, windows[0].__source))) : null,
2644
+ preload: views.length > 0 ? resolve(codegenDir, "generated/preload") : null,
2645
+ renderer: views.length > 0 ? resolve(root, dirname(relative(root, views[0].__source))) : null,
2646
2646
  mode: "build",
2647
- windows: windows.map((w) => ({
2647
+ windows: views.map((w) => ({
2648
2648
  name: w.name,
2649
2649
  entry: resolve(dirname(w.__source), w.entry)
2650
2650
  }))
@@ -2653,7 +2653,7 @@ async function build$1(options) {
2653
2653
  try {
2654
2654
  const { files, envTypes } = generate({
2655
2655
  scanResult: await scan(srcDir),
2656
- windows,
2656
+ views,
2657
2657
  outputDir: codegenDir,
2658
2658
  srcDir
2659
2659
  });
@@ -2688,7 +2688,7 @@ async function build$1(options) {
2688
2688
  stepFail("main", err instanceof Error ? err.message : String(err));
2689
2689
  process.exit(1);
2690
2690
  }
2691
- if (windows.length > 0) try {
2691
+ if (views.length > 0) try {
2692
2692
  buildScope("preload");
2693
2693
  await buildPreload({
2694
2694
  config,
@@ -2704,12 +2704,12 @@ async function build$1(options) {
2704
2704
  stepFail("preload", err instanceof Error ? err.message : String(err));
2705
2705
  process.exit(1);
2706
2706
  }
2707
- if (windows.length > 0) try {
2707
+ if (views.length > 0) try {
2708
2708
  buildScope("renderer");
2709
- const userViteConfigs = windows.filter((w) => w.vite).map((w) => w.vite);
2709
+ const userViteConfigs = views.filter((w) => w.vite).map((w) => w.vite);
2710
2710
  await build(createRendererConfig({
2711
2711
  root,
2712
- windows,
2712
+ views,
2713
2713
  userViteConfigs: userViteConfigs.length > 0 ? userViteConfigs : void 0,
2714
2714
  logLevel: "info",
2715
2715
  customLogger: logger,
@@ -2717,7 +2717,7 @@ async function build$1(options) {
2717
2717
  minify: options.minify,
2718
2718
  sourcemap: options.sourcemap
2719
2719
  }));
2720
- await flattenRendererOutput(resolve(outDir, "renderer"), windows, root);
2720
+ await flattenRendererOutput(resolve(outDir, "renderer"), views, root);
2721
2721
  } catch (err) {
2722
2722
  stepFail("renderer", err instanceof Error ? err.message : String(err));
2723
2723
  process.exit(1);
@@ -2727,14 +2727,6 @@ async function build$1(options) {
2727
2727
  async function buildMain(args) {
2728
2728
  const runtimeEntry = args.config.runtime.entry;
2729
2729
  const entry = resolve(dirname(args.config.runtime.__source), runtimeEntry);
2730
- const windowDefs = (args.config.windows ?? []).map((w) => ({
2731
- name: w.name,
2732
- type: w.type,
2733
- lifecycle: w.lifecycle,
2734
- autoShow: w.autoShow,
2735
- behavior: w.behavior,
2736
- window: w.window
2737
- }));
2738
2730
  await build(createNodeConfig({
2739
2731
  scope: "main",
2740
2732
  root: args.root,
@@ -2751,14 +2743,13 @@ async function buildMain(args) {
2751
2743
  userViteConfig: args.config.runtime.vite,
2752
2744
  sourcemap: args.sourcemap,
2753
2745
  customLogger: args.logger,
2754
- logLevel: "info",
2755
- define: { __ELECTRO_WINDOW_DEFINITIONS__: JSON.stringify(windowDefs) }
2746
+ logLevel: "info"
2756
2747
  }));
2757
2748
  }
2758
2749
  async function buildPreload(args) {
2759
- const windows = args.config.windows ?? [];
2750
+ const views = args.config.views ?? [];
2760
2751
  const input = {};
2761
- for (const win of windows) input[win.name] = resolve(args.codegenDir, `generated/preload/${win.name}.gen.ts`);
2752
+ for (const view of views) input[view.name] = resolve(args.codegenDir, `generated/preload/${view.name}.gen.ts`);
2762
2753
  const firstEntry = Object.values(input)[0];
2763
2754
  const preloadOutDir = resolve(args.outDir, "preload");
2764
2755
  const preloadPlugins = [
@@ -2809,12 +2800,12 @@ async function buildPreload(args) {
2809
2800
  * (e.g., `src/windows/main/index.html`) to `{name}/index.html`.
2810
2801
  * Adjusts relative asset references to match the new depth.
2811
2802
  */
2812
- async function flattenRendererOutput(rendererDir, windows, root) {
2803
+ async function flattenRendererOutput(rendererDir, views, root) {
2813
2804
  const dirsToClean = /* @__PURE__ */ new Set();
2814
- for (const win of windows) {
2815
- const relPath = relative(root, resolve(dirname(win.__source), win.entry));
2805
+ for (const view of views) {
2806
+ const relPath = relative(root, resolve(dirname(view.__source), view.entry));
2816
2807
  const oldHtmlPath = resolve(rendererDir, relPath);
2817
- const newHtmlPath = resolve(rendererDir, win.name, "index.html");
2808
+ const newHtmlPath = resolve(rendererDir, view.name, "index.html");
2818
2809
  if (oldHtmlPath === newHtmlPath) continue;
2819
2810
  let html = await readFile(oldHtmlPath, "utf-8");
2820
2811
  const depthDiff = relPath.split("/").length - 1 - 1;
@@ -2827,7 +2818,7 @@ async function flattenRendererOutput(rendererDir, windows, root) {
2827
2818
  await writeFile(newHtmlPath, html);
2828
2819
  await unlink(oldHtmlPath);
2829
2820
  const topDir = relPath.split("/")[0];
2830
- if (topDir !== win.name) dirsToClean.add(resolve(rendererDir, topDir));
2821
+ if (topDir !== view.name) dirsToClean.add(resolve(rendererDir, topDir));
2831
2822
  }
2832
2823
  for (const dir of dirsToClean) await rm(dir, {
2833
2824
  recursive: true,
@@ -2885,16 +2876,16 @@ var DevServer = class {
2885
2876
  this.root = loaded.root;
2886
2877
  this.outputDir = this.outDirOverride ? resolve(this.root, this.outDirOverride) : resolve(this.root, ".electro");
2887
2878
  this.configPaths.add(loaded.configPath);
2888
- for (const win of this.config.windows ?? []) this.configPaths.add(win.__source);
2889
- const windows = this.config.windows ?? [];
2879
+ for (const view of this.config.views ?? []) this.configPaths.add(view.__source);
2880
+ const views = this.config.views ?? [];
2890
2881
  const srcDir = resolve(this.root, "src");
2891
2882
  const mainEntry = resolve(dirname(this.config.runtime.__source), this.config.runtime.entry);
2892
2883
  session({
2893
2884
  root: this.root,
2894
2885
  main: mainEntry,
2895
- preload: windows.length > 0 ? resolve(this.outputDir, "generated/preload") : null,
2896
- renderer: windows.length > 0 ? resolve(this.root, dirname(relative(this.root, windows[0].__source))) : null,
2897
- windows: windows.map((w) => ({
2886
+ preload: views.length > 0 ? resolve(this.outputDir, "generated/preload") : null,
2887
+ renderer: views.length > 0 ? resolve(this.root, dirname(relative(this.root, views[0].__source))) : null,
2888
+ windows: views.map((w) => ({
2898
2889
  name: w.name,
2899
2890
  entry: resolve(dirname(w.__source), w.entry)
2900
2891
  }))
@@ -2907,7 +2898,7 @@ var DevServer = class {
2907
2898
  stepFail("codegen", err instanceof Error ? err.message : String(err));
2908
2899
  throw err;
2909
2900
  }
2910
- if (windows.length > 0) {
2901
+ if (views.length > 0) {
2911
2902
  const rendererTimer = startTimer();
2912
2903
  try {
2913
2904
  await this.startRenderer();
@@ -2924,7 +2915,7 @@ var DevServer = class {
2924
2915
  return;
2925
2916
  }
2926
2917
  const externals = await resolveExternals(this.root);
2927
- if (windows.length > 0) {
2918
+ if (views.length > 0) {
2928
2919
  const preloadTimer = startTimer();
2929
2920
  try {
2930
2921
  await this.buildPreload(externals);
@@ -2991,7 +2982,7 @@ var DevServer = class {
2991
2982
  this.lastScanResult = scanResult;
2992
2983
  const { files, envTypes } = generate({
2993
2984
  scanResult,
2994
- windows: this.config.windows ?? [],
2985
+ views: this.config.views ?? [],
2995
2986
  outputDir,
2996
2987
  srcDir
2997
2988
  });
@@ -3006,11 +2997,11 @@ var DevServer = class {
3006
2997
  await writeFile(envTypesPath, envTypes.content);
3007
2998
  }
3008
2999
  async startRenderer() {
3009
- const windows = this.config.windows ?? [];
3010
- const userViteConfigs = windows.filter((w) => w.vite).map((w) => w.vite);
3000
+ const views = this.config.views ?? [];
3001
+ const userViteConfigs = views.filter((w) => w.vite).map((w) => w.vite);
3011
3002
  this.rendererServer = await createServer(createRendererConfig({
3012
3003
  root: this.root,
3013
- windows,
3004
+ views,
3014
3005
  userViteConfigs: userViteConfigs.length > 0 ? userViteConfigs : void 0,
3015
3006
  logLevel: this.logLevel,
3016
3007
  clearScreen: this.clearScreen
@@ -3021,10 +3012,10 @@ var DevServer = class {
3021
3012
  this.rendererUrl = `http://localhost:${typeof addr === "object" && addr ? addr.port : 5173}`;
3022
3013
  }
3023
3014
  async buildPreload(externals) {
3024
- const windows = this.config.windows ?? [];
3015
+ const views = this.config.views ?? [];
3025
3016
  const preloadOutDir = resolve(this.outputDir, "preload");
3026
3017
  const input = {};
3027
- for (const win of windows) input[win.name] = resolve(this.outputDir, `generated/preload/${win.name}.gen.ts`);
3018
+ for (const view of views) input[view.name] = resolve(this.outputDir, `generated/preload/${view.name}.gen.ts`);
3028
3019
  const firstEntry = Object.values(input)[0];
3029
3020
  const baseConfig = createNodeConfig({
3030
3021
  scope: "preload",
@@ -3086,14 +3077,6 @@ var DevServer = class {
3086
3077
  async buildMain(externals) {
3087
3078
  const runtimeEntry = this.config.runtime.entry;
3088
3079
  const entry = resolve(dirname(this.config.runtime.__source), runtimeEntry);
3089
- const windowDefs = (this.config.windows ?? []).map((w) => ({
3090
- name: w.name,
3091
- type: w.type,
3092
- lifecycle: w.lifecycle,
3093
- autoShow: w.autoShow,
3094
- behavior: w.behavior,
3095
- window: w.window
3096
- }));
3097
3080
  const mainConfig = createNodeConfig({
3098
3081
  scope: "main",
3099
3082
  root: this.root,
@@ -3109,8 +3092,7 @@ var DevServer = class {
3109
3092
  logLevel: this.logLevel,
3110
3093
  clearScreen: this.clearScreen,
3111
3094
  userViteConfig: this.config.runtime.vite,
3112
- sourcemap: this.sourcemap,
3113
- define: { __ELECTRO_WINDOW_DEFINITIONS__: JSON.stringify(windowDefs) }
3095
+ sourcemap: this.sourcemap
3114
3096
  });
3115
3097
  const self = this;
3116
3098
  let firstBuild = true;
@@ -3147,10 +3129,10 @@ var DevServer = class {
3147
3129
  const addr = this.rendererServer.httpServer?.address();
3148
3130
  const port = typeof addr === "object" && addr ? addr.port : 5173;
3149
3131
  env.ELECTRO_RENDERER_BASE = `http://localhost:${port}`;
3150
- for (const win of this.config.windows ?? []) {
3151
- const entryPath = resolve(dirname(win.__source), win.entry);
3132
+ for (const view of this.config.views ?? []) {
3133
+ const entryPath = resolve(dirname(view.__source), view.entry);
3152
3134
  const relPath = relative(this.root, entryPath);
3153
- env[`ELECTRO_DEV_URL_${win.name}`] = `http://localhost:${port}/${relPath}`;
3135
+ env[`ELECTRO_DEV_URL_${view.name}`] = `http://localhost:${port}/${relPath}`;
3154
3136
  }
3155
3137
  }
3156
3138
  const proc = await launchElectron({
@@ -3287,15 +3269,15 @@ async function generate$1(options) {
3287
3269
  console.error("Error: electro.config.ts must have a default export");
3288
3270
  process.exit(1);
3289
3271
  }
3290
- const windows = config.windows ?? [];
3291
- console.log(`Loaded config with ${windows.length} window(s)`);
3272
+ const views = config.views ?? [];
3273
+ console.log(`Loaded config with ${views.length} view(s)`);
3292
3274
  const srcDir = resolve(process.cwd(), "src");
3293
3275
  console.log(`Scanning ${srcDir}...`);
3294
3276
  const scanResult = await scan(srcDir);
3295
3277
  console.log(`Found ${scanResult.features.length} feature(s)`);
3296
3278
  const { files, envTypes } = generate({
3297
3279
  scanResult,
3298
- windows,
3280
+ views,
3299
3281
  outputDir,
3300
3282
  srcDir
3301
3283
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cordy/electro-cli",
3
- "version": "1.0.9",
3
+ "version": "1.1.0",
4
4
  "description": "CLI for @cordy/electro — dev server, build, and code generation commands",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -47,15 +47,15 @@
47
47
  "prepublishOnly": "bun run build"
48
48
  },
49
49
  "peerDependencies": {
50
- "@cordy/electro": "1.0.8",
50
+ "@cordy/electro": "1.1.0",
51
51
  "electron": ">=40.4.1",
52
52
  "vite": ">=8.0.0"
53
53
  },
54
54
  "dependencies": {
55
- "@cordy/electro-generator": "1.0.8"
55
+ "@cordy/electro-generator": "1.1.0"
56
56
  },
57
57
  "devDependencies": {
58
- "@cordy/electro": "1.0.9",
58
+ "@cordy/electro": "1.1.0",
59
59
  "@types/node": "^25.2.3",
60
60
  "cac": "^6.7.14",
61
61
  "electron": "^40.4.1",