@cordy/electro-cli 1.2.10 → 1.2.12

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 +96 -3
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -491,7 +491,7 @@ const cac = (name = "") => new CAC(name);
491
491
 
492
492
  //#endregion
493
493
  //#region package.json
494
- var version$1 = "1.2.10";
494
+ var version$1 = "1.2.12";
495
495
 
496
496
  //#endregion
497
497
  //#region src/dev/logger.ts
@@ -2201,6 +2201,35 @@ function deduplicatePlugins(plugins) {
2201
2201
  return result;
2202
2202
  }
2203
2203
 
2204
+ //#endregion
2205
+ //#region src/dev/bridge-types.ts
2206
+ const GENERATED_BRIDGE_DIRS = ["views", "windows"];
2207
+ const VIEW_BRIDGE_MODULE_FILE = "bridge.ts";
2208
+ /**
2209
+ * Resolve generated bridge declaration file for a view.
2210
+ * Supports both historical `generated/windows/*` and current `generated/views/*`.
2211
+ */
2212
+ function findBridgeTypesForView(files, viewName) {
2213
+ const byPath = files.find((f) => f.path === `generated/views/${viewName}.bridge.d.ts`) ?? files.find((f) => f.path === `generated/windows/${viewName}.bridge.d.ts`);
2214
+ if (byPath) return byPath;
2215
+ return files.find((f) => f.path.endsWith(`/${viewName}.bridge.d.ts`)) ?? null;
2216
+ }
2217
+ /** Target location for per-view bridge types next to the config file. */
2218
+ function resolveViewBridgePath(view) {
2219
+ if (!view.__source) return null;
2220
+ return resolve(dirname(view.__source), VIEW_BRIDGE_MODULE_FILE);
2221
+ }
2222
+ /** Convert generated bridge declaration content into runtime-accessible bridge module. */
2223
+ function createViewBridgeModuleContent(bridgeTypesContent) {
2224
+ return `${bridgeTypesContent.trimEnd()}\n\nexport const electro = window.electro as ElectroBridge;\n`;
2225
+ }
2226
+ function isGeneratedBridgeTypesPath(path) {
2227
+ return GENERATED_BRIDGE_DIRS.some((dir) => path.startsWith(`generated/${dir}/`) && path.endsWith(".bridge.d.ts"));
2228
+ }
2229
+ function generatedBridgeTypesPaths(viewName) {
2230
+ return GENERATED_BRIDGE_DIRS.map((dir) => `generated/${dir}/${viewName}.bridge.d.ts`);
2231
+ }
2232
+
2204
2233
  //#endregion
2205
2234
  //#region src/plugins/utils.ts
2206
2235
  /** Strip query and hash from a URL/path. */
@@ -2911,13 +2940,28 @@ async function build$1(options) {
2911
2940
  });
2912
2941
  await mkdir(codegenDir, { recursive: true });
2913
2942
  for (const file of files) {
2943
+ if (isGeneratedBridgeTypesPath(file.path)) continue;
2914
2944
  const filePath = resolve(codegenDir, file.path);
2915
2945
  await mkdir(dirname(filePath), { recursive: true });
2916
2946
  await writeFile(filePath, file.content);
2917
2947
  }
2948
+ for (const view of views) {
2949
+ const bridge = findBridgeTypesForView(files, view.name);
2950
+ const bridgePath = resolveViewBridgePath(view);
2951
+ if (bridge && bridgePath) {
2952
+ await mkdir(dirname(bridgePath), { recursive: true });
2953
+ await writeFileIfChanged$2(bridgePath, createViewBridgeModuleContent(bridge.content));
2954
+ }
2955
+ for (const relPath of generatedBridgeTypesPaths(view.name)) {
2956
+ const legacyPath = resolve(codegenDir, relPath);
2957
+ try {
2958
+ await unlink(legacyPath);
2959
+ } catch {}
2960
+ }
2961
+ }
2918
2962
  const envTypesPath = resolve(srcDir, envTypes.path);
2919
2963
  await mkdir(dirname(envTypesPath), { recursive: true });
2920
- await writeFile(envTypesPath, envTypes.content);
2964
+ await writeFileIfChanged$2(envTypesPath, envTypes.content);
2921
2965
  step("codegen", codegenTimer());
2922
2966
  } catch (err) {
2923
2967
  stepFail("codegen", err instanceof Error ? err.message : String(err));
@@ -2982,6 +3026,12 @@ async function build$1(options) {
2982
3026
  }
2983
3027
  footer(`Built in ${totalTimer()}`, outDir);
2984
3028
  }
