JezK
Edit File: integrity-checker.js.map
{"version":3,"file":"integrity-checker.js","names":["invariant","require","path","integrityErrors","EXPECTED_IS_NOT_A_JSON","FILES_MISSING","LOCKFILE_DONT_MATCH","FLAGS_DONT_MATCH","LINKED_MODULES_DONT_MATCH","PATTERNS_DONT_MATCH","MODULES_FOLDERS_MISSING","SYSTEM_PARAMS_DONT_MATCH","INTEGRITY_FILE_DEFAULTS","systemParams","getSystemParams","modulesFolders","flags","linkedModules","topLevelPatterns","lockfileEntries","files","InstallationIntegrityChecker","config","modulesFolder","workspaceRootFolder","join","lockfileFolder","constants","NODE_MODULES_FOLDER","enableMetaFolder","META_FOLDER","locationFolder","_getIntegrityFileFolder","locationPath","INTEGRITY_FILENAME","fs","exists","workspaceLayout","locations","push","Object","keys","workspaces","workspaceName","loc","sort","sortAlpha","recurse","dir","readdir","file","entry","lstat","stat","isDirectory","_getModulesFolders","lockfile","patterns","artifacts","result","filter","p","getManifestByPattern","name","manifest","DEPENDENCY_TYPES","dependencyType","dependencies","dep","checkFiles","flat","ignoreScripts","focus","focusedWorkspaceName","production","plugnplayEnabled","length","key","resolved","relative","modulesRoot","_getModulesRootFolder","_getIntegrityListing","map","readFile","expectedRaw","JSON","parse","actual","expected","compareSortedArrays","relevantExpectedFlags","slice","indexOf","flag","u","v","max","missingPatterns","_getIntegrityFileLocation","integrityFileMissing","_generateIntegrityFile","_getIntegrityFile","integrityMatches","_compareIntegrityFiles","integrityError","undefined","hardRefreshRequired","e","integrityFile","mkdirp","dirname","writeFile","stringify","unlink"],"sourceRoot":"../src","sources":["integrity-checker.js"],"sourcesContent":["/* @flow */\n\nimport type Config from './config.js';\nimport type {LockManifest} from './lockfile';\nimport * as constants from './constants.js';\nimport * as fs from './util/fs.js';\nimport {sortAlpha, compareSortedArrays} from './util/misc.js';\nimport {getSystemParams} from './util/package-name-utils.js';\nimport type {InstallArtifacts} from './package-install-scripts.js';\nimport WorkspaceLayout from './workspace-layout.js';\n\nconst invariant = require('invariant');\nconst path = require('path');\n\nexport const integrityErrors = {\n EXPECTED_IS_NOT_A_JSON: 'integrityFailedExpectedIsNotAJSON',\n FILES_MISSING: 'integrityFailedFilesMissing',\n LOCKFILE_DONT_MATCH: 'integrityLockfilesDontMatch',\n FLAGS_DONT_MATCH: 'integrityFlagsDontMatch',\n LINKED_MODULES_DONT_MATCH: 'integrityCheckLinkedModulesDontMatch',\n PATTERNS_DONT_MATCH: 'integrityPatternsDontMatch',\n MODULES_FOLDERS_MISSING: 'integrityModulesFoldersMissing',\n SYSTEM_PARAMS_DONT_MATCH: 'integritySystemParamsDontMatch',\n};\n\ntype IntegrityError = $Keys<typeof integrityErrors>;\n\nexport type IntegrityCheckResult = {\n integrityFileMissing: boolean,\n integrityMatches?: boolean,\n integrityError?: IntegrityError,\n missingPatterns: Array<string>,\n};\n\ntype IntegrityHashLocation = {\n locationFolder: string,\n locationPath: string,\n exists: boolean,\n};\n\ntype IntegrityFile = {\n systemParams: string,\n flags: Array<string>,\n modulesFolders: Array<string>,\n linkedModules: Array<string>,\n topLevelPatterns: Array<string>,\n lockfileEntries: {\n [key: string]: string,\n },\n files: Array<string>,\n artifacts: ?InstallArtifacts,\n};\n\ntype IntegrityFlags = {\n flat: boolean,\n checkFiles: boolean,\n};\n\nconst INTEGRITY_FILE_DEFAULTS = () => ({\n systemParams: getSystemParams(),\n modulesFolders: [],\n flags: [],\n linkedModules: [],\n topLevelPatterns: [],\n lockfileEntries: {},\n files: [],\n});\n\n/**\n *\n */\nexport default class InstallationIntegrityChecker {\n constructor(config: Config) {\n this.config = config;\n }\n\n config: Config;\n\n /**\n * Get the common ancestor of every node_modules - it may be a node_modules directory itself, but isn't required to.\n */\n\n _getModulesRootFolder(): string {\n if (this.config.modulesFolder) {\n return this.config.modulesFolder;\n } else if (this.config.workspaceRootFolder) {\n return this.config.workspaceRootFolder;\n } else {\n return path.join(this.config.lockfileFolder, constants.NODE_MODULES_FOLDER);\n }\n }\n\n /**\n * Get the directory in which the yarn-integrity file should be written.\n */\n\n _getIntegrityFileFolder(): string {\n if (this.config.modulesFolder) {\n return this.config.modulesFolder;\n } else if (this.config.enableMetaFolder) {\n return path.join(this.config.lockfileFolder, constants.META_FOLDER);\n } else {\n return path.join(this.config.lockfileFolder, constants.NODE_MODULES_FOLDER);\n }\n }\n\n /**\n * Get the full path of the yarn-integrity file.\n */\n\n async _getIntegrityFileLocation(): Promise<IntegrityHashLocation> {\n const locationFolder = this._getIntegrityFileFolder();\n const locationPath = path.join(locationFolder, constants.INTEGRITY_FILENAME);\n\n const exists = await fs.exists(locationPath);\n\n return {\n locationFolder,\n locationPath,\n exists,\n };\n }\n\n /**\n * Get the list of the directories that contain our modules (there might be multiple such folders b/c of workspaces).\n */\n\n _getModulesFolders({workspaceLayout}: {workspaceLayout: ?WorkspaceLayout} = {}): Array<string> {\n const locations = [];\n\n if (this.config.modulesFolder) {\n locations.push(this.config.modulesFolder);\n } else {\n locations.push(path.join(this.config.lockfileFolder, constants.NODE_MODULES_FOLDER));\n }\n\n if (workspaceLayout) {\n for (const workspaceName of Object.keys(workspaceLayout.workspaces)) {\n const loc = workspaceLayout.workspaces[workspaceName].loc;\n\n if (loc) {\n locations.push(path.join(loc, constants.NODE_MODULES_FOLDER));\n }\n }\n }\n\n return locations.sort(sortAlpha);\n }\n\n /**\n * Get a list of the files that are located inside our module folders.\n */\n async _getIntegrityListing({workspaceLayout}: {workspaceLayout: ?WorkspaceLayout} = {}): Promise<Array<string>> {\n const files = [];\n\n const recurse = async dir => {\n for (const file of await fs.readdir(dir)) {\n const entry = path.join(dir, file);\n const stat = await fs.lstat(entry);\n\n if (stat.isDirectory()) {\n await recurse(entry);\n } else {\n files.push(entry);\n }\n }\n };\n\n for (const modulesFolder of this._getModulesFolders({workspaceLayout})) {\n if (await fs.exists(modulesFolder)) {\n await recurse(modulesFolder);\n }\n }\n\n return files;\n }\n\n /**\n * Generate integrity hash of input lockfile.\n */\n\n async _generateIntegrityFile(\n lockfile: {[key: string]: LockManifest},\n patterns: Array<string>,\n flags: IntegrityFlags,\n workspaceLayout: ?WorkspaceLayout,\n artifacts?: InstallArtifacts,\n ): Promise<IntegrityFile> {\n const result: IntegrityFile = {\n ...INTEGRITY_FILE_DEFAULTS(),\n artifacts,\n };\n\n result.topLevelPatterns = patterns;\n\n // If using workspaces, we also need to add the workspaces patterns to the top-level, so that we'll know if a\n // dependency is added or removed into one of them. We must take care not to read the aggregator (if !loc).\n //\n // Also note that we can't use of workspaceLayout.workspaces[].manifest._reference.patterns, because when\n // doing a \"yarn check\", the _reference property hasn't yet been properly initialized.\n\n if (workspaceLayout) {\n result.topLevelPatterns = result.topLevelPatterns.filter(p => {\n // $FlowFixMe\n return !workspaceLayout.getManifestByPattern(p);\n });\n\n for (const name of Object.keys(workspaceLayout.workspaces)) {\n if (!workspaceLayout.workspaces[name].loc) {\n continue;\n }\n\n const manifest = workspaceLayout.workspaces[name].manifest;\n\n if (manifest) {\n for (const dependencyType of constants.DEPENDENCY_TYPES) {\n const dependencies = manifest[dependencyType];\n\n if (!dependencies) {\n continue;\n }\n\n for (const dep of Object.keys(dependencies)) {\n result.topLevelPatterns.push(`${dep}@${dependencies[dep]}`);\n }\n }\n }\n }\n }\n\n result.topLevelPatterns.sort(sortAlpha);\n\n if (flags.checkFiles) {\n result.flags.push('checkFiles');\n }\n\n if (flags.flat) {\n result.flags.push('flat');\n }\n\n if (this.config.ignoreScripts) {\n result.flags.push('ignoreScripts');\n }\n if (this.config.focus) {\n result.flags.push('focus: ' + this.config.focusedWorkspaceName);\n }\n\n if (this.config.production) {\n result.flags.push('production');\n }\n\n if (this.config.plugnplayEnabled) {\n result.flags.push('plugnplay');\n }\n\n const linkedModules = this.config.linkedModules;\n\n if (linkedModules.length) {\n result.linkedModules = linkedModules.sort(sortAlpha);\n }\n\n for (const key of Object.keys(lockfile)) {\n result.lockfileEntries[key] = lockfile[key].resolved || '';\n }\n\n for (const modulesFolder of this._getModulesFolders({workspaceLayout})) {\n if (await fs.exists(modulesFolder)) {\n result.modulesFolders.push(path.relative(this.config.lockfileFolder, modulesFolder));\n }\n }\n\n if (flags.checkFiles) {\n const modulesRoot = this._getModulesRootFolder();\n\n result.files = (await this._getIntegrityListing({workspaceLayout}))\n .map(entry => path.relative(modulesRoot, entry))\n .sort(sortAlpha);\n }\n\n return result;\n }\n\n async _getIntegrityFile(locationPath: string): Promise<?IntegrityFile> {\n const expectedRaw = await fs.readFile(locationPath);\n try {\n return {\n ...INTEGRITY_FILE_DEFAULTS(),\n ...JSON.parse(expectedRaw),\n };\n } catch (e) {\n // ignore JSON parsing for legacy text integrity files compatibility\n }\n return null;\n }\n\n _compareIntegrityFiles(\n actual: IntegrityFile,\n expected: ?IntegrityFile,\n checkFiles: boolean,\n workspaceLayout: ?WorkspaceLayout,\n ): 'OK' | IntegrityError {\n if (!expected) {\n return 'EXPECTED_IS_NOT_A_JSON';\n }\n\n if (!compareSortedArrays(actual.linkedModules, expected.linkedModules)) {\n return 'LINKED_MODULES_DONT_MATCH';\n }\n\n if (actual.systemParams !== expected.systemParams) {\n return 'SYSTEM_PARAMS_DONT_MATCH';\n }\n\n let relevantExpectedFlags = expected.flags.slice();\n\n // If we run \"yarn\" after \"yarn --check-files\", we shouldn't fail the less strict validation\n if (actual.flags.indexOf('checkFiles') === -1) {\n relevantExpectedFlags = relevantExpectedFlags.filter(flag => flag !== 'checkFiles');\n }\n\n if (!compareSortedArrays(actual.flags, relevantExpectedFlags)) {\n return 'FLAGS_DONT_MATCH';\n }\n\n if (!compareSortedArrays(actual.topLevelPatterns, expected.topLevelPatterns || [])) {\n return 'PATTERNS_DONT_MATCH';\n }\n\n for (const key of Object.keys(actual.lockfileEntries)) {\n if (actual.lockfileEntries[key] !== expected.lockfileEntries[key]) {\n return 'LOCKFILE_DONT_MATCH';\n }\n }\n\n for (const key of Object.keys(expected.lockfileEntries)) {\n if (actual.lockfileEntries[key] !== expected.lockfileEntries[key]) {\n return 'LOCKFILE_DONT_MATCH';\n }\n }\n\n if (checkFiles) {\n // Early bailout if we expect more files than what we have\n if (expected.files.length > actual.files.length) {\n return 'FILES_MISSING';\n }\n\n // Since we know the \"files\" array is sorted (alphabetically), we can optimize the thing\n // Instead of storing the files in a Set, we can just iterate both arrays at once. O(n)!\n for (let u = 0, v = 0; u < expected.files.length; ++u) {\n // Index that, if reached, means that we won't have enough food to match the remaining expected entries anyway\n const max = v + (actual.files.length - v) - (expected.files.length - u) + 1;\n\n // Skip over files that have been added (ie not present in 'expected')\n while (v < max && actual.files[v] !== expected.files[u]) {\n v += 1;\n }\n\n // If we've reached the index defined above, the file is either missing or we can early exit\n if (v === max) {\n return 'FILES_MISSING';\n }\n }\n }\n return 'OK';\n }\n\n async check(\n patterns: Array<string>,\n lockfile: {[key: string]: LockManifest},\n flags: IntegrityFlags,\n workspaceLayout: ?WorkspaceLayout,\n ): Promise<IntegrityCheckResult> {\n // check if patterns exist in lockfile\n const missingPatterns = patterns.filter(\n p => !lockfile[p] && (!workspaceLayout || !workspaceLayout.getManifestByPattern(p)),\n );\n\n const loc = await this._getIntegrityFileLocation();\n if (missingPatterns.length || !loc.exists) {\n return {\n integrityFileMissing: !loc.exists,\n missingPatterns,\n };\n }\n\n const actual = await this._generateIntegrityFile(lockfile, patterns, flags, workspaceLayout);\n\n const expected = await this._getIntegrityFile(loc.locationPath);\n let integrityMatches = this._compareIntegrityFiles(actual, expected, flags.checkFiles, workspaceLayout);\n\n if (integrityMatches === 'OK') {\n invariant(expected, \"The integrity shouldn't pass without integrity file\");\n for (const modulesFolder of expected.modulesFolders) {\n if (!await fs.exists(path.join(this.config.lockfileFolder, modulesFolder))) {\n integrityMatches = 'MODULES_FOLDERS_MISSING';\n }\n }\n }\n\n return {\n integrityFileMissing: false,\n integrityMatches: integrityMatches === 'OK',\n integrityError: integrityMatches === 'OK' ? undefined : integrityMatches,\n missingPatterns,\n hardRefreshRequired: integrityMatches === 'SYSTEM_PARAMS_DONT_MATCH',\n };\n }\n\n /**\n * Get artifacts from integrity file if it exists.\n */\n async getArtifacts(): Promise<?InstallArtifacts> {\n const loc = await this._getIntegrityFileLocation();\n if (!loc.exists) {\n return null;\n }\n\n const expectedRaw = await fs.readFile(loc.locationPath);\n let expected: ?IntegrityFile;\n try {\n expected = JSON.parse(expectedRaw);\n } catch (e) {\n // ignore JSON parsing for legacy text integrity files compatibility\n }\n\n return expected ? expected.artifacts : null;\n }\n\n /**\n * Write the integrity hash of the current install to disk.\n */\n async save(\n patterns: Array<string>,\n lockfile: {[key: string]: LockManifest},\n flags: IntegrityFlags,\n workspaceLayout: ?WorkspaceLayout,\n artifacts: InstallArtifacts,\n ): Promise<void> {\n const integrityFile = await this._generateIntegrityFile(lockfile, patterns, flags, workspaceLayout, artifacts);\n\n const loc = await this._getIntegrityFileLocation();\n invariant(loc.locationPath, 'expected integrity hash location');\n\n await fs.mkdirp(path.dirname(loc.locationPath));\n await fs.writeFile(loc.locationPath, JSON.stringify(integrityFile, null, 2));\n }\n\n async removeIntegrityFile(): Promise<void> {\n const loc = await this._getIntegrityFileLocation();\n if (loc.exists) {\n await fs.unlink(loc.locationPath);\n }\n }\n}\n"],"mappings":"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"}