electron-builder 27.0.0-alpha.0 → 27.0.0-alpha.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.
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-schema.d.ts","sourceRoot":"","sources":["../../src/cli/migrate-schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAMjC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAOD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,eAAe,CAuKvE;AA2MD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAkB/D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D5D"}
1
+ {"version":3,"file":"migrate-schema.d.ts","sourceRoot":"","sources":["../../src/cli/migrate-schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAMjC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAOD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,eAAe,CAuKvE;AA+MD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAkB/D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D5D"}
@@ -299,6 +299,10 @@ async function findAndLoadConfig(projectDir, explicitConfigPath) {
299
299
  return null;
300
300
  }
301
301
  function parseConfig(text, format) {
302
+ if (format === "js") {
303
+ // Programmatic configs (JS/TS/MJS/CJS) can't be parsed; migrateSchema will bail with manual steps
304
+ return {};
305
+ }
302
306
  if (format === "yaml") {
303
307
  const yaml = _require("js-yaml");
304
308
  return yaml.load(text);
@@ -405,6 +409,7 @@ export async function migrateSchema(args) {
405
409
  }
406
410
  function printManualSteps() {
407
411
  const steps = [
412
+ "",
408
413
  "• Remove electronCompile",
409
414
  "• Remove framework, nodeVersion, launchUiVersion",
410
415
  "• Rename npmSkipBuildFromSource → buildDependenciesFromSource",
@@ -412,14 +417,17 @@ function printManualSteps() {
412
417
  "• Rename asar-unpack / asar-unpack-dir / asar.unpack / asar.unpackDir → asarUnpack; then move asarUnpack → asar.unpack",
413
418
  "• Move disableSanityCheckAsar → asar.disableSanityCheck",
414
419
  "• Move disableAsarIntegrity → asar.disableIntegrity",
415
- "• Replace asar: true with an asar object (e.g. asar: {})",
420
+ "• Replace asar: true with an asar object (e.g. asar: {} or omit entirely - asar is enabled by default)",
416
421
  "• Remove appImage.systemIntegration",
417
422
  "• Rename snap → snapcraft; nest options under a base-named sub-key (default base: core20)",
418
- "• Replace vPrefixedTagName with tagNamePrefix on GitHub publish entries",
419
- "• Move extra keys in win.azureSignOptions into an additionalMetadata object",
423
+ "• Replace vPrefixedTagName with tagNamePrefix on GitHub publish entries ('v' is the default prefix - just like before - but can now be customized with tagNamePrefix)",
424
+ "• Move extra keys in win.azureSignOptions into an 'additionalMetadata' object",
420
425
  "• Move helper-bundle-id → mac.helperBundleId",
421
426
  "• Replace squirrelWindows.noMsi with squirrelWindows.msi (inverted)",
422
427
  "• Move root-level package.json directories → build.directories",
428
+ "",
429
+ "• For programmatic configs (JS/TS/MJS/CJS), apply the above changes manually to your config object",
430
+ "• For additional guidance, check the migration guide: https://www.electron.build/docs/migration/v26-to-v27",
423
431
  ];
424
432
  for (const step of steps) {
425
433
  process.stdout.write(` ${step}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-schema.js","sourceRoot":"","sources":["../../src/cli/migrate-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from \"node:module\"\nimport { log } from \"builder-util\"\nimport { promises as fs } from \"fs\"\nimport * as path from \"path\"\nimport type { Argv } from \"yargs\"\n\nconst _require = createRequire(import.meta.url)\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface MigrationChange {\n readonly key: string\n readonly description: string\n}\n\nexport interface MigrationResult {\n readonly migrated: Record<string, any>\n readonly changes: MigrationChange[]\n readonly warnings: string[]\n readonly modified: boolean\n}\n\n// ─── Pure migration logic ─────────────────────────────────────────────────────\n\n// Azure Trusted Signing fields that are typed in v27\nconst AZURE_KNOWN_FIELDS = new Set([\"type\", \"endpoint\", \"codeSigningAccountName\", \"certificateProfileName\", \"publisherName\", \"fileDigest\", \"timestampRfc3161\", \"timestampDigest\"])\n\n/**\n * Applies all v26→v27 config transformations to a parsed config object.\n * Pure function — no I/O, safe to call in tests.\n */\nexport function migrateConfig(raw: Record<string, any>): MigrationResult {\n const c: Record<string, any> = JSON.parse(JSON.stringify(raw))\n const changes: MigrationChange[] = []\n const warnings: string[] = []\n\n // ── 1. electronCompile ────────────────────────────────────────────────────\n if (\"electronCompile\" in c) {\n delete c.electronCompile\n changes.push({ key: \"electronCompile\", description: \"removed electronCompile (unsupported since v27; migrate to electron-vite, esbuild, or webpack)\" })\n }\n\n // ── 2. Removed framework fields ──────────────────────────────────────────\n for (const key of [\"framework\", \"nodeVersion\", \"launchUiVersion\"] as const) {\n if (key in c) {\n delete c[key]\n changes.push({ key, description: `removed ${key} (Electron is the only supported framework in v27)` })\n }\n }\n\n // ── 3. npmSkipBuildFromSource → buildDependenciesFromSource ───────────────\n if (\"npmSkipBuildFromSource\" in c) {\n // will be picked up by the nativeModules step below\n if (!(\"buildDependenciesFromSource\" in c)) {\n c.buildDependenciesFromSource = !c.npmSkipBuildFromSource\n }\n delete c.npmSkipBuildFromSource\n changes.push({ key: \"npmSkipBuildFromSource\", description: \"renamed npmSkipBuildFromSource → buildDependenciesFromSource (then grouped under nativeModules)\" })\n }\n\n // ── 4. nativeModules grouping ─────────────────────────────────────────────\n const rootNativeKeys = [\"buildDependenciesFromSource\", \"nodeGypRebuild\", \"npmRebuild\", \"nativeRebuilder\"] as const\n if (rootNativeKeys.some(k => k in c)) {\n const sub: Record<string, any> = { ...(c.nativeModules ?? {}) }\n for (const key of [\"buildDependenciesFromSource\", \"nodeGypRebuild\", \"npmRebuild\"] as const) {\n if (key in c) {\n sub[key] = c[key]\n delete c[key]\n changes.push({ key, description: `moved ${key} → nativeModules.${key}` })\n }\n }\n if (\"nativeRebuilder\" in c) {\n sub.rebuildMode = c.nativeRebuilder\n delete c.nativeRebuilder\n changes.push({ key: \"nativeRebuilder\", description: \"renamed nativeRebuilder → nativeModules.rebuildMode\" })\n }\n c.nativeModules = sub\n }\n\n // ── 5. Legacy asar keys → asarUnpack ─────────────────────────────────────\n // Hyphenated root-level variants\n for (const old of [\"asar-unpack\", \"asar-unpack-dir\"] as const) {\n if (old in c) {\n c.asarUnpack = mergeAsarUnpack(c.asarUnpack, c[old])\n delete c[old]\n changes.push({ key: old, description: `renamed ${old} → asarUnpack` })\n }\n }\n // Nested asar.unpackDir (legacy pre-v26; asar.unpack is now the canonical location, handled in step 11)\n if (c.asar != null && typeof c.asar === \"object\") {\n if (\"unpackDir\" in c.asar) {\n c.asarUnpack = mergeAsarUnpack(c.asarUnpack, c.asar.unpackDir)\n delete c.asar.unpackDir\n changes.push({ key: \"asar.unpackDir\", description: \"moved asar.unpackDir → asarUnpack\" })\n }\n if (Object.keys(c.asar).length === 0) {\n delete c.asar\n }\n }\n\n // ── 6. appImage.systemIntegration removed ────────────────────────────────\n if (c.appImage != null && \"systemIntegration\" in c.appImage) {\n delete c.appImage.systemIntegration\n changes.push({ key: \"appImage.systemIntegration\", description: \"removed appImage.systemIntegration (handled automatically by AppImageLauncher in v27)\" })\n if (Object.keys(c.appImage).length === 0) {\n delete c.appImage\n }\n }\n\n // ── 7. GithubOptions.vPrefixedTagName → tagNamePrefix ─────────────────────\n if (c.publish != null) {\n migratePublishEntries(c, \"publish\", changes)\n }\n // Also handle publish nested inside mac/win/linux\n for (const platform of [\"mac\", \"win\", \"linux\"] as const) {\n if (c[platform]?.publish != null) {\n migratePublishEntries(c[platform], \"publish\", changes)\n }\n }\n\n // ── 8. snap → snapcraft restructuring ─────────────────────────────────────\n if (\"snap\" in c) {\n migrateSnap(c, changes, warnings)\n }\n\n // ── 9. helper-bundle-id → mac.helperBundleId ──────────────────────────────\n if (\"helper-bundle-id\" in c) {\n const mac: Record<string, any> = { ...(c.mac ?? {}) }\n if (!(\"helperBundleId\" in mac)) {\n mac.helperBundleId = c[\"helper-bundle-id\"]\n }\n delete c[\"helper-bundle-id\"]\n c.mac = mac\n changes.push({ key: \"helper-bundle-id\", description: \"moved helper-bundle-id → mac.helperBundleId\" })\n }\n\n // ── 10. squirrelWindows.noMsi → squirrelWindows.msi (inverted) ────────────\n if (c.squirrelWindows != null && typeof c.squirrelWindows === \"object\" && \"noMsi\" in c.squirrelWindows) {\n const sq: Record<string, any> = c.squirrelWindows\n if (!(\"msi\" in sq)) {\n sq.msi = !sq.noMsi\n }\n delete sq.noMsi\n changes.push({ key: \"squirrelWindows.noMsi\", description: \"replaced squirrelWindows.noMsi → squirrelWindows.msi (inverted boolean)\" })\n }\n\n // ── 11. asar consolidation ───────────────────────────────────────────────\n // Move root-level asarUnpack / disableSanityCheckAsar / disableAsarIntegrity\n // into the asar object. Skip entirely when asar === false (all would be no-ops).\n if (c.asar !== false) {\n const asarSub: Record<string, any> = typeof c.asar === \"object\" && c.asar != null ? { ...c.asar } : {}\n if (\"asarUnpack\" in c) {\n asarSub.unpack = mergeAsarUnpack(asarSub.unpack, c.asarUnpack)\n delete c.asarUnpack\n changes.push({ key: \"asarUnpack\", description: \"moved asarUnpack → asar.unpack\" })\n }\n if (\"disableSanityCheckAsar\" in c) {\n asarSub.disableSanityCheck = c.disableSanityCheckAsar\n delete c.disableSanityCheckAsar\n changes.push({ key: \"disableSanityCheckAsar\", description: \"moved disableSanityCheckAsar → asar.disableSanityCheck\" })\n }\n if (\"disableAsarIntegrity\" in c) {\n asarSub.disableIntegrity = c.disableAsarIntegrity\n delete c.disableAsarIntegrity\n changes.push({ key: \"disableAsarIntegrity\", description: \"moved disableAsarIntegrity → asar.disableIntegrity\" })\n }\n if (c.asar === true) {\n if (Object.keys(asarSub).length > 0) {\n c.asar = asarSub\n } else {\n delete c.asar\n }\n changes.push({ key: \"asar\", description: \"replaced asar: true with asar object (true is no longer a valid value)\" })\n } else if (Object.keys(asarSub).length > 0) {\n c.asar = asarSub\n }\n }\n\n // ── 12. azureSignOptions: index-signature extra keys → additionalMetadata ─\n if (c.win?.azureSignOptions != null) {\n const azure: Record<string, any> = c.win.azureSignOptions\n const extra: Record<string, string> = {}\n for (const [k, v] of Object.entries(azure)) {\n if (!AZURE_KNOWN_FIELDS.has(k) && typeof v === \"string\") {\n extra[k] = v\n delete azure[k]\n }\n }\n if (Object.keys(extra).length > 0) {\n azure.additionalMetadata = { ...(azure.additionalMetadata ?? {}), ...extra }\n changes.push({\n key: \"win.azureSignOptions\",\n description: `moved extra keys [${Object.keys(extra).join(\", \")}] into win.azureSignOptions.additionalMetadata`,\n })\n }\n }\n\n return { migrated: c, changes, warnings, modified: changes.length > 0 || warnings.length > 0 }\n}\n\nfunction mergeAsarUnpack(existing: string | string[] | undefined, incoming: string | string[]): string | string[] {\n if (existing == null) {\n return incoming\n }\n const arr = (Array.isArray(existing) ? existing : [existing]).concat(Array.isArray(incoming) ? incoming : [incoming])\n return arr.length === 1 ? arr[0] : arr\n}\n\nfunction migratePublishEntries(parent: Record<string, any>, key: string, changes: MigrationChange[]) {\n const entries: any[] = Array.isArray(parent[key]) ? parent[key] : [parent[key]]\n let changed = false\n for (const entry of entries) {\n if (entry != null && entry.provider === \"github\" && \"vPrefixedTagName\" in entry) {\n entry.tagNamePrefix = entry.vPrefixedTagName === false ? \"\" : \"v\"\n delete entry.vPrefixedTagName\n changed = true\n }\n if (entry != null && entry.provider === \"gitlab\" && \"vPrefixedTagName\" in entry) {\n delete entry.vPrefixedTagName\n changed = true\n }\n }\n if (changed) {\n changes.push({ key: `${key}[].vPrefixedTagName`, description: \"replaced vPrefixedTagName with tagNamePrefix on GitHub publish entries; removed from GitLab entries\" })\n }\n}\n\n// snap bases recognized by the v27 snapcraft config. \"custom\" uses an inline/path yaml\n// and must be moved verbatim rather than nested under a per-base sub-key.\nconst SNAP_BASES = new Set([\"core18\", \"core20\", \"core22\", \"core24\", \"custom\"])\n\n/**\n * Migrates the removed flat `snap` config into the v27 `snapcraft` shape:\n * { snapcraft: { base, [base]: { ...rest } } }\n * When no `base` is present, defaults to \"core20\" (the v27 1-to-1 migration target) and warns.\n */\nfunction migrateSnap(c: Record<string, any>, changes: MigrationChange[], warnings: string[]) {\n const snap = c.snap\n delete c.snap\n\n if (snap == null || typeof snap !== \"object\") {\n changes.push({ key: \"snap\", description: \"removed empty snap config (use snapcraft in v27)\" })\n return\n }\n\n const snapcraft: Record<string, any> = { ...(c.snapcraft ?? {}) }\n const rest: Record<string, any> = { ...snap }\n let base: string | undefined = rest.base\n delete rest.base\n\n if (base === \"custom\") {\n // base: custom carries yamlPath / inline yaml — move verbatim, no per-base nesting\n snapcraft.base = \"custom\"\n Object.assign(snapcraft, rest)\n c.snapcraft = snapcraft\n changes.push({ key: \"snap\", description: \"moved snap (base: custom) → snapcraft verbatim\" })\n return\n }\n\n let assumed = false\n if (base == null || !SNAP_BASES.has(base)) {\n if (base != null) {\n warnings.push(`snap config had an unrecognized base \"${base}\"; assumed \"core20\". Verify the snapcraft.base value (core18/core20/core22/core24/custom).`)\n }\n base = \"core20\"\n assumed = true\n }\n\n snapcraft.base = base\n snapcraft[base] = { ...(snapcraft[base] ?? {}), ...rest }\n c.snapcraft = snapcraft\n changes.push({ key: \"snap\", description: `moved snap → snapcraft.${base}${assumed ? \" (base defaulted to core20)\" : \"\"}` })\n if (assumed && warnings.every(w => !w.includes(\"unrecognized base\"))) {\n warnings.push('snap config had no \"base\"; assumed \"core20\" for snapcraft. Verify and adjust the base if needed (core18/core20/core22/core24).')\n }\n}\n\n// ─── File I/O ─────────────────────────────────────────────────────────────────\n\ntype ConfigFormat = \"json\" | \"json5\" | \"yaml\" | \"toml\" | \"js\"\n\nfunction formatFromPath(p: string): ConfigFormat {\n const ext = path.extname(p).toLowerCase()\n if (ext === \".json\") {\n return \"json\"\n }\n if (ext === \".json5\") {\n return \"json5\"\n }\n if (ext === \".yml\" || ext === \".yaml\") {\n return \"yaml\"\n }\n if (ext === \".toml\") {\n return \"toml\"\n }\n return \"js\"\n}\n\nfunction serializeConfig(content: Record<string, any>, format: ConfigFormat, originalText: string): string {\n if (format === \"yaml\") {\n const yaml = _require(\"js-yaml\") as { dump(obj: unknown, opts?: { lineWidth?: number; quotingType?: string; forceQuotes?: boolean }): string }\n return yaml.dump(content, { lineWidth: 120, quotingType: '\"', forceQuotes: false })\n }\n // JSON and JSON5: detect original indent level\n const indentMatch = originalText.match(/^{\\s*\\n( +)/m)\n const indent = indentMatch ? indentMatch[1].length : 2\n return JSON.stringify(content, null, indent) + \"\\n\"\n}\n\ninterface FoundConfig {\n /** Absolute path to the file, or null when config is in package.json */\n readonly configFile: string | null\n readonly isPackageJson: boolean\n readonly format: ConfigFormat\n readonly rawText: string\n readonly parsed: Record<string, any>\n /** package.json only: a root-level `directories` key was folded into `build.directories` */\n readonly rootDirectoriesMoved?: boolean\n}\n\nasync function findAndLoadConfig(projectDir: string, explicitConfigPath?: string | null): Promise<FoundConfig | null> {\n if (explicitConfigPath != null) {\n const abs = path.resolve(projectDir, explicitConfigPath)\n const text = await readFileSafe(abs)\n if (text == null) {\n log.error({ configFile: abs }, \"config file not found\")\n return null\n }\n const format = formatFromPath(abs)\n return { configFile: abs, isPackageJson: false, format, rawText: text, parsed: parseConfig(text, format) }\n }\n\n // Check package.json build key first\n const pkgPath = path.join(projectDir, \"package.json\")\n const pkgText = await readFileSafe(pkgPath)\n if (pkgText != null) {\n const pkg = JSON.parse(pkgText)\n if (pkg.build != null && typeof pkg.build === \"object\") {\n const build: Record<string, any> = pkg.build\n let rootDirectoriesMoved = false\n if (pkg.directories != null && build.directories == null) {\n build.directories = pkg.directories\n rootDirectoriesMoved = true\n }\n return { configFile: null, isPackageJson: true, format: \"json\", rawText: pkgText, parsed: build, rootDirectoriesMoved }\n }\n }\n\n // Standalone config files\n const candidates = [\".yml\", \".yaml\", \".json\", \".json5\", \".toml\", \".js\", \".cjs\", \".mjs\", \".ts\"].map(ext => path.join(projectDir, `electron-builder${ext}`))\n for (const candidate of candidates) {\n const text = await readFileSafe(candidate)\n if (text != null) {\n const format = formatFromPath(candidate)\n return { configFile: candidate, isPackageJson: false, format, rawText: text, parsed: parseConfig(text, format) }\n }\n }\n\n return null\n}\n\nfunction parseConfig(text: string, format: ConfigFormat): Record<string, any> {\n if (format === \"yaml\") {\n const yaml = _require(\"js-yaml\") as { load(text: string): unknown }\n return yaml.load(text) as Record<string, any>\n }\n if (format === \"json5\") {\n const json5 = _require(\"json5\") as { parse(text: string): any }\n return json5.parse(text)\n }\n if (format === \"toml\") {\n const toml = _require(\"toml\") as { parse(text: string): any }\n return toml.parse(text)\n }\n return JSON.parse(text)\n}\n\nasync function readFileSafe(p: string): Promise<string | null> {\n return fs.readFile(p, \"utf8\").catch(e => (e.code === \"ENOENT\" || e.code === \"ENOTDIR\" ? null : Promise.reject(e)))\n}\n\nasync function writeBackConfig(found: FoundConfig, migrated: Record<string, any>, projectDir: string): Promise<string> {\n if (found.isPackageJson) {\n const pkgPath = path.join(projectDir, \"package.json\")\n const pkg = JSON.parse(found.rawText)\n pkg.build = migrated\n if (found.rootDirectoriesMoved) {\n delete pkg.directories\n }\n const indentMatch = found.rawText.match(/^{\\s*\\n( +)/m)\n const indent = indentMatch ? indentMatch[1].length : 2\n await fs.writeFile(pkgPath, JSON.stringify(pkg, null, indent) + \"\\n\", \"utf8\")\n return \"package.json\"\n }\n const serialized = serializeConfig(migrated, found.format, found.rawText)\n await fs.writeFile(found.configFile!, serialized, \"utf8\")\n return path.relative(projectDir, found.configFile!)\n}\n\n// ─── CLI command ──────────────────────────────────────────────────────────────\n\nexport function configureMigrateSchemaCommand(yargs: Argv): Argv {\n return yargs\n .option(\"config\", {\n alias: \"c\",\n type: \"string\",\n description: \"Path to config file (auto-detected if omitted)\",\n })\n .option(\"project-dir\", {\n type: \"string\",\n description: \"Project root directory\",\n default: process.cwd(),\n })\n .option(\"dry-run\", {\n alias: \"n\",\n type: \"boolean\",\n default: false,\n description: \"Print what would change without writing\",\n })\n}\n\nexport async function migrateSchema(args: any): Promise<void> {\n const projectDir: string = path.resolve((args[\"project-dir\"] as string | undefined) ?? process.cwd())\n const configPath: string | null = (args.config as string | undefined) ?? null\n const dryRun: boolean = (args[\"dry-run\"] as boolean | undefined) ?? false\n\n const found = await findAndLoadConfig(projectDir, configPath)\n if (found == null) {\n log.error(null, \"no config found — checked package.json build key and electron-builder.{yml,yaml,json,json5,toml,js,cjs,ts}\")\n process.exit(1)\n }\n\n const location = found.isPackageJson ? 'package.json (\"build\" key)' : path.relative(projectDir, found.configFile!)\n log.info({ file: location }, \"loaded config\")\n\n // Programmatic formats can't be auto-rewritten\n if (found.format === \"js\") {\n log.warn({ file: location }, \"programmatic config cannot be auto-migrated; apply these changes manually:\")\n printManualSteps()\n return\n }\n\n // TOML: can parse but not serialize (toml lib is read-only)\n const isToml = found.format === \"toml\"\n\n const result = migrateConfig(found.parsed)\n const { migrated, warnings } = result\n const changes = [...result.changes]\n if (found.rootDirectoriesMoved) {\n changes.push({ key: \"directories\", description: \"moved package.json root-level directories → build.directories\" })\n }\n const modified = result.modified || found.rootDirectoriesMoved === true\n\n if (!modified) {\n log.info(null, \"config is already up to date — no changes needed\")\n return\n }\n\n for (const change of changes) {\n log.info({ key: change.key }, change.description)\n }\n for (const warning of warnings) {\n log.warn(null, warning)\n }\n\n if (isToml) {\n log.warn({ file: location }, \"TOML configs cannot be automatically rewritten; apply the changes above manually\")\n return\n }\n\n if (dryRun) {\n log.info(null, \"dry run — no files written\")\n return\n }\n\n const written = await writeBackConfig(found, migrated, projectDir)\n log.info({ file: written }, \"wrote migrated config\")\n\n if (found.format === \"json5\") {\n log.warn(null, \"JSON5 was re-serialized as JSON — comments were not preserved\")\n }\n}\n\nfunction printManualSteps() {\n const steps = [\n \"• Remove electronCompile\",\n \"• Remove framework, nodeVersion, launchUiVersion\",\n \"• Rename npmSkipBuildFromSource → buildDependenciesFromSource\",\n \"• Move buildDependenciesFromSource, nodeGypRebuild, npmRebuild, nativeRebuilder into nativeModules (rename nativeRebuilder → rebuildMode)\",\n \"• Rename asar-unpack / asar-unpack-dir / asar.unpack / asar.unpackDir → asarUnpack; then move asarUnpack → asar.unpack\",\n \"• Move disableSanityCheckAsar → asar.disableSanityCheck\",\n \"• Move disableAsarIntegrity → asar.disableIntegrity\",\n \"• Replace asar: true with an asar object (e.g. asar: {})\",\n \"• Remove appImage.systemIntegration\",\n \"• Rename snap → snapcraft; nest options under a base-named sub-key (default base: core20)\",\n \"• Replace vPrefixedTagName with tagNamePrefix on GitHub publish entries\",\n \"• Move extra keys in win.azureSignOptions into an additionalMetadata object\",\n \"• Move helper-bundle-id → mac.helperBundleId\",\n \"• Replace squirrelWindows.noMsi with squirrelWindows.msi (inverted)\",\n \"• Move root-level package.json directories → build.directories\",\n ]\n for (const step of steps) {\n process.stdout.write(` ${step}\\n`)\n }\n}\n"]}
1
+ {"version":3,"file":"migrate-schema.js","sourceRoot":"","sources":["../../src/cli/migrate-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from \"node:module\"\nimport { log } from \"builder-util\"\nimport { promises as fs } from \"fs\"\nimport * as path from \"path\"\nimport type { Argv } from \"yargs\"\n\nconst _require = createRequire(import.meta.url)\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface MigrationChange {\n readonly key: string\n readonly description: string\n}\n\nexport interface MigrationResult {\n readonly migrated: Record<string, any>\n readonly changes: MigrationChange[]\n readonly warnings: string[]\n readonly modified: boolean\n}\n\n// ─── Pure migration logic ─────────────────────────────────────────────────────\n\n// Azure Trusted Signing fields that are typed in v27\nconst AZURE_KNOWN_FIELDS = new Set([\"type\", \"endpoint\", \"codeSigningAccountName\", \"certificateProfileName\", \"publisherName\", \"fileDigest\", \"timestampRfc3161\", \"timestampDigest\"])\n\n/**\n * Applies all v26→v27 config transformations to a parsed config object.\n * Pure function — no I/O, safe to call in tests.\n */\nexport function migrateConfig(raw: Record<string, any>): MigrationResult {\n const c: Record<string, any> = JSON.parse(JSON.stringify(raw))\n const changes: MigrationChange[] = []\n const warnings: string[] = []\n\n // ── 1. electronCompile ────────────────────────────────────────────────────\n if (\"electronCompile\" in c) {\n delete c.electronCompile\n changes.push({ key: \"electronCompile\", description: \"removed electronCompile (unsupported since v27; migrate to electron-vite, esbuild, or webpack)\" })\n }\n\n // ── 2. Removed framework fields ──────────────────────────────────────────\n for (const key of [\"framework\", \"nodeVersion\", \"launchUiVersion\"] as const) {\n if (key in c) {\n delete c[key]\n changes.push({ key, description: `removed ${key} (Electron is the only supported framework in v27)` })\n }\n }\n\n // ── 3. npmSkipBuildFromSource → buildDependenciesFromSource ───────────────\n if (\"npmSkipBuildFromSource\" in c) {\n // will be picked up by the nativeModules step below\n if (!(\"buildDependenciesFromSource\" in c)) {\n c.buildDependenciesFromSource = !c.npmSkipBuildFromSource\n }\n delete c.npmSkipBuildFromSource\n changes.push({ key: \"npmSkipBuildFromSource\", description: \"renamed npmSkipBuildFromSource → buildDependenciesFromSource (then grouped under nativeModules)\" })\n }\n\n // ── 4. nativeModules grouping ─────────────────────────────────────────────\n const rootNativeKeys = [\"buildDependenciesFromSource\", \"nodeGypRebuild\", \"npmRebuild\", \"nativeRebuilder\"] as const\n if (rootNativeKeys.some(k => k in c)) {\n const sub: Record<string, any> = { ...(c.nativeModules ?? {}) }\n for (const key of [\"buildDependenciesFromSource\", \"nodeGypRebuild\", \"npmRebuild\"] as const) {\n if (key in c) {\n sub[key] = c[key]\n delete c[key]\n changes.push({ key, description: `moved ${key} → nativeModules.${key}` })\n }\n }\n if (\"nativeRebuilder\" in c) {\n sub.rebuildMode = c.nativeRebuilder\n delete c.nativeRebuilder\n changes.push({ key: \"nativeRebuilder\", description: \"renamed nativeRebuilder → nativeModules.rebuildMode\" })\n }\n c.nativeModules = sub\n }\n\n // ── 5. Legacy asar keys → asarUnpack ─────────────────────────────────────\n // Hyphenated root-level variants\n for (const old of [\"asar-unpack\", \"asar-unpack-dir\"] as const) {\n if (old in c) {\n c.asarUnpack = mergeAsarUnpack(c.asarUnpack, c[old])\n delete c[old]\n changes.push({ key: old, description: `renamed ${old} → asarUnpack` })\n }\n }\n // Nested asar.unpackDir (legacy pre-v26; asar.unpack is now the canonical location, handled in step 11)\n if (c.asar != null && typeof c.asar === \"object\") {\n if (\"unpackDir\" in c.asar) {\n c.asarUnpack = mergeAsarUnpack(c.asarUnpack, c.asar.unpackDir)\n delete c.asar.unpackDir\n changes.push({ key: \"asar.unpackDir\", description: \"moved asar.unpackDir → asarUnpack\" })\n }\n if (Object.keys(c.asar).length === 0) {\n delete c.asar\n }\n }\n\n // ── 6. appImage.systemIntegration removed ────────────────────────────────\n if (c.appImage != null && \"systemIntegration\" in c.appImage) {\n delete c.appImage.systemIntegration\n changes.push({ key: \"appImage.systemIntegration\", description: \"removed appImage.systemIntegration (handled automatically by AppImageLauncher in v27)\" })\n if (Object.keys(c.appImage).length === 0) {\n delete c.appImage\n }\n }\n\n // ── 7. GithubOptions.vPrefixedTagName → tagNamePrefix ─────────────────────\n if (c.publish != null) {\n migratePublishEntries(c, \"publish\", changes)\n }\n // Also handle publish nested inside mac/win/linux\n for (const platform of [\"mac\", \"win\", \"linux\"] as const) {\n if (c[platform]?.publish != null) {\n migratePublishEntries(c[platform], \"publish\", changes)\n }\n }\n\n // ── 8. snap → snapcraft restructuring ─────────────────────────────────────\n if (\"snap\" in c) {\n migrateSnap(c, changes, warnings)\n }\n\n // ── 9. helper-bundle-id → mac.helperBundleId ──────────────────────────────\n if (\"helper-bundle-id\" in c) {\n const mac: Record<string, any> = { ...(c.mac ?? {}) }\n if (!(\"helperBundleId\" in mac)) {\n mac.helperBundleId = c[\"helper-bundle-id\"]\n }\n delete c[\"helper-bundle-id\"]\n c.mac = mac\n changes.push({ key: \"helper-bundle-id\", description: \"moved helper-bundle-id → mac.helperBundleId\" })\n }\n\n // ── 10. squirrelWindows.noMsi → squirrelWindows.msi (inverted) ────────────\n if (c.squirrelWindows != null && typeof c.squirrelWindows === \"object\" && \"noMsi\" in c.squirrelWindows) {\n const sq: Record<string, any> = c.squirrelWindows\n if (!(\"msi\" in sq)) {\n sq.msi = !sq.noMsi\n }\n delete sq.noMsi\n changes.push({ key: \"squirrelWindows.noMsi\", description: \"replaced squirrelWindows.noMsi → squirrelWindows.msi (inverted boolean)\" })\n }\n\n // ── 11. asar consolidation ───────────────────────────────────────────────\n // Move root-level asarUnpack / disableSanityCheckAsar / disableAsarIntegrity\n // into the asar object. Skip entirely when asar === false (all would be no-ops).\n if (c.asar !== false) {\n const asarSub: Record<string, any> = typeof c.asar === \"object\" && c.asar != null ? { ...c.asar } : {}\n if (\"asarUnpack\" in c) {\n asarSub.unpack = mergeAsarUnpack(asarSub.unpack, c.asarUnpack)\n delete c.asarUnpack\n changes.push({ key: \"asarUnpack\", description: \"moved asarUnpack → asar.unpack\" })\n }\n if (\"disableSanityCheckAsar\" in c) {\n asarSub.disableSanityCheck = c.disableSanityCheckAsar\n delete c.disableSanityCheckAsar\n changes.push({ key: \"disableSanityCheckAsar\", description: \"moved disableSanityCheckAsar → asar.disableSanityCheck\" })\n }\n if (\"disableAsarIntegrity\" in c) {\n asarSub.disableIntegrity = c.disableAsarIntegrity\n delete c.disableAsarIntegrity\n changes.push({ key: \"disableAsarIntegrity\", description: \"moved disableAsarIntegrity → asar.disableIntegrity\" })\n }\n if (c.asar === true) {\n if (Object.keys(asarSub).length > 0) {\n c.asar = asarSub\n } else {\n delete c.asar\n }\n changes.push({ key: \"asar\", description: \"replaced asar: true with asar object (true is no longer a valid value)\" })\n } else if (Object.keys(asarSub).length > 0) {\n c.asar = asarSub\n }\n }\n\n // ── 12. azureSignOptions: index-signature extra keys → additionalMetadata ─\n if (c.win?.azureSignOptions != null) {\n const azure: Record<string, any> = c.win.azureSignOptions\n const extra: Record<string, string> = {}\n for (const [k, v] of Object.entries(azure)) {\n if (!AZURE_KNOWN_FIELDS.has(k) && typeof v === \"string\") {\n extra[k] = v\n delete azure[k]\n }\n }\n if (Object.keys(extra).length > 0) {\n azure.additionalMetadata = { ...(azure.additionalMetadata ?? {}), ...extra }\n changes.push({\n key: \"win.azureSignOptions\",\n description: `moved extra keys [${Object.keys(extra).join(\", \")}] into win.azureSignOptions.additionalMetadata`,\n })\n }\n }\n\n return { migrated: c, changes, warnings, modified: changes.length > 0 || warnings.length > 0 }\n}\n\nfunction mergeAsarUnpack(existing: string | string[] | undefined, incoming: string | string[]): string | string[] {\n if (existing == null) {\n return incoming\n }\n const arr = (Array.isArray(existing) ? existing : [existing]).concat(Array.isArray(incoming) ? incoming : [incoming])\n return arr.length === 1 ? arr[0] : arr\n}\n\nfunction migratePublishEntries(parent: Record<string, any>, key: string, changes: MigrationChange[]) {\n const entries: any[] = Array.isArray(parent[key]) ? parent[key] : [parent[key]]\n let changed = false\n for (const entry of entries) {\n if (entry != null && entry.provider === \"github\" && \"vPrefixedTagName\" in entry) {\n entry.tagNamePrefix = entry.vPrefixedTagName === false ? \"\" : \"v\"\n delete entry.vPrefixedTagName\n changed = true\n }\n if (entry != null && entry.provider === \"gitlab\" && \"vPrefixedTagName\" in entry) {\n delete entry.vPrefixedTagName\n changed = true\n }\n }\n if (changed) {\n changes.push({ key: `${key}[].vPrefixedTagName`, description: \"replaced vPrefixedTagName with tagNamePrefix on GitHub publish entries; removed from GitLab entries\" })\n }\n}\n\n// snap bases recognized by the v27 snapcraft config. \"custom\" uses an inline/path yaml\n// and must be moved verbatim rather than nested under a per-base sub-key.\nconst SNAP_BASES = new Set([\"core18\", \"core20\", \"core22\", \"core24\", \"custom\"])\n\n/**\n * Migrates the removed flat `snap` config into the v27 `snapcraft` shape:\n * { snapcraft: { base, [base]: { ...rest } } }\n * When no `base` is present, defaults to \"core20\" (the v27 1-to-1 migration target) and warns.\n */\nfunction migrateSnap(c: Record<string, any>, changes: MigrationChange[], warnings: string[]) {\n const snap = c.snap\n delete c.snap\n\n if (snap == null || typeof snap !== \"object\") {\n changes.push({ key: \"snap\", description: \"removed empty snap config (use snapcraft in v27)\" })\n return\n }\n\n const snapcraft: Record<string, any> = { ...(c.snapcraft ?? {}) }\n const rest: Record<string, any> = { ...snap }\n let base: string | undefined = rest.base\n delete rest.base\n\n if (base === \"custom\") {\n // base: custom carries yamlPath / inline yaml — move verbatim, no per-base nesting\n snapcraft.base = \"custom\"\n Object.assign(snapcraft, rest)\n c.snapcraft = snapcraft\n changes.push({ key: \"snap\", description: \"moved snap (base: custom) → snapcraft verbatim\" })\n return\n }\n\n let assumed = false\n if (base == null || !SNAP_BASES.has(base)) {\n if (base != null) {\n warnings.push(`snap config had an unrecognized base \"${base}\"; assumed \"core20\". Verify the snapcraft.base value (core18/core20/core22/core24/custom).`)\n }\n base = \"core20\"\n assumed = true\n }\n\n snapcraft.base = base\n snapcraft[base] = { ...(snapcraft[base] ?? {}), ...rest }\n c.snapcraft = snapcraft\n changes.push({ key: \"snap\", description: `moved snap → snapcraft.${base}${assumed ? \" (base defaulted to core20)\" : \"\"}` })\n if (assumed && warnings.every(w => !w.includes(\"unrecognized base\"))) {\n warnings.push('snap config had no \"base\"; assumed \"core20\" for snapcraft. Verify and adjust the base if needed (core18/core20/core22/core24).')\n }\n}\n\n// ─── File I/O ─────────────────────────────────────────────────────────────────\n\ntype ConfigFormat = \"json\" | \"json5\" | \"yaml\" | \"toml\" | \"js\"\n\nfunction formatFromPath(p: string): ConfigFormat {\n const ext = path.extname(p).toLowerCase()\n if (ext === \".json\") {\n return \"json\"\n }\n if (ext === \".json5\") {\n return \"json5\"\n }\n if (ext === \".yml\" || ext === \".yaml\") {\n return \"yaml\"\n }\n if (ext === \".toml\") {\n return \"toml\"\n }\n return \"js\"\n}\n\nfunction serializeConfig(content: Record<string, any>, format: ConfigFormat, originalText: string): string {\n if (format === \"yaml\") {\n const yaml = _require(\"js-yaml\") as { dump(obj: unknown, opts?: { lineWidth?: number; quotingType?: string; forceQuotes?: boolean }): string }\n return yaml.dump(content, { lineWidth: 120, quotingType: '\"', forceQuotes: false })\n }\n // JSON and JSON5: detect original indent level\n const indentMatch = originalText.match(/^{\\s*\\n( +)/m)\n const indent = indentMatch ? indentMatch[1].length : 2\n return JSON.stringify(content, null, indent) + \"\\n\"\n}\n\ninterface FoundConfig {\n /** Absolute path to the file, or null when config is in package.json */\n readonly configFile: string | null\n readonly isPackageJson: boolean\n readonly format: ConfigFormat\n readonly rawText: string\n readonly parsed: Record<string, any>\n /** package.json only: a root-level `directories` key was folded into `build.directories` */\n readonly rootDirectoriesMoved?: boolean\n}\n\nasync function findAndLoadConfig(projectDir: string, explicitConfigPath?: string | null): Promise<FoundConfig | null> {\n if (explicitConfigPath != null) {\n const abs = path.resolve(projectDir, explicitConfigPath)\n const text = await readFileSafe(abs)\n if (text == null) {\n log.error({ configFile: abs }, \"config file not found\")\n return null\n }\n const format = formatFromPath(abs)\n return { configFile: abs, isPackageJson: false, format, rawText: text, parsed: parseConfig(text, format) }\n }\n\n // Check package.json build key first\n const pkgPath = path.join(projectDir, \"package.json\")\n const pkgText = await readFileSafe(pkgPath)\n if (pkgText != null) {\n const pkg = JSON.parse(pkgText)\n if (pkg.build != null && typeof pkg.build === \"object\") {\n const build: Record<string, any> = pkg.build\n let rootDirectoriesMoved = false\n if (pkg.directories != null && build.directories == null) {\n build.directories = pkg.directories\n rootDirectoriesMoved = true\n }\n return { configFile: null, isPackageJson: true, format: \"json\", rawText: pkgText, parsed: build, rootDirectoriesMoved }\n }\n }\n\n // Standalone config files\n const candidates = [\".yml\", \".yaml\", \".json\", \".json5\", \".toml\", \".js\", \".cjs\", \".mjs\", \".ts\"].map(ext => path.join(projectDir, `electron-builder${ext}`))\n for (const candidate of candidates) {\n const text = await readFileSafe(candidate)\n if (text != null) {\n const format = formatFromPath(candidate)\n return { configFile: candidate, isPackageJson: false, format, rawText: text, parsed: parseConfig(text, format) }\n }\n }\n\n return null\n}\n\nfunction parseConfig(text: string, format: ConfigFormat): Record<string, any> {\n if (format === \"js\") {\n // Programmatic configs (JS/TS/MJS/CJS) can't be parsed; migrateSchema will bail with manual steps\n return {}\n }\n if (format === \"yaml\") {\n const yaml = _require(\"js-yaml\") as { load(text: string): unknown }\n return yaml.load(text) as Record<string, any>\n }\n if (format === \"json5\") {\n const json5 = _require(\"json5\") as { parse(text: string): any }\n return json5.parse(text)\n }\n if (format === \"toml\") {\n const toml = _require(\"toml\") as { parse(text: string): any }\n return toml.parse(text)\n }\n return JSON.parse(text)\n}\n\nasync function readFileSafe(p: string): Promise<string | null> {\n return fs.readFile(p, \"utf8\").catch(e => (e.code === \"ENOENT\" || e.code === \"ENOTDIR\" ? null : Promise.reject(e)))\n}\n\nasync function writeBackConfig(found: FoundConfig, migrated: Record<string, any>, projectDir: string): Promise<string> {\n if (found.isPackageJson) {\n const pkgPath = path.join(projectDir, \"package.json\")\n const pkg = JSON.parse(found.rawText)\n pkg.build = migrated\n if (found.rootDirectoriesMoved) {\n delete pkg.directories\n }\n const indentMatch = found.rawText.match(/^{\\s*\\n( +)/m)\n const indent = indentMatch ? indentMatch[1].length : 2\n await fs.writeFile(pkgPath, JSON.stringify(pkg, null, indent) + \"\\n\", \"utf8\")\n return \"package.json\"\n }\n const serialized = serializeConfig(migrated, found.format, found.rawText)\n await fs.writeFile(found.configFile!, serialized, \"utf8\")\n return path.relative(projectDir, found.configFile!)\n}\n\n// ─── CLI command ──────────────────────────────────────────────────────────────\n\nexport function configureMigrateSchemaCommand(yargs: Argv): Argv {\n return yargs\n .option(\"config\", {\n alias: \"c\",\n type: \"string\",\n description: \"Path to config file (auto-detected if omitted)\",\n })\n .option(\"project-dir\", {\n type: \"string\",\n description: \"Project root directory\",\n default: process.cwd(),\n })\n .option(\"dry-run\", {\n alias: \"n\",\n type: \"boolean\",\n default: false,\n description: \"Print what would change without writing\",\n })\n}\n\nexport async function migrateSchema(args: any): Promise<void> {\n const projectDir: string = path.resolve((args[\"project-dir\"] as string | undefined) ?? process.cwd())\n const configPath: string | null = (args.config as string | undefined) ?? null\n const dryRun: boolean = (args[\"dry-run\"] as boolean | undefined) ?? false\n\n const found = await findAndLoadConfig(projectDir, configPath)\n if (found == null) {\n log.error(null, \"no config found — checked package.json build key and electron-builder.{yml,yaml,json,json5,toml,js,cjs,ts}\")\n process.exit(1)\n }\n\n const location = found.isPackageJson ? 'package.json (\"build\" key)' : path.relative(projectDir, found.configFile!)\n log.info({ file: location }, \"loaded config\")\n\n // Programmatic formats can't be auto-rewritten\n if (found.format === \"js\") {\n log.warn({ file: location }, \"programmatic config cannot be auto-migrated; apply these changes manually:\")\n printManualSteps()\n return\n }\n\n // TOML: can parse but not serialize (toml lib is read-only)\n const isToml = found.format === \"toml\"\n\n const result = migrateConfig(found.parsed)\n const { migrated, warnings } = result\n const changes = [...result.changes]\n if (found.rootDirectoriesMoved) {\n changes.push({ key: \"directories\", description: \"moved package.json root-level directories → build.directories\" })\n }\n const modified = result.modified || found.rootDirectoriesMoved === true\n\n if (!modified) {\n log.info(null, \"config is already up to date — no changes needed\")\n return\n }\n\n for (const change of changes) {\n log.info({ key: change.key }, change.description)\n }\n for (const warning of warnings) {\n log.warn(null, warning)\n }\n\n if (isToml) {\n log.warn({ file: location }, \"TOML configs cannot be automatically rewritten; apply the changes above manually\")\n return\n }\n\n if (dryRun) {\n log.info(null, \"dry run — no files written\")\n return\n }\n\n const written = await writeBackConfig(found, migrated, projectDir)\n log.info({ file: written }, \"wrote migrated config\")\n\n if (found.format === \"json5\") {\n log.warn(null, \"JSON5 was re-serialized as JSON — comments were not preserved\")\n }\n}\n\nfunction printManualSteps() {\n const steps = [\n \"\",\n \"• Remove electronCompile\",\n \"• Remove framework, nodeVersion, launchUiVersion\",\n \"• Rename npmSkipBuildFromSource → buildDependenciesFromSource\",\n \"• Move buildDependenciesFromSource, nodeGypRebuild, npmRebuild, nativeRebuilder into nativeModules (rename nativeRebuilder → rebuildMode)\",\n \"• Rename asar-unpack / asar-unpack-dir / asar.unpack / asar.unpackDir → asarUnpack; then move asarUnpack → asar.unpack\",\n \"• Move disableSanityCheckAsar → asar.disableSanityCheck\",\n \"• Move disableAsarIntegrity → asar.disableIntegrity\",\n \"• Replace asar: true with an asar object (e.g. asar: {} or omit entirely - asar is enabled by default)\",\n \"• Remove appImage.systemIntegration\",\n \"• Rename snap → snapcraft; nest options under a base-named sub-key (default base: core20)\",\n \"• Replace vPrefixedTagName with tagNamePrefix on GitHub publish entries ('v' is the default prefix - just like before - but can now be customized with tagNamePrefix)\",\n \"• Move extra keys in win.azureSignOptions into an 'additionalMetadata' object\",\n \"• Move helper-bundle-id → mac.helperBundleId\",\n \"• Replace squirrelWindows.noMsi with squirrelWindows.msi (inverted)\",\n \"• Move root-level package.json directories → build.directories\",\n \"\",\n \"• For programmatic configs (JS/TS/MJS/CJS), apply the above changes manually to your config object\",\n \"• For additional guidance, check the migration guide: https://www.electron.build/docs/migration/v26-to-v27\",\n ]\n for (const step of steps) {\n process.stdout.write(` ${step}\\n`)\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "electron-builder",
3
3
  "description": "A complete solution to package and build a ready for distribution Electron app for MacOS, Windows and Linux with “auto update” support out of the box",
4
- "version": "27.0.0-alpha.0",
4
+ "version": "27.0.0-alpha.1",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "exports": {
@@ -72,10 +72,10 @@
72
72
  "lazy-val": "^1.0.5",
73
73
  "simple-update-notifier": "2.0.0",
74
74
  "yargs": "^17.6.2",
75
- "app-builder-lib": "27.0.0-alpha.0",
76
- "dmg-builder": "27.0.0-alpha.0",
77
- "builder-util-runtime": "10.0.0-alpha.0",
78
- "builder-util": "27.0.0-alpha.0"
75
+ "app-builder-lib": "27.0.0-alpha.1",
76
+ "builder-util": "27.0.0-alpha.0",
77
+ "dmg-builder": "27.0.0-alpha.1",
78
+ "builder-util-runtime": "10.0.0-alpha.0"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@types/fs-extra": "9.0.13",