3029
+ async function writeFileIfChanged$2(filePath, content) {
3030
+ try {
3031
+ if (await readFile(filePath, "utf-8") === content) return;
3032
+ } catch {}
3033
+ await writeFile(filePath, content);
3034
+ }
2985
3035
  async function buildMain(args) {
2986
3036
  const runtimeEntry = args.config.runtime.entry;
2987
3037
  const entry = resolve(dirname(args.config.runtime.__source), runtimeEntry);
@@ -3271,13 +3321,28 @@ var DevServer = class {
3271
3321
  });
3272
3322
  await mkdir(outputDir, { recursive: true });
3273
3323
  for (const file of files) {
3324
+ if (isGeneratedBridgeTypesPath(file.path)) continue;
3274
3325
  const filePath = resolve(outputDir, file.path);
3275
3326
  await mkdir(dirname(filePath), { recursive: true });
3276
3327
  await writeFile(filePath, file.content);
3277
3328
  }
3329
+ for (const view of this.config.views ?? []) {
3330
+ const bridge = findBridgeTypesForView(files, view.name);
3331
+ const bridgePath = resolveViewBridgePath(view);
3332
+ if (bridge && bridgePath) {
3333
+ await mkdir(dirname(bridgePath), { recursive: true });
3334
+ await writeFileIfChanged$1(bridgePath, createViewBridgeModuleContent(bridge.content));
3335
+ }
3336
+ for (const relPath of generatedBridgeTypesPaths(view.name)) {
3337
+ const legacyPath = resolve(outputDir, relPath);
3338
+ try {
3339
+ await unlink(legacyPath);
3340
+ } catch {}
3341
+ }
3342
+ }
3278
3343
  const envTypesPath = resolve(srcDir, envTypes.path);
3279
3344
  await mkdir(dirname(envTypesPath), { recursive: true });
3280
- await writeFile(envTypesPath, envTypes.content);
3345
+ await writeFileIfChanged$1(envTypesPath, envTypes.content);
3281
3346
  }
3282
3347
  async startRenderer() {
3283
3348
  const views = (this.config.views ?? []).filter((v) => v.entry);
@@ -3557,6 +3622,12 @@ var DevServer = class {
3557
3622
  });
3558
3623
  }
3559
3624
  };
3625
+ async function writeFileIfChanged$1(filePath, content) {
3626
+ try {
3627
+ if (await readFile(filePath, "utf-8") === content) return;
3628
+ } catch {}
3629
+ await writeFile(filePath, content);
3630
+ }
3560
3631
 
3561
3632
  //#endregion
3562
3633
  //#region src/commands/dev.ts
@@ -3617,17 +3688,39 @@ async function generate$1(options) {
3617
3688
  });
3618
3689
  console.log(`Generating ${files.length + 1} file(s)...`);
3619
3690
  for (const file of files) {
3691
+ if (isGeneratedBridgeTypesPath(file.path)) continue;
3620
3692
  const fullPath = resolve(outputDir, file.path);
3621
3693
  await mkdir(dirname(fullPath), { recursive: true });
3622
3694
  await writeFile(fullPath, file.content);
3623
3695
  console.log(` .electro/${file.path}`);
3624
3696
  }
3697
+ for (const view of views) {
3698
+ const bridge = findBridgeTypesForView(files, view.name);
3699
+ const bridgePath = resolveViewBridgePath(view);
3700
+ if (bridge && bridgePath) {
3701
+ await mkdir(dirname(bridgePath), { recursive: true });
3702
+ await writeFileIfChanged(bridgePath, createViewBridgeModuleContent(bridge.content));
3703
+ console.log(` ${relative(process.cwd(), bridgePath)}`);
3704
+ }
3705
+ for (const relPath of generatedBridgeTypesPaths(view.name)) {
3706
+ const legacyPath = resolve(outputDir, relPath);
3707
+ try {
3708
+ await unlink(legacyPath);
3709
+ } catch {}
3710
+ }
3711
+ }
3625
3712
  const envTypesPath = resolve(srcDir, envTypes.path);
3626
3713
  await mkdir(dirname(envTypesPath), { recursive: true });
3627
3714
  await writeFile(envTypesPath, envTypes.content);
3628
3715
  console.log(` src/${envTypes.path}`);
3629
3716
  console.log("Done.");
3630
3717
  }
3718
+ async function writeFileIfChanged(filePath, content) {
3719
+ try {
3720
+ if (await readFile(filePath, "utf-8") === content) return;
3721
+ } catch {}
3722
+ await writeFile(filePath, content);
3723
+ }
3631
3724
 
3632
3725
  //#endregion
3633
3726
  //#region src/commands/preview.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cordy/electro-cli",
3
- "version": "1.2.10",
3
+ "version": "1.2.12",
4
4
  "description": "CLI for @cordy/electro — dev server, build, and code generation commands",
5
5
  "license": "MIT",
6
6
  "type": "module",