app-builder-lib 26.14.0 → 26.15.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 (83) hide show
  1. package/out/configuration.d.ts +11 -0
  2. package/out/configuration.js.map +1 -1
  3. package/out/electron/ElectronFramework.js +2 -6
  4. package/out/electron/ElectronFramework.js.map +1 -1
  5. package/out/frameworks/LibUiFramework.d.ts +25 -0
  6. package/out/frameworks/LibUiFramework.js +107 -19
  7. package/out/frameworks/LibUiFramework.js.map +1 -1
  8. package/out/mac/MacTargetHelper.d.ts +7 -2
  9. package/out/mac/MacTargetHelper.js +18 -14
  10. package/out/mac/MacTargetHelper.js.map +1 -1
  11. package/out/macPackager.js +2 -3
  12. package/out/macPackager.js.map +1 -1
  13. package/out/node-module-collector/nodeModulesCollector.d.ts +17 -8
  14. package/out/node-module-collector/nodeModulesCollector.js +86 -60
  15. package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
  16. package/out/options/linuxOptions.d.ts +10 -0
  17. package/out/options/linuxOptions.js.map +1 -1
  18. package/out/options/macOptions.d.ts +12 -2
  19. package/out/options/macOptions.js.map +1 -1
  20. package/out/packager.d.ts +0 -4
  21. package/out/packager.js +0 -19
  22. package/out/packager.js.map +1 -1
  23. package/out/targets/FpmTarget.js +6 -5
  24. package/out/targets/FpmTarget.js.map +1 -1
  25. package/out/targets/LinuxTargetHelper.d.ts +1 -0
  26. package/out/targets/LinuxTargetHelper.js +23 -1
  27. package/out/targets/LinuxTargetHelper.js.map +1 -1
  28. package/out/targets/MsiTarget.js +2 -1
  29. package/out/targets/MsiTarget.js.map +1 -1
  30. package/out/targets/appimage/AppImageTarget.js +6 -1
  31. package/out/targets/appimage/AppImageTarget.js.map +1 -1
  32. package/out/targets/appimage/appImageUtil.d.ts +2 -0
  33. package/out/targets/appimage/appImageUtil.js +2 -2
  34. package/out/targets/appimage/appImageUtil.js.map +1 -1
  35. package/out/targets/archive.d.ts +0 -1
  36. package/out/targets/archive.js +60 -88
  37. package/out/targets/archive.js.map +1 -1
  38. package/out/targets/blockmap/blockmap.js +8 -4
  39. package/out/targets/blockmap/blockmap.js.map +1 -1
  40. package/out/targets/nsis/NsisTarget.js +6 -12
  41. package/out/targets/nsis/NsisTarget.js.map +1 -1
  42. package/out/targets/pkg.d.ts +13 -0
  43. package/out/targets/pkg.js +34 -9
  44. package/out/targets/pkg.js.map +1 -1
  45. package/out/targets/snap/core24.js +4 -3
  46. package/out/targets/snap/core24.js.map +1 -1
  47. package/out/targets/snap/coreLegacy.d.ts +23 -0
  48. package/out/targets/snap/coreLegacy.js +161 -23
  49. package/out/targets/snap/coreLegacy.js.map +1 -1
  50. package/out/toolsets/7zip.d.ts +2 -0
  51. package/out/toolsets/7zip.js +72 -0
  52. package/out/toolsets/7zip.js.map +1 -0
  53. package/out/toolsets/wine.d.ts +5 -0
  54. package/out/toolsets/wine.js +100 -0
  55. package/out/toolsets/wine.js.map +1 -0
  56. package/out/util/dynamicImport.js +0 -2
  57. package/out/util/dynamicImport.js.map +1 -1
  58. package/out/util/electronGet.js +36 -5
  59. package/out/util/electronGet.js.map +1 -1
  60. package/out/util/packageDependencies.d.ts +0 -6
  61. package/out/util/packageDependencies.js +0 -17
  62. package/out/util/packageDependencies.js.map +1 -1
  63. package/out/util/yarn.d.ts +0 -3
  64. package/out/util/yarn.js +3 -15
  65. package/out/util/yarn.js.map +1 -1
  66. package/out/version.d.ts +1 -1
  67. package/out/version.js +1 -1
  68. package/out/version.js.map +1 -1
  69. package/out/vm/WineVm.d.ts +5 -2
  70. package/out/vm/WineVm.js +19 -5
  71. package/out/vm/WineVm.js.map +1 -1
  72. package/out/vm/vm.js.map +1 -1
  73. package/package.json +10 -10
  74. package/scheme.json +25 -4
  75. package/templates/snap/desktop-common.sh +444 -0
  76. package/templates/snap/desktop-gnome-specific.sh +31 -0
  77. package/templates/snap/desktop-init.sh +52 -0
  78. package/out/util/appBuilder.d.ts +0 -4
  79. package/out/util/appBuilder.js +0 -36
  80. package/out/util/appBuilder.js.map +0 -1
  81. package/out/wine.d.ts +0 -5
  82. package/out/wine.js +0 -31
  83. package/out/wine.js.map +0 -1
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tar = tar;
4
4
  exports.compute7zCompressArgs = compute7zCompressArgs;
5
- exports.computeZipCompressArgs = computeZipCompressArgs;
6
5
  exports.archive = archive;
