JezK
Edit File: generate-pnp-map.js.map
{"version":3,"file":"generate-pnp-map.js","names":["crypto","require","invariant","path","backwardSlashRegExp","OFFLINE_CACHE_EXTENSION","generateMaps","packageInformationStores","blacklistedLocations","code","packageName","packageInformationStore","JSON","stringify","packageReference","packageLocation","packageDependencies","entries","dependencyName","dependencyReference","blacklistedLocation","name","reference","generateFindPackageLocator","lengths","Map","values","length","count","get","set","sortedLengths","Array","from","sort","a","b","getPackageInformationStores","config","seedPatterns","resolver","reporter","targetPath","workspaceLayout","targetDirectory","dirname","offlineCacheFolder","Set","getCachePath","fsPath","cacheRelativePath","normalizePath","relative","cacheFolder","match","resolveOfflineCacheFolder","components","split","cacheEntry","internalPath","resolve","join","process","platform","replace","normalizeDirectoryPath","relativePath","isAbsolute","getHashFrom","data","hashGenerator","createHash","datum","update","digest","getResolverEntry","pattern","pkg","getStrictResolvedPattern","ref","_reference","locations","loc","visit","precomputedResolutions","parentData","resolutions","entry","version","peerDependencies","Object","keys","size","requests","hash","remote","type","symlinkSource","symlinkFile","lockfileFolder","isFromCache","hashName","newLoc","getBase","source","repeat","fs","mkdirp","symlink","add","packageInformation","directDependencies","dependencies","filter","has","childResolutions","workspaces","manifest","generatePnpMap","setupStaticTables","pnpApi","plugnplayShebang","plugnplayBlacklist"],"sourceRoot":"../../src","sources":["util/generate-pnp-map.js"],"sourcesContent":["// @flow\n\nimport type Config from '../config.js';\nimport type WorkspaceLayout from '../workspace-layout.js';\nimport type PackageResolver from '../package-resolver.js';\nimport type Reporter from '../reporters/base-reporter.js';\nimport pnpApi from './generate-pnp-map-api.tpl.js';\nimport * as fs from './fs.js';\n\nconst crypto = require('crypto');\nconst invariant = require('invariant');\nconst path = require('path');\n\nconst backwardSlashRegExp = /\\\\/g;\n\nconst OFFLINE_CACHE_EXTENSION = `.zip`;\n\ntype PackageInformation = {|\n packageLocation: string,\n packageDependencies: Map<string, string>,\n|};\n\ntype PackageInformationStore = Map<string | null, PackageInformation>;\ntype PackageInformationStores = Map<string | null, PackageInformationStore>;\n\ntype GeneratePnpMapOptions = {|\n resolver: PackageResolver,\n reporter: Reporter,\n targetPath: string,\n workspaceLayout: ?WorkspaceLayout,\n|};\n\nfunction generateMaps(packageInformationStores: PackageInformationStores, blacklistedLocations: Set<string>): string {\n let code = ``;\n\n // Bake the information stores into our generated code\n code += `let packageInformationStores = new Map([\\n`;\n for (const [packageName, packageInformationStore] of packageInformationStores) {\n code += ` [${JSON.stringify(packageName)}, new Map([\\n`;\n for (const [packageReference, {packageLocation, packageDependencies}] of packageInformationStore) {\n code += ` [${JSON.stringify(packageReference)}, {\\n`;\n code += ` packageLocation: path.resolve(__dirname, ${JSON.stringify(packageLocation)}),\\n`;\n code += ` packageDependencies: new Map([\\n`;\n for (const [dependencyName, dependencyReference] of packageDependencies.entries()) {\n code += ` [${JSON.stringify(dependencyName)}, ${JSON.stringify(dependencyReference)}],\\n`;\n }\n code += ` ]),\\n`;\n code += ` }],\\n`;\n }\n code += ` ])],\\n`;\n }\n code += `]);\\n`;\n\n code += `\\n`;\n\n // Also bake an inverse map that will allow us to find the package information based on the path\n code += `let locatorsByLocations = new Map([\\n`;\n for (const blacklistedLocation of blacklistedLocations) {\n code += ` [${JSON.stringify(blacklistedLocation)}, blacklistedLocator],\\n`;\n }\n for (const [packageName, packageInformationStore] of packageInformationStores) {\n for (const [packageReference, {packageLocation}] of packageInformationStore) {\n if (packageName !== null) {\n code += ` [${JSON.stringify(packageLocation)}, ${JSON.stringify({\n name: packageName,\n reference: packageReference,\n })}],\\n`;\n } else {\n code += ` [${JSON.stringify(packageLocation)}, topLevelLocator],\\n`;\n }\n }\n }\n code += `]);\\n`;\n\n return code;\n}\n\nfunction generateFindPackageLocator(packageInformationStores: PackageInformationStores): string {\n let code = ``;\n\n // We get the list of each string length we'll need to check in order to find the current package context\n const lengths = new Map();\n\n for (const packageInformationStore of packageInformationStores.values()) {\n for (const {packageLocation} of packageInformationStore.values()) {\n if (packageLocation === null) {\n continue;\n }\n\n const length = packageLocation.length;\n const count = (lengths.get(length) || 0) + 1;\n\n lengths.set(length, count);\n }\n }\n\n // We must try the larger lengths before the smaller ones, because smaller ones might also match the longest ones\n // (for instance, /project/path will match /project/path/.pnp/global/node_modules/pnp-cf5f9c17b8f8db)\n const sortedLengths = Array.from(lengths.entries()).sort((a, b) => {\n return b[0] - a[0];\n });\n\n // Generate a function that, given a file path, returns the associated package name\n code += `exports.findPackageLocator = function findPackageLocator(location) {\\n`;\n code += ` let relativeLocation = normalizePath(path.relative(__dirname, location));\\n`;\n code += `\\n`;\n code += ` if (!relativeLocation.match(isStrictRegExp))\\n`;\n code += ` relativeLocation = \\`./\\${relativeLocation}\\`;\\n`;\n code += `\\n`;\n code += ` if (location.match(isDirRegExp) && relativeLocation.charAt(relativeLocation.length - 1) !== '/')\\n`;\n code += ` relativeLocation = \\`\\${relativeLocation}/\\`;\\n`;\n code += `\\n`;\n code += ` let match;\\n`;\n\n for (const [length] of sortedLengths) {\n code += `\\n`;\n code += ` if (relativeLocation.length >= ${length} && relativeLocation[${length - 1}] === '/')\\n`;\n code += ` if (match = locatorsByLocations.get(relativeLocation.substr(0, ${length})))\\n`;\n code += ` return blacklistCheck(match);\\n`;\n }\n\n code += `\\n`;\n code += ` return null;\\n`;\n code += `};\\n`;\n\n return code;\n}\n\nasync function getPackageInformationStores(\n config: Config,\n seedPatterns: Array<string>,\n {resolver, reporter, targetPath, workspaceLayout}: GeneratePnpMapOptions,\n): Promise<[PackageInformationStores, Set<string>]> {\n const targetDirectory = path.dirname(targetPath);\n const offlineCacheFolder = config.offlineCacheFolder;\n\n const packageInformationStores: PackageInformationStores = new Map();\n const blacklistedLocations: Set<string> = new Set();\n\n const getCachePath = (fsPath: string) => {\n const cacheRelativePath = normalizePath(path.relative(config.cacheFolder, fsPath));\n\n // if fsPath is not inside cacheRelativePath, we just skip it\n if (cacheRelativePath.match(/^\\.\\.\\//)) {\n return null;\n }\n\n return cacheRelativePath;\n };\n\n const resolveOfflineCacheFolder = (fsPath: string) => {\n if (!offlineCacheFolder) {\n return fsPath;\n }\n\n const cacheRelativePath = getCachePath(fsPath);\n\n // if fsPath is not inside the cache, we shouldn't replace it (workspace)\n if (!cacheRelativePath) {\n return fsPath;\n }\n\n const components = cacheRelativePath.split(/\\//g);\n const [cacheEntry, ...internalPath] = components;\n\n return path.resolve(offlineCacheFolder, `${cacheEntry}${OFFLINE_CACHE_EXTENSION}`, internalPath.join('/'));\n };\n\n const normalizePath = (fsPath: string) => {\n return process.platform === 'win32' ? fsPath.replace(backwardSlashRegExp, '/') : fsPath;\n };\n\n const normalizeDirectoryPath = (fsPath: string) => {\n let relativePath = normalizePath(path.relative(targetDirectory, resolveOfflineCacheFolder(fsPath)));\n\n if (!relativePath.match(/^\\.{0,2}\\//) && !path.isAbsolute(relativePath)) {\n relativePath = `./${relativePath}`;\n }\n\n return relativePath.replace(/\\/?$/, '/');\n };\n\n const getHashFrom = (data: Array<string>) => {\n const hashGenerator = crypto.createHash('sha1');\n\n for (const datum of data) {\n hashGenerator.update(datum);\n }\n\n return hashGenerator.digest('hex');\n };\n\n const getResolverEntry = pattern => {\n const pkg = resolver.getStrictResolvedPattern(pattern);\n const ref = pkg._reference;\n\n if (!ref) {\n return null;\n }\n\n invariant(ref.locations.length <= 1, 'Must have at most one location (usually in the cache)');\n const loc = ref.locations[0];\n\n if (!loc) {\n return null;\n }\n\n return {pkg, ref, loc};\n };\n\n const visit = async (\n precomputedResolutions: Map<string, string>,\n seedPatterns: Array<string>,\n parentData: Array<string> = [],\n ) => {\n const resolutions = new Map(precomputedResolutions);\n const locations = new Map();\n\n // This first pass will compute the package reference of each of the given patterns\n // They will usually be the package version, but not always. We need to do this in a pre-process pass, because the\n // dependencies might depend on one another, so if we need to replace one of them, we need to compute it first\n for (const pattern of seedPatterns) {\n const entry = getResolverEntry(pattern);\n\n if (!entry) {\n continue;\n }\n\n const {pkg, ref} = entry;\n let {loc} = entry;\n\n const packageName = pkg.name;\n let packageReference = pkg.version;\n\n // If we have peer dependencies, then we generate a new virtual reference based on the parent one\n // We cannot generate this reference based on what those peer references resolve to, because they might not have\n // been computed yet (for example, consider the case where A has a peer dependency on B, and B a peer dependency\n // on A; it's valid, but it prevents us from computing A and B - and it's even worse with 3+ packages involved)\n const peerDependencies = new Set(Array.from(Object.keys(pkg.peerDependencies || {})));\n\n // As an optimization, we only setup virtual packages if their underlying packages are referenced multiple times\n // in the tree. This allow us to avoid having to create symlinks in the majority of cases\n if (peerDependencies.size > 0 && ref.requests.length > 1) {\n const hash = getHashFrom([...parentData, packageName, packageReference]);\n\n let symlinkSource;\n let symlinkFile;\n\n switch (ref.remote.type) {\n case 'workspace':\n {\n symlinkSource = loc;\n symlinkFile = path.resolve(config.lockfileFolder, '.pnp', 'workspaces', `pnp-${hash}`, packageName);\n\n loc = symlinkFile;\n }\n break;\n\n default:\n {\n const isFromCache = getCachePath(loc);\n\n const hashName =\n isFromCache && offlineCacheFolder ? `pnp-${hash}${OFFLINE_CACHE_EXTENSION}` : `pnp-${hash}`;\n const newLoc = path.resolve(\n config.lockfileFolder,\n '.pnp',\n 'externals',\n hashName,\n 'node_modules',\n packageName,\n );\n\n // The `node_modules/<pkgName>` part is already there when the package comes from the cache\n if (isFromCache) {\n const getBase = source => path.resolve(source, '../'.repeat(1 + packageName.split('/').length));\n symlinkSource = resolveOfflineCacheFolder(getBase(loc));\n symlinkFile = getBase(newLoc);\n } else {\n symlinkSource = loc;\n symlinkFile = newLoc;\n }\n\n loc = newLoc;\n }\n break;\n }\n\n await fs.mkdirp(path.dirname(symlinkFile));\n await fs.symlink(symlinkSource, symlinkFile);\n\n packageReference = `pnp:${hash}`;\n\n // We blacklist this path so that we can print a nicer error message if someone tries to require it (it usually\n // means that they're using realpath on the return value of require.resolve)\n blacklistedLocations.add(normalizeDirectoryPath(loc));\n }\n\n // Now that we have the final reference, we need to store it\n resolutions.set(packageName, packageReference);\n locations.set(packageName, loc);\n }\n\n // Now that we have the final references, we can start the main loop, which will insert the packages into the store\n // if they aren't already there, and recurse over their own children\n for (const pattern of seedPatterns) {\n const entry = getResolverEntry(pattern);\n\n if (!entry) {\n continue;\n }\n\n const {pkg, ref} = entry;\n\n const packageName = pkg.name;\n\n const packageReference = resolutions.get(packageName);\n invariant(packageReference, `Package reference should have been computed during the pre-pass`);\n\n const loc = locations.get(packageName);\n invariant(loc, `Package location should have been computed during the pre-pass`);\n\n // We can early exit if the package is already registered with the exact same name and reference, since even if\n // we might get slightly different dependencies (depending on how things were optimized), both sets are valid\n let packageInformationStore = packageInformationStores.get(packageName);\n\n if (!packageInformationStore) {\n packageInformationStore = new Map();\n packageInformationStores.set(packageName, packageInformationStore);\n }\n\n let packageInformation = packageInformationStore.get(packageReference);\n\n if (packageInformation) {\n continue;\n }\n\n packageInformation = {\n packageLocation: normalizeDirectoryPath(loc),\n packageDependencies: new Map(),\n };\n\n // Split the dependencies between direct/peer - we will only recurse on the former\n const peerDependencies = new Set(Array.from(Object.keys(pkg.peerDependencies || {})));\n const directDependencies = ref.dependencies.filter(pattern => {\n const pkg = resolver.getStrictResolvedPattern(pattern);\n return !pkg || !peerDependencies.has(pkg.name);\n });\n\n // We inject the partial information in the store right now so that we won't cycle indefinitely\n packageInformationStore.set(packageReference, packageInformation);\n\n // We must inject the peer dependencies before iterating; one of our dependencies might have a peer dependency\n // on one of our peer dependencies, so it must be available from the start (we don't have to do that for direct\n // dependencies, because the \"visit\" function that will iterate over them will automatically add the to the\n // candidate resolutions as part of the first step, cf above)\n\n for (const dependencyName of peerDependencies) {\n const dependencyReference = resolutions.get(dependencyName);\n\n if (dependencyReference) {\n packageInformation.packageDependencies.set(dependencyName, dependencyReference);\n }\n }\n\n const childResolutions = await visit(packageInformation.packageDependencies, directDependencies, [\n packageName,\n packageReference,\n ]);\n\n // We can now inject into our package the resolutions we got from the visit function\n for (const [name, reference] of childResolutions.entries()) {\n packageInformation.packageDependencies.set(name, reference);\n }\n\n // Finally, unless a package depends on a previous version of itself (that would be weird but correct...), we\n // inject them an implicit dependency to themselves (so that they can require themselves)\n if (!packageInformation.packageDependencies.has(packageName)) {\n packageInformation.packageDependencies.set(packageName, packageReference);\n }\n }\n\n return resolutions;\n };\n\n // If we have workspaces, we need to iterate over them all in order to add them to the map\n // This is because they might not be declared as dependencies of the top-level project (and with reason, since the\n // top-level package might depend on a different than the one provided in the workspaces - cf Babel, which depends\n // on an old version of itself in order to compile itself)\n if (workspaceLayout) {\n for (const name of Object.keys(workspaceLayout.workspaces)) {\n const pkg = workspaceLayout.workspaces[name].manifest;\n\n // Skip the aggregator, since it's essentially a duplicate of the top-level package that we'll iterate later on\n if (pkg.workspaces) {\n continue;\n }\n\n const ref = pkg._reference;\n invariant(ref, `Workspaces should have a reference`);\n\n invariant(ref.locations.length === 1, `Workspaces should have exactly one location`);\n const loc = ref.locations[0];\n invariant(loc, `Workspaces should have a location`);\n\n let packageInformationStore = packageInformationStores.get(name);\n\n if (!packageInformationStore) {\n packageInformationStore = new Map();\n packageInformationStores.set(name, packageInformationStore);\n }\n\n packageInformationStore.set(pkg.version, {\n packageLocation: normalizeDirectoryPath(loc),\n packageDependencies: await visit(new Map(), ref.dependencies, [name, pkg.version]),\n });\n }\n }\n\n // Register the top-level package in our map\n // This will recurse on each of its dependencies as well.\n packageInformationStores.set(\n null,\n new Map([\n [\n null,\n {\n packageLocation: normalizeDirectoryPath(config.lockfileFolder),\n packageDependencies: await visit(new Map(), seedPatterns),\n },\n ],\n ]),\n );\n\n return [packageInformationStores, blacklistedLocations];\n}\n\nexport async function generatePnpMap(\n config: Config,\n seedPatterns: Array<string>,\n {resolver, reporter, workspaceLayout, targetPath}: GeneratePnpMapOptions,\n): Promise<string> {\n const [packageInformationStores, blacklistedLocations] = await getPackageInformationStores(config, seedPatterns, {\n resolver,\n reporter,\n targetPath,\n workspaceLayout,\n });\n\n const setupStaticTables = [\n generateMaps(packageInformationStores, blacklistedLocations),\n generateFindPackageLocator(packageInformationStores),\n ].join(``);\n\n return pnpApi\n .replace(/\\$\\$SHEBANG/g, config.plugnplayShebang)\n .replace(/\\$\\$BLACKLIST/g, JSON.stringify(config.plugnplayBlacklist))\n .replace(/\\$\\$SETUP_STATIC_TABLES\\(\\);/g, setupStaticTables);\n}\n"],"mappings":"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"}