UNPKG

20 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/fileMatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import BluebirdPromise from \"bluebird-lst\"\nimport { asArray, log } from \"builder-util\"\nimport { copyDir, copyOrLinkFile, Filter, statOrNull, FileTransformer } from \"builder-util/out/fs\"\nimport { ensureDir } from \"fs-extra-p\"\nimport { Minimatch } from \"minimatch\"\nimport * as path from \"path\"\nimport { Configuration, FileSet, Packager, PlatformSpecificBuildOptions } from \"./index\"\nimport { PlatformPackager } from \"./platformPackager\"\nimport { createFilter, hasMagic } from \"./util/filter\"\n\n// https://github.com/electron-userland/electron-builder/issues/733\nconst minimatchOptions = {dot: true}\n\n// noinspection SpellCheckingInspection\nexport const excludedNames = \".git,.hg,.svn,CVS,RCS,SCCS,\" +\n \"__pycache__,.DS_Store,thumbs.db,.gitignore,.gitkeep,.gitattributes,.npmignore,\" +\n \".idea,.vs,.flowconfig,.jshintrc,.eslintrc,.circleci,\" +\n \".yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log,\" +\n \"appveyor.yml,.travis.yml,circle.yml,.nyc_output\"\n\nexport const excludedExts = \"iml,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,suo,xproj,cc,d.ts\"\n\nfunction ensureNoEndSlash(file: string): string {\n if (path.sep !== \"/\") {\n file = file.replace(/\\//g, path.sep)\n }\n if (path.sep !== \"\\\\\") {\n file = file.replace(/\\\\/g, path.sep)\n }\n\n if (file.endsWith(path.sep)) {\n return file.substring(0, file.length - 1)\n }\n else {\n return file\n }\n}\n\n/** @internal */\nexport class FileMatcher {\n readonly from: string\n readonly to: string\n\n readonly patterns: Array<string>\n\n excludePatterns: Array<Minimatch> | null = null\n\n readonly isSpecifiedAsEmptyArray: boolean\n\n constructor(from: string, to: string, readonly macroExpander: (pattern: string) => string, patterns?: Array<string> | string | null | undefined) {\n this.from = ensureNoEndSlash(macroExpander(from))\n this.to = ensureNoEndSlash(macroExpander(to))\n this.patterns = asArray(patterns).map(it => this.normalizePattern(it))\n this.isSpecifiedAsEmptyArray = Array.isArray(patterns) && patterns.length === 0\n }\n\n normalizePattern(pattern: string) {\n if (pattern.startsWith(\"./\")) {\n pattern = pattern.substring(\"./\".length)\n }\n return path.posix.normalize(this.macroExpander(pattern.replace(/\\\\/g, \"/\")))\n }\n\n addPattern(pattern: string) {\n this.patterns.push(this.normalizePattern(pattern))\n }\n\n prependPattern(pattern: string) {\n this.patterns.unshift(this.normalizePattern(pattern))\n }\n\n isEmpty() {\n return this.patterns.length === 0\n }\n\n containsOnlyIgnore(): boolean {\n return !this.isEmpty() && this.patterns.find(it => !it.startsWith(\"!\")) == null\n }\n\n computeParsedPatterns(result: Array<Minimatch>, fromDir?: string): void {\n const relativeFrom = fromDir == null ? null : path.relative(fromDir, this.from)\n\n if (this.patterns.length === 0 && relativeFrom != null) {\n // file mappings, from here is a file\n result.push(new Minimatch(relativeFrom, minimatchOptions))\n return\n }\n\n for (let pattern of this.patterns) {\n if (relativeFrom != null) {\n pattern = path.join(relativeFrom, pattern)\n }\n\n const parsedPattern = new Minimatch(pattern, minimatchOptions)\n result.push(parsedPattern)\n\n // do not add if contains dot (possibly file if has extension)\n if (!pattern.includes(\".\") && !hasMagic(parsedPattern)) {\n // https://github.com/electron-userland/electron-builder/issues/545\n // add **/*\n result.push(new Minimatch(`${pattern}/**/*`, minimatchOptions))\n }\n }\n }\n\n createFilter(): Filter {\n const parsedPatterns: Array<Minimatch> = []\n this.computeParsedPatterns(parsedPatterns)\n return createFilter(this.from, parsedPatterns, this.excludePatterns)\n }\n\n toString() {\n return `from: ${this.from}, to: ${this.to}, patterns: ${this.patterns.join(\", \")}`\n }\n}\n\n/** @internal */\nexport function getMainFileMatchers(appDir: string, destination: string, macroExpander: (pattern: string) => string, platformSpecificBuildOptions: PlatformSpecificBuildOptions, platformPackager: PlatformPackager<any>, outDir: string, isElectronCompile: boolean): Array<FileMatcher> {\n const packager = platformPackager.info\n const buildResourceDir = path.resolve(packager.projectDir, packager.buildResourcesDir)\n\n let matchers = packager.isPrepackedAppAsar ? null : getFileMatchers(packager.config, \"files\", appDir, destination, {\n macroExpander,\n customBuildOptions: platformSpecificBuildOptions,\n outDir,\n })\n if (matchers == null) {\n matchers = [new FileMatcher(appDir, destination, macroExpander)]\n }\n\n const matcher = matchers[0]\n // add default patterns, but only if from equals to app dir\n if (matcher.from !== appDir) {\n return matchers\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1741#issuecomment-311111418 so, do not use inclusive patterns\n const patterns = matcher.patterns\n\n const customFirstPatterns: Array<string> = []\n // electron-webpack - we need to copy only package.json and node_modules from root dir (and these files are added by default), so, explicit empty array is specified\n if (!matcher.isSpecifiedAsEmptyArray && (matcher.isEmpty() || matcher.containsOnlyIgnore())) {\n customFirstPatterns.push(\"**/*\")\n }\n else if (!patterns.includes(\"package.json\")) {\n patterns.push(\"package.json\")\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1482\n const relativeBuildResourceDir = path.relative(matcher.from, buildResourceDir)\n if (relativeBuildResourceDir.length !== 0 && !relativeBuildResourceDir.startsWith(\".\")) {\n customFirstPatterns.push(`!${relativeBuildResourceDir}{,/**/*}`)\n }\n\n const relativeOutDir = matcher.normalizePattern(path.relative(packager.projectDir, outDir))\n if (!relativeOutDir.startsWith(\".\")) {\n customFirstPatterns.push(`!${relativeOutDir}{,/**/*}`)\n }\n\n // add our default exclusions after last user possibly defined \"all\"/permissive pattern\n let insertIndex = 0\n for (let i = patterns.length - 1; i >= 0; i--) {\n if (patterns[i].startsWith(\"**/\")) {\n insertIndex = i + 1\n break\n }\n }\n patterns.splice(insertIndex, 0, ...customFirstPatterns)\n\n patterns.push(`!**/*.{${excludedExts}${packager.config.includePdb === true ? \"\" : \",pdb\"}`)\n patterns.push(\"!**/._*\")\n patterns.push(\"!**/electron-builder.{yaml,yml,json,json5,toml}\")\n patterns.push(`!**/{${excludedNames}}`)\n\n if (isElectronCompile) {\n patterns.push(\"!.cache{,/**/*}\")\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1969\n // exclude ony for app root, use .yarnclean to clean node_modules\n patterns.push(\"!.editorconfig\")\n\n const debugLogger = packager.debugLogger\n if (debugLogger.isEnabled) {\n //tslint:disable-next-line:no-invalid-template-strings\n debugLogger.add(`${macroExpander(\"${arch}\")}.firstOrDefaultFilePatterns`, patterns)\n }\n return matchers\n}\n\n/** @internal */\nexport function getNodeModuleFileMatcher(appDir: string, destination: string, macroExpander: (pattern: string) => string, platformSpecificBuildOptions: PlatformSpecificBuildOptions, packager: Packager): FileMatcher {\n // https://github.com/electron-userland/electron-builder/pull/2948#issuecomment-392241632\n // grab only excludes\n const matcher = new FileMatcher(appDir, destination, macroExpander)\n\n function addPatterns(patterns: Array<string | FileSet> | string | null | undefined | FileSet) {\n if (patterns == null) {\n return\n }\n else if (!Array.isArray(patterns)) {\n if (typeof patterns === \"string\" && patterns.startsWith(\"!\")) {\n matcher.addPattern(patterns)\n return\n }\n // ignore object form\n return\n }\n\n for (const pattern of patterns) {\n if (typeof pattern === \"string\" && pattern.startsWith(\"!\")) {\n matcher.addPattern(pattern)\n }\n }\n }\n\n addPatterns(packager.config.files)\n addPatterns(platformSpecificBuildOptions.files)\n\n if (!matcher.isEmpty()) {\n matcher.prependPattern(\"**/*\")\n }\n\n const debugLogger = packager.debugLogger\n if (debugLogger.isEnabled) {\n //tslint:disable-next-line:no-invalid-template-strings\n debugLogger.add(`${macroExpander(\"${arch}\")}.nodeModuleFilePatterns`, matcher.patterns)\n }\n\n return matcher\n}\n\nexport interface GetFileMatchersOptions {\n readonly macroExpander: (pattern: string) => string\n readonly customBuildOptions: PlatformSpecificBuildOptions\n readonly outDir: string\n}\n\n/** @internal */\nexport function getFileMatchers(config: Configuration, name: \"files\" | \"extraFiles\" | \"extraResources\" | \"asarUnpack\", defaultSrc: string, defaultDestination: string, options: GetFileMatchersOptions): Array<FileMatcher> | null {\n const defaultMatcher = new FileMatcher(defaultSrc, defaultDestination, options.macroExpander)\n const fileMatchers: Array<FileMatcher> = []\n\n function addPatterns(patterns: Array<string | FileSet> | string | null | undefined | FileSet) {\n if (patterns == null) {\n return\n }\n else if (!Array.isArray(patterns)) {\n if (typeof patterns === \"string\") {\n defaultMatcher.addPattern(patterns)\n return\n }\n patterns = [patterns]\n }\n\n for (const pattern of patterns) {\n if (typeof pattern === \"string\") {\n // use normalize to transform ./foo to foo\n defaultMatcher.addPattern(pattern)\n }\n else if (name === \"asarUnpack\") {\n throw new Error(`Advanced file copying not supported for \"${name}\"`)\n }\n else {\n const from = pattern.from == null ? defaultSrc : path.resolve(defaultSrc, pattern.from)\n const to = pattern.to == null ? defaultDestination : path.resolve(defaultDestination, pattern.to)\n fileMatchers.push(new FileMatcher(from, to, options.macroExpander, pattern.filter))\n }\n }\n }\n\n addPatterns((config as any)[name])\n addPatterns((options.customBuildOptions as any)[name])\n\n if (!defaultMatcher.isEmpty()) {\n // default matcher should be first in the array\n fileMatchers.unshift(defaultMatcher)\n }\n\n // we cannot exclude the whole out dir, because sometimes users want to use some file in the out dir in the patterns\n const relativeOutDir = defaultMatcher.normalizePattern(path.relative(defaultSrc, options.outDir))\n if (!relativeOutDir.startsWith(\".\")) {\n defaultMatcher.addPattern(`!${relativeOutDir}/*-unpacked{,/**/*}`)\n }\n\n return fileMatchers.length === 0 ? null : fileMatchers\n}\n\n/** @internal */\nexport function copyFiles(matchers: Array<FileMatcher> | null, transformer: FileTransformer | null): Promise<any> {\n if (matchers == null || matchers.length === 0) {\n return Promise.resolve()\n }\n\n return BluebirdPromise.map(matchers, async (matcher: FileMatcher) => {\n const fromStat = await statOrNull(matcher.from)\n if (fromStat == null) {\n log.warn({from: matcher.from}, `file source doesn't exist`)\n return\n }\n\n if (fromStat.isFile()) {\n const toStat = await statOrNull(matcher.to)\n // https://github.com/electron-userland/electron-builder/issues/1245\n if (toStat != null && toStat.isDirectory()) {\n return await copyOrLinkFile(matcher.from, path.join(matcher.to, path.basename(matcher.from)), fromStat)\n }\n\n await ensureDir(path.dirname(matcher.to))\n return await copyOrLinkFile(matcher.from, matcher.to, fromStat)\n }\n\n if (matcher.isEmpty() || matcher.containsOnlyIgnore()) {\n matcher.prependPattern(\"**/*\")\n }\n log.debug({matcher}, \"copying files using pattern\")\n return await copyDir(matcher.from, matcher.to, {filter: matcher.createFilter(), transformer})\n })\n}"],"sourceRoot":""}