app-builder-lib 26.15.7 → 26.16.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 (63) hide show
  1. package/out/codeSign/macCodeSign.js +5 -3
  2. package/out/codeSign/macCodeSign.js.map +1 -1
  3. package/out/codeSign/windowsCodeSign.js +0 -3
  4. package/out/codeSign/windowsCodeSign.js.map +1 -1
  5. package/out/codeSign/windowsSignToolManager.js +4 -1
  6. package/out/codeSign/windowsSignToolManager.js.map +1 -1
  7. package/out/configuration.d.ts +32 -0
  8. package/out/configuration.js.map +1 -1
  9. package/out/electron/ElectronFramework.d.ts +2 -1
  10. package/out/electron/ElectronFramework.js +13 -5
  11. package/out/electron/ElectronFramework.js.map +1 -1
  12. package/out/electron/electronMac.js +1 -5
  13. package/out/electron/electronMac.js.map +1 -1
  14. package/out/macPackager.d.ts +7 -2
  15. package/out/macPackager.js +40 -11
  16. package/out/macPackager.js.map +1 -1
  17. package/out/node-module-collector/nodeModulesCollector.d.ts +11 -1
  18. package/out/node-module-collector/nodeModulesCollector.js +28 -5
  19. package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
  20. package/out/node-module-collector/pnpmNodeModulesCollector.js +3 -1
  21. package/out/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
  22. package/out/packager.d.ts +2 -0
  23. package/out/packager.js +15 -0
  24. package/out/packager.js.map +1 -1
  25. package/out/platformPackager.d.ts +1 -0
  26. package/out/platformPackager.js +3 -0
  27. package/out/platformPackager.js.map +1 -1
  28. package/out/targets/AppxTarget.js +5 -5
  29. package/out/targets/AppxTarget.js.map +1 -1
  30. package/out/targets/MsiTarget.js +8 -11
  31. package/out/targets/MsiTarget.js.map +1 -1
  32. package/out/targets/appimage/appImageUtil.d.ts +1 -1
  33. package/out/targets/appimage/appImageUtil.js +3 -3
  34. package/out/targets/appimage/appImageUtil.js.map +1 -1
  35. package/out/targets/appimage/appLauncher.js +3 -9
  36. package/out/targets/appimage/appLauncher.js.map +1 -1
  37. package/out/targets/blockmap/blockmap.js +2 -2
  38. package/out/targets/blockmap/blockmap.js.map +1 -1
  39. package/out/targets/nsis/NsisTarget.d.ts +2 -2
  40. package/out/targets/nsis/NsisTarget.js +9 -1
  41. package/out/targets/nsis/NsisTarget.js.map +1 -1
  42. package/out/targets/nsis/nsisOptions.d.ts +2 -0
  43. package/out/targets/nsis/nsisOptions.js.map +1 -1
  44. package/out/targets/nsis/nsisUtil.d.ts +5 -2
  45. package/out/targets/nsis/nsisUtil.js +48 -24
  46. package/out/targets/nsis/nsisUtil.js.map +1 -1
  47. package/out/toolsets/icons.js +2 -2
  48. package/out/toolsets/icons.js.map +1 -1
  49. package/out/toolsets/linux.js +3 -3
  50. package/out/toolsets/linux.js.map +1 -1
  51. package/out/util/appFileCopier.d.ts +21 -0
  52. package/out/util/appFileCopier.js +58 -0
  53. package/out/util/appFileCopier.js.map +1 -1
  54. package/out/util/electronGet.d.ts +46 -0
  55. package/out/util/electronGet.js +174 -24
  56. package/out/util/electronGet.js.map +1 -1
  57. package/out/version.d.ts +1 -1
  58. package/out/version.js +1 -1
  59. package/out/version.js.map +1 -1
  60. package/package.json +8 -8
  61. package/scheme.json +20 -1
  62. package/templates/appx/appxmanifest.xml +1 -2
  63. package/templates/nsis/include/allowOnlyOneInstallerInstance.nsh +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"MsiTarget.js","sourceRoot":"","sources":["../../src/targets/MsiTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, asArray, log, walk } from \"builder-util\"\nimport { deepAssign, UUID } from \"builder-util-runtime\"\nimport { createHash } from \"crypto\"\nimport * as ejs from \"ejs\"\nimport { readFile, writeFile } from \"fs/promises\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { MsiOptions } from \"../\"\nimport { getBinFromUrl } from \"../binDownload\"\nimport { Target } from \"../core\"\nimport { DesktopShortcutCreationPolicy, FinalCommonWindowsInstallerOptions, getEffectiveOptions } from \"../options/CommonWindowsInstallerConfiguration\"\nimport { normalizeExt } from \"../platformPackager\"\nimport { getTemplatePath } from \"../util/pathManager\"\nimport { VmManager } from \"../vm/vm\"\nimport { WineVmManager } from \"../vm/WineVm\"\nimport { WinPackager } from \"../winPackager\"\nimport { withToolsetLock } from \"../util/toolsetLock\"\nimport { createStageDir, getWindowsInstallationDirName } from \"./targetUtil\"\n\nconst ELECTRON_BUILDER_UPGRADE_CODE_NS_UUID = UUID.parse(\"d752fe43-5d44-44d5-9fc9-6dd1bf19d5cc\")\nconst ROOT_DIR_ID = \"APPLICATIONFOLDER\"\n\n// WiX doesn't support Mono, so, dontnet462 is required to be installed for wine (preinstalled in our bundled wine)\nexport default class MsiTarget extends Target {\n protected readonly vm = process.platform === \"win32\" ? new VmManager() : new WineVmManager(this.packager.config.toolsets?.wine)\n\n readonly options: MsiOptions = deepAssign(this.packager.platformSpecificBuildOptions, this.packager.config.msi)\n\n constructor(\n protected readonly packager: WinPackager,\n readonly outDir: string,\n name = \"msi\",\n isAsyncSupported = true\n ) {\n super(name, isAsyncSupported)\n }\n\n protected projectTemplate = new Lazy<(data: any) => string>(async () => {\n const template = (await readFile(path.join(getTemplatePath(this.name), \"template.xml\"), \"utf8\"))\n .replace(/{{/g, \"<%\")\n .replace(/}}/g, \"%>\")\n .replace(/\\${([^}]+)}/g, \"<%=$1%>\")\n return ejs.compile(template)\n })\n\n /**\n * A product-specific string that can be used in an [MSI Identifier](https://docs.microsoft.com/en-us/windows/win32/msi/identifier).\n */\n private get productMsiIdPrefix() {\n const sanitizedId = this.packager.appInfo.productFilename.replace(/[^\\w.]/g, \"\").replace(/^[^A-Za-z_]+/, \"\")\n return sanitizedId.length > 0 ? sanitizedId : \"App\" + this.upgradeCode.replace(/-/g, \"\")\n }\n\n protected get iconId() {\n return `${this.productMsiIdPrefix}Icon.exe`\n }\n\n protected get upgradeCode(): string {\n return (this.options.upgradeCode || UUID.v5(this.packager.appInfo.id, ELECTRON_BUILDER_UPGRADE_CODE_NS_UUID)).toUpperCase()\n }\n\n async build(appOutDir: string, arch: Arch) {\n const packager = this.packager\n const artifactName = packager.expandArtifactBeautyNamePattern(this.options, \"msi\", arch)\n const artifactPath = path.join(this.outDir, artifactName)\n await packager.info.emitArtifactBuildStarted({\n targetPresentableName: \"MSI\",\n file: artifactPath,\n arch,\n })\n\n const stageDir = await createStageDir(this, packager, arch)\n const vm = this.vm\n\n const commonOptions = getEffectiveOptions(this.options, this.packager)\n\n // wix 4.0.0.5512.2 doesn't support the arm64 architecture so default to x64 when building for arm64.\n // This will result in an x64 MSI installer that installs an arm64 version of the application. This is a\n // stopgap until the electron-builder-binaries wix version is upgraded to a version that supports arm64:\n // https://github.com/electron-userland/electron-builder/issues/6077\n const wixArch = arch == Arch.arm64 ? Arch.x64 : arch\n\n const projectFile = stageDir.getTempFile(\"project.wxs\")\n const objectFiles = [\"project.wixobj\"]\n await writeFile(projectFile, await this.writeManifest(appOutDir, wixArch, commonOptions))\n\n await packager.info.emitMsiProjectCreated(projectFile)\n\n // noinspection SpellCheckingInspection\n const vendorPath = await getBinFromUrl(\"wix-4.0.0.5512.2\", \"wix-4.0.0.5512.2.7z\", \"fe677fcd837b18c9b912985d91636bbd8a1e800c3b3a6a841b6f96e89624e839\")\n\n // noinspection SpellCheckingInspection\n const candleArgs = [\"-arch\", wixArch === Arch.ia32 ? \"x86\" : \"x64\", `-dappDir=${vm.toVmFile(appOutDir)}`].concat(this.getCommonWixArgs())\n candleArgs.push(\"project.wxs\")\n await withToolsetLock(async () => {\n await vm.exec(vm.toVmFile(path.join(vendorPath, \"candle.exe\")), candleArgs, {\n cwd: stageDir.dir,\n })\n await this.light(objectFiles, vm, artifactPath, appOutDir, vendorPath, stageDir.dir)\n })\n\n await stageDir.cleanup()\n\n await packager.signIf(artifactPath)\n\n await packager.info.emitArtifactBuildCompleted({\n file: artifactPath,\n packager,\n arch,\n safeArtifactName: packager.computeSafeArtifactName(artifactName, \"msi\"),\n target: this,\n isWriteUpdateInfo: false,\n })\n }\n\n private async light(objectFiles: Array<string>, vm: VmManager, artifactPath: string, appOutDir: string, vendorPath: string, tempDir: string) {\n // noinspection SpellCheckingInspection\n const lightArgs = [\n \"-out\",\n vm.toVmFile(artifactPath),\n \"-v\",\n // https://github.com/wixtoolset/issues/issues/5169\n \"-spdb\",\n // https://sourceforge.net/p/wix/bugs/2405/\n // error LGHT1076 : ICE61: This product should remove only older versions of itself. The Maximum version is not less than the current product. (1.1.0.42 1.1.0.42)\n \"-sw1076\",\n `-dappDir=${vm.toVmFile(appOutDir)}`,\n // \"-dcl:high\",\n ]\n .concat(this.getCommonWixArgs())\n .concat(this.getAdditionalLightArgs())\n\n // http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Build-3-5-2229-0-give-me-the-following-error-error-LGHT0216-An-unexpected-Win32-exception-with-errorn-td5707443.html\n if (process.platform !== \"win32\") {\n // noinspection SpellCheckingInspection\n lightArgs.push(\"-sval\")\n }\n\n if (this.options.oneClick === false) {\n lightArgs.push(\"-ext\", \"WixUIExtension\")\n }\n\n // objectFiles - only filenames, we set current directory to our temp stage dir\n lightArgs.push(...objectFiles)\n await vm.exec(vm.toVmFile(path.join(vendorPath, \"light.exe\")), lightArgs, {\n cwd: tempDir,\n })\n }\n\n private getAdditionalLightArgs() {\n const args: Array<string> = []\n if (this.options.additionalLightArgs != null) {\n args.push(...this.options.additionalLightArgs)\n }\n return args\n }\n\n private getCommonWixArgs() {\n const args: Array<string> = [\"-pedantic\"]\n if (this.options.warningsAsErrors !== false) {\n args.push(\"-wx\")\n }\n if (this.options.additionalWixArgs != null) {\n args.push(...this.options.additionalWixArgs)\n }\n return args\n }\n\n protected async writeManifest(appOutDir: string, wixArch: Arch, commonOptions: FinalCommonWindowsInstallerOptions) {\n const appInfo = this.packager.appInfo\n const { files, dirs } = await this.computeFileDeclaration(appOutDir)\n const options = this.options\n\n return (await this.projectTemplate.value)({\n ...(await this.getBaseOptions(commonOptions)),\n isCreateDesktopShortcut: commonOptions.isCreateDesktopShortcut !== DesktopShortcutCreationPolicy.NEVER,\n isRunAfterFinish: options.runAfterFinish !== false,\n // https://stackoverflow.com/questions/1929038/compilation-error-ice80-the-64bitcomponent-uses-32bitdirectory\n programFilesId: wixArch === Arch.x64 ? \"ProgramFiles64Folder\" : \"ProgramFilesFolder\",\n // wix in the name because special wix format can be used in the name\n installationDirectoryWixName: getWindowsInstallationDirName(appInfo, commonOptions.isAssisted || commonOptions.isPerMachine === true),\n dirs,\n files,\n })\n }\n\n protected async getBaseOptions(commonOptions: FinalCommonWindowsInstallerOptions): Promise<any> {\n const appInfo = this.packager.appInfo\n const iconPath = await this.packager.getIconPath()\n const compression = this.packager.compression\n\n const companyName = appInfo.companyName\n if (!companyName) {\n log.warn(`Manufacturer is not set for MSI — please set \"author\" in the package.json`)\n }\n\n return {\n ...commonOptions,\n iconPath: iconPath == null ? null : this.vm.toVmFile(iconPath),\n iconId: this.iconId,\n compressionLevel: compression === \"store\" ? \"none\" : \"high\",\n version: appInfo.getVersionInWeirdWindowsForm(),\n productName: appInfo.productName,\n upgradeCode: this.upgradeCode,\n manufacturer: companyName || appInfo.productName,\n appDescription: appInfo.description,\n }\n }\n\n private async computeFileDeclaration(appOutDir: string) {\n const appInfo = this.packager.appInfo\n let isRootDirAddedToRemoveTable = false\n const dirNames = new Set<string>()\n const dirs: Array<string> = []\n const fileSpace = \" \".repeat(6)\n const commonOptions = getEffectiveOptions(this.options, this.packager)\n const files = (await walk(appOutDir)).map(file => {\n const packagePath = file.substring(appOutDir.length + 1)\n\n const lastSlash = packagePath.lastIndexOf(path.sep)\n const fileName = lastSlash > 0 ? packagePath.substring(lastSlash + 1) : packagePath\n let directoryId: string | null = null\n let dirName = \"\"\n // Wix Directory.FileSource doesn't work - https://stackoverflow.com/questions/21519388/wix-filesource-confusion\n if (lastSlash > 0) {\n // This Name attribute may also define multiple directories using the inline directory syntax.\n // For example, \"ProgramFilesFolder:\\My Company\\My Product\\bin\" would create a reference to a Directory element with Id=\"ProgramFilesFolder\" then create directories named \"My Company\" then \"My Product\" then \"bin\" nested beneath each other.\n // This syntax is a shortcut to defining each directory in an individual Directory element.\n dirName = packagePath.substring(0, lastSlash)\n // https://github.com/electron-userland/electron-builder/issues/3027\n directoryId = \"d\" + createHash(\"md5\").update(dirName).digest(\"base64\").replace(/\\//g, \"_\").replace(/\\+/g, \".\").replace(/=+$/, \"\")\n if (!dirNames.has(dirName)) {\n dirNames.add(dirName)\n dirs.push(`<Directory Id=\"${directoryId}\" Name=\"${ROOT_DIR_ID}:\\\\${dirName.replace(/\\//g, \"\\\\\")}\\\\\"/>`)\n }\n } else if (!isRootDirAddedToRemoveTable) {\n isRootDirAddedToRemoveTable = true\n }\n\n // since RegistryValue can be part of Component, *** *** *** *** *** *** *** *** *** wix cannot auto generate guid\n // https://stackoverflow.com/questions/1405100/change-my-component-guid-in-wix\n let result = `<Component${directoryId === null ? \"\" : ` Directory=\"${directoryId}\"`}>`\n result += `\\n${fileSpace} <File Name=\"${xmlAttr(fileName)}\" Source=\"$(var.appDir)${path.sep}${xmlAttr(packagePath)}\" ReadOnly=\"yes\" KeyPath=\"yes\"`\n const isMainExecutable = packagePath === `${appInfo.productFilename}.exe`\n if (isMainExecutable) {\n result += ' Id=\"mainExecutable\"'\n } else if (directoryId === null) {\n result += ` Id=\"${path.basename(packagePath)}_f\"`\n }\n\n const isCreateDesktopShortcut = commonOptions.isCreateDesktopShortcut !== DesktopShortcutCreationPolicy.NEVER\n if (isMainExecutable && (isCreateDesktopShortcut || commonOptions.isCreateStartMenuShortcut)) {\n result += `>\\n`\n const shortcutName = commonOptions.shortcutName\n if (isCreateDesktopShortcut) {\n result += `${fileSpace} <Shortcut Id=\"desktopShortcut\" Directory=\"DesktopFolder\" Name=\"${xmlAttr(\n shortcutName\n )}\" WorkingDirectory=\"APPLICATIONFOLDER\" Advertise=\"yes\" Icon=\"${this.iconId}\"/>\\n`\n }\n\n const hasMenuCategory = commonOptions.menuCategory != null\n const startMenuShortcutDirectoryId = hasMenuCategory ? \"AppProgramMenuDir\" : \"ProgramMenuFolder\"\n if (commonOptions.isCreateStartMenuShortcut) {\n if (hasMenuCategory) {\n dirs.push(`<Directory Id=\"${startMenuShortcutDirectoryId}\" Name=\"ProgramMenuFolder:\\\\${commonOptions.menuCategory}\\\\\"/>`)\n }\n result += `${fileSpace} <Shortcut Id=\"startMenuShortcut\" Directory=\"${startMenuShortcutDirectoryId}\" Name=\"${xmlAttr(\n shortcutName\n )}\" WorkingDirectory=\"APPLICATIONFOLDER\" Advertise=\"yes\" Icon=\"${this.iconId}\">\\n`\n result += `${fileSpace} <ShortcutProperty Key=\"System.AppUserModel.ID\" Value=\"${xmlAttr(this.packager.appInfo.id)}\"/>\\n`\n result += `${fileSpace} </Shortcut>\\n`\n }\n result += `${fileSpace}</File>`\n\n if (hasMenuCategory) {\n result += `<RemoveFolder Id=\"${startMenuShortcutDirectoryId}\" Directory=\"${startMenuShortcutDirectoryId}\" On=\"uninstall\"/>\\n`\n }\n } else {\n result += `/>`\n }\n\n const fileAssociations = this.packager.fileAssociations\n if (isMainExecutable && fileAssociations.length !== 0) {\n for (const item of fileAssociations) {\n const extensions = asArray(item.ext).map(normalizeExt)\n for (const ext of extensions) {\n result += `${fileSpace} <ProgId Id=\"${this.productMsiIdPrefix}.${ext}\" Advertise=\"yes\" Icon=\"${this.iconId}\" ${\n item.description ? `Description=\"${item.description}\"` : \"\"\n }>\\n`\n result += `${fileSpace} <Extension Id=\"${ext}\" Advertise=\"yes\">\\n`\n result += `${fileSpace} <Verb Id=\"open\" Command=\"Open with ${xmlAttr(this.packager.appInfo.productName)}\" Argument=\"&quot;%1&quot;\"/>\\n`\n result += `${fileSpace} </Extension>\\n`\n result += `${fileSpace} </ProgId>\\n`\n }\n }\n }\n\n return `${result}\\n${fileSpace}</Component>`\n })\n\n return { dirs: listToString(dirs, 2), files: listToString(files, 3) }\n }\n}\n\nfunction listToString(list: Array<string>, indentLevel: number) {\n const space = \" \".repeat(indentLevel * 2)\n return list.join(`\\n${space}`)\n}\n\nfunction xmlAttr(str: string) {\n return str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\")\n}\n"]}
