UNPKG

17.9 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/util/appFileCopier.ts"],"names":[],"mappings":"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","sourcesContent":["import BluebirdPromise from \"bluebird-lst\"\nimport { AsyncTaskManager, log, executeAppBuilder } from \"builder-util\"\nimport { CONCURRENCY, FileCopier, Link, MAX_FILE_REQUESTS, FileTransformer, statOrNull, walk } from \"builder-util/out/fs\"\nimport { ensureDir, readlink, Stats, symlink } from \"fs-extra-p\"\nimport * as path from \"path\"\nimport { isLibOrExe } from \"../asar/unpackDetector\"\nimport { Platform } from \"../core\"\nimport { Packager } from \"../packager\"\nimport { PlatformPackager } from \"../platformPackager\"\nimport { excludedExts, FileMatcher } from \"../fileMatcher\"\nimport { createElectronCompilerHost, NODE_MODULES_PATTERN } from \"../fileTransformer\"\nimport { AppFileWalker } from \"./AppFileWalker\"\nimport { NodeModuleCopyHelper } from \"./NodeModuleCopyHelper\"\n\nconst BOWER_COMPONENTS_PATTERN = `${path.sep}bower_components${path.sep}`\n/** @internal */\nexport const ELECTRON_COMPILE_SHIM_FILENAME = \"__shim.js\"\n\nexport function getDestinationPath(file: string, fileSet: ResolvedFileSet) {\n if (file === fileSet.src) {\n return fileSet.destination\n }\n else {\n const src = fileSet.src\n const dest = fileSet.destination\n if (file.length > src.length && file.startsWith(src) && file[src.length] === path.sep) {\n return dest + file.substring(src.length)\n }\n else {\n // hoisted node_modules\n // not lastIndexOf, to ensure that nested module (top-level module depends on) copied to parent node_modules, not to top-level directory\n // project https://github.com/angexis/punchcontrol/commit/cf929aba55c40d0d8901c54df7945e1d001ce022\n const index = file.indexOf(NODE_MODULES_PATTERN)\n if (index < 0) {\n throw new Error(`File \"${file}\" not under the source directory \"${fileSet.src}\"`)\n }\n return dest + file.substring(index + 1 /* leading slash */)\n }\n }\n}\n\nexport async function copyAppFiles(fileSet: ResolvedFileSet, packager: Packager, transformer: FileTransformer) {\n const metadata = fileSet.metadata\n // search auto unpacked dir\n const taskManager = new AsyncTaskManager(packager.cancellationToken)\n const createdParentDirs = new Set<string>()\n\n const fileCopier = new FileCopier(file => {\n // https://github.com/electron-userland/electron-builder/issues/3038\n return !(isLibOrExe(file) || file.endsWith(\".node\"))\n }, transformer)\n const links: Array<Link> = []\n for (let i = 0, n = fileSet.files.length; i < n; i++) {\n const sourceFile = fileSet.files[i]\n const stat = metadata.get(sourceFile)\n if (stat == null) {\n // dir\n continue\n }\n\n const destinationFile = getDestinationPath(sourceFile, fileSet)\n if (stat.isSymbolicLink()) {\n links.push({file: destinationFile, link: await readlink(sourceFile)})\n continue\n }\n\n const fileParent = path.dirname(destinationFile)\n if (!createdParentDirs.has(fileParent)) {\n createdParentDirs.add(fileParent)\n await ensureDir(fileParent)\n }\n\n taskManager.addTask(fileCopier.copy(sourceFile, destinationFile, stat))\n if (taskManager.tasks.length > MAX_FILE_REQUESTS) {\n await taskManager.awaitTasks()\n }\n }\n\n if (taskManager.tasks.length > 0) {\n await taskManager.awaitTasks()\n }\n if (links.length > 0) {\n await BluebirdPromise.map(links, it => symlink(it.link, it.file), CONCURRENCY)\n }\n}\n\n// os path separator is used\nexport interface ResolvedFileSet {\n src: string\n destination: string\n\n files: Array<string>\n metadata: Map<string, Stats>\n transformedFiles?: Map<number, string | Buffer> | null\n}\n\n// used only for ASAR, if no asar, file transformed on the fly\nexport async function transformFiles(transformer: FileTransformer, fileSet: ResolvedFileSet): Promise<void> {\n if (transformer == null) {\n return\n }\n\n let transformedFiles = fileSet.transformedFiles\n if (fileSet.transformedFiles == null) {\n transformedFiles = new Map()\n fileSet.transformedFiles = transformedFiles\n }\n\n const metadata = fileSet.metadata\n await BluebirdPromise.filter(fileSet.files, (it, index) => {\n const fileStat = metadata.get(it)\n if (fileStat == null || !fileStat.isFile()) {\n return false\n }\n\n const transformedValue = transformer(it)\n if (transformedValue == null) {\n return false\n }\n\n if (typeof transformedValue === \"object\" && \"then\" in transformedValue) {\n return (transformedValue as Promise<any>)\n .then(it => {\n if (it != null) {\n transformedFiles!!.set(index, it)\n }\n return false\n })\n }\n transformedFiles!!.set(index, transformedValue as string | Buffer)\n return false\n }, CONCURRENCY)\n}\n\nexport async function computeFileSets(matchers: Array<FileMatcher>, transformer: FileTransformer | null, platformPackager: PlatformPackager<any>, isElectronCompile: boolean): Promise<Array<ResolvedFileSet>> {\n const fileSets: Array<ResolvedFileSet> = []\n const packager = platformPackager.info\n\n for (const matcher of matchers) {\n const fileWalker = new AppFileWalker(matcher, packager)\n\n const fromStat = await statOrNull(matcher.from)\n if (fromStat == null) {\n log.debug({directory: matcher.from, reason: \"doesn't exist\"}, `skipped copying`)\n continue\n }\n\n const files = await walk(matcher.from, fileWalker.filter, fileWalker)\n const metadata = fileWalker.metadata\n fileSets.push(validateFileSet({src: matcher.from, files, metadata, destination: matcher.to}))\n }\n\n if (isElectronCompile) {\n // cache files should be first (better IO)\n fileSets.unshift(await compileUsingElectronCompile(fileSets[0], packager))\n }\n return fileSets\n}\n\nfunction getNodeModuleExcludedExts(platformPackager: PlatformPackager<any>) {\n // do not exclude *.h files (https://github.com/electron-userland/electron-builder/issues/2852)\n const result = [\".o\", \".obj\"].concat(excludedExts.split(\",\").map(it => `.${it}`))\n if (platformPackager.config.includePdb !== true) {\n result.push(\".pdb\")\n }\n if (platformPackager.platform !== Platform.WINDOWS) {\n // https://github.com/electron-userland/electron-builder/issues/1738\n result.push(\".dll\")\n result.push(\".exe\")\n }\n return result\n}\n\nfunction validateFileSet(fileSet: ResolvedFileSet): ResolvedFileSet {\n if (fileSet.src == null || fileSet.src.length === 0) {\n throw new Error(\"fileset src is empty\")\n }\n return fileSet\n}\n\n/** @internal */\nexport async function computeNodeModuleFileSets(platformPackager: PlatformPackager<any>, mainMatcher: FileMatcher): Promise<Array<ResolvedFileSet>> {\n // const productionDeps = await platformPackager.info.productionDeps.value\n\n const rawJson = await executeAppBuilder([\"node-dep-tree\", \"--dir\", platformPackager.info.appDir])\n let data: any\n try {\n data = JSON.parse(rawJson)\n }\n catch (e) {\n throw new Error(`cannot parse: ${rawJson}\\n error: ${e.stack}`)\n }\n\n const deps = data as Array<any>\n const nodeModuleExcludedExts = getNodeModuleExcludedExts(platformPackager)\n // mapSeries instead of map because copyNodeModules is concurrent and so, no need to increase queue/pressure\n return await BluebirdPromise.mapSeries(deps, async info => {\n const source = info.dir\n let destination: string\n if (source.length > mainMatcher.from.length && source.startsWith(mainMatcher.from) && source[mainMatcher.from.length] === path.sep) {\n destination = getDestinationPath(source, {src: mainMatcher.from, destination: mainMatcher.to, files: [], metadata: null as any})\n }\n else {\n destination = mainMatcher.to + path.sep + \"node_modules\"\n }\n\n // use main matcher patterns, so, user can exclude some files in such hoisted node modules\n // source here includes node_modules, but pattern base should be without because users expect that pattern \"!node_modules/loot-core/src{,/**/*}\" will work\n const matcher = new FileMatcher(path.dirname(source), destination, mainMatcher.macroExpander, mainMatcher.patterns)\n const copier = new NodeModuleCopyHelper(matcher, platformPackager.info)\n const names = info.deps\n const files = await copier.collectNodeModules(source, names, nodeModuleExcludedExts)\n return validateFileSet({src: source, destination, files, metadata: copier.metadata})\n })\n}\n\nasync function compileUsingElectronCompile(mainFileSet: ResolvedFileSet, packager: Packager): Promise<ResolvedFileSet> {\n log.info(\"compiling using electron-compile\")\n\n const electronCompileCache = await packager.tempDirManager.getTempDir({prefix: \"electron-compile-cache\"})\n const cacheDir = path.join(electronCompileCache, \".cache\")\n // clear and create cache dir\n await ensureDir(cacheDir)\n const compilerHost = await createElectronCompilerHost(mainFileSet.src, cacheDir)\n const nextSlashIndex = mainFileSet.src.length + 1\n // pre-compute electron-compile to cache dir - we need to process only subdirectories, not direct files of app dir\n await BluebirdPromise.map(mainFileSet.files, file => {\n if (file.includes(NODE_MODULES_PATTERN) || file.includes(BOWER_COMPONENTS_PATTERN)\n || !file.includes(path.sep, nextSlashIndex) // ignore not root files\n || !mainFileSet.metadata.get(file)!.isFile()) {\n return null\n }\n return compilerHost.compile(file)\n .then(() => null)\n }, CONCURRENCY)\n\n await compilerHost.saveConfiguration()\n\n const metadata = new Map<string, Stats>()\n const cacheFiles = await walk(cacheDir, file => !file.startsWith(\".\"), {\n consume: (file, fileStat) => {\n if (fileStat.isFile()) {\n metadata.set(file, fileStat)\n }\n return null\n }\n })\n\n // add shim\n const shimPath = `${mainFileSet.src}${path.sep}${ELECTRON_COMPILE_SHIM_FILENAME}`\n mainFileSet.files.push(shimPath)\n mainFileSet.metadata.set(shimPath, {isFile: () => true, isDirectory: () => false, isSymbolicLink: () => false} as any)\n if (mainFileSet.transformedFiles == null) {\n mainFileSet.transformedFiles = new Map()\n }\n mainFileSet.transformedFiles.set(mainFileSet.files.length - 1, `\n'use strict';\nrequire('electron-compile').init(__dirname, require('path').resolve(__dirname, '${packager.metadata.main || \"index\"}'), true);\n`)\n return {src: electronCompileCache, files: cacheFiles, metadata, destination: mainFileSet.destination}\n}"],"sourceRoot":""}