UNPKG

8.67 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/asar/asar.ts"],"names":[],"mappings":"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","sourcesContent":["import { createFromBuffer } from \"chromium-pickle-js\"\nimport { close, open, read, readFile, Stats } from \"fs-extra-p\"\nimport * as path from \"path\"\n\n/** @internal */\nexport class Node {\n // we don't use Map because later it will be stringified\n files?: { [key: string]: Node }\n\n unpacked?: boolean\n\n size?: number\n // electron expects string\n offset?: string\n\n executable?: boolean\n\n link?: string\n}\n\n/** @internal */\nexport class AsarFilesystem {\n private offset = 0\n\n constructor(readonly src: string, readonly header = new Node(), readonly headerSize: number = -1) {\n if (this.header.files == null) {\n this.header.files = {}\n }\n }\n\n searchNodeFromDirectory(p: string, isCreate: boolean): Node | null {\n let node = this.header\n for (const dir of p.split(path.sep)) {\n if (dir !== \".\") {\n let child = node.files![dir]\n if (child == null) {\n if (!isCreate) {\n return null\n }\n child = new Node()\n child.files = {}\n node.files![dir] = child\n }\n node = child\n }\n }\n return node\n }\n\n getOrCreateNode(p: string): Node {\n if (p == null || p.length === 0) {\n return this.header\n }\n\n const name = path.basename(p)\n const dirNode = this.searchNodeFromDirectory(path.dirname(p), true)!\n if (dirNode.files == null) {\n dirNode.files = {}\n }\n\n let result = dirNode.files[name]\n if (result == null) {\n result = new Node()\n dirNode.files[name] = result\n }\n return result\n }\n\n addFileNode(file: string, dirNode: Node, size: number, unpacked: boolean, stat: Stats): Node {\n if (size > 4294967295) {\n throw new Error(`${file}: file size cannot be larger than 4.2GB`)\n }\n\n const node = new Node()\n node.size = size\n if (unpacked) {\n node.unpacked = true\n }\n else {\n // electron expects string\n node.offset = this.offset.toString()\n if (process.platform !== \"win32\" && (stat.mode & 0o100)) {\n node.executable = true\n }\n this.offset += node.size\n }\n\n let children = dirNode.files\n if (children == null) {\n children = {}\n dirNode.files = children\n }\n children[path.basename(file)] = node\n\n return node\n }\n\n getNode(p: string) {\n const node = this.searchNodeFromDirectory(path.dirname(p), false)!\n return node.files![path.basename(p)]\n }\n\n getFile(p: string, followLinks: boolean = true): Node {\n const info = this.getNode(p)!\n // if followLinks is false we don't resolve symlinks\n return followLinks && info.link != null ? this.getFile(info.link) : info\n }\n\n async readJson(file: string): Promise<any> {\n return JSON.parse((await this.readFile(file)).toString())\n }\n\n async readFile(file: string): Promise<Buffer> {\n return await readFileFromAsar(this, file, this.getFile(file))\n }\n}\n\nexport async function readAsar(archive: string): Promise<AsarFilesystem> {\n const fd = await open(archive, \"r\")\n let size\n let headerBuf\n try {\n const sizeBuf = Buffer.allocUnsafe(8)\n if (await read(fd, sizeBuf, 0, 8, null as any) !== 8) {\n throw new Error(\"Unable to read header size\")\n }\n\n const sizePickle = createFromBuffer(sizeBuf)\n size = sizePickle.createIterator().readUInt32()\n headerBuf = Buffer.allocUnsafe(size)\n if (await read(fd, headerBuf, 0, size, null as any) !== size) {\n throw new Error(\"Unable to read header\")\n }\n }\n finally {\n await close(fd)\n }\n\n const headerPickle = createFromBuffer(headerBuf!)\n const header = headerPickle.createIterator().readString()\n return new AsarFilesystem(archive, JSON.parse(header), size)\n}\n\nexport async function readAsarJson(archive: string, file: string): Promise<any> {\n const fs = await readAsar(archive)\n return await fs.readJson(file)\n}\n\nasync function readFileFromAsar(filesystem: AsarFilesystem, filename: string, info: Node): Promise<Buffer> {\n const size = info.size!!\n const buffer = Buffer.allocUnsafe(size)\n if (size <= 0) {\n return buffer\n }\n\n if (info.unpacked) {\n return await readFile(path.join(`${filesystem.src}.unpacked`, filename))\n }\n\n const fd = await open(filesystem.src, \"r\")\n try {\n const offset = 8 + filesystem.headerSize + parseInt(info.offset!!, 10)\n await read(fd, buffer, 0, size, offset)\n }\n finally {\n await close(fd)\n }\n return buffer\n}\n"],"sourceRoot":""}