1
+ {"version":3,"file":"MsiTarget.js","sourceRoot":"","sources":["../../src/targets/MsiTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, asArray, log, walk, escapeForXml } from \"builder-util\"\nimport { deepAssign, UUID } from \"builder-util-runtime\"\nimport { createHash } from \"crypto\"\nimport * as ejs from \"ejs\"\nimport { readFile, writeFile } from \"fs/promises\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { MsiOptions } from \"../\"\nimport { getBinFromUrl } from \"../binDownload\"\nimport { Target } from \"../core\"\nimport { DesktopShortcutCreationPolicy, FinalCommonWindowsInstallerOptions, getEffectiveOptions } from \"../options/CommonWindowsInstallerConfiguration\"\nimport { normalizeExt } from \"../platformPackager\"\nimport { getTemplatePath } from \"../util/pathManager\"\nimport { VmManager } from \"../vm/vm\"\nimport { WineVmManager } from \"../vm/WineVm\"\nimport { WinPackager } from \"../winPackager\"\nimport { withToolsetLock } from \"../util/toolsetLock\"\nimport { createStageDir, getWindowsInstallationDirName } from \"./targetUtil\"\n\nconst ELECTRON_BUILDER_UPGRADE_CODE_NS_UUID = UUID.parse(\"d752fe43-5d44-44d5-9fc9-6dd1bf19d5cc\")\nconst ROOT_DIR_ID = \"APPLICATIONFOLDER\"\n\n// WiX doesn't support Mono, so, dontnet462 is required to be installed for wine (preinstalled in our bundled wine)\nexport default class MsiTarget extends Target {\n protected readonly vm = process.platform === \"win32\" ? new VmManager() : new WineVmManager(this.packager.config.toolsets?.wine)\n\n readonly options: MsiOptions = deepAssign(this.packager.platformSpecificBuildOptions, this.packager.config.msi)\n\n constructor(\n protected readonly packager: WinPackager,\n readonly outDir: string,\n name = \"msi\",\n isAsyncSupported = true\n ) {\n super(name, isAsyncSupported)\n }\n\n protected projectTemplate = new Lazy<(data: any) => string>(async () => {\n const template = (await readFile(path.join(getTemplatePath(this.name), \"template.xml\"), \"utf8\"))\n .replace(/{{/g, \"<%\")\n .replace(/}}/g, \"%>\")\n .replace(/\\${([^}]+)}/g, \"<%=$1%>\")\n return ejs.compile(template)\n })\n\n /**\n * A product-specific string that can be used in an [MSI Identifier](https://docs.microsoft.com/en-us/windows/win32/msi/identifier).\n */\n private get productMsiIdPrefix() {\n const sanitizedId = this.packager.appInfo.productFilename.replace(/[^\\w.]/g, \"\").replace(/^[^A-Za-z_]+/, \"\")\n return sanitizedId.length > 0 ? sanitizedId : \"App\" + this.upgradeCode.replace(/-/g, \"\")\n }\n\n protected get iconId() {\n return `${this.productMsiIdPrefix}Icon.exe`\n }\n\n protected get upgradeCode(): string {\n return (this.options.upgradeCode || UUID.v5(this.packager.appInfo.id, ELECTRON_BUILDER_UPGRADE_CODE_NS_UUID)).toUpperCase()\n }\n\n async build(appOutDir: string, arch: Arch) {\n const packager = this.packager\n const artifactName = packager.expandArtifactBeautyNamePattern(this.options, \"msi\", arch)\n const artifactPath = path.join(this.outDir, artifactName)\n await packager.info.emitArtifactBuildStarted({\n targetPresentableName: \"MSI\",\n file: artifactPath,\n arch,\n })\n\n const stageDir = await createStageDir(this, packager, arch)\n const vm = this.vm\n\n const commonOptions = getEffectiveOptions(this.options, this.packager)\n\n // wix 4.0.0.5512.2 doesn't support the arm64 architecture so default to x64 when building for arm64.\n // This will result in an x64 MSI installer that installs an arm64 version of the application. This is a\n // stopgap until the electron-builder-binaries wix version is upgraded to a version that supports arm64:\n // https://github.com/electron-userland/electron-builder/issues/6077\n const wixArch = arch == Arch.arm64 ? Arch.x64 : arch\n\n const projectFile = stageDir.getTempFile(\"project.wxs\")\n const objectFiles = [\"project.wixobj\"]\n await writeFile(projectFile, await this.writeManifest(appOutDir, wixArch, commonOptions))\n\n await packager.info.emitMsiProjectCreated(projectFile)\n\n // noinspection SpellCheckingInspection\n const vendorPath = await getBinFromUrl(\"wix-4.0.0.5512.2\", \"wix-4.0.0.5512.2.7z\", \"fe677fcd837b18c9b912985d91636bbd8a1e800c3b3a6a841b6f96e89624e839\")\n\n // noinspection SpellCheckingInspection\n const candleArgs = [\"-arch\", wixArch === Arch.ia32 ? \"x86\" : \"x64\", `-dappDir=${vm.toVmFile(appOutDir)}`].concat(this.getCommonWixArgs())\n candleArgs.push(\"project.wxs\")\n await withToolsetLock(async () => {\n await vm.exec(vm.toVmFile(path.join(vendorPath, \"candle.exe\")), candleArgs, {\n cwd: stageDir.dir,\n })\n await this.light(objectFiles, vm, artifactPath, appOutDir, vendorPath, stageDir.dir)\n })\n\n await stageDir.cleanup()\n\n await packager.signIf(artifactPath)\n\n await packager.info.emitArtifactBuildCompleted({\n file: artifactPath,\n packager,\n arch,\n safeArtifactName: packager.computeSafeArtifactName(artifactName, \"msi\"),\n target: this,\n isWriteUpdateInfo: false,\n })\n }\n\n private async light(objectFiles: Array<string>, vm: VmManager, artifactPath: string, appOutDir: string, vendorPath: string, tempDir: string) {\n // noinspection SpellCheckingInspection\n const lightArgs = [\n \"-out\",\n vm.toVmFile(artifactPath),\n \"-v\",\n // https://github.com/wixtoolset/issues/issues/5169\n \"-spdb\",\n // https://sourceforge.net/p/wix/bugs/2405/\n // error LGHT1076 : ICE61: This product should remove only older versions of itself. The Maximum version is not less than the current product. (1.1.0.42 1.1.0.42)\n \"-sw1076\",\n `-dappDir=${vm.toVmFile(appOutDir)}`,\n // \"-dcl:high\",\n ]\n .concat(this.getCommonWixArgs())\n .concat(this.getAdditionalLightArgs())\n\n // http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Build-3-5-2229-0-give-me-the-following-error-error-LGHT0216-An-unexpected-Win32-exception-with-errorn-td5707443.html\n if (process.platform !== \"win32\") {\n // noinspection SpellCheckingInspection\n lightArgs.push(\"-sval\")\n }\n\n if (this.options.oneClick === false) {\n lightArgs.push(\"-ext\", \"WixUIExtension\")\n }\n\n // objectFiles - only filenames, we set current directory to our temp stage dir\n lightArgs.push(...objectFiles)\n await vm.exec(vm.toVmFile(path.join(vendorPath, \"light.exe\")), lightArgs, {\n cwd: tempDir,\n })\n }\n\n private getAdditionalLightArgs() {\n const args: Array<string> = []\n if (this.options.additionalLightArgs != null) {\n args.push(...this.options.additionalLightArgs)\n }\n return args\n }\n\n private getCommonWixArgs() {\n const args: Array<string> = [\"-pedantic\"]\n if (this.options.warningsAsErrors !== false) {\n args.push(\"-wx\")\n }\n if (this.options.additionalWixArgs != null) {\n args.push(...this.options.additionalWixArgs)\n }\n return args\n }\n\n protected async writeManifest(appOutDir: string, wixArch: Arch, commonOptions: FinalCommonWindowsInstallerOptions) {\n const appInfo = this.packager.appInfo\n const { files, dirs } = await this.computeFileDeclaration(appOutDir)\n const options = this.options\n\n return (await this.projectTemplate.value)({\n ...(await this.getBaseOptions(commonOptions)),\n isCreateDesktopShortcut: commonOptions.isCreateDesktopShortcut !== DesktopShortcutCreationPolicy.NEVER,\n isRunAfterFinish: options.runAfterFinish !== false,\n // https://stackoverflow.com/questions/1929038/compilation-error-ice80-the-64bitcomponent-uses-32bitdirectory\n programFilesId: wixArch === Arch.x64 ? \"ProgramFiles64Folder\" : \"ProgramFilesFolder\",\n // wix in the name because special wix format can be used in the name\n installationDirectoryWixName: getWindowsInstallationDirName(appInfo, commonOptions.isAssisted || commonOptions.isPerMachine === true),\n dirs,\n files,\n })\n }\n\n protected async getBaseOptions(commonOptions: FinalCommonWindowsInstallerOptions): Promise<any> {\n const appInfo = this.packager.appInfo\n const iconPath = await this.packager.getIconPath()\n const compression = this.packager.compression\n\n const companyName = appInfo.companyName\n if (!companyName) {\n log.warn(`Manufacturer is not set for MSI — please set \"author\" in the package.json`)\n }\n\n return {\n ...commonOptions,\n iconPath: iconPath == null ? null : this.vm.toVmFile(iconPath),\n iconId: this.iconId,\n compressionLevel: compression === \"store\" ? \"none\" : \"high\",\n version: appInfo.getVersionInWeirdWindowsForm(),\n productName: appInfo.productName,\n upgradeCode: this.upgradeCode,\n manufacturer: companyName || appInfo.productName,\n appDescription: appInfo.description,\n }\n }\n\n private async computeFileDeclaration(appOutDir: string) {\n const appInfo = this.packager.appInfo\n let isRootDirAddedToRemoveTable = false\n const dirNames = new Set<string>()\n const dirs: Array<string> = []\n const fileSpace = \" \".repeat(6)\n const commonOptions = getEffectiveOptions(this.options, this.packager)\n const files = (await walk(appOutDir)).map(file => {\n const packagePath = file.substring(appOutDir.length + 1)\n\n const lastSlash = packagePath.lastIndexOf(path.sep)\n const fileName = lastSlash > 0 ? packagePath.substring(lastSlash + 1) : packagePath\n let directoryId: string | null = null\n let dirName = \"\"\n // Wix Directory.FileSource doesn't work - https://stackoverflow.com/questions/21519388/wix-filesource-confusion\n if (lastSlash > 0) {\n // This Name attribute may also define multiple directories using the inline directory syntax.\n // For example, \"ProgramFilesFolder:\\My Company\\My Product\\bin\" would create a reference to a Directory element with Id=\"ProgramFilesFolder\" then create directories named \"My Company\" then \"My Product\" then \"bin\" nested beneath each other.\n // This syntax is a shortcut to defining each directory in an individual Directory element.\n dirName = packagePath.substring(0, lastSlash)\n // https://github.com/electron-userland/electron-builder/issues/3027\n directoryId = \"d\" + createHash(\"md5\").update(dirName).digest(\"base64\").replace(/\\//g, \"_\").replace(/\\+/g, \".\").replace(/=+$/, \"\")\n if (!dirNames.has(dirName)) {\n dirNames.add(dirName)\n dirs.push(`<Directory Id=\"${directoryId}\" Name=\"${ROOT_DIR_ID}:\\\\${escapeForXml(dirName.replace(/\\//g, \"\\\\\"))}\\\\\"/>`)\n }\n } else if (!isRootDirAddedToRemoveTable) {\n isRootDirAddedToRemoveTable = true\n }\n\n // since RegistryValue can be part of Component, *** *** *** *** *** *** *** *** *** wix cannot auto generate guid\n // https://stackoverflow.com/questions/1405100/change-my-component-guid-in-wix\n let result = `<Component${directoryId === null ? \"\" : ` Directory=\"${directoryId}\"`}>`\n result += `\\n${fileSpace} <File Name=\"${escapeForXml(fileName)}\" Source=\"$(var.appDir)${path.sep}${escapeForXml(packagePath)}\" ReadOnly=\"yes\" KeyPath=\"yes\"`\n const isMainExecutable = packagePath === `${appInfo.productFilename}.exe`\n if (isMainExecutable) {\n result += ' Id=\"mainExecutable\"'\n } else if (directoryId === null) {\n result += ` Id=\"${path.basename(packagePath)}_f\"`\n }\n\n const isCreateDesktopShortcut = commonOptions.isCreateDesktopShortcut !== DesktopShortcutCreationPolicy.NEVER\n if (isMainExecutable && (isCreateDesktopShortcut || commonOptions.isCreateStartMenuShortcut)) {\n result += `>\\n`\n const shortcutName = commonOptions.shortcutName\n if (isCreateDesktopShortcut) {\n result += `${fileSpace} <Shortcut Id=\"desktopShortcut\" Directory=\"DesktopFolder\" Name=\"${escapeForXml(\n shortcutName\n )}\" WorkingDirectory=\"APPLICATIONFOLDER\" Advertise=\"yes\" Icon=\"${this.iconId}\"/>\\n`\n }\n\n const hasMenuCategory = commonOptions.menuCategory != null\n const startMenuShortcutDirectoryId = hasMenuCategory ? \"AppProgramMenuDir\" : \"ProgramMenuFolder\"\n if (commonOptions.isCreateStartMenuShortcut) {\n if (hasMenuCategory) {\n dirs.push(`<Directory Id=\"${startMenuShortcutDirectoryId}\" Name=\"ProgramMenuFolder:\\\\${escapeForXml(commonOptions.menuCategory)}\\\\\"/>`)\n }\n result += `${fileSpace} <Shortcut Id=\"startMenuShortcut\" Directory=\"${startMenuShortcutDirectoryId}\" Name=\"${escapeForXml(\n shortcutName\n )}\" WorkingDirectory=\"APPLICATIONFOLDER\" Advertise=\"yes\" Icon=\"${this.iconId}\">\\n`\n result += `${fileSpace} <ShortcutProperty Key=\"System.AppUserModel.ID\" Value=\"${escapeForXml(this.packager.appInfo.id)}\"/>\\n`\n result += `${fileSpace} </Shortcut>\\n`\n }\n result += `${fileSpace}</File>`\n\n if (hasMenuCategory) {\n result += `<RemoveFolder Id=\"${startMenuShortcutDirectoryId}\" Directory=\"${startMenuShortcutDirectoryId}\" On=\"uninstall\"/>\\n`\n }\n } else {\n result += `/>`\n }\n\n const fileAssociations = this.packager.fileAssociations\n if (isMainExecutable && fileAssociations.length !== 0) {\n for (const item of fileAssociations) {\n const extensions = asArray(item.ext).map(normalizeExt)\n for (const ext of extensions) {\n result += `${fileSpace} <ProgId Id=\"${this.productMsiIdPrefix}.${ext}\" Advertise=\"yes\" Icon=\"${this.iconId}\" ${\n item.description ? `Description=\"${escapeForXml(item.description)}\"` : \"\"\n }>\\n`\n result += `${fileSpace} <Extension Id=\"${ext}\" Advertise=\"yes\">\\n`\n result += `${fileSpace} <Verb Id=\"open\" Command=\"Open with ${escapeForXml(this.packager.appInfo.productName)}\" Argument=\"&quot;%1&quot;\"/>\\n`\n result += `${fileSpace} </Extension>\\n`\n result += `${fileSpace} </ProgId>\\n`\n }\n }\n }\n\n return `${result}\\n${fileSpace}</Component>`\n })\n\n return { dirs: listToString(dirs, 2), files: listToString(files, 3) }\n }\n}\n\nfunction listToString(list: Array<string>, indentLevel: number) {\n const space = \" \".repeat(indentLevel * 2)\n return list.join(`\\n${space}`)\n}\n"]}
@@ -36,7 +36,7 @@ export declare function buildLegacyFuse2AppImage(opts: AppImageBuilderOptions):
36
36
  /**
37
37
  * Validates that critical path fields (executable name, product filename, license filename)
38
38
  * contain only characters that are safe for use in filesystem paths and embedded bash strings.
39
- * Allowed: Unicode letters, digits, dots, underscores, hyphens, and spaces.
39
+ * Allowed: Unicode letters, digits, dots, underscores, hyphens, spaces, and parentheses.
40
40
  */