7
6
  const builder_util_1 = require("builder-util");
8
7
  const fs_extra_1 = require("fs-extra");
9
8
  const path = require("path");
10
9
  const tar_1 = require("tar");
11
10
  const linux_1 = require("../toolsets/linux");
11
+ const _7zip_1 = require("../toolsets/7zip");
12
12
  const ALLOWED_7Z_FILTERS = new Set(["BCJ", "BCJ2", "ARM", "ARMT", "IA64", "PPC", "SPARC", "DELTA"]);
13
13
  function validateCompressionLevel(level) {
14
14
  if (!/^[0-9]$/.test(level)) {
@@ -38,49 +38,42 @@ async function tar({ compression, format, outFile, dirToArchive, isMacApp, tempD
38
38
  if (format === "tar.lz") {
39
39
  const lzipPath = process.platform === "darwin" ? (await (0, linux_1.getLinuxToolsMacToolset)()).lzip : "lzip";
40
40
  await (0, builder_util_1.exec)(lzipPath, [compression === "store" ? "-1" : "-9", "--keep" /* keep (don't delete) input files */, tarFile]);
41
- // bloody lzip creates file in the same dir where input file with postfix `.lz`, option --output doesn't work
41
+ // lzip creates the output file in the same directory as the input with a .lz suffix
42
42
  await (0, fs_extra_1.move)(`${tarFile}.lz`, outFile);
43
43
  return;
44
44
  }
45
- const args = compute7zCompressArgs(format === "tar.xz" ? "xz" : format === "tar.bz2" ? "bzip2" : "gzip", {
46
- isRegularFile: true,
47
- method: "DEFAULT",
48
- compression,
49
- });
45
+ const compressFormat = format === "tar.xz" ? "xz" : format === "tar.bz2" ? "bzip2" : "gzip";
46
+ const args = compute7zCompressArgs(compressFormat, { isRegularFile: true, method: "DEFAULT", compression });
50
47
  args.push(outFile, tarFile);
51
- await (0, builder_util_1.exec)(await (0, builder_util_1.getPath7za)(), args, {
52
- cwd: path.dirname(dirToArchive),
53
- }, builder_util_1.debug7z.enabled);
48
+ await (0, builder_util_1.exec)(await (0, _7zip_1.getPath7za)(), args, { cwd: path.dirname(dirToArchive) }, builder_util_1.debug7z.enabled);
54
49
  }
55
50
  function compute7zCompressArgs(format, options = {}) {
56
51
  let storeOnly = options.compression === "store";
57
52
  const args = debug7zArgs("a");
58
- let isLevelSet = false;
59
53
  const compressionLevel = process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL;
60
54
  if (compressionLevel != null) {
61
55
  validateCompressionLevel(compressionLevel);
62
- storeOnly = false;
56
+ storeOnly = false; // env var overrides "store" config
63
57
  args.push(`-mx=${compressionLevel}`);
64
- isLevelSet = true;
65
58
  }
66
- const isZip = format === "zip";
67
- if (!storeOnly) {
59
+ else if (storeOnly) {
60
+ // -mx=0 is the universal "no compression" flag across all formats (zip, 7z, gzip, xz, bzip2).
61
+ // -mm=Copy would only be valid for zip/7z and causes E_INVALIDARG on xz/gzip/bzip2.
62
+ args.push("-mx=0");
63
+ }
64
+ else {
65
+ const isZip = format === "zip";
66
+ // ZIP uses level 7 by default; everything else (7z, gzip, xz, bzip2) uses level 9
67
+ args.push("-mx=" + (isZip && options.compression !== "maximum" ? "7" : "9"));
68
68
  if (isZip && options.compression === "maximum") {
69
69
  // http://superuser.com/a/742034
70
70
  args.push("-mfb=258", "-mpass=15");
71
71
  }
72
- if (!isLevelSet) {
73
- // https://github.com/electron-userland/electron-builder/pull/3032
74
- args.push("-mx=" + (!isZip || options.compression === "maximum" ? "9" : "7"));
75
- }
76
72
  }
77
73
  if (options.dictSize != null) {
78
74
  args.push(`-md=${options.dictSize}m`);
79
75
  }
80
- // https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm#7Z
81
- // https://stackoverflow.com/questions/27136783/7zip-produces-different-output-from-identical-input
82
- // tc and ta are off by default, but to be sure, we explicitly set it to off
83
- // disable "Stores NTFS timestamps for files: Modification time, Creation time, Last access time." to produce the same archive for the same data
76
+ // Disable NTFS timestamps for reproducible archives
84
77
  if (!options.isRegularFile) {
85
78
  args.push("-mtc=off");
86
79
  }
@@ -91,8 +84,6 @@ function compute7zCompressArgs(format, options = {}) {
91
84
  if (options.isArchiveHeaderCompressed === false) {
92
85
  args.push("-mhc=off");
93
86
  }
94
- // https://www.7-zip.org/7z.html
95
- // Filters: BCJ, BCJ2, ARM, ARMT, IA64, PPC, SPARC, ...
96
87
  const sevenZFilter = process.env.ELECTRON_BUILDER_7Z_FILTER;
97
88
  if (sevenZFilter) {
98
89
  if (!ALLOWED_7Z_FILTERS.has(sevenZFilter.toUpperCase())) {
@@ -100,60 +91,19 @@ function compute7zCompressArgs(format, options = {}) {
100
91
  }
101
92
  args.push(`-mf=${sevenZFilter}`);
102
93
  }
103
- // args valid only for 7z
104
- // -mtm=off disable "Stores last Modified timestamps for files."
105
94
  args.push("-mtm=off", "-mta=off");
106
95
  }
107
- if (options.method != null) {
108
- if (options.method !== "DEFAULT") {
109
- args.push(`-mm=${options.method}`);
110
- }
96
+ if (options.method != null && options.method !== "DEFAULT") {
97
+ args.push(`-mm=${options.method}`);
111
98
  }
112
- else if (isZip || storeOnly) {
99
+ else if (format === "zip") {
100
+ // -mm is only set explicitly for zip (Deflate/Copy) and includes the UTF-8 flag.
101
+ // For all other formats the codec is implicit from the output file extension.
113
102
  args.push(`-mm=${storeOnly ? "Copy" : "Deflate"}`);
114
- }
115
- if (isZip) {
116
- // -mcu switch: 7-Zip uses UTF-8, if there are non-ASCII symbols.
117
- // because default mode: 7-Zip uses UTF-8, if the local code page doesn't contain required symbols.
118
- // but archive should be the same regardless where produced
119
103
  args.push("-mcu");
120
104
  }
121
105
  return args;
122
106
  }
123
- function computeZipCompressArgs(options = {}) {
124
- let storeOnly = options.compression === "store";
125
- // do not deref symlinks
126
- const args = ["-q", "-r", "-y"];
127
- if (builder_util_1.debug7z.enabled) {
128
- args.push("-v");
129
- }
130
- const compressionLevelZip = process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL;
131
- if (compressionLevelZip != null) {
132
- validateCompressionLevel(compressionLevelZip);
133
- storeOnly = false;
134
- args.push(`-${compressionLevelZip}`);
135
- }
136
- else if (!storeOnly) {
137
- // https://github.com/electron-userland/electron-builder/pull/3032
138
- args.push("-" + (options.compression === "maximum" ? "9" : "7"));
139
- }
140
- if (options.dictSize != null) {
141
- builder_util_1.log.warn({ distSize: options.dictSize }, `ignoring unsupported option`);
142
- }
143
- // do not save extra file attributes (Extended Attributes on OS/2, uid/gid and file times on Unix)
144
- if (!options.isRegularFile) {
145
- args.push("-X");
146
- }
147
- if (options.method != null) {
148
- if (options.method !== "DEFAULT") {
149
- builder_util_1.log.warn({ method: options.method }, `ignoring unsupported option`);
150
- }
151
- }
152
- else {
153
- args.push("-Z", storeOnly ? "store" : "deflate");
154
- }
155
- return args;
156
- }
157
107
  // 7z is very fast, so, use ultra compression
158
108
  /** @internal */
159
109
  async function archive(format, outFile, dirToArchive, options = {}) {
@@ -168,28 +118,50 @@ async function archive(format, outFile, dirToArchive, options = {}) {
168
118
  builder_util_1.log.warn({ reason: "7z doesn't support NFD-normalized filenames" }, `using zip`);
169
119
  use7z = false;
170
120
  }
171
- const args = use7z ? compute7zCompressArgs(format, options) : computeZipCompressArgs(options);
172
- // remove file before - 7z and zip doesn't overwrite file, but update
173
- await (0, builder_util_1.unlinkIfExists)(outFile);
174
- args.push(outFile, options.withoutDir ? "." : path.basename(dirToArchive));
175
- if (options.excluded != null) {
176
- for (const mask of options.excluded) {
177
- args.push(use7z ? `-xr!${mask}` : `-x${mask}`);
121
+ if (use7z) {
122
+ const args = compute7zCompressArgs(format, options);
123
+ await (0, builder_util_1.unlinkIfExists)(outFile);
124
+ args.push(outFile, options.withoutDir ? "." : path.basename(dirToArchive));
125
+ if (options.excluded != null) {
126
+ for (const mask of options.excluded) {
127
+ if (mask.includes("..")) {
128
+ throw new Error(`Excluded archive pattern contains path traversal sequence: "${mask}"`);
129
+ }
130
+ args.push(`-xr!${mask}`);
131
+ }
132
+ }
133
+ try {
134
+ await (0, builder_util_1.exec)(await (0, _7zip_1.getPath7za)(), args, { cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive) }, builder_util_1.debug7z.enabled);
135
+ }
136
+ catch (e) {
137
+ if (e.code === "ENOENT" && !(await (0, builder_util_1.exists)(dirToArchive))) {
138
+ throw new Error(`Cannot create archive: "${dirToArchive}" doesn't exist`);
139
+ }
140
+ else {
141
+ throw e;
142
+ }
178
143
  }
179
144
  }
180
- try {
181
- const binary = use7z ? await (0, builder_util_1.getPath7za)() : "zip";
182
- await (0, builder_util_1.exec)(binary, args, {
183
- cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive),
184
- }, builder_util_1.debug7z.enabled);
185
- }
186
- catch (e) {
187
- if (e.code === "ENOENT" && !(await (0, builder_util_1.exists)(dirToArchive))) {
188
- throw new Error(`Cannot create archive: "${dirToArchive}" doesn't exist`);
145
+ else {
146
+ // NFD fallback: macOS native zip handles NFD-normalized Unicode paths correctly
147
+ const args = ["-q", "-r", "-y"];
148
+ if (builder_util_1.debug7z.enabled) {
149
+ args.push("-v");
150
+ }
151
+ if (options.compression === "store") {
152
+ args.push("-0");
189
153
  }
190
154
  else {
191
- throw e;
155
+ args.push(options.compression === "maximum" ? "-9" : "-7");
156
+ }
157
+ await (0, builder_util_1.unlinkIfExists)(outFile);
158
+ args.push(outFile, options.withoutDir ? "." : path.basename(dirToArchive));
159
+ if (options.excluded != null) {
160
+ for (const mask of options.excluded) {
161
+ args.push(`-x${mask}`);
162
+ }
192
163
  }
164
+ await (0, builder_util_1.exec)("zip", args, { cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive) }, builder_util_1.debug7z.enabled);
193
165
  }
194
166
  return outFile;
195
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/targets/archive.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug7z, exec, exists, getPath7za, log, statOrNull, unlinkIfExists } from \"builder-util\"\nimport { move } from \"fs-extra\"\nimport * as path from \"path\"\nimport { create } from \"tar\"\nimport { TmpDir } from \"temp-file\"\nimport { CompressionLevel } from \"../core\"\nimport { getLinuxToolsMacToolset } from \"../toolsets/linux\"\nimport { TarOptionsWithAliasesAsync } from \"tar/dist/commonjs/options\"\n\nconst ALLOWED_7Z_FILTERS = new Set([\"BCJ\", \"BCJ2\", \"ARM\", \"ARMT\", \"IA64\", \"PPC\", \"SPARC\", \"DELTA\"])\n\nfunction validateCompressionLevel(level: string): void {\n if (!/^[0-9]$/.test(level)) {\n throw new Error(`ELECTRON_BUILDER_COMPRESSION_LEVEL must be a single digit 0-9, got: \"${level}\"`)\n }\n}\n\ntype TarConfig = {\n compression: CompressionLevel | any\n format: string\n outFile: string\n dirToArchive: string\n isMacApp: boolean\n tempDirManager: TmpDir\n}\n\n/** @internal */\nexport async function tar({ compression, format, outFile, dirToArchive, isMacApp, tempDirManager }: TarConfig): Promise<void> {\n const tarFile = await tempDirManager.getTempFile({ suffix: \".tar\" })\n const tarArgs: TarOptionsWithAliasesAsync = {\n file: tarFile,\n portable: true,\n cwd: dirToArchive,\n prefix: path.basename(outFile, `.${format}`),\n }\n let tarDirectory = \".\"\n if (isMacApp) {\n delete tarArgs.prefix\n tarArgs.cwd = path.dirname(dirToArchive)\n tarDirectory = path.basename(dirToArchive)\n }\n\n await Promise.all([\n create(tarArgs, [tarDirectory]),\n // remove file before - 7z doesn't overwrite file, but update\n unlinkIfExists(outFile),\n ])\n\n if (format === \"tar.lz\") {\n const lzipPath = process.platform === \"darwin\" ? (await getLinuxToolsMacToolset()).lzip : \"lzip\"\n await exec(lzipPath, [compression === \"store\" ? \"-1\" : \"-9\", \"--keep\" /* keep (don't delete) input files */, tarFile])\n // bloody lzip creates file in the same dir where input file with postfix `.lz`, option --output doesn't work\n await move(`${tarFile}.lz`, outFile)\n return\n }\n\n const args = compute7zCompressArgs(format === \"tar.xz\" ? \"xz\" : format === \"tar.bz2\" ? \"bzip2\" : \"gzip\", {\n isRegularFile: true,\n method: \"DEFAULT\",\n compression,\n })\n args.push(outFile, tarFile)\n await exec(\n await getPath7za(),\n args,\n {\n cwd: path.dirname(dirToArchive),\n },\n debug7z.enabled\n )\n}\n\nexport interface ArchiveOptions {\n compression?: CompressionLevel | null\n\n /**\n * @default false\n */\n withoutDir?: boolean\n\n /**\n * @default true\n */\n solid?: boolean\n\n /**\n * @default true\n */\n isArchiveHeaderCompressed?: boolean\n\n dictSize?: number\n excluded?: Array<string> | null\n\n // DEFAULT allows to disable custom logic and do not pass method switch at all\n method?: \"Copy\" | \"LZMA\" | \"Deflate\" | \"DEFAULT\"\n\n isRegularFile?: boolean\n}\n\nexport function compute7zCompressArgs(format: string, options: ArchiveOptions = {}) {\n let storeOnly = options.compression === \"store\"\n const args = debug7zArgs(\"a\")\n\n let isLevelSet = false\n const compressionLevel = process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL\n if (compressionLevel != null) {\n validateCompressionLevel(compressionLevel)\n storeOnly = false\n args.push(`-mx=${compressionLevel}`)\n isLevelSet = true\n }\n\n const isZip = format === \"zip\"\n if (!storeOnly) {\n if (isZip && options.compression === \"maximum\") {\n // http://superuser.com/a/742034\n args.push(\"-mfb=258\", \"-mpass=15\")\n }\n\n if (!isLevelSet) {\n // https://github.com/electron-userland/electron-builder/pull/3032\n args.push(\"-mx=\" + (!isZip || options.compression === \"maximum\" ? \"9\" : \"7\"))\n }\n }\n\n if (options.dictSize != null) {\n args.push(`-md=${options.dictSize}m`)\n }\n\n // https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm#7Z\n // https://stackoverflow.com/questions/27136783/7zip-produces-different-output-from-identical-input\n // tc and ta are off by default, but to be sure, we explicitly set it to off\n // disable \"Stores NTFS timestamps for files: Modification time, Creation time, Last access time.\" to produce the same archive for the same data\n if (!options.isRegularFile) {\n args.push(\"-mtc=off\")\n }\n\n if (format === \"7z\" || format.endsWith(\".7z\")) {\n if (options.solid === false) {\n args.push(\"-ms=off\")\n }\n\n if (options.isArchiveHeaderCompressed === false) {\n args.push(\"-mhc=off\")\n }\n\n // https://www.7-zip.org/7z.html\n // Filters: BCJ, BCJ2, ARM, ARMT, IA64, PPC, SPARC, ...\n const sevenZFilter = process.env.ELECTRON_BUILDER_7Z_FILTER\n if (sevenZFilter) {\n if (!ALLOWED_7Z_FILTERS.has(sevenZFilter.toUpperCase())) {\n throw new Error(`ELECTRON_BUILDER_7Z_FILTER must be one of: ${[...ALLOWED_7Z_FILTERS].join(\", \")}`)\n }\n args.push(`-mf=${sevenZFilter}`)\n }\n\n // args valid only for 7z\n // -mtm=off disable \"Stores last Modified timestamps for files.\"\n args.push(\"-mtm=off\", \"-mta=off\")\n }\n\n if (options.method != null) {\n if (options.method !== \"DEFAULT\") {\n args.push(`-mm=${options.method}`)\n }\n } else if (isZip || storeOnly) {\n args.push(`-mm=${storeOnly ? \"Copy\" : \"Deflate\"}`)\n }\n\n if (isZip) {\n // -mcu switch: 7-Zip uses UTF-8, if there are non-ASCII symbols.\n // because default mode: 7-Zip uses UTF-8, if the local code page doesn't contain required symbols.\n // but archive should be the same regardless where produced\n args.push(\"-mcu\")\n }\n return args\n}\n\nexport function computeZipCompressArgs(options: ArchiveOptions = {}) {\n let storeOnly = options.compression === \"store\"\n // do not deref symlinks\n const args = [\"-q\", \"-r\", \"-y\"]\n if (debug7z.enabled) {\n args.push(\"-v\")\n }\n\n const compressionLevelZip = process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL\n if (compressionLevelZip != null) {\n validateCompressionLevel(compressionLevelZip)\n storeOnly = false\n args.push(`-${compressionLevelZip}`)\n } else if (!storeOnly) {\n // https://github.com/electron-userland/electron-builder/pull/3032\n args.push(\"-\" + (options.compression === \"maximum\" ? \"9\" : \"7\"))\n }\n\n if (options.dictSize != null) {\n log.warn({ distSize: options.dictSize }, `ignoring unsupported option`)\n }\n\n // do not save extra file attributes (Extended Attributes on OS/2, uid/gid and file times on Unix)\n if (!options.isRegularFile) {\n args.push(\"-X\")\n }\n\n if (options.method != null) {\n if (options.method !== \"DEFAULT\") {\n log.warn({ method: options.method }, `ignoring unsupported option`)\n }\n } else {\n args.push(\"-Z\", storeOnly ? \"store\" : \"deflate\")\n }\n return args\n}\n\n// 7z is very fast, so, use ultra compression\n/** @internal */\nexport async function archive(format: string, outFile: string, dirToArchive: string, options: ArchiveOptions = {}): Promise<string> {\n const outFileStat = await statOrNull(outFile)\n const dirStat = await statOrNull(dirToArchive)\n if (outFileStat && dirStat && outFileStat.mtime > dirStat.mtime) {\n log.info({ reason: \"Archive file is up to date\", outFile }, `skipped archiving`)\n return outFile\n }\n let use7z = true\n if (process.platform === \"darwin\" && format === \"zip\" && dirToArchive.normalize(\"NFC\") !== dirToArchive) {\n log.warn({ reason: \"7z doesn't support NFD-normalized filenames\" }, `using zip`)\n use7z = false\n }\n const args = use7z ? compute7zCompressArgs(format, options) : computeZipCompressArgs(options)\n // remove file before - 7z and zip doesn't overwrite file, but update\n await unlinkIfExists(outFile)\n\n args.push(outFile, options.withoutDir ? \".\" : path.basename(dirToArchive))\n if (options.excluded != null) {\n for (const mask of options.excluded) {\n args.push(use7z ? `-xr!${mask}` : `-x${mask}`)\n }\n }\n\n try {\n const binary = use7z ? await getPath7za() : \"zip\"\n await exec(\n binary,\n args,\n {\n cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive),\n },\n debug7z.enabled\n )\n } catch (e: any) {\n if (e.code === \"ENOENT\" && !(await exists(dirToArchive))) {\n throw new Error(`Cannot create archive: \"${dirToArchive}\" doesn't exist`)\n } else {\n throw e\n }\n }\n\n return outFile\n}\n\nfunction debug7zArgs(command: \"a\" | \"x\"): Array<string> {\n const args = [command, \"-bd\"]\n if (debug7z.enabled) {\n args.push(\"-bb\")\n }\n return args\n}\n"]}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/targets/archive.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug7z, exec, exists, log, statOrNull, unlinkIfExists } from \"builder-util\"\nimport { move } from \"fs-extra\"\nimport * as path from \"path\"\nimport { create } from \"tar\"\nimport { TarOptionsWithAliasesAsync } from \"tar/dist/commonjs/options\"\nimport { TmpDir } from \"temp-file\"\nimport { CompressionLevel } from \"../core\"\nimport { getLinuxToolsMacToolset } from \"../toolsets/linux\"\nimport { getPath7za } from \"../toolsets/7zip\"\n\nconst ALLOWED_7Z_FILTERS = new Set([\"BCJ\", \"BCJ2\", \"ARM\", \"ARMT\", \"IA64\", \"PPC\", \"SPARC\", \"DELTA\"])\n\nfunction validateCompressionLevel(level: string): void {\n if (!/^[0-9]$/.test(level)) {\n throw new Error(`ELECTRON_BUILDER_COMPRESSION_LEVEL must be a single digit 0-9, got: \"${level}\"`)\n }\n}\n\ntype TarConfig = {\n compression: CompressionLevel | null | undefined\n format: string\n outFile: string\n dirToArchive: string\n isMacApp: boolean\n tempDirManager: TmpDir\n}\n\n/** @internal */\nexport async function tar({ compression, format, outFile, dirToArchive, isMacApp, tempDirManager }: TarConfig): Promise<void> {\n const tarFile = await tempDirManager.getTempFile({ suffix: \".tar\" })\n const tarArgs: TarOptionsWithAliasesAsync = {\n file: tarFile,\n portable: true,\n cwd: dirToArchive,\n prefix: path.basename(outFile, `.${format}`),\n }\n let tarDirectory = \".\"\n if (isMacApp) {\n delete tarArgs.prefix\n tarArgs.cwd = path.dirname(dirToArchive)\n tarDirectory = path.basename(dirToArchive)\n }\n\n await Promise.all([\n create(tarArgs, [tarDirectory]),\n // remove file before - 7z doesn't overwrite file, but update\n unlinkIfExists(outFile),\n ])\n\n if (format === \"tar.lz\") {\n const lzipPath = process.platform === \"darwin\" ? (await getLinuxToolsMacToolset()).lzip : \"lzip\"\n await exec(lzipPath, [compression === \"store\" ? \"-1\" : \"-9\", \"--keep\" /* keep (don't delete) input files */, tarFile])\n // lzip creates the output file in the same directory as the input with a .lz suffix\n await move(`${tarFile}.lz`, outFile)\n return\n }\n\n const compressFormat = format === \"tar.xz\" ? \"xz\" : format === \"tar.bz2\" ? \"bzip2\" : \"gzip\"\n const args = compute7zCompressArgs(compressFormat, { isRegularFile: true, method: \"DEFAULT\", compression })\n args.push(outFile, tarFile)\n await exec(await getPath7za(), args, { cwd: path.dirname(dirToArchive) }, debug7z.enabled)\n}\n\nexport interface ArchiveOptions {\n compression?: CompressionLevel | null\n\n /**\n * @default false\n */\n withoutDir?: boolean\n\n /**\n * @default true\n */\n solid?: boolean\n\n /**\n * @default true\n */\n isArchiveHeaderCompressed?: boolean\n\n dictSize?: number\n excluded?: Array<string> | null\n\n // DEFAULT allows to disable custom logic and do not pass method switch at all\n method?: \"Copy\" | \"LZMA\" | \"Deflate\" | \"DEFAULT\"\n\n isRegularFile?: boolean\n}\n\nexport function compute7zCompressArgs(format: string, options: ArchiveOptions = {}) {\n let storeOnly = options.compression === \"store\"\n const args = debug7zArgs(\"a\")\n\n const compressionLevel = process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL\n if (compressionLevel != null) {\n validateCompressionLevel(compressionLevel)\n storeOnly = false // env var overrides \"store\" config\n args.push(`-mx=${compressionLevel}`)\n } else if (storeOnly) {\n // -mx=0 is the universal \"no compression\" flag across all formats (zip, 7z, gzip, xz, bzip2).\n // -mm=Copy would only be valid for zip/7z and causes E_INVALIDARG on xz/gzip/bzip2.\n args.push(\"-mx=0\")\n } else {\n const isZip = format === \"zip\"\n // ZIP uses level 7 by default; everything else (7z, gzip, xz, bzip2) uses level 9\n args.push(\"-mx=\" + (isZip && options.compression !== \"maximum\" ? \"7\" : \"9\"))\n if (isZip && options.compression === \"maximum\") {\n // http://superuser.com/a/742034\n args.push(\"-mfb=258\", \"-mpass=15\")\n }\n }\n\n if (options.dictSize != null) {\n args.push(`-md=${options.dictSize}m`)\n }\n\n // Disable NTFS timestamps for reproducible archives\n if (!options.isRegularFile) {\n args.push(\"-mtc=off\")\n }\n\n if (format === \"7z\" || format.endsWith(\".7z\")) {\n if (options.solid === false) {\n args.push(\"-ms=off\")\n }\n\n if (options.isArchiveHeaderCompressed === false) {\n args.push(\"-mhc=off\")\n }\n\n const sevenZFilter = process.env.ELECTRON_BUILDER_7Z_FILTER\n if (sevenZFilter) {\n if (!ALLOWED_7Z_FILTERS.has(sevenZFilter.toUpperCase())) {\n throw new Error(`ELECTRON_BUILDER_7Z_FILTER must be one of: ${[...ALLOWED_7Z_FILTERS].join(\", \")}`)\n }\n args.push(`-mf=${sevenZFilter}`)\n }\n\n args.push(\"-mtm=off\", \"-mta=off\")\n }\n\n if (options.method != null && options.method !== \"DEFAULT\") {\n args.push(`-mm=${options.method}`)\n } else if (format === \"zip\") {\n // -mm is only set explicitly for zip (Deflate/Copy) and includes the UTF-8 flag.\n // For all other formats the codec is implicit from the output file extension.\n args.push(`-mm=${storeOnly ? \"Copy\" : \"Deflate\"}`)\n args.push(\"-mcu\")\n }\n\n return args\n}\n\n// 7z is very fast, so, use ultra compression\n/** @internal */\nexport async function archive(format: string, outFile: string, dirToArchive: string, options: ArchiveOptions = {}): Promise<string> {\n const outFileStat = await statOrNull(outFile)\n const dirStat = await statOrNull(dirToArchive)\n if (outFileStat && dirStat && outFileStat.mtime > dirStat.mtime) {\n log.info({ reason: \"Archive file is up to date\", outFile }, `skipped archiving`)\n return outFile\n }\n\n let use7z = true\n if (process.platform === \"darwin\" && format === \"zip\" && dirToArchive.normalize(\"NFC\") !== dirToArchive) {\n log.warn({ reason: \"7z doesn't support NFD-normalized filenames\" }, `using zip`)\n use7z = false\n }\n\n if (use7z) {\n const args = compute7zCompressArgs(format, options)\n await unlinkIfExists(outFile)\n args.push(outFile, options.withoutDir ? \".\" : path.basename(dirToArchive))\n if (options.excluded != null) {\n for (const mask of options.excluded) {\n if (mask.includes(\"..\")) {\n throw new Error(`Excluded archive pattern contains path traversal sequence: \"${mask}\"`)\n }\n args.push(`-xr!${mask}`)\n }\n }\n\n try {\n await exec(await getPath7za(), args, { cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive) }, debug7z.enabled)\n } catch (e: any) {\n if (e.code === \"ENOENT\" && !(await exists(dirToArchive))) {\n throw new Error(`Cannot create archive: \"${dirToArchive}\" doesn't exist`)\n } else {\n throw e\n }\n }\n } else {\n // NFD fallback: macOS native zip handles NFD-normalized Unicode paths correctly\n const args = [\"-q\", \"-r\", \"-y\"]\n if (debug7z.enabled) {\n args.push(\"-v\")\n }\n if (options.compression === \"store\") {\n args.push(\"-0\")\n } else {\n args.push(options.compression === \"maximum\" ? \"-9\" : \"-7\")\n }\n await unlinkIfExists(outFile)\n args.push(outFile, options.withoutDir ? \".\" : path.basename(dirToArchive))\n if (options.excluded != null) {\n for (const mask of options.excluded) {\n args.push(`-x${mask}`)\n }\n }\n await exec(\"zip\", args, { cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive) }, debug7z.enabled)\n }\n\n return outFile\n}\n\nfunction debug7zArgs(command: \"a\" | \"x\"): Array<string> {\n const args = [command, \"-bd\"]\n if (debug7z.enabled) {\n args.push(\"-bb\")\n }\n return args\n}\n"]}
@@ -85,8 +85,9 @@ async function buildBlockMap(inFile, compressionFormat, outFile) {
85
85
  hi = (nhi ^ PUSH_HI[top]) | 0;
86
86
  lo = (nlo ^ PUSH_LO[top]) | 0;
87
87
  // At exactly MIN: check whether the primed hash is already a boundary
88
- if (chunkN === RABIN_MIN && (lo & RABIN_HASH_MASK) === RABIN_HASH_MASK)
88
+ if (chunkN === RABIN_MIN && (lo & RABIN_HASH_MASK) === RABIN_HASH_MASK) {
89
89
  emitChunk();
90
+ }
90
91
  return;
91
92
  }
92
93
  // Scan phase: sliding window — pop oldest byte, push new byte
@@ -100,8 +101,9 @@ async function buildBlockMap(inFile, compressionFormat, outFile) {
100
101
  const nlo = ((lo << 8) | b) & 0xffffffff;
101
102
  hi = (nhi ^ PUSH_HI[top]) | 0;
102
103
  lo = (nlo ^ PUSH_LO[top]) | 0;
103
- if ((lo & RABIN_HASH_MASK) === RABIN_HASH_MASK || chunkN >= RABIN_MAX)
104
+ if ((lo & RABIN_HASH_MASK) === RABIN_HASH_MASK || chunkN >= RABIN_MAX) {
104
105
  emitChunk();
106
+ }
105
107
  }
106
108
  // Stream-read the file, feeding SHA-512 and the Rabin chunker simultaneously
107
109
  await new Promise((resolve, reject) => {
@@ -111,12 +113,14 @@ async function buildBlockMap(inFile, compressionFormat, outFile) {
111
113
  chunk = buf;
112
114
  fileHash.update(chunk);
113
115
  totalSize += chunk.length;
114
- for (let i = 0; i < chunk.length; i++)
116
+ for (let i = 0; i < chunk.length; i++) {
115
117
  processByte(chunk[i]);
118
+ }
116
119
  });
117
120
  rs.on("end", () => {
118
- if (chunkN > 0)
121
+ if (chunkN > 0) {
119
122
  emitChunk();
123
+ }
120
124
  resolve();
121
125
  });
122
126
  rs.on("error", reject);
@@ -1 +1 @@
1
- {"version":3,"file":"blockmap.js","sourceRoot":"","sources":["../../../src/targets/blockmap/blockmap.ts"],"names":[],"mappings":";;AA+DA,sCA2GC;AA1KD,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) emitChunk()\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) emitChunk()\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++) processByte(chunk[i])\n })\n rs.on(\"end\", () => {\n if (chunkN > 0) emitChunk()\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,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"]}
@@ -13,7 +13,6 @@ const platformPackager_1 = require("../../platformPackager");
13
13
  const hash_1 = require("../../util/hash");
14
14
  const macosVersion_1 = require("../../util/macosVersion");
15
15
  const timer_1 = require("../../util/timer");
16
- const wine_1 = require("../../wine");
17
16
  const archive_1 = require("../archive");
18
17
  const differentialUpdateInfoBuilder_1 = require("../differentialUpdateInfoBuilder");
19
18
  const targetUtil_1 = require("../targetUtil");
@@ -23,6 +22,7 @@ const nsisScriptGenerator_1 = require("./nsisScriptGenerator");
23
22
  const windows_1 = require("../../toolsets/windows");
24
23
  const nsisUtil_1 = require("./nsisUtil");
25
24
  const nsisValidation_1 = require("./nsisValidation");
25
+ const WineVm_1 = require("../../vm/WineVm");
26
26
  const debug = (0, debug_1.default)("electron-builder:nsis");
27
27
  // noinspection SpellCheckingInspection
28
28
  const ELECTRON_BUILDER_NS_UUID = builder_util_runtime_1.UUID.parse("50e065bc-3134-11e6-9bab-38c9862bdaf3");
@@ -235,16 +235,7 @@ class NsisTarget extends core_1.Target {
235
235
  });
236
236
  packageFiles[builder_util_1.Arch[arch]] = fileInfo;
237
237
  }
238
- const path7za = await (0, builder_util_1.getPath7za)();
239
- const archiveInfo = (await (0, builder_util_1.exec)(path7za, ["l", file])).trim();
240
- // after adding blockmap data will be "Warnings: 1" in the end of output
241
- const match = /(\d+)\s+\d+\s+\d+\s+files/.exec(archiveInfo);
242
- if (match == null) {
243
- builder_util_1.log.warn({ output: archiveInfo }, "cannot compute size of app package");
244
- }
245
- else {
246
- estimatedSize += parseInt(match[1], 10);
247
- }
238
+ estimatedSize += unpackedSize;
248
239
  }));
