@electron/fuses
Advanced tools
+120
-48
@@ -8,2 +8,5 @@ import cp from 'node:child_process'; | ||
| export { FuseState } from './constants.js'; | ||
| const SENTINEL_BYTES = Buffer.from(SENTINEL); | ||
| const SCAN_CHUNK_SIZE = 4 * 1024 * 1024; | ||
| const SCAN_CONCURRENCY = 2; | ||
| const state = (b) => b === undefined ? FuseState.INHERIT : b ? FuseState.ENABLE : FuseState.DISABLE; | ||
@@ -37,65 +40,134 @@ const buildFuseV1Wire = (config, wireLength) => { | ||
| }; | ||
| /** | ||
| * Streams through the file in fixed-size chunks looking for the fuse sentinel, | ||
| * so we never have to hold the entire (often 100+ MB) binary in memory. | ||
| * Chunks are processed by a small pool of concurrent workers so that | ||
| * Buffer.indexOf (CPU) on one chunk overlaps with the disk read (I/O) of the | ||
| * next. Each chunk overreads a few bytes into its neighbour so a sentinel | ||
| * straddling a boundary is still detected. | ||
| */ | ||
| const findSentinels = async (handle, firstOnly) => { | ||
| const { size } = await handle.stat(); | ||
| const overlap = SENTINEL_BYTES.length - 1; | ||
| const numChunks = Math.ceil(size / SCAN_CHUNK_SIZE); | ||
| const positions = []; | ||
| let next = 0; | ||
| let done = false; | ||
| const worker = async () => { | ||
| const buf = Buffer.allocUnsafe(SCAN_CHUNK_SIZE + overlap); | ||
| while (!done) { | ||
| const chunk = next++; | ||
| if (chunk >= numChunks) | ||
| return; | ||
| const start = chunk * SCAN_CHUNK_SIZE; | ||
| const len = Math.min(SCAN_CHUNK_SIZE + overlap, size - start); | ||
| const { bytesRead } = await handle.read(buf, 0, len, start); | ||
| const haystack = buf.subarray(0, bytesRead); | ||
| let idx = haystack.indexOf(SENTINEL_BYTES); | ||
| while (idx !== -1) { | ||
| positions.push(start + idx); | ||
| if (firstOnly) { | ||
| done = true; | ||
| return; | ||
| } | ||
| idx = haystack.indexOf(SENTINEL_BYTES, idx + 1); | ||
| } | ||
| } | ||
| }; | ||
| const workers = Math.min(SCAN_CONCURRENCY, numChunks); | ||
| await Promise.all(Array.from({ length: workers }, worker)); | ||
| return positions.sort((a, b) => a - b); | ||
| }; | ||
| const HEADER_LEN = 2; | ||
| // Wire length is encoded in a single byte so it can never exceed 255. | ||
| const MAX_WIRE_LEN = 255; | ||
| const readFuseWire = async (handle, sentinelPos) => { | ||
| const wirePos = sentinelPos + SENTINEL_BYTES.length; | ||
| const buf = Buffer.allocUnsafe(HEADER_LEN + MAX_WIRE_LEN); | ||
| const { bytesRead } = await handle.read(buf, 0, buf.length, wirePos); | ||
| const version = buf[0]; | ||
| const length = buf[1]; | ||
| return { | ||
| version, | ||
| length, | ||
| wireBytes: buf.subarray(HEADER_LEN, Math.min(HEADER_LEN + length, bytesRead)), | ||
| wireBytesPos: wirePos + HEADER_LEN, | ||
| }; | ||
| }; | ||
| const setFuseWire = async (pathToElectron, fuseVersion, strictlyRequireAllFuses, fuseWireBuilder, fuseNamer) => { | ||
| const fuseFilePath = pathToFuseFile(pathToElectron); | ||
| const electron = await fs.readFile(fuseFilePath); | ||
| const firstSentinel = electron.indexOf(SENTINEL); | ||
| const lastSentinel = electron.lastIndexOf(SENTINEL); | ||
| // If the last sentinel is different to the first sentinel we are probably in a universal build | ||
| // We should flip the fuses in both sentinels to affect both slices of the universal binary | ||
| const sentinels = firstSentinel === lastSentinel ? [firstSentinel] : [firstSentinel, lastSentinel]; | ||
| for (const indexOfSentinel of sentinels) { | ||
| if (indexOfSentinel === -1) { | ||
| const handle = await fs.open(fuseFilePath, 'r+'); | ||
| try { | ||
| const sentinels = await findSentinels(handle, false); | ||
| if (sentinels.length === 0) { | ||
| throw new Error('Could not find sentinel in the provided Electron binary, fuses are only supported in Electron 12 and higher'); | ||
| } | ||
| const fuseWirePosition = indexOfSentinel + SENTINEL.length; | ||
| const fuseWireVersion = electron[fuseWirePosition]; | ||
| if (parseInt(fuseVersion, 10) !== fuseWireVersion) { | ||
| throw new Error(`Provided fuse wire version "${parseInt(fuseVersion, 10)}" does not match watch was found in the binary "${fuseWireVersion}". You should update your usage of @electron/fuses.`); | ||
| if (sentinels.length > 2) { | ||
| throw new Error(`Found ${sentinels.length} copies of the fuse sentinel in the provided Electron binary. ` + | ||
| 'At most 2 are expected (one per slice of a universal macOS binary). ' + | ||
| 'This may indicate a corrupted binary or an unsupported build configuration.'); | ||
| } | ||
| const fuseWireLength = electron[fuseWirePosition + 1]; | ||
| const wire = fuseWireBuilder(fuseWireLength).slice(0, fuseWireLength); | ||
| if (wire.length < fuseWireLength && strictlyRequireAllFuses) { | ||
| throw new Error(`strictlyRequireAllFuses: The fuse wire in the Electron binary has ${fuseWireLength} fuses but you only provided a config for ${wire.length} fuses, you may need to update @electron/fuses or provide additional fuse settings`); | ||
| } | ||
| for (let i = 0; i < wire.length; i++) { | ||
| const idx = fuseWirePosition + 2 + i; | ||
| const currentState = electron[idx]; | ||
| const newState = wire[i]; | ||
| if (currentState === FuseState.REMOVED && newState !== FuseState.INHERIT) { | ||
| console.warn(`Overriding fuse "${fuseNamer(i)}" that has been marked as removed, setting this fuse is a noop`); | ||
| // Two sentinels indicate a universal macOS build; flip fuses in each | ||
| // slice so both architectures are covered. Validate and prepare every | ||
| // write before touching the file so a validation error on one slice | ||
| // cannot leave the binary half-modified. | ||
| const pendingWrites = []; | ||
| for (const indexOfSentinel of sentinels) { | ||
| const { version: fuseWireVersion, length: fuseWireLength, wireBytes, wireBytesPos, } = await readFuseWire(handle, indexOfSentinel); | ||
| if (parseInt(fuseVersion, 10) !== fuseWireVersion) { | ||
| throw new Error(`Provided fuse wire version "${parseInt(fuseVersion, 10)}" does not match watch was found in the binary "${fuseWireVersion}". You should update your usage of @electron/fuses.`); | ||
| } | ||
| if (newState === FuseState.INHERIT) { | ||
| if (strictlyRequireAllFuses) { | ||
| throw new Error(`strictlyRequireAllFuses: Missing explicit configuration for fuse ${fuseNamer(i)}`); | ||
| const wire = fuseWireBuilder(fuseWireLength).slice(0, fuseWireLength); | ||
| if (wire.length < fuseWireLength && strictlyRequireAllFuses) { | ||
| throw new Error(`strictlyRequireAllFuses: The fuse wire in the Electron binary has ${fuseWireLength} fuses but you only provided a config for ${wire.length} fuses, you may need to update @electron/fuses or provide additional fuse settings`); | ||
| } | ||
| for (let i = 0; i < wire.length; i++) { | ||
| const currentState = wireBytes[i]; | ||
| const newState = wire[i]; | ||
| if (currentState === FuseState.REMOVED && newState !== FuseState.INHERIT) { | ||
| console.warn(`Overriding fuse "${fuseNamer(i)}" that has been marked as removed, setting this fuse is a noop`); | ||
| } | ||
| continue; | ||
| if (newState === FuseState.INHERIT) { | ||
| if (strictlyRequireAllFuses) { | ||
| throw new Error(`strictlyRequireAllFuses: Missing explicit configuration for fuse ${fuseNamer(i)}`); | ||
| } | ||
| continue; | ||
| } | ||
| wireBytes[i] = newState; | ||
| } | ||
| electron[idx] = newState; | ||
| pendingWrites.push({ bytes: wireBytes, position: wireBytesPos }); | ||
| } | ||
| for (const { bytes, position } of pendingWrites) { | ||
| await handle.write(bytes, 0, bytes.length, position); | ||
| } | ||
| return sentinels.length; | ||
| } | ||
| await fs.writeFile(fuseFilePath, electron); | ||
| return sentinels.length; | ||
| finally { | ||
| await handle.close(); | ||
| } | ||
| }; | ||
| export const getCurrentFuseWire = async (pathToElectron) => { | ||
| const fuseFilePath = pathToFuseFile(pathToElectron); | ||
| const electron = await fs.readFile(fuseFilePath); | ||
| const fuseWirePosition = electron.indexOf(SENTINEL) + SENTINEL.length; | ||
| if (fuseWirePosition - SENTINEL.length === -1) { | ||
| throw new Error('Could not find sentinel in the provided Electron binary, fuses are only supported in Electron 12 and higher'); | ||
| } | ||
| const fuseWireVersion = electron[fuseWirePosition]; | ||
| const fuseWireLength = electron[fuseWirePosition + 1]; | ||
| const fuseConfig = { | ||
| version: `${fuseWireVersion}`, | ||
| }; | ||
| for (let i = 0; i < fuseWireLength; i++) { | ||
| const idx = fuseWirePosition + 2 + i; | ||
| const currentState = electron[idx]; | ||
| switch (fuseConfig.version) { | ||
| case FuseVersion.V1: | ||
| fuseConfig[i] = currentState; | ||
| break; | ||
| const handle = await fs.open(fuseFilePath, 'r'); | ||
| try { | ||
| const [sentinel] = await findSentinels(handle, true); | ||
| if (sentinel === undefined) { | ||
| throw new Error('Could not find sentinel in the provided Electron binary, fuses are only supported in Electron 12 and higher'); | ||
| } | ||
| const { version: fuseWireVersion, length: fuseWireLength, wireBytes, } = await readFuseWire(handle, sentinel); | ||
| const fuseConfig = { | ||
| version: `${fuseWireVersion}`, | ||
| }; | ||
| for (let i = 0; i < fuseWireLength; i++) { | ||
| switch (fuseConfig.version) { | ||
| case FuseVersion.V1: | ||
| fuseConfig[i] = wireBytes[i]; | ||
| break; | ||
| } | ||
| } | ||
| return fuseConfig; | ||
| } | ||
| return fuseConfig; | ||
| finally { | ||
| await handle.close(); | ||
| } | ||
| }; | ||
@@ -102,0 +174,0 @@ export const flipFuses = async (pathToElectron, fuseConfig) => { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAA4B,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAErD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,MAAM,KAAK,GAAG,CAAC,CAAsB,EAAE,EAAE,CACvC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AAEjF,MAAM,eAAe,GAAG,CAAC,MAAoB,EAAE,UAAkB,EAAE,EAAE;IACnE,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CACtD,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,UAAU,CACvD,CAAC;IACF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,uBACE,aAAa,CAAC,aAAoB,CACpC,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;QACnD,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,oCAAoC,CAAC,CAAC;QACjE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC;QAC1D,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,qCAAqC,CAAC,CAAC;QAClE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAChD,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,oCAAoC,CAAC,CAAC;QACjE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;QAC7D,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAE,EAAE;IAChD,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,8BAA8B,EAC9B,oBAAoB,CACrB,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO,CACjB,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,8BAA8B,EAC9B,oBAAoB,CACrB,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,KAAK,EAAE,MAAqB,EAAE,SAAkB,EAAqB,EAAE;IAC3F,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,CAAC;IACpD,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;YACrB,IAAI,KAAK,IAAI,SAAS;gBAAE,OAAO;YAC/B,MAAM,KAAK,GAAG,KAAK,GAAG,eAAe,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAE5C,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC3C,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;gBAC5B,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,GAAG,IAAI,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3D,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,sEAAsE;AACtE,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,YAAY,GAAG,KAAK,EAAE,MAAqB,EAAE,WAAmB,EAAE,EAAE;IACxE,MAAM,OAAO,GAAG,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC;IAC1D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO;QACL,OAAO;QACP,MAAM;QACN,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC;QAC7E,YAAY,EAAE,OAAO,GAAG,UAAU;KACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EACvB,cAAsB,EACtB,WAAwB,EACxB,uBAAgC,EAChC,eAAoD,EACpD,SAAoC,EACpC,EAAE;IACF,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAErD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,SAAS,SAAS,CAAC,MAAM,gEAAgE;gBACvF,sEAAsE;gBACtE,6EAA6E,CAChF,CAAC;QACJ,CAAC;QAED,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,yCAAyC;QACzC,MAAM,aAAa,GAA0C,EAAE,CAAC;QAEhE,KAAK,MAAM,eAAe,IAAI,SAAS,EAAE,CAAC;YACxC,MAAM,EACJ,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,cAAc,EACtB,SAAS,EACT,YAAY,GACb,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAEhD,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,eAAe,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,CACrC,WAAW,EACX,EAAE,CACH,mDAAmD,eAAe,sDAAsD,CAC1H,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,IAAI,uBAAuB,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CACb,qEAAqE,cAAc,6CAA6C,IAAI,CAAC,MAAM,oFAAoF,CAChO,CAAC;YACJ,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEzB,IAAI,YAAY,KAAK,SAAS,CAAC,OAAO,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;oBACzE,OAAO,CAAC,IAAI,CACV,oBAAoB,SAAS,CAC3B,CAAC,CACF,gEAAgE,CAClE,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,uBAAuB,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CACb,oEAAoE,SAAS,CAAC,CAAC,CAAC,EAAE,CACnF,CAAC;oBACJ,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC1B,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;YAChD,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,cAAsB,EACU,EAAE;IAClC,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAErD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;QACJ,CAAC;QAED,MAAM,EACJ,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,cAAc,EACtB,SAAS,GACV,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEzC,MAAM,UAAU,GAA0B;YACxC,OAAO,EAAE,GAAG,eAAe,EAAiB;SAC7C,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,QAAQ,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC3B,KAAK,WAAW,CAAC,EAAE;oBACjB,UAAU,CAAC,CAAkB,CAAC,GAAG,SAAS,CAAC,CAAC,CAAc,CAAC;oBAC3D,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,cAAsB,EACtB,UAAsB,EACL,EAAE;IACnB,IAAI,YAAoB,CAAC;IAEzB,QAAQ,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,KAAK,WAAW,CAAC,EAAE;YACjB,YAAY,GAAG,MAAM,WAAW,CAC9B,cAAc,EACd,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,uBAAuB,IAAI,KAAK,EAC3C,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EACtC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CACxB,CAAC;YACF,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,0EAA0E;IAC1E,IAAI,UAAU,CAAC,yBAAyB,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5E,MAAM,SAAS,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE;YACtC,QAAQ;YACR,GAAG;YACH,SAAS;YACT,6DAA6D;YAC7D,QAAQ;YACR,SAAS;SACV,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"} |
+1
-1
| { | ||
| "name": "@electron/fuses", | ||
| "version": "2.1.0", | ||
| "version": "2.1.1", | ||
| "type": "module", | ||
@@ -5,0 +5,0 @@ "exports": "./dist/index.js", |
39436
15.88%423
20.51%