41
41
  export declare function validateCriticalPathString(str: string, fieldName: string): void;
42
42
  export type AppRunScriptBase = {
@@ -106,11 +106,11 @@ function escapeShellString(str) {
106
106
  /**
107
107
  * Validates that critical path fields (executable name, product filename, license filename)
108
108
  * contain only characters that are safe for use in filesystem paths and embedded bash strings.
109
- * Allowed: Unicode letters, digits, dots, underscores, hyphens, and spaces.
109
+ * Allowed: Unicode letters, digits, dots, underscores, hyphens, spaces, and parentheses.
110
110
  */
111
111
  function validateCriticalPathString(str, fieldName) {
112
- if (!/^[\p{L}\p{N}._\- ]+$/u.test(str)) {
113
- throw new builder_util_1.InvalidConfigurationError(`${fieldName} contains characters that cannot be safely used in file paths: ${str}. Please use only letters, digits, hyphens, underscores, dots, and spaces.`);
112
+ if (!/^[\p{L}\p{N}._\- ()]+$/u.test(str)) {
113
+ throw new builder_util_1.InvalidConfigurationError(`${fieldName} contains characters that cannot be safely used in file paths: ${str}. Please use only letters, digits, hyphens, underscores, dots, spaces, and parentheses.`);
114
114
  }
115
115
  }
116
116
  async function writeAppLauncherAndRelatedFiles(opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"appImageUtil.js","sourceRoot":"","sources":["../../../src/targets/appimage/appImageUtil.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, copyDir, copyFile, exec, exists, InvalidConfigurationError, log } from \"builder-util\"\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\nimport { FileAssociation } from \"../../options/FileAssociation\"\nimport { getAppImageTools } from \"../../toolsets/linux\"\nimport { copyIcons, copyMimeTypes } from \"./appLauncher\"\nimport { appendBlockmap } from \"../differentialUpdateInfoBuilder\"\nimport { BlockMapDataHolder } from \"builder-util-runtime\"\nimport { APP_RUN_ENTRYPOINT } from \"./AppImageTarget\"\nimport { ToolsetConfig } from \"../../configuration\"\nimport { IconInfo } from \"../../util/iconConverter\"\n\ninterface Options {\n productName: string\n productFilename: string\n executableName: string\n desktopEntry: string\n icons: IconInfo[]\n license?: string | null\n fileAssociations: FileAssociation[]\n /**\n * The compression type available for static runtime is limited as it's only compiled with support for gzip and zstd.\n * \"xz\" is only valid for the legacy FUSE2 (0.0.0) toolset.\n *\n * [stderr] Squashfs image uses lzo compression, this version supports only zlib, zstd.\n * Failed to open squashfs image\n * Failed to extract AppImage\n *\n */\n compression?: \"gzip\" | \"zstd\" | \"xz\"\n /** Pre-computed desktop basename (already validated). When absent, falls back to `executableName`. */\n desktopBaseName?: string\n}\n\nexport interface AppImageBuilderOptions {\n appDir: string\n stageDir: string\n arch: Arch\n output: string\n options: Options\n}\n\nexport async function buildStaticRuntimeAppImage(appimageToolVersion: ToolsetConfig[\"appimage\"], opts: AppImageBuilderOptions): Promise<BlockMapDataHolder> {\n const { stageDir, output, appDir, options, arch } = opts\n\n try {\n await fs.remove(output)\n\n // Write AppRun launcher and related files\n await writeAppLauncherAndRelatedFiles(opts)\n\n const { runtimeLibraries: libraries, runtime, mksquashfs } = await getAppImageTools(appimageToolVersion, arch)\n await copyDir(libraries, path.join(stageDir, \"usr\", \"lib\"))\n\n // Copy app directory to stage\n // mksquashfs doesn't support merging, so we copy the entire app dir\n await copyDir(appDir, stageDir)\n\n const runtimeData = await fs.readFile(runtime)\n\n // Create squashfs with offset for runtime\n const args: string[] = [stageDir, output, \"-offset\", runtimeData.length.toString(), \"-all-root\", \"-noappend\", \"-no-progress\", \"-quiet\", \"-no-xattrs\", \"-no-fragments\"]\n if (options.compression) {\n args.push(\"-comp\", options.compression)\n }\n await exec(mksquashfs, args, {\n cwd: stageDir,\n })\n\n // Write runtime data at the beginning of the file\n await writeRuntimeData(output, runtimeData)\n\n // Make executable\n await fs.chmod(output, 0o755)\n\n // Append blockmap inside try block to ensure cleanup on failure\n const updateInfo = await appendBlockmap(output)\n return updateInfo\n } catch (error) {\n // Clean up partial build on failure\n await fs.remove(output).catch(() => {})\n throw error\n }\n}\n\nexport async function buildLegacyFuse2AppImage(opts: AppImageBuilderOptions): Promise<BlockMapDataHolder> {\n const { stageDir, output, appDir, options, arch } = opts\n\n try {\n await fs.remove(output)\n\n await writeAppLauncherAndRelatedFiles(opts)\n\n const { runtime, mksquashfs, runtimeLibraries } = await getAppImageTools(\"0.0.0\", arch)\n // Mirror the app-builder-lib Go implementation: bundle lib/<arch> into usr/lib for x64 and ia32.\n // arm targets don't have a dedicated lib dir in the FUSE2 toolset.\n if (arch === Arch.x64 || arch === Arch.ia32) {\n await copyDir(runtimeLibraries, path.join(stageDir, \"usr\", \"lib\"))\n }\n await copyDir(appDir, stageDir)\n\n const runtimeData = await fs.readFile(runtime)\n\n const args: string[] = [stageDir, output, \"-offset\", runtimeData.length.toString(), \"-all-root\", \"-noappend\", \"-no-progress\", \"-quiet\", \"-no-xattrs\", \"-no-fragments\"]\n if (options.compression) {\n args.push(\"-comp\", options.compression)\n if (options.compression === \"xz\") {\n // Match the dictionary/block-size settings used by the original app-builder Go implementation\n args.push(\"-Xdict-size\", \"100%\", \"-b\", \"1048576\")\n }\n }\n await exec(mksquashfs, args, { cwd: stageDir })\n\n await writeRuntimeData(output, runtimeData)\n await fs.chmod(output, 0o755)\n\n const updateInfo = await appendBlockmap(output)\n return updateInfo\n } catch (error) {\n await fs.remove(output).catch(() => {})\n throw error\n }\n}\n\nasync function writeRuntimeData(filePath: string, runtimeData: Buffer): Promise<void> {\n const fd = await fs.open(filePath, \"r+\")\n try {\n await fs.write(fd, runtimeData, 0, runtimeData.length, 0)\n } finally {\n try {\n await fs.close(fd)\n } catch (closeError: any) {\n // Log but don't throw - preserve original error if any\n log.warn({ message: closeError.message, file: filePath }, `failed to close file descriptor`)\n }\n }\n}\n\n/**\n * Escapes a string for safe use in shell scripts by wrapping in single quotes\n * and escaping any single quotes within the string.\n *\n * This allows strings with spaces, special characters, etc. to be safely used.\n */\nfunction escapeShellString(str: string): string {\n // Escape single quotes by replacing ' with '\\''\n // Then wrap the whole string in single quotes\n return `'${str.replace(/'/g, \"'\\\\''\")}'`\n}\n\n/**\n * Validates that critical path fields (executable name, product filename, license filename)\n * contain only characters that are safe for use in filesystem paths and embedded bash strings.\n * Allowed: Unicode letters, digits, dots, underscores, hyphens, and spaces.\n */\nexport function validateCriticalPathString(str: string, fieldName: string): void {\n if (!/^[\\p{L}\\p{N}._\\- ]+$/u.test(str)) {\n throw new InvalidConfigurationError(\n `${fieldName} contains characters that cannot be safely used in file paths: ${str}. Please use only letters, digits, hyphens, underscores, dots, and spaces.`\n )\n }\n}\n\nasync function writeAppLauncherAndRelatedFiles(opts: AppImageBuilderOptions): Promise<void> {\n const {\n stageDir,\n options: { license, executableName, productFilename, productName, desktopEntry, desktopBaseName },\n } = opts\n\n // executableName and productFilename are embedded directly into double-quoted bash strings\n // and used as filesystem paths, so they must pass the whitelist.\n // productName is not validated here because it is only ever passed through escapeShellString().\n validateCriticalPathString(executableName, \"executableName\")\n validateCriticalPathString(productFilename, \"productFilename\")\n\n // Write desktop file\n const desktopFileName = `${desktopBaseName ?? executableName}.desktop`\n await fs.writeFile(path.join(stageDir, desktopFileName), desktopEntry, { mode: 0o644 })\n await copyIcons(opts)\n\n const templateConfig: AppRunScriptBase = {\n DesktopFileName: desktopFileName,\n ExecutableName: executableName,\n ProductName: productName,\n ProductFilename: productFilename,\n ResourceName: `appimagekit-${executableName}`,\n }\n\n const mimeTypeFile = await copyMimeTypes(stageDir, opts.options)\n if (mimeTypeFile) {\n templateConfig.MimeTypeFile = mimeTypeFile\n }\n\n let finalConfig: AppRunScript = templateConfig\n\n // Copy license file if provided\n if (license) {\n // Validate license file exists\n if (!(await exists(license))) {\n throw new InvalidConfigurationError(`License file not found: ${license}`)\n }\n\n const licenseBaseName = path.basename(license)\n const ext = path.extname(license).toLowerCase()\n\n // Validate license filename for path safety\n validateCriticalPathString(licenseBaseName, \"licenseBaseName\")\n\n // Validate extension\n if (![\".txt\", \".html\"].includes(ext)) {\n log.warn({ license, expected: \".txt or .html\" }, `license file has unexpected extension`)\n }\n\n await copyFile(license, path.join(stageDir, licenseBaseName))\n\n finalConfig = {\n ...templateConfig,\n EulaFile: licenseBaseName,\n IsHtmlEula: ext === \".html\",\n }\n }\n\n const appRunContent = generateAppRunScript(finalConfig)\n await fs.writeFile(path.join(stageDir, APP_RUN_ENTRYPOINT), appRunContent, { mode: 0o755 })\n}\n\nexport type AppRunScriptBase = {\n ExecutableName: string\n DesktopFileName: string\n ProductFilename: string\n ProductName: string\n ResourceName: string\n MimeTypeFile?: string\n}\n\nexport type AppRunScriptWithEula = AppRunScriptBase & {\n EulaFile: string\n IsHtmlEula: boolean\n}\n\nexport type AppRunScript = AppRunScriptBase | AppRunScriptWithEula\n\nfunction hasEula(config: AppRunScript): config is AppRunScriptWithEula {\n return \"EulaFile\" in config && typeof config.EulaFile === \"string\"\n}\n\nexport function generateAppRunScript(config: AppRunScript): string {\n const eulaEnabled = hasEula(config)\n\n return `#!/usr/bin/env bash\nset -e\n\nTHIS=\"$0\"\n# http://stackoverflow.com/questions/3190818/\nargs=(\"$@\")\nNUMBER_OF_ARGS=\"$#\"\n\nif [ -z \"$APPDIR\" ] ; then\n # Find the AppDir. It is the directory that contains AppRun.\n # This assumes that this script resides inside the AppDir or a subdirectory.\n # If this script is run inside an AppImage, then the AppImage runtime likely has already set $APPDIR\n path=\"$(dirname \"$(readlink -f \"\\${THIS}\")\")\"\n while [[ \"$path\" != \"\" && ! -e \"$path/${APP_RUN_ENTRYPOINT}\" ]]; do\n path=\\${path%/*}\n done\n APPDIR=\"$path\"\nfi\n\nif [ -z \"$APPDIR\" ] ; then\n echo \"ERROR: could not locate the AppDir. Ensure this script is run from within a properly structured AppImage.\" >&2\n exit 1\nfi\n\nexport PATH=\"\\${APPDIR}:\\${APPDIR}/usr/sbin\\${PATH:+:\\${PATH}}\"\nexport XDG_DATA_DIRS=\"\\${APPDIR}/usr/share/\\${XDG_DATA_DIRS:+:\\${XDG_DATA_DIRS}}:/usr/share/gnome:/usr/local/share/:/usr/share/\"\nexport LD_LIBRARY_PATH=\"\\${APPDIR}/usr/lib\\${LD_LIBRARY_PATH:+:\\${LD_LIBRARY_PATH}}\"\nexport GSETTINGS_SCHEMA_DIR=\"\\${APPDIR}/usr/share/glib-2.0/schemas\\${GSETTINGS_SCHEMA_DIR:+:\\${GSETTINGS_SCHEMA_DIR}}\"\n\nBIN=\"$APPDIR/${config.ExecutableName}\"\n\nif [ -z \"$APPIMAGE_EXIT_AFTER_INSTALL\" ] ; then\n trap atexit EXIT\nfi\n\nisEulaAccepted=1\n\nHAVE_NO_SANDBOX=0\nfor arg in \"\\${args[@]}\" ; do\n if [ \"$arg\" = --no-sandbox ] ; then\n HAVE_NO_SANDBOX=1\n break\n fi\ndone\nNO_SANDBOX=()\n# Use 'unshare -Ur true' as a heuristic to detect whether user namespaces are available.\n# Notes:\n# - When running as root, this check will always succeed even if the sandbox configuration\n# actually relies on unprivileged user namespaces. In practice, Chrome/Electron usually\n# disables or adjusts the sandbox separately when running as root, so this probe is mostly\n# a no-op in that scenario.\n# - On minimal systems (e.g. Alpine or stripped-down containers) 'unshare' may not exist.\n# In that case the shell will return exit code 127 (\"command not found\"), which will cause\n# us to add '--no-sandbox'. This is an intentional fail-safe: we prefer the app to start\n# without sandboxing rather than crash on startup.\nif [ $HAVE_NO_SANDBOX -eq 0 ] && ! unshare -Ur true 2>/dev/null ; then\n NO_SANDBOX=(--no-sandbox)\nfi\n\natexit()\n{\n if [ $isEulaAccepted == 1 ] ; then\n if [ $NUMBER_OF_ARGS -eq 0 ] ; then\n exec \"$BIN\" \"\\${NO_SANDBOX[@]}\"\n else\n exec \"$BIN\" \"\\${NO_SANDBOX[@]}\" \"\\${args[@]}\"\n fi\n fi\n}\n\nerror()\n{\n if [ -x /usr/bin/zenity ] ; then\n LD_LIBRARY_PATH=\"\" zenity --error --text \"\\${1}\" 2>/dev/null\n elif [ -x /usr/bin/kdialog ] ; then\n LD_LIBRARY_PATH=\"\" kdialog --msgbox \"\\${1}\" 2>/dev/null\n elif [ -x /usr/bin/Xdialog ] ; then\n LD_LIBRARY_PATH=\"\" Xdialog --msgbox \"\\${1}\" 2>/dev/null\n else\n echo \"\\${1}\"\n fi\n exit 1\n}\n\nyesno()\n{\n TITLE=$1\n TEXT=$2\n if [ -x /usr/bin/zenity ] ; then\n LD_LIBRARY_PATH=\"\" zenity --question --title=\"$TITLE\" --text=\"$TEXT\" 2>/dev/null || exit 0\n elif [ -x /usr/bin/kdialog ] ; then\n LD_LIBRARY_PATH=\"\" kdialog --title \"$TITLE\" --yesno \"$TEXT\" || exit 0\n elif [ -x /usr/bin/Xdialog ] ; then\n LD_LIBRARY_PATH=\"\" Xdialog --title \"$TITLE\" --clear --yesno \"$TEXT\" 10 80 || exit 0\n else\n echo \"zenity, kdialog, Xdialog missing. Skipping \\${THIS}.\"\n exit 0\n fi\n}\n\ncheck_dep()\n{\n DEP=$1\n if ! command -v \"$DEP\" &>/dev/null ; then\n echo \"$DEP is missing. Skipping \\${THIS}.\"\n exit 0\n fi\n}\n\nif [ -z \"$APPIMAGE\" ] ; then\n APPIMAGE=\"$APPDIR/${APP_RUN_ENTRYPOINT}\"\n # not running from within an AppImage; hence using the AppRun for Exec=\nfi\n\n${\n eulaEnabled\n ? `if [ -z \"$APPIMAGE_SILENT_INSTALL\" ] ; then\n EULA_MARK_DIR=\"\\${XDG_CONFIG_HOME:-$HOME/.config}/${config.ProductFilename}\"\n EULA_MARK_FILE=\"$EULA_MARK_DIR/eulaAccepted\"\n # show EULA only if desktop file doesn't exist\n if [ ! -e \"$EULA_MARK_FILE\" ] ; then\n if [ -x /usr/bin/zenity ] ; then\n # on cancel simply exits and our trap handler launches app, so, $isEulaAccepted is set here to 0 and then to 1 if EULA accepted\n isEulaAccepted=0\n LD_LIBRARY_PATH=\"\" zenity --text-info --title=${escapeShellString(config.ProductName)} --filename=\"$APPDIR/${config.EulaFile}\" --ok-label=Agree --cancel-label=Disagree ${config.IsHtmlEula ? \"--html\" : \"\"}\n elif [ -x /usr/bin/Xdialog ] ; then\n isEulaAccepted=0\n LD_LIBRARY_PATH=\"\" Xdialog --title ${escapeShellString(config.ProductName)} --textbox \"$APPDIR/${config.EulaFile}\" 30 80 --ok-label Agree --cancel-label Disagree\n elif [ -x /usr/bin/kdialog ] ; then\n # cannot find any option to force Agree/Disagree buttons for kdialog. And official example exactly with OK button https://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs#Example_21._--textbox_dialog_box\n # in any case we pass labels text\n isEulaAccepted=0\n LD_LIBRARY_PATH=\"\" kdialog --textbox \"$APPDIR/${config.EulaFile}\" --yes-label Agree --cancel-label \"Disagree\"\n fi\n\n case $? in\n 0)\n isEulaAccepted=1\n echo \"License accepted\"\n mkdir -p \"$EULA_MARK_DIR\"\n touch \"$EULA_MARK_FILE\"\n ;;\n 1)\n echo \"License not accepted\"\n exit 0\n ;;\n -1)\n echo \"An unexpected error has occurred.\"\n isEulaAccepted=1\n ;;\n esac\n fi\nfi`\n : \"\"\n}\n`\n}\n"]}
1
+ {"version":3,"file":"appImageUtil.js","sourceRoot":"","sources":["../../../src/targets/appimage/appImageUtil.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, copyDir, copyFile, exec, exists, InvalidConfigurationError, log } from \"builder-util\"\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\nimport { FileAssociation } from \"../../options/FileAssociation\"\nimport { getAppImageTools } from \"../../toolsets/linux\"\nimport { copyIcons, copyMimeTypes } from \"./appLauncher\"\nimport { appendBlockmap } from \"../differentialUpdateInfoBuilder\"\nimport { BlockMapDataHolder } from \"builder-util-runtime\"\nimport { APP_RUN_ENTRYPOINT } from \"./AppImageTarget\"\nimport { ToolsetConfig } from \"../../configuration\"\nimport { IconInfo } from \"../../util/iconConverter\"\n\ninterface Options {\n productName: string\n productFilename: string\n executableName: string\n desktopEntry: string\n icons: IconInfo[]\n license?: string | null\n fileAssociations: FileAssociation[]\n /**\n * The compression type available for static runtime is limited as it's only compiled with support for gzip and zstd.\n * \"xz\" is only valid for the legacy FUSE2 (0.0.0) toolset.\n *\n * [stderr] Squashfs image uses lzo compression, this version supports only zlib, zstd.\n * Failed to open squashfs image\n * Failed to extract AppImage\n *\n */\n compression?: \"gzip\" | \"zstd\" | \"xz\"\n /** Pre-computed desktop basename (already validated). When absent, falls back to `executableName`. */\n desktopBaseName?: string\n}\n\nexport interface AppImageBuilderOptions {\n appDir: string\n stageDir: string\n arch: Arch\n output: string\n options: Options\n}\n\nexport async function buildStaticRuntimeAppImage(appimageToolVersion: ToolsetConfig[\"appimage\"], opts: AppImageBuilderOptions): Promise<BlockMapDataHolder> {\n const { stageDir, output, appDir, options, arch } = opts\n\n try {\n await fs.remove(output)\n\n // Write AppRun launcher and related files\n await writeAppLauncherAndRelatedFiles(opts)\n\n const { runtimeLibraries: libraries, runtime, mksquashfs } = await getAppImageTools(appimageToolVersion, arch)\n await copyDir(libraries, path.join(stageDir, \"usr\", \"lib\"))\n\n // Copy app directory to stage\n // mksquashfs doesn't support merging, so we copy the entire app dir\n await copyDir(appDir, stageDir)\n\n const runtimeData = await fs.readFile(runtime)\n\n // Create squashfs with offset for runtime\n const args: string[] = [stageDir, output, \"-offset\", runtimeData.length.toString(), \"-all-root\", \"-noappend\", \"-no-progress\", \"-quiet\", \"-no-xattrs\", \"-no-fragments\"]\n if (options.compression) {\n args.push(\"-comp\", options.compression)\n }\n await exec(mksquashfs, args, {\n cwd: stageDir,\n })\n\n // Write runtime data at the beginning of the file\n await writeRuntimeData(output, runtimeData)\n\n // Make executable\n await fs.chmod(output, 0o755)\n\n // Append blockmap inside try block to ensure cleanup on failure\n const updateInfo = await appendBlockmap(output)\n return updateInfo\n } catch (error) {\n // Clean up partial build on failure\n await fs.remove(output).catch(() => {})\n throw error\n }\n}\n\nexport async function buildLegacyFuse2AppImage(opts: AppImageBuilderOptions): Promise<BlockMapDataHolder> {\n const { stageDir, output, appDir, options, arch } = opts\n\n try {\n await fs.remove(output)\n\n await writeAppLauncherAndRelatedFiles(opts)\n\n const { runtime, mksquashfs, runtimeLibraries } = await getAppImageTools(\"0.0.0\", arch)\n // Mirror the app-builder-lib Go implementation: bundle lib/<arch> into usr/lib for x64 and ia32.\n // arm targets don't have a dedicated lib dir in the FUSE2 toolset.\n if (arch === Arch.x64 || arch === Arch.ia32) {\n await copyDir(runtimeLibraries, path.join(stageDir, \"usr\", \"lib\"))\n }\n await copyDir(appDir, stageDir)\n\n const runtimeData = await fs.readFile(runtime)\n\n const args: string[] = [stageDir, output, \"-offset\", runtimeData.length.toString(), \"-all-root\", \"-noappend\", \"-no-progress\", \"-quiet\", \"-no-xattrs\", \"-no-fragments\"]\n if (options.compression) {\n args.push(\"-comp\", options.compression)\n if (options.compression === \"xz\") {\n // Match the dictionary/block-size settings used by the original app-builder Go implementation\n args.push(\"-Xdict-size\", \"100%\", \"-b\", \"1048576\")\n }\n }\n await exec(mksquashfs, args, { cwd: stageDir })\n\n await writeRuntimeData(output, runtimeData)\n await fs.chmod(output, 0o755)\n\n const updateInfo = await appendBlockmap(output)\n return updateInfo\n } catch (error) {\n await fs.remove(output).catch(() => {})\n throw error\n }\n}\n\nasync function writeRuntimeData(filePath: string, runtimeData: Buffer): Promise<void> {\n const fd = await fs.open(filePath, \"r+\")\n try {\n await fs.write(fd, runtimeData, 0, runtimeData.length, 0)\n } finally {\n try {\n await fs.close(fd)\n } catch (closeError: any) {\n // Log but don't throw - preserve original error if any\n log.warn({ message: closeError.message, file: filePath }, `failed to close file descriptor`)\n }\n }\n}\n\n/**\n * Escapes a string for safe use in shell scripts by wrapping in single quotes\n * and escaping any single quotes within the string.\n *\n * This allows strings with spaces, special characters, etc. to be safely used.\n */\nfunction escapeShellString(str: string): string {\n // Escape single quotes by replacing ' with '\\''\n // Then wrap the whole string in single quotes\n return `'${str.replace(/'/g, \"'\\\\''\")}'`\n}\n\n/**\n * Validates that critical path fields (executable name, product filename, license filename)\n * contain only characters that are safe for use in filesystem paths and embedded bash strings.\n * Allowed: Unicode letters, digits, dots, underscores, hyphens, spaces, and parentheses.\n */\nexport function validateCriticalPathString(str: string, fieldName: string): void {\n if (!/^[\\p{L}\\p{N}._\\- ()]+$/u.test(str)) {\n throw new InvalidConfigurationError(\n `${fieldName} contains characters that cannot be safely used in file paths: ${str}. Please use only letters, digits, hyphens, underscores, dots, spaces, and parentheses.`\n )\n }\n}\n\nasync function writeAppLauncherAndRelatedFiles(opts: AppImageBuilderOptions): Promise<void> {\n const {\n stageDir,\n options: { license, executableName, productFilename, productName, desktopEntry, desktopBaseName },\n } = opts\n\n // executableName and productFilename are embedded directly into double-quoted bash strings\n // and used as filesystem paths, so they must pass the whitelist.\n // productName is not validated here because it is only ever passed through escapeShellString().\n validateCriticalPathString(executableName, \"executableName\")\n validateCriticalPathString(productFilename, \"productFilename\")\n\n // Write desktop file\n const desktopFileName = `${desktopBaseName ?? executableName}.desktop`\n await fs.writeFile(path.join(stageDir, desktopFileName), desktopEntry, { mode: 0o644 })\n await copyIcons(opts)\n\n const templateConfig: AppRunScriptBase = {\n DesktopFileName: desktopFileName,\n ExecutableName: executableName,\n ProductName: productName,\n ProductFilename: productFilename,\n ResourceName: `appimagekit-${executableName}`,\n }\n\n const mimeTypeFile = await copyMimeTypes(stageDir, opts.options)\n if (mimeTypeFile) {\n templateConfig.MimeTypeFile = mimeTypeFile\n }\n\n let finalConfig: AppRunScript = templateConfig\n\n // Copy license file if provided\n if (license) {\n // Validate license file exists\n if (!(await exists(license))) {\n throw new InvalidConfigurationError(`License file not found: ${license}`)\n }\n\n const licenseBaseName = path.basename(license)\n const ext = path.extname(license).toLowerCase()\n\n // Validate license filename for path safety\n validateCriticalPathString(licenseBaseName, \"licenseBaseName\")\n\n // Validate extension\n if (![\".txt\", \".html\"].includes(ext)) {\n log.warn({ license, expected: \".txt or .html\" }, `license file has unexpected extension`)\n }\n\n await copyFile(license, path.join(stageDir, licenseBaseName))\n\n finalConfig = {\n ...templateConfig,\n EulaFile: licenseBaseName,\n IsHtmlEula: ext === \".html\",\n }\n }\n\n const appRunContent = generateAppRunScript(finalConfig)\n await fs.writeFile(path.join(stageDir, APP_RUN_ENTRYPOINT), appRunContent, { mode: 0o755 })\n}\n\nexport type AppRunScriptBase = {\n ExecutableName: string\n DesktopFileName: string\n ProductFilename: string\n ProductName: string\n ResourceName: string\n MimeTypeFile?: string\n}\n\nexport type AppRunScriptWithEula = AppRunScriptBase & {\n EulaFile: string\n IsHtmlEula: boolean\n}\n\nexport type AppRunScript = AppRunScriptBase | AppRunScriptWithEula\n\nfunction hasEula(config: AppRunScript): config is AppRunScriptWithEula {\n return \"EulaFile\" in config && typeof config.EulaFile === \"string\"\n}\n\nexport function generateAppRunScript(config: AppRunScript): string {\n const eulaEnabled = hasEula(config)\n\n return `#!/usr/bin/env bash\nset -e\n\nTHIS=\"$0\"\n# http://stackoverflow.com/questions/3190818/\nargs=(\"$@\")\nNUMBER_OF_ARGS=\"$#\"\n\nif [ -z \"$APPDIR\" ] ; then\n # Find the AppDir. It is the directory that contains AppRun.\n # This assumes that this script resides inside the AppDir or a subdirectory.\n # If this script is run inside an AppImage, then the AppImage runtime likely has already set $APPDIR\n path=\"$(dirname \"$(readlink -f \"\\${THIS}\")\")\"\n while [[ \"$path\" != \"\" && ! -e \"$path/${APP_RUN_ENTRYPOINT}\" ]]; do\n path=\\${path%/*}\n done\n APPDIR=\"$path\"\nfi\n\nif [ -z \"$APPDIR\" ] ; then\n echo \"ERROR: could not locate the AppDir. Ensure this script is run from within a properly structured AppImage.\" >&2\n exit 1\nfi\n\nexport PATH=\"\\${APPDIR}:\\${APPDIR}/usr/sbin\\${PATH:+:\\${PATH}}\"\nexport XDG_DATA_DIRS=\"\\${APPDIR}/usr/share/\\${XDG_DATA_DIRS:+:\\${XDG_DATA_DIRS}}:/usr/share/gnome:/usr/local/share/:/usr/share/\"\nexport LD_LIBRARY_PATH=\"\\${APPDIR}/usr/lib\\${LD_LIBRARY_PATH:+:\\${LD_LIBRARY_PATH}}\"\nexport GSETTINGS_SCHEMA_DIR=\"\\${APPDIR}/usr/share/glib-2.0/schemas\\${GSETTINGS_SCHEMA_DIR:+:\\${GSETTINGS_SCHEMA_DIR}}\"\n\nBIN=\"$APPDIR/${config.ExecutableName}\"\n\nif [ -z \"$APPIMAGE_EXIT_AFTER_INSTALL\" ] ; then\n trap atexit EXIT\nfi\n\nisEulaAccepted=1\n\nHAVE_NO_SANDBOX=0\nfor arg in \"\\${args[@]}\" ; do\n if [ \"$arg\" = --no-sandbox ] ; then\n HAVE_NO_SANDBOX=1\n break\n fi\ndone\nNO_SANDBOX=()\n# Use 'unshare -Ur true' as a heuristic to detect whether user namespaces are available.\n# Notes:\n# - When running as root, this check will always succeed even if the sandbox configuration\n# actually relies on unprivileged user namespaces. In practice, Chrome/Electron usually\n# disables or adjusts the sandbox separately when running as root, so this probe is mostly\n# a no-op in that scenario.\n# - On minimal systems (e.g. Alpine or stripped-down containers) 'unshare' may not exist.\n# In that case the shell will return exit code 127 (\"command not found\"), which will cause\n# us to add '--no-sandbox'. This is an intentional fail-safe: we prefer the app to start\n# without sandboxing rather than crash on startup.\nif [ $HAVE_NO_SANDBOX -eq 0 ] && ! unshare -Ur true 2>/dev/null ; then\n NO_SANDBOX=(--no-sandbox)\nfi\n\natexit()\n{\n if [ $isEulaAccepted == 1 ] ; then\n if [ $NUMBER_OF_ARGS -eq 0 ] ; then\n exec \"$BIN\" \"\\${NO_SANDBOX[@]}\"\n else\n exec \"$BIN\" \"\\${NO_SANDBOX[@]}\" \"\\${args[@]}\"\n fi\n fi\n}\n\nerror()\n{\n if [ -x /usr/bin/zenity ] ; then\n LD_LIBRARY_PATH=\"\" zenity --error --text \"\\${1}\" 2>/dev/null\n elif [ -x /usr/bin/kdialog ] ; then\n LD_LIBRARY_PATH=\"\" kdialog --msgbox \"\\${1}\" 2>/dev/null\n elif [ -x /usr/bin/Xdialog ] ; then\n LD_LIBRARY_PATH=\"\" Xdialog --msgbox \"\\${1}\" 2>/dev/null\n else\n echo \"\\${1}\"\n fi\n exit 1\n}\n\nyesno()\n{\n TITLE=$1\n TEXT=$2\n if [ -x /usr/bin/zenity ] ; then\n LD_LIBRARY_PATH=\"\" zenity --question --title=\"$TITLE\" --text=\"$TEXT\" 2>/dev/null || exit 0\n elif [ -x /usr/bin/kdialog ] ; then\n LD_LIBRARY_PATH=\"\" kdialog --title \"$TITLE\" --yesno \"$TEXT\" || exit 0\n elif [ -x /usr/bin/Xdialog ] ; then\n LD_LIBRARY_PATH=\"\" Xdialog --title \"$TITLE\" --clear --yesno \"$TEXT\" 10 80 || exit 0\n else\n echo \"zenity, kdialog, Xdialog missing. Skipping \\${THIS}.\"\n exit 0\n fi\n}\n\ncheck_dep()\n{\n DEP=$1\n if ! command -v \"$DEP\" &>/dev/null ; then\n echo \"$DEP is missing. Skipping \\${THIS}.\"\n exit 0\n fi\n}\n\nif [ -z \"$APPIMAGE\" ] ; then\n APPIMAGE=\"$APPDIR/${APP_RUN_ENTRYPOINT}\"\n # not running from within an AppImage; hence using the AppRun for Exec=\nfi\n\n${\n eulaEnabled\n ? `if [ -z \"$APPIMAGE_SILENT_INSTALL\" ] ; then\n EULA_MARK_DIR=\"\\${XDG_CONFIG_HOME:-$HOME/.config}/${config.ProductFilename}\"\n EULA_MARK_FILE=\"$EULA_MARK_DIR/eulaAccepted\"\n # show EULA only if desktop file doesn't exist\n if [ ! -e \"$EULA_MARK_FILE\" ] ; then\n if [ -x /usr/bin/zenity ] ; then\n # on cancel simply exits and our trap handler launches app, so, $isEulaAccepted is set here to 0 and then to 1 if EULA accepted\n isEulaAccepted=0\n LD_LIBRARY_PATH=\"\" zenity --text-info --title=${escapeShellString(config.ProductName)} --filename=\"$APPDIR/${config.EulaFile}\" --ok-label=Agree --cancel-label=Disagree ${config.IsHtmlEula ? \"--html\" : \"\"}\n elif [ -x /usr/bin/Xdialog ] ; then\n isEulaAccepted=0\n LD_LIBRARY_PATH=\"\" Xdialog --title ${escapeShellString(config.ProductName)} --textbox \"$APPDIR/${config.EulaFile}\" 30 80 --ok-label Agree --cancel-label Disagree\n elif [ -x /usr/bin/kdialog ] ; then\n # cannot find any option to force Agree/Disagree buttons for kdialog. And official example exactly with OK button https://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs#Example_21._--textbox_dialog_box\n # in any case we pass labels text\n isEulaAccepted=0\n LD_LIBRARY_PATH=\"\" kdialog --textbox \"$APPDIR/${config.EulaFile}\" --yes-label Agree --cancel-label \"Disagree\"\n fi\n\n case $? in\n 0)\n isEulaAccepted=1\n echo \"License accepted\"\n mkdir -p \"$EULA_MARK_DIR\"\n touch \"$EULA_MARK_FILE\"\n ;;\n 1)\n echo \"License not accepted\"\n exit 0\n ;;\n -1)\n echo \"An unexpected error has occurred.\"\n isEulaAccepted=1\n ;;\n esac\n fi\nfi`\n : \"\"\n}\n`\n}\n"]}
@@ -7,12 +7,6 @@ const fs = require("fs-extra");
7
7
  const builder_util_1 = require("builder-util");
8
8
  const ICON_DIR_RELATIVE_PATH = "usr/share/icons/hicolor";
9
9
  const MIME_TYPE_DIR_RELATIVE_PATH = "usr/share/mime/packages";
10
- /**
11
- * Escapes special XML characters to prevent injection
12
- */
13
- function xmlEscape(str) {
14
- return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
15
- }
16
10
  async function copyIcons(options) {
17
11
  const { stageDir, options: configuration } = options;
18
12
  const iconCommonDir = path.join(stageDir, ICON_DIR_RELATIVE_PATH);
@@ -64,8 +58,8 @@ async function copyMimeTypes(stageDir, options) {
64
58
  continue;
65
59
  }
66
60
  // XML-escape to prevent injection
67
- mimeTypeParts.push(`<mime-type type="${xmlEscape(fileAssociation.mimeType)}">`);
68
- mimeTypeParts.push(` <comment>${xmlEscape(productName)} document</comment>`);
61
+ mimeTypeParts.push(`<mime-type type="${(0, builder_util_1.escapeForXml)(fileAssociation.mimeType)}">`);
62
+ mimeTypeParts.push(` <comment>${(0, builder_util_1.escapeForXml)(productName)} document</comment>`);
69
63
  // Handle extension(s)
70
64
  const extensions = Array.isArray(fileAssociation.ext) ? fileAssociation.ext : [fileAssociation.ext];
71
65
  for (const ext of extensions) {
@@ -74,7 +68,7 @@ async function copyMimeTypes(stageDir, options) {
74
68
  builder_util_1.log.warn({ extension: ext }, `file extension contains unexpected characters and will be skipped`);
75
69
  continue;
76
70
  }
77
- mimeTypeParts.push(` <glob pattern="*.${xmlEscape(ext)}"/>`);
71
+ mimeTypeParts.push(` <glob pattern="*.${(0, builder_util_1.escapeForXml)(ext)}"/>`);
78
72
  }
79
73
  mimeTypeParts.push(' <generic-icon name="x-office-document"/>');
80
74
  mimeTypeParts.push("</mime-type>");
@@ -1 +1 @@
1
- {"version":3,"file":"appLauncher.js","sourceRoot":"","sources":["../../../src/targets/appimage/appLauncher.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"path\"\nimport * as fs from \"fs-extra\"\nimport { copyOrLinkFile, log } from \"builder-util\"\nimport { AppImageBuilderOptions } from \"./appImageUtil\"\n\nconst ICON_DIR_RELATIVE_PATH = \"usr/share/icons/hicolor\"\nconst MIME_TYPE_DIR_RELATIVE_PATH = \"usr/share/mime/packages\"\n\n/**\n * Escapes special XML characters to prevent injection\n */\nfunction xmlEscape(str: string): string {\n return str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\")\n}\n\nexport async function copyIcons(options: AppImageBuilderOptions): Promise<void> {\n const { stageDir, options: configuration } = options\n const iconCommonDir = path.join(stageDir, ICON_DIR_RELATIVE_PATH)\n\n await fs.ensureDir(iconCommonDir)\n\n const icons = configuration.icons\n if (!icons || icons.length === 0) {\n throw new Error(\"At least one icon is required for AppImage\")\n }\n\n const iconExtWithDot = path.extname(icons[0].file)\n const iconFileName = `${configuration.executableName}${iconExtWithDot}`\n const maxIconIndex = icons.length - 1\n\n const iconInfoList = icons.map(icon => {\n if (path.extname(icon.file) !== iconExtWithDot) {\n throw new Error(`All icons must have the same extension: expected ${iconExtWithDot}, but got ${icon.file}`)\n }\n let iconSizeDir: string\n\n if (iconExtWithDot === \".svg\") {\n // SVG icons go in scalable/apps directory per freedesktop icon theme spec\n iconSizeDir = \"scalable/apps\"\n } else {\n iconSizeDir = `${icon.size}x${icon.size}/apps`\n }\n\n const iconRelativeToStageFile = path.join(ICON_DIR_RELATIVE_PATH, iconSizeDir, iconFileName)\n const iconDir = path.join(iconCommonDir, iconSizeDir)\n const iconFile = path.join(iconDir, iconFileName)\n return { icon, iconDir, iconFile, iconRelativeToStageFile }\n })\n await Promise.all(\n iconInfoList.map(async ({ icon, iconDir, iconFile }) => {\n await fs.ensureDir(iconDir)\n await copyOrLinkFile(icon.file, iconFile)\n })\n )\n // Create symlinks for the last (largest) icon\n const { iconRelativeToStageFile } = iconInfoList[maxIconIndex]\n await fs.symlink(iconRelativeToStageFile, path.join(stageDir, iconFileName))\n await fs.symlink(iconRelativeToStageFile, path.join(stageDir, \".DirIcon\"))\n}\n\nexport async function copyMimeTypes(\n stageDir: string,\n options: Pick<AppImageBuilderOptions[\"options\"], \"fileAssociations\" | \"productName\" | \"executableName\">\n): Promise<string | null> {\n const { fileAssociations, productName, executableName } = options\n\n if (!fileAssociations || fileAssociations.length === 0) {\n return null\n }\n\n if (!fileAssociations || fileAssociations.length === 0) {\n return null\n }\n\n const mimeTypeParts: string[] = []\n\n for (const fileAssociation of fileAssociations) {\n if (!fileAssociation.mimeType) {\n continue\n }\n\n // XML-escape to prevent injection\n mimeTypeParts.push(`<mime-type type=\"${xmlEscape(fileAssociation.mimeType)}\">`)\n mimeTypeParts.push(` <comment>${xmlEscape(productName)} document</comment>`)\n\n // Handle extension(s)\n const extensions = Array.isArray(fileAssociation.ext) ? fileAssociation.ext : [fileAssociation.ext]\n\n for (const ext of extensions) {\n // Validate extension doesn't contain dangerous characters\n if (!/^[a-zA-Z0-9_-]+$/.test(ext)) {\n log.warn({ extension: ext }, `file extension contains unexpected characters and will be skipped`)\n continue\n }\n mimeTypeParts.push(` <glob pattern=\"*.${xmlEscape(ext)}\"/>`)\n }\n\n mimeTypeParts.push(' <generic-icon name=\"x-office-document\"/>')\n mimeTypeParts.push(\"</mime-type>\")\n }\n\n // If no mime-types were generated, return null\n if (mimeTypeParts.length === 0) {\n return null\n }\n\n const mimeTypeDir = path.join(stageDir, MIME_TYPE_DIR_RELATIVE_PATH)\n const fileName = `${executableName}.xml`\n const mimeTypeFile = path.join(mimeTypeDir, fileName)\n\n await fs.ensureDir(mimeTypeDir)\n\n const xmlContent = ['<?xml version=\"1.0\"?>', '<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">', ...mimeTypeParts, \"</mime-info>\"].join(\"\\n\")\n\n // Use 0o644 (rw-r--r--) instead of 0o666 to avoid world-writable permissions\n await fs.writeFile(mimeTypeFile, xmlContent, { mode: 0o644 })\n\n return path.join(MIME_TYPE_DIR_RELATIVE_PATH, fileName)\n}\n"]}
1
+ {"version":3,"file":"appLauncher.js","sourceRoot":"","sources":["../../../src/targets/appimage/appLauncher.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"path\"\nimport * as fs from \"fs-extra\"\nimport { copyOrLinkFile, log, escapeForXml } from \"builder-util\"\nimport { AppImageBuilderOptions } from \"./appImageUtil\"\n\nconst ICON_DIR_RELATIVE_PATH = \"usr/share/icons/hicolor\"\nconst MIME_TYPE_DIR_RELATIVE_PATH = \"usr/share/mime/packages\"\n\nexport async function copyIcons(options: AppImageBuilderOptions): Promise<void> {\n const { stageDir, options: configuration } = options\n const iconCommonDir = path.join(stageDir, ICON_DIR_RELATIVE_PATH)\n\n await fs.ensureDir(iconCommonDir)\n\n const icons = configuration.icons\n if (!icons || icons.length === 0) {\n throw new Error(\"At least one icon is required for AppImage\")\n }\n\n const iconExtWithDot = path.extname(icons[0].file)\n const iconFileName = `${configuration.executableName}${iconExtWithDot}`\n const maxIconIndex = icons.length - 1\n\n const iconInfoList = icons.map(icon => {\n if (path.extname(icon.file) !== iconExtWithDot) {\n throw new Error(`All icons must have the same extension: expected ${iconExtWithDot}, but got ${icon.file}`)\n }\n let iconSizeDir: string\n\n if (iconExtWithDot === \".svg\") {\n // SVG icons go in scalable/apps directory per freedesktop icon theme spec\n iconSizeDir = \"scalable/apps\"\n } else {\n iconSizeDir = `${icon.size}x${icon.size}/apps`\n }\n\n const iconRelativeToStageFile = path.join(ICON_DIR_RELATIVE_PATH, iconSizeDir, iconFileName)\n const iconDir = path.join(iconCommonDir, iconSizeDir)\n const iconFile = path.join(iconDir, iconFileName)\n return { icon, iconDir, iconFile, iconRelativeToStageFile }\n })\n await Promise.all(\n iconInfoList.map(async ({ icon, iconDir, iconFile }) => {\n await fs.ensureDir(iconDir)\n await copyOrLinkFile(icon.file, iconFile)\n })\n )\n // Create symlinks for the last (largest) icon\n const { iconRelativeToStageFile } = iconInfoList[maxIconIndex]\n await fs.symlink(iconRelativeToStageFile, path.join(stageDir, iconFileName))\n await fs.symlink(iconRelativeToStageFile, path.join(stageDir, \".DirIcon\"))\n}\n\nexport async function copyMimeTypes(\n stageDir: string,\n options: Pick<AppImageBuilderOptions[\"options\"], \"fileAssociations\" | \"productName\" | \"executableName\">\n): Promise<string | null> {\n const { fileAssociations, productName, executableName } = options\n\n if (!fileAssociations || fileAssociations.length === 0) {\n return null\n }\n\n if (!fileAssociations || fileAssociations.length === 0) {\n return null\n }\n\n const mimeTypeParts: string[] = []\n\n for (const fileAssociation of fileAssociations) {\n if (!fileAssociation.mimeType) {\n continue\n }\n\n // XML-escape to prevent injection\n mimeTypeParts.push(`<mime-type type=\"${escapeForXml(fileAssociation.mimeType)}\">`)\n mimeTypeParts.push(` <comment>${escapeForXml(productName)} document</comment>`)\n\n // Handle extension(s)\n const extensions = Array.isArray(fileAssociation.ext) ? fileAssociation.ext : [fileAssociation.ext]\n\n for (const ext of extensions) {\n // Validate extension doesn't contain dangerous characters\n if (!/^[a-zA-Z0-9_-]+$/.test(ext)) {\n log.warn({ extension: ext }, `file extension contains unexpected characters and will be skipped`)\n continue\n }\n mimeTypeParts.push(` <glob pattern=\"*.${escapeForXml(ext)}\"/>`)\n }\n\n mimeTypeParts.push(' <generic-icon name=\"x-office-document\"/>')\n mimeTypeParts.push(\"</mime-type>\")\n }\n\n // If no mime-types were generated, return null\n if (mimeTypeParts.length === 0) {\n return null\n }\n\n const mimeTypeDir = path.join(stageDir, MIME_TYPE_DIR_RELATIVE_PATH)\n const fileName = `${executableName}.xml`\n const mimeTypeFile = path.join(mimeTypeDir, fileName)\n\n await fs.ensureDir(mimeTypeDir)\n\n const xmlContent = ['<?xml version=\"1.0\"?>', '<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">', ...mimeTypeParts, \"</mime-info>\"].join(\"\\n\")\n\n // Use 0o644 (rw-r--r--) instead of 0o666 to avoid world-writable permissions\n await fs.writeFile(mimeTypeFile, xmlContent, { mode: 0o644 })\n\n return path.join(MIME_TYPE_DIR_RELATIVE_PATH, fileName)\n}\n"]}
@@ -5,7 +5,7 @@ const crypto_1 = require("crypto");
5
5
  const fs_1 = require("fs");
6
6
  const promises_1 = require("fs/promises");
7
7
  const zlib = require("zlib");
8
- const blake2_js_1 = require("@noble/hashes/blake2.js");
8
+ const blake2b_js_1 = require("@noble/hashes/blake2b.js");
9
9
  // Rabin fingerprinting constants from github.com/aclements/go-rabin:
10
10
  // Poly64 = 0xbfe6b8a5bf378d83 (degree-63 irreducible polynomial over GF(2))
11
11
  // Window = 64 bytes, Avg = 16 KB, Min = 8 KB, Max = 32 KB
@@ -59,7 +59,7 @@ async function buildBlockMap(inFile, compressionFormat, outFile) {
59
59
  const win = new Uint8Array(RABIN_WINDOW); // rolling window ring buffer
60
60
  let wpos = 0;
61
61
  function emitChunk() {
62
- checksums.push(Buffer.from((0, blake2_js_1.blake2b)(chunkBuf.subarray(0, chunkN), { dkLen: 18 })).toString("base64"));
62
+ checksums.push(Buffer.from((0, blake2b_js_1.blake2b)(chunkBuf.subarray(0, chunkN), { dkLen: 18 })).toString("base64"));
63
63
  sizes.push(chunkN);
64
64
  chunkN = 0;
65
65
  hi = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"blockmap.js","sourceRoot":"","sources":["../../../src/targets/blockmap/blockmap.ts"],"names":[],"mappings":";;AA+DA,sCAmHC;AAlLD,mCAAmC;AACnC,2BAAqC;AACrC,0CAAmD;AACnD,6BAA4B;AAC5B,uDAAiD;AAGjD,qEAAqE;AACrE,8EAA8E;AAC9E,4DAA4D;AAC5D,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,iEAAiE;AACjE,mCAAmC;AACnC,iFAAiF;AAEjF,kBAAkB;AAClB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAClxF,kBAAkB;AAClB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,OAAO,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACtxF,kBAAkB;AAClB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,OAAO,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,CAAA;AAClpF,kBAAkB;AAClB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EA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","sourcesContent":["import { createHash } from \"crypto\"\nimport { createReadStream } from \"fs\"\nimport { appendFile, writeFile } from \"fs/promises\"\nimport * as zlib from \"zlib\"\nimport { blake2b } from \"@noble/hashes/blake2.js\"\nimport { BlockMapDataHolder } from \"builder-util-runtime\"\n\n// Rabin fingerprinting constants from github.com/aclements/go-rabin:\n// Poly64 = 0xbfe6b8a5bf378d83 (degree-63 irreducible polynomial over GF(2))\n// Window = 64 bytes, Avg = 16 KB, Min = 8 KB, Max = 32 KB\n// Boundary condition: (hash & (AVG-1)) === (AVG-1), i.e. all mask bits set.\n//\n// The tables below are precomputed offline (avoiding BigInt in production):\n// PUSH[i] = (i * x^63 + (i * x^63 mod p)) truncated to 64 bits\n// POP[i] = (i * x^(63*8)) mod p\n// Each stored as signed Int32 hi/lo pair; hash = hi*2^32 + lo (unsigned 64-bit).\n\n// prettier-ignore\nconst PUSH_HI = new Int32Array([0,-1075398491,2144170315,-1070872082,1081891379,-6626666,1068575608,-2141744163,1058933955,-2131184538,1087602056,-13253331,2137151216,-1065030059,11478971,-1085694178,2117867910,-1042636509,32598221,-1105735576,1044399029,-2119763184,1099772670,-26506661,1092752709,-20664864,1055876110,-2130060117,22957942,-1095174189,2123578941,-1049262440,1134463913,-59231476,1012136674,-2085273017,65196442,-1140561601,2083496145,-1010231180,2088798058,-1016709169,55440929,-1129623932,1023204697,-2095421956,1127328786,-53013321,1034064431,-2109461878,1114628964,-41329727,2111752220,-1036488519,34847063,-1108016654,45915884,-1118165431,2104618919,-1030269182,1119929567,-47809414,1024308628,-2098524879,953921527,-2026039470,1192681148,-118462951,2024273348,-952021663,124421263,-1198769110,130392884,-1205658735,2013844095,-940676390,1203370247,-127975006,947161164,-2020462359,1189590641,-117371180,959104826,-2033418337,110881858,-1182968601,2035719433,-961534548,2046409394,-971046377,104123385,-1177390244,965075073,-2040309724,1179161034,-106026641,2068128862,-995910405,76043541,-1150358096,993623661,-2065709368,1156845350,-82659453,1146824861,-71462856,999709142,-2072977037,69694126,-1144927733,2078933989,-1005798592,91831768,-1163950723,2058636435,-984419274,1157982187,-85729458,986191520,-2060538363,979841307,-2055108162,1168785488,-95618827,2048617256,-973220979,97917539,-1171217722,1907843054,-833493173,242888357,-1315138048,835388893,-1909605000,1309045910,-236925901,1319719725,-246420600,828645990,-1904043325,248842526,-1322012229,1897429077,-822165264,260785768,-1334968627,1883649827,-811561082,1341594715,-267279106,809135376,-1881352779,815090347,-1888226802,1331182560,-255950011,1894322328,-821057475,254042579,-1329407626,841602119,-1915786014,1306830092,-234742359,1918209652,-843893039,228130623,-1300346982,221763716,-1294901215,1929030095,-853798550,1296794295,-223528430,847705084,-1923069095,1276497345,-202148508,869842058,-1942092753,208246770,-1282461865,1940186809,-868065764,1930150146,-856852057,214347849,-1289746196,863476529,-1936645228,1287318138,-212053281,1231876121,-158709572,916554066,-1991820809,152087082,-1225387377,1994251105,-918854716,1987247322,-913030017,163548561,-1235667660,906929897,-1981276596,1237571490,-165318905,928049567,-2001317574,1218287828,-142925711,1999418284,-926282999,149013223,-1224246718,139388252,-1213702663,2005111831,-932893518,1211285359,-137099318,939511332,-2011597183,183663536,-1256930539,1967065851,-891702690,1250828675,-177694426,893604040,-1968838547,904689523,-1979002922,1243678264,-171458915,1972383040,-898198043,173890571,-1245977426,1959682614,-886515053,184750973,-1260016680,884094981,-1957396320,1266633038,-191237653,1271951093,-197732784,874323902,-1946441957,195835078,-1270182813,1952531853,-880280280])\n// prettier-ignore\nconst PUSH_LO = new Int32Array([0,-1086878333,2121210630,-1051158907,1139391375,-52546036,1032233097,-2102317814,954530461,-2016184546,1183572379,-105092072,2064466194,-1002779503,90331668,-1168779369,1909060922,-822183751,262598204,-1332649025,840978101,-1927822538,1280267699,-210184144,1227689895,-166034908,927077537,-2005559006,180663336,-1242351189,1957408558,-878959955,1554278391,-476845452,583761137,-1644367502,525196408,-1602596357,1629669246,-569029891,1681956202,-612953879,439322220,-1525150737,665396965,-1734431898,1506164195,-420368288,762155725,-1839587506,1392675275,-332069816,1854155074,-776756031,283849284,-1344487481,361326672,-1430329901,1810264918,-724435243,1449186271,-380150180,672123097,-1757919910,109003373,-1186410514,2014337387,-953690904,1167522274,-90082207,1006232292,-2066845849,1050392816,-2119420557,1089774582,-3985803,2104623999,-1035628804,52238457,-1138059782,2008463191,-931054892,165260369,-1225907758,878644440,-1956085413,1244665822,-184051107,1330793930,-261767095,826103500,-1911891121,213644869,-1282638906,1926556995,-840736576,1524311450,-437475303,615792284,-1685867745,422747669,-1509616746,1734182163,-664139632,1648353031,-586657148,475055105,-1553512062,567698568,-1629361909,1605992334,-527502835,722653344,-1809490653,1434307494,-364231131,1761307439,-674437460,378826793,-1448870486,334899773,-1396594754,1838756155,-760300360,1344246194,-282584015,779127476,-1857616073,218006746,-1278670503,1922146268,-844754337,1326923605,-266292522,829957203,-1907381808,874151495,-1959922748,1249207617,-180164414,2012464584,-926660533,161275598,-1230286003,2100785632,-1040122781,56126182,-1133516955,1054788207,-2115418132,1085395305,-7971606,1171491709,-85719298,1002213499,-2071257608,104476914,-1190281871,2018847732,-949836169,1348133677,-278040914,775288875,-1862109784,330520738,-1400580831,1843151780,-756298201,1757288880,-678849485,382796470,-1444507851,727163455,-1805635652,1429780793,-368102214,563287575,-1633379436,1610353937,-523534190,1652207000,-582148069,471185054,-1558037731,427289738,-1505730295,1729689484,-667977201,1520326405,-441853306,619793411,-1681473152,176277175,-1246344396,1961811377,-874950606,1231584568,-161484613,923231806,-2010059843,845495338,-1923960407,1275733804,-214062417,1905035173,-826602970,266575011,-1328279264,2068329357,-998261234,86452363,-1173314296,950110210,-2020211327,1187943172,-101114233,1135397136,-56933229,1036243478,-2097913963,4551327,-1082982628,2116708761,-1055005670,1445306688,-384684861,675985990,-1753401403,365697743,-1426352308,1805844937,-728462262,1858165725,-772352418,279855323,-1348874920,757653586,-1843434031,1397226324,-328173865,669799546,-1730422279,1501777788,-424361217,1678110709,-617454986,443217139,-1520600720,520662759,-1606474908,1634186721,-565168030,1558254952,-472475413,579735150,-1648786451])\n// prettier-ignore\nconst POP_HI = new Int32Array([0,2138251555,1090583266,1047780289,1038568800,1117023299,2095560578,60069537,2077137601,79543266,986603555,1170030848,1177147297,962262658,120139075,2019167328,1216056615,923315204,159086533,1980258022,1973207111,183492964,882653861,1273961350,867506150,1288058565,1924525316,231132199,240278150,1898019749,1330815076,807502151,789684970,1348633545,1846630408,291666219,318173066,1837485737,1408636264,746927179,1423915051,732698888,366985929,1789715434,1765307723,374035560,674795433,1464577674,1735012301,404295406,644535599,1494873100,1519215277,637420430,462264399,1694415212,480556300,1675072559,1571049454,584543949,558102636,1580259663,1615004302,523248557,1579369941,558916854,522436407,1615896084,1673791669,481765782,583332439,1572328308,636346132,1520369207,1693263350,463340757,403346036,1736029015,1493854358,645482933,374917362,1764485585,1465397776,673911603,733971858,1422697649,1790934896,365715027,1838567987,317027088,748071121,1407551986,1349590867,788676208,292677041,1845675154,1899161407,239191580,808590813,1329675518,1289071199,866552700,232083645,1923510686,184319486,1972329693,1274840860,881829439,924528798,1214779837,1981532796,157870943,961112600,1178225467,2018087162,121287129,78522232,2078082651,1169087898,987626681,1116205273,1039454714,59181627,2096376600,2137046457,1285274,1046497115,1091790456,60830479,2094207532,1117833709,1037297870,1044872815,1093951308,2135393421,3450286,2020518350,119376109,963531564,1176334863,1166664878,989513101,76095052,2079997807,1272692264,883465995,182142154,1973970409,1983705928,156226155,926681514,1213147273,806692073,1332086218,1897258507,241631016,233990537,1921075370,1290965867,864137800,749834725,1405268166,1840343815,314722852,290905221,1847983526,1347823207,790955844,1467943716,671885831,377483718,1762447589,1788364356,367748967,731430054,1424727429,1690967234,465124833,634054176,1522124547,1496142242,643723393,405646144,1734249059,520390147,1618454304,1577352417,561470914,585354083,1569778240,1675833729,479203490,1568896730,586176505,478383160,1676717339,1617181626,521607833,560251224,1578623099,642640923,1497287992,1733105401,406730714,464167291,1691975768,1521114009,635009722,368638973,1787550430,1425539359,730538044,673167005,1466734526,1763658879,376204636,1849057596,289751071,792107998,1346747133,1406217308,748817791,315741886,1839396765,1922225200,232912147,865218258,1289818097,1333107024,805746803,242574258,1896235665,157044465,1982820306,1214034963,925865264,884671377,1271407282,1975253363,180934736,988371223,1167751220,2078909429,77234902,118363255,2021471572,1175383701,964546486,1093125078,1045750517,2570548,2136217623,2092994230,62107541,1036022868,1119049079])\n// prettier-ignore\nconst POP_LO = new Int32Array([0,-1826189856,-1720019389,173808547,-1916624635,518270181,347617094,-2019640666,461718026,-2002530326,-2097163191,299456937,-1773673713,90271471,255685964,-1675888468,-2009265769,454788215,289906644,-2107567564,100640914,-1764153998,-1668989231,262386481,-1816638563,10405501,180542942,-1713090498,511371928,-1923324040,-2030011173,338096443,-1353867603,1013650253,909576430,-1525578482,579813288,-1314278840,-1141528085,684925963,-1261904729,669929799,766659300,-1097545980,956988834,-1439895486,-1603212319,861300225,661690170,-1269425446,-1106640519,757894297,-1431161281,966048735,868786300,-1595003492,1022743856,-1345103664,-1517337741,917098131,-1321765835,571603413,676192886,-1150586986,1587232090,-843206470,-941511911,1422337785,-749101985,1082069439,1243810332,-653948932,1159626576,-700910928,-597366509,1329751283,-925049259,1543132085,1369851926,-1031748106,-693750579,1166063917,1339859598,-587583634,1533318600,-935192536,-1038220405,1362660971,-853313849,1577450279,1415176324,-947950236,1088542658,-741909982,-644136575,1253952609,-237591561,1659907607,1756116404,-74794924,2081686258,-281899246,-445737807,1984436561,-363601411,2037738525,1932097470,-535823778,1737572600,-189281000,-18098501,1842174811,2045487712,-355653760,-527352797,1941418435,-198636699,1729070725,1834196262,-25882426,1651435626,-246913654,-82543063,1748169673,-273921681,2089469071,1993793324,-437234996,33683255,-1859683625,-1686412940,140373140,-1883023822,484826066,381272177,-2053157487,428127549,-1969080099,-2130828418,332967582,-1807346632,123771352,222069371,-1642459237,-1975714144,421163840,323381475,-2141133565,134111141,-1797729723,-1635464730,228738054,-1850098518,43987274,147008233,-1679448311,477830575,-1889693617,-2063496212,371656204,-1387501158,1047192698,876019673,-1492094407,546228383,-1280817793,-1175167268,718459708,-1228330096,636462704,800308691,-1131073485,990612117,-1473443979,-1569645354,827822390,628187149,-1235751443,-1140066738,791509934,-1464614648,999640296,835278667,-1561339221,1056186887,-1378701337,-1483819964,883440036,-1288273150,537923298,709629249,-1184196447,1553648237,-809744499,-975152082,1455870414,-782734488,1115612808,1210252587,-620465973,1193248871,-734460537,-563798492,1296274372,-891475614,1509663874,1403502369,-1065274687,-727202822,1199656474,1306351033,-553920423,1499816703,-901517537,-1071647556,1396275548,-819822096,1543769104,1448613811,-981558701,1121984757,-775508715,-610617674,1220295510,-203991872,1626462496,1789772419,-108310685,2115368389,-315394011,-412130426,1951002214,-397273398,2071239466,1898479753,-502395543,1703983055,-155829713,-51764852,1875684460,2078956887,-389230409,-493827308,1907771124,-165086126,1695445426,1867672081,-59447311,1617895261,-213282115,-116029154,1781728510,-307380648,2123051960,1960257563,-403593733])\n\n// Chunker parameters\nconst RABIN_MIN = 8192\nconst RABIN_AVG = 16384\nconst RABIN_MAX = 32768\nconst RABIN_WINDOW = 64\n// Boundary: all mask bits (14 bits) set in lo word. RABIN_AVG is a power of 2.\nconst RABIN_HASH_MASK = RABIN_AVG - 1 // 0x3FFF\n\nexport type CompressionFormat = \"deflate\" | \"gzip\"\n\ninterface BlockMap {\n version: \"2\"\n files: Array<{\n name: string\n offset: number\n checksums: string[]\n sizes: number[]\n }>\n}\n\nfunction compress(data: Buffer, format: CompressionFormat): Buffer {\n return format === \"deflate\" ? zlib.deflateRawSync(data, { level: 9 }) : zlib.gzipSync(data, { level: 9 })\n}\n\n/**\n * Build a content-defined block map for `inFile` using Rabin fingerprinting.\n *\n * Files are processed via streaming (peak memory ≈ RABIN_MAX = 32 KB per chunk,\n * not the full file size), making this safe for large installers.\n *\n * - If `outFile` is omitted: compressed blockmap is appended to `inFile`\n * (used for NSIS web installer / AppImage embed); `blockMapSize` is returned.\n * - If `outFile` is provided: compressed blockmap is written to that file;\n * `blockMapSize` is not included in the result.\n *\n * Returned `sha512` is SHA-512 of the full file as it exists after the call.\n */\nexport async function buildBlockMap(inFile: string, compressionFormat: CompressionFormat, outFile?: string): Promise<BlockMapDataHolder> {\n const fileHash = createHash(\"sha512\")\n const checksums: string[] = []\n const sizes: number[] = []\n let totalSize = 0\n\n // Per-chunk Rabin state. Peak memory ≈ RABIN_MAX (32 KB) — not file size.\n const chunkBuf = Buffer.allocUnsafe(RABIN_MAX)\n let chunkN = 0 // bytes accumulated for current chunk\n let hi = 0\n let lo = 0\n const win = new Uint8Array(RABIN_WINDOW) // rolling window ring buffer\n let wpos = 0\n\n function emitChunk() {\n checksums.push(Buffer.from(blake2b(chunkBuf.subarray(0, chunkN), { dkLen: 18 })).toString(\"base64\"))\n sizes.push(chunkN)\n chunkN = 0\n hi = 0\n lo = 0\n win.fill(0)\n wpos = 0\n }\n\n // Called once per byte; inlines the three-phase Rabin state machine:\n // skip (< MIN-WINDOW bytes) → prime (next WINDOW bytes) → scan (≥ MIN bytes)\n function processByte(b: number) {\n chunkBuf[chunkN++] = b\n\n if (chunkN <= RABIN_MIN - RABIN_WINDOW) {\n // Skip phase: not close enough to MIN to start priming yet\n return\n }\n\n if (chunkN <= RABIN_MIN) {\n // Prime phase: non-windowed hash update, filling the ring buffer\n win[wpos] = b\n wpos = (wpos + 1) % RABIN_WINDOW\n const top = (hi >>> 23) & 0xff\n const nhi = ((hi << 8) | (lo >>> 24)) & 0x7fffffff\n const nlo = ((lo << 8) | b) & 0xffffffff\n hi = (nhi ^ PUSH_HI[top]) | 0\n lo = (nlo ^ PUSH_LO[top]) | 0\n // At exactly MIN: check whether the primed hash is already a boundary\n if (chunkN === RABIN_MIN && (lo & RABIN_HASH_MASK) === RABIN_HASH_MASK) {\n emitChunk()\n }\n return\n }\n\n // Scan phase: sliding window — pop oldest byte, push new byte\n const old = win[wpos]\n win[wpos] = b\n wpos = (wpos + 1) % RABIN_WINDOW\n hi = (hi ^ POP_HI[old]) | 0\n lo = (lo ^ POP_LO[old]) | 0\n const top = (hi >>> 23) & 0xff\n const nhi = ((hi << 8) | (lo >>> 24)) & 0x7fffffff\n const nlo = ((lo << 8) | b) & 0xffffffff\n hi = (nhi ^ PUSH_HI[top]) | 0\n lo = (nlo ^ PUSH_LO[top]) | 0\n\n if ((lo & RABIN_HASH_MASK) === RABIN_HASH_MASK || chunkN >= RABIN_MAX) {\n emitChunk()\n }\n }\n\n // Stream-read the file, feeding SHA-512 and the Rabin chunker simultaneously\n await new Promise<void>((resolve, reject) => {\n const rs = createReadStream(inFile, { highWaterMark: 256 * 1024 })\n rs.on(\"data\", (chunk: Buffer | string) => {\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)\n chunk = buf\n fileHash.update(chunk)\n totalSize += chunk.length\n for (let i = 0; i < chunk.length; i++) {\n processByte(chunk[i])\n }\n })\n rs.on(\"end\", () => {\n if (chunkN > 0) {\n emitChunk()\n }\n resolve()\n })\n rs.on(\"error\", reject)\n })\n\n const blockMap: BlockMap = {\n version: \"2\",\n files: [{ name: \"file\", offset: 0, checksums, sizes }],\n }\n const compressed = compress(Buffer.from(JSON.stringify(blockMap)), compressionFormat)\n\n if (outFile == null || outFile === \"\") {\n // Append mode: write compressed blockmap + 4-byte size in one atomic call\n // to avoid a partial-write window between the two separate appendFile calls.\n const sizeHeader = Buffer.allocUnsafe(4)\n sizeHeader.writeUInt32BE(compressed.length, 0)\n const appended = Buffer.concat([compressed, sizeHeader])\n await appendFile(inFile, appended)\n fileHash.update(appended)\n\n return {\n size: totalSize + appended.length,\n sha512: fileHash.digest(\"base64\"),\n blockMapSize: compressed.length,\n }\n }\n\n await writeFile(outFile, compressed)\n return {\n size: totalSize,\n sha512: fileHash.digest(\"base64\"),\n }\n}\n"]}
1
+ {"version":3,"file":"blockmap.js","sourceRoot":"","sources":["../../../src/targets/blockmap/blockmap.ts"],"names":[],"mappings":";;AA+DA,sCAmHC;AAlLD,mCAAmC;AACnC,2BAAqC;AACrC,0CAAmD;AACnD,6BAA4B;AAC5B,yDAAkD;AAGlD,qEAAqE;AACrE,8EAA8E;AAC9E,4DAA4D;AAC5D,4EAA4E;AAC5E,EAAE;AACF,4EAA4E;AAC5E,iEAAiE;AACjE,mCAAmC;AACnC,iFAAiF;AAEjF,kBAAkB;AAClB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAClxF,kBAAkB;AAClB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,OAAO,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,OAAO,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,CAAC,CAAC,CAAA;AACtxF,kBAAkB;AAClB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,UAAU,EAAC,OAAO,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,OAAO,EAAC,UAAU,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,CAAA;AAClpF,kBAAkB;AAClB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,SAAS,EAAC,SAAS,EAAC,CAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,CAAC,SAAS,EAAC,UAAU,EAAC,UAAU,EAAC,CAAC,UAAU,EA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","sourcesContent":["import { createHash } from \"crypto\"\nimport { createReadStream } from \"fs\"\nimport { appendFile, writeFile } from \"fs/promises\"\nimport * as zlib from \"zlib\"\nimport { blake2b } from \"@noble/hashes/blake2b.js\"\nimport { BlockMapDataHolder } from \"builder-util-runtime\"\n\n// Rabin fingerprinting constants from github.com/aclements/go-rabin:\n// Poly64 = 0xbfe6b8a5bf378d83 (degree-63 irreducible polynomial over GF(2))\n// Window = 64 bytes, Avg = 16 KB, Min = 8 KB, Max = 32 KB\n// Boundary condition: (hash & (AVG-1)) === (AVG-1), i.e. all mask bits set.\n//\n// The tables below are precomputed offline (avoiding BigInt in production):\n// PUSH[i] = (i * x^63 + (i * x^63 mod p)) truncated to 64 bits\n// POP[i] = (i * x^(63*8)) mod p\n// Each stored as signed Int32 hi/lo pair; hash = hi*2^32 + lo (unsigned 64-bit).\n\n// prettier-ignore\nconst PUSH_HI = new Int32Array([0,-1075398491,2144170315,-1070872082,1081891379,-6626666,1068575608,-2141744163,1058933955,-2131184538,1087602056,-13253331,2137151216,-1065030059,11478971,-1085694178,2117867910,-1042636509,32598221,-1105735576,1044399029,-2119763184,1099772670,-26506661,1092752709,-20664864,1055876110,-2130060117,22957942,-1095174189,2123578941,-1049262440,1134463913,-59231476,1012136674,-2085273017,65196442,-1140561601,2083496145,-1010231180,2088798058,-1016709169,55440929,-1129623932,1023204697,-2095421956,1127328786,-53013321,1034064431,-2109461878,1114628964,-41329727,2111752220,-1036488519,34847063,-1108016654,45915884,-1118165431,2104618919,-1030269182,1119929567,-47809414,1024308628,-2098524879,953921527,-2026039470,1192681148,-118462951,2024273348,-952021663,124421263,-1198769110,130392884,-1205658735,2013844095,-940676390,1203370247,-127975006,947161164,-2020462359,1189590641,-117371180,959104826,-2033418337,110881858,-1182968601,2035719433,-961534548,2046409394,-971046377,104123385,-1177390244,965075073,-2040309724,1179161034,-106026641,2068128862,-995910405,76043541,-1150358096,993623661,-2065709368,1156845350,-82659453,1146824861,-71462856,999709142,-2072977037,69694126,-1144927733,2078933989,-1005798592,91831768,-1163950723,2058636435,-984419274,1157982187,-85729458,986191520,-2060538363,979841307,-2055108162,1168785488,-95618827,2048617256,-973220979,97917539,-1171217722,1907843054,-833493173,242888357,-1315138048,835388893,-1909605000,1309045910,-236925901,1319719725,-246420600,828645990,-1904043325,248842526,-1322012229,1897429077,-822165264,260785768,-1334968627,1883649827,-811561082,1341594715,-267279106,809135376,-1881352779,815090347,-1888226802,1331182560,-255950011,1894322328,-821057475,254042579,-1329407626,841602119,-1915786014,1306830092,-234742359,1918209652,-843893039,228130623,-1300346982,221763716,-1294901215,1929030095,-853798550,1296794295,-223528430,847705084,-1923069095,1276497345,-202148508,869842058,-1942092753,208246770,-1282461865,1940186809,-868065764,1930150146,-856852057,214347849,-1289746196,863476529,-1936645228,1287318138,-212053281,1231876121,-158709572,916554066,-1991820809,152087082,-1225387377,1994251105,-918854716,1987247322,-913030017,163548561,-1235667660,906929897,-1981276596,1237571490,-165318905,928049567,-2001317574,1218287828,-142925711,1999418284,-926282999,149013223,-1224246718,139388252,-1213702663,2005111831,-932893518,1211285359,-137099318,939511332,-2011597183,183663536,-1256930539,1967065851,-891702690,1250828675,-177694426,893604040,-1968838547,904689523,-1979002922,1243678264,-171458915,1972383040,-898198043,173890571,-1245977426,1959682614,-886515053,184750973,-1260016680,884094981,-1957396320,1266633038,-191237653,1271951093,-197732784,874323902,-1946441957,195835078,-1270182813,1952531853,-880280280])\n// prettier-ignore\nconst PUSH_LO = new Int32Array([0,-1086878333,2121210630,-1051158907,1139391375,-52546036,1032233097,-2102317814,954530461,-2016184546,1183572379,-105092072,2064466194,-1002779503,90331668,-1168779369,1909060922,-822183751,262598204,-1332649025,840978101,-1927822538,1280267699,-210184144,1227689895,-166034908,927077537,-2005559006,180663336,-1242351189,1957408558,-878959955,1554278391,-476845452,583761137,-1644367502,525196408,-1602596357,1629669246,-569029891,1681956202,-612953879,439322220,-1525150737,665396965,-1734431898,1506164195,-420368288,762155725,-1839587506,1392675275,-332069816,1854155074,-776756031,283849284,-1344487481,361326672,-1430329901,1810264918,-724435243,1449186271,-380150180,672123097,-1757919910,109003373,-1186410514,2014337387,-953690904,1167522274,-90082207,1006232292,-2066845849,1050392816,-2119420557,1089774582,-3985803,2104623999,-1035628804,52238457,-1138059782,2008463191,-931054892,165260369,-1225907758,878644440,-1956085413,1244665822,-184051107,1330793930,-261767095,826103500,-1911891121,213644869,-1282638906,1926556995,-840736576,1524311450,-437475303,615792284,-1685867745,422747669,-1509616746,1734182163,-664139632,1648353031,-586657148,475055105,-1553512062,567698568,-1629361909,1605992334,-527502835,722653344,-1809490653,1434307494,-364231131,1761307439,-674437460,378826793,-1448870486,334899773,-1396594754,1838756155,-760300360,1344246194,-282584015,779127476,-1857616073,218006746,-1278670503,1922146268,-844754337,1326923605,-266292522,829957203,-1907381808,874151495,-1959922748,1249207617,-180164414,2012464584,-926660533,161275598,-1230286003,2100785632,-1040122781,56126182,-1133516955,1054788207,-2115418132,1085395305,-7971606,1171491709,-85719298,1002213499,-2071257608,104476914,-1190281871,2018847732,-949836169,1348133677,-278040914,775288875,-1862109784,330520738,-1400580831,1843151780,-756298201,1757288880,-678849485,382796470,-1444507851,727163455,-1805635652,1429780793,-368102214,563287575,-1633379436,1610353937,-523534190,1652207000,-582148069,471185054,-1558037731,427289738,-1505730295,1729689484,-667977201,1520326405,-441853306,619793411,-1681473152,176277175,-1246344396,1961811377,-874950606,1231584568,-161484613,923231806,-2010059843,845495338,-1923960407,1275733804,-214062417,1905035173,-826602970,266575011,-1328279264,2068329357,-998261234,86452363,-1173314296,950110210,-2020211327,1187943172,-101114233,1135397136,-56933229,1036243478,-2097913963,4551327,-1082982628,2116708761,-1055005670,1445306688,-384684861,675985990,-1753401403,365697743,-1426352308,1805844937,-728462262,1858165725,-772352418,279855323,-1348874920,757653586,-1843434031,1397226324,-328173865,669799546,-1730422279,1501777788,-424361217,1678110709,-617454986,443217139,-1520600720,520662759,-1606474908,1634186721,-565168030,1558254952,-472475413,579735150,-1648786451])\n// prettier-ignore\nconst POP_HI = new Int32Array([0,2138251555,1090583266,1047780289,1038568800,1117023299,2095560578,60069537,2077137601,79543266,986603555,1170030848,1177147297,962262658,120139075,2019167328,1216056615,923315204,159086533,1980258022,1973207111,183492964,882653861,1273961350,867506150,1288058565,1924525316,231132199,240278150,1898019749,1330815076,807502151,789684970,1348633545,1846630408,291666219,318173066,1837485737,1408636264,746927179,1423915051,732698888,366985929,1789715434,1765307723,374035560,674795433,1464577674,1735012301,404295406,644535599,1494873100,1519215277,637420430,462264399,1694415212,480556300,1675072559,1571049454,584543949,558102636,1580259663,1615004302,523248557,1579369941,558916854,522436407,1615896084,1673791669,481765782,583332439,1572328308,636346132,1520369207,1693263350,463340757,403346036,1736029015,1493854358,645482933,374917362,1764485585,1465397776,673911603,733971858,1422697649,1790934896,365715027,1838567987,317027088,748071121,1407551986,1349590867,788676208,292677041,1845675154,1899161407,239191580,808590813,1329675518,1289071199,866552700,232083645,1923510686,184319486,1972329693,1274840860,881829439,924528798,1214779837,1981532796,157870943,961112600,1178225467,2018087162,121287129,78522232,2078082651,1169087898,987626681,1116205273,1039454714,59181627,2096376600,2137046457,1285274,1046497115,1091790456,60830479,2094207532,1117833709,1037297870,1044872815,1093951308,2135393421,3450286,2020518350,119376109,963531564,1176334863,1166664878,989513101,76095052,2079997807,1272692264,883465995,182142154,1973970409,1983705928,156226155,926681514,1213147273,806692073,1332086218,1897258507,241631016,233990537,1921075370,1290965867,864137800,749834725,1405268166,1840343815,314722852,290905221,1847983526,1347823207,790955844,1467943716,671885831,377483718,1762447589,1788364356,367748967,731430054,1424727429,1690967234,465124833,634054176,1522124547,1496142242,643723393,405646144,1734249059,520390147,1618454304,1577352417,561470914,585354083,1569778240,1675833729,479203490,1568896730,586176505,478383160,1676717339,1617181626,521607833,560251224,1578623099,642640923,1497287992,1733105401,406730714,464167291,1691975768,1521114009,635009722,368638973,1787550430,1425539359,730538044,673167005,1466734526,1763658879,376204636,1849057596,289751071,792107998,1346747133,1406217308,748817791,315741886,1839396765,1922225200,232912147,865218258,1289818097,1333107024,805746803,242574258,1896235665,157044465,1982820306,1214034963,925865264,884671377,1271407282,1975253363,180934736,988371223,1167751220,2078909429,77234902,118363255,2021471572,1175383701,964546486,1093125078,1045750517,2570548,2136217623,2092994230,62107541,1036022868,1119049079])\n// prettier-ignore\nconst POP_LO = new Int32Array([0,-1826189856,-1720019389,173808547,-1916624635,518270181,347617094,-2019640666,461718026,-2002530326,-2097163191,299456937,-1773673713,90271471,255685964,-1675888468,-2009265769,454788215,289906644,-2107567564,100640914,-1764153998,-1668989231,262386481,-1816638563,10405501,180542942,-1713090498,511371928,-1923324040,-2030011173,338096443,-1353867603,1013650253,909576430,-1525578482,579813288,-1314278840,-1141528085,684925963,-1261904729,669929799,766659300,-1097545980,956988834,-1439895486,-1603212319,861300225,661690170,-1269425446,-1106640519,757894297,-1431161281,966048735,868786300,-1595003492,1022743856,-1345103664,-1517337741,917098131,-1321765835,571603413,676192886,-1150586986,1587232090,-843206470,-941511911,1422337785,-749101985,1082069439,1243810332,-653948932,1159626576,-700910928,-597366509,1329751283,-925049259,1543132085,1369851926,-1031748106,-693750579,1166063917,1339859598,-587583634,1533318600,-935192536,-1038220405,1362660971,-853313849,1577450279,1415176324,-947950236,1088542658,-741909982,-644136575,1253952609,-237591561,1659907607,1756116404,-74794924,2081686258,-281899246,-445737807,1984436561,-363601411,2037738525,1932097470,-535823778,1737572600,-189281000,-18098501,1842174811,2045487712,-355653760,-527352797,1941418435,-198636699,1729070725,1834196262,-25882426,1651435626,-246913654,-82543063,1748169673,-273921681,2089469071,1993793324,-437234996,33683255,-1859683625,-1686412940,140373140,-1883023822,484826066,381272177,-2053157487,428127549,-1969080099,-2130828418,332967582,-1807346632,123771352,222069371,-1642459237,-1975714144,421163840,323381475,-2141133565,134111141,-1797729723,-1635464730,228738054,-1850098518,43987274,147008233,-1679448311,477830575,-1889693617,-2063496212,371656204,-1387501158,1047192698,876019673,-1492094407,546228383,-1280817793,-1175167268,718459708,-1228330096,636462704,800308691,-1131073485,990612117,-1473443979,-1569645354,827822390,628187149,-1235751443,-1140066738,791509934,-1464614648,999640296,835278667,-1561339221,1056186887,-1378701337,-1483819964,883440036,-1288273150,537923298,709629249,-1184196447,1553648237,-809744499,-975152082,1455870414,-782734488,1115612808,1210252587,-620465973,1193248871,-734460537,-563798492,1296274372,-891475614,1509663874,1403502369,-1065274687,-727202822,1199656474,1306351033,-553920423,1499816703,-901517537,-1071647556,1396275548,-819822096,1543769104,1448613811,-981558701,1121984757,-775508715,-610617674,1220295510,-203991872,1626462496,1789772419,-108310685,2115368389,-315394011,-412130426,1951002214,-397273398,2071239466,1898479753,-502395543,1703983055,-155829713,-51764852,1875684460,2078956887,-389230409,-493827308,1907771124,-165086126,1695445426,1867672081,-59447311,1617895261,-213282115,-116029154,1781728510,-307380648,2123051960,1960257563,-403593733])\n\n// Chunker parameters\nconst RABIN_MIN = 8192\nconst RABIN_AVG = 16384\nconst RABIN_MAX = 32768\nconst RABIN_WINDOW = 64\n// Boundary: all mask bits (14 bits) set in lo word. RABIN_AVG is a power of 2.\nconst RABIN_HASH_MASK = RABIN_AVG - 1 // 0x3FFF\n\nexport type CompressionFormat = \"deflate\" | \"gzip\"\n\ninterface BlockMap {\n version: \"2\"\n files: Array<{\n name: string\n offset: number\n checksums: string[]\n sizes: number[]\n }>\n}\n\nfunction compress(data: Buffer, format: CompressionFormat): Buffer {\n return format === \"deflate\" ? zlib.deflateRawSync(data, { level: 9 }) : zlib.gzipSync(data, { level: 9 })\n}\n\n/**\n * Build a content-defined block map for `inFile` using Rabin fingerprinting.\n *\n * Files are processed via streaming (peak memory ≈ RABIN_MAX = 32 KB per chunk,\n * not the full file size), making this safe for large installers.\n *\n * - If `outFile` is omitted: compressed blockmap is appended to `inFile`\n * (used for NSIS web installer / AppImage embed); `blockMapSize` is returned.\n * - If `outFile` is provided: compressed blockmap is written to that file;\n * `blockMapSize` is not included in the result.\n *\n * Returned `sha512` is SHA-512 of the full file as it exists after the call.\n */\nexport async function buildBlockMap(inFile: string, compressionFormat: CompressionFormat, outFile?: string): Promise<BlockMapDataHolder> {\n const fileHash = createHash(\"sha512\")\n const checksums: string[] = []\n const sizes: number[] = []\n let totalSize = 0\n\n // Per-chunk Rabin state. Peak memory ≈ RABIN_MAX (32 KB) — not file size.\n const chunkBuf = Buffer.allocUnsafe(RABIN_MAX)\n let chunkN = 0 // bytes accumulated for current chunk\n let hi = 0\n let lo = 0\n const win = new Uint8Array(RABIN_WINDOW) // rolling window ring buffer\n let wpos = 0\n\n function emitChunk() {\n checksums.push(Buffer.from(blake2b(chunkBuf.subarray(0, chunkN), { dkLen: 18 })).toString(\"base64\"))\n sizes.push(chunkN)\n chunkN = 0\n hi = 0\n lo = 0\n win.fill(0)\n wpos = 0\n }\n\n // Called once per byte; inlines the three-phase Rabin state machine:\n // skip (< MIN-WINDOW bytes) → prime (next WINDOW bytes) → scan (≥ MIN bytes)\n function processByte(b: number) {\n chunkBuf[chunkN++] = b\n\n if (chunkN <= RABIN_MIN - RABIN_WINDOW) {\n // Skip phase: not close enough to MIN to start priming yet\n return\n }\n\n if (chunkN <= RABIN_MIN) {\n // Prime phase: non-windowed hash update, filling the ring buffer\n win[wpos] = b\n wpos = (wpos + 1) % RABIN_WINDOW\n const top = (hi >>> 23) & 0xff\n const nhi = ((hi << 8) | (lo >>> 24)) & 0x7fffffff\n const nlo = ((lo << 8) | b) & 0xffffffff\n hi = (nhi ^ PUSH_HI[top]) | 0\n lo = (nlo ^ PUSH_LO[top]) | 0\n // At exactly MIN: check whether the primed hash is already a boundary\n if (chunkN === RABIN_MIN && (lo & RABIN_HASH_MASK) === RABIN_HASH_MASK) {\n emitChunk()\n }\n return\n }\n\n // Scan phase: sliding window — pop oldest byte, push new byte\n const old = win[wpos]\n win[wpos] = b\n wpos = (wpos + 1) % RABIN_WINDOW\n hi = (hi ^ POP_HI[old]) | 0\n lo = (lo ^ POP_LO[old]) | 0\n const top = (hi >>> 23) & 0xff\n const nhi = ((hi << 8) | (lo >>> 24)) & 0x7fffffff\n const nlo = ((lo << 8) | b) & 0xffffffff\n hi = (nhi ^ PUSH_HI[top]) | 0\n lo = (nlo ^ PUSH_LO[top]) | 0\n\n if ((lo & RABIN_HASH_MASK) === RABIN_HASH_MASK || chunkN >= RABIN_MAX) {\n emitChunk()\n }\n }\n\n // Stream-read the file, feeding SHA-512 and the Rabin chunker simultaneously\n await new Promise<void>((resolve, reject) => {\n const rs = createReadStream(inFile, { highWaterMark: 256 * 1024 })\n rs.on(\"data\", (chunk: Buffer | string) => {\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)\n chunk = buf\n fileHash.update(chunk)\n totalSize += chunk.length\n for (let i = 0; i < chunk.length; i++) {\n processByte(chunk[i])\n }\n })\n rs.on(\"end\", () => {\n if (chunkN > 0) {\n emitChunk()\n }\n resolve()\n })\n rs.on(\"error\", reject)\n })\n\n const blockMap: BlockMap = {\n version: \"2\",\n files: [{ name: \"file\", offset: 0, checksums, sizes }],\n }\n const compressed = compress(Buffer.from(JSON.stringify(blockMap)), compressionFormat)\n\n if (outFile == null || outFile === \"\") {\n // Append mode: write compressed blockmap + 4-byte size in one atomic call\n // to avoid a partial-write window between the two separate appendFile calls.\n const sizeHeader = Buffer.allocUnsafe(4)\n sizeHeader.writeUInt32BE(compressed.length, 0)\n const appended = Buffer.concat([compressed, sizeHeader])\n await appendFile(inFile, appended)\n fileHash.update(appended)\n\n return {\n size: totalSize + appended.length,\n sha512: fileHash.digest(\"base64\"),\n blockMapSize: compressed.length,\n }\n }\n\n await writeFile(outFile, compressed)\n return {\n size: totalSize,\n sha512: fileHash.digest(\"base64\"),\n }\n}\n"]}
@@ -4,7 +4,7 @@ import { Target } from "../../core";
4
4
  import { WinPackager } from "../../winPackager";
5
5
  import { Defines } from "./Defines";
6
6
  import { NsisOptions } from "./nsisOptions";
7
- import { AppPackageHelper } from "./nsisUtil";
7
+ import { AppPackageHelper, CopyElevateHelper } from "./nsisUtil";
8
8
  export declare class NsisTarget extends Target {
9
9
  readonly packager: WinPackager;
10
10
  readonly outDir: string;
@@ -19,7 +19,7 @@ export declare class NsisTarget extends Target {
19
19
  get isBuildDifferentialAware(): boolean;
20
20
  private getPreCompressedFileExtensions;
21
21
  /** @private */
22
- buildAppPackage(appOutDir: string, arch: Arch): Promise<PackageFileInfo>;
22
+ buildAppPackage(appOutDir: string, arch: Arch, elevateHelper?: CopyElevateHelper | null): Promise<PackageFileInfo>;
23
23
  protected installerFilenamePattern(primaryArch?: Arch | null, defaultArch?: string): string;
24
24
  private get isPortable();
25
25
  finishBuild(): Promise<any>;
@@ -71,7 +71,7 @@ class NsisTarget extends core_1.Target {
71
71
  return result == null ? null : (0, builder_util_1.asArray)(result).map(it => (it.startsWith(".") ? it : `.${it}`));
72
72
  }
73
73
  /** @private */
74
- async buildAppPackage(appOutDir, arch) {
74
+ async buildAppPackage(appOutDir, arch, elevateHelper) {
75
75
  const options = this.options;
76
76
  const packager = this.packager;
77
77
  const isBuildDifferentialAware = this.isBuildDifferentialAware;
@@ -91,6 +91,14 @@ class NsisTarget extends core_1.Target {
91
91
  const timer = (0, timer_1.time)(`nsis package, ${builder_util_1.Arch[arch]}`);
92
92
  await (0, archive_1.archive)(format, archiveFile, appOutDir, isBuildDifferentialAware ? (0, differentialUpdateInfoBuilder_1.configureDifferentialAwareArchiveOptions)(archiveOptions) : archiveOptions);
93
93
  timer.end();
94
+ // Inject elevate.exe into the archive via a temp staging dir, never by mutating appOutDir
95
+ // during packaging. The copy into win-unpacked is deferred until all targets finish, so
96
+ // concurrent targets (Squirrel, ZIP, etc.) never pick up elevate.exe non-deterministically.
97
+ // `archiveOptions` was mutated in place by configureDifferentialAwareArchiveOptions above
98
+ // (when differential-aware), so it already reflects the effective compression settings.
99
+ if (elevateHelper) {
100
+ await elevateHelper.addToArchive(archiveFile, this, format, archiveOptions, appOutDir);
101
+ }
94
102
  if (isBuildDifferentialAware && this.isWebInstaller) {
95
103
  const data = await (0, differentialUpdateInfoBuilder_1.appendBlockmap)(archiveFile);
96
104
  return {