249
240
  }
250
241
  this.configureDefinesForAllTypeOfInstaller(defines);
@@ -344,6 +335,7 @@ class NsisTarget extends core_1.Target {
344
335
  return false;
345
336
  }
346
337
  async computeScriptAndSignUninstaller(defines, commands, installerPath, sharedHeader, archs) {
338
+ var _a;
347
339
  const packager = this.packager;
348
340
  const customScriptPath = await packager.getResource(this.options.script, "installer.nsi");
349
341
  const script = await (0, fs_extra_1.readFile)(customScriptPath || path.join(nsisUtil_1.nsisTemplatesDir, "installer.nsi"), "utf8");
@@ -360,6 +352,7 @@ class NsisTarget extends core_1.Target {
360
352
  defines.UNINSTALLER_OUT_FILE = isWin ? uninstallerPath : path.win32.join("Z:", uninstallerPath);
361
353
  await this.executeMakensis(defines, commands, sharedHeader + (await this.computeFinalScript(script, false, archs)));
362
354
  // http://forums.winamp.com/showthread.php?p=3078545
355
+ // TODO: remove workaround when wine is fully upgraded to 11
363
356
  if ((0, macosVersion_1.isMacOsCatalina)()) {
364
357
  try {
365
358
  await nsisUtil_1.UninstallerReader.exec(installerPath, uninstallerPath);
@@ -377,7 +370,8 @@ class NsisTarget extends core_1.Target {
377
370
  }
378
371
  }
379
372
  else {
380
- await (0, wine_1.execWine)(installerPath, null, [], { env: { __COMPAT_LAYER: "RunAsInvoker" } });
373
+ const wineVm = new WineVm_1.WineVmManager((_a = packager.config.toolsets) === null || _a === void 0 ? void 0 : _a.wine);
374
+ await wineVm.exec(installerPath, [], { env: { __COMPAT_LAYER: "RunAsInvoker" } });
381
375
  }
382
376
  await packager.signIf(uninstallerPath);
383
377
  delete defines.BUILD_UNINSTALLER;