JezK
Edit File: npm-registry.js.map
{"version":3,"file":"npm-registry.js","names":["DEFAULT_REGISTRY","REGEX_REGISTRY_ENFORCED_HTTPS","REGEX_REGISTRY_HTTP_PROTOCOL","REGEX_REGISTRY_PREFIX","REGEX_REGISTRY_SUFFIX","SCOPE_SEPARATOR","SCOPED_PKG_REGEXP","getGlobalPrefix","process","env","PREFIX","platform","path","dirname","execPath","prefix","DESTDIR","join","PATH_CONFIG_OPTIONS","Set","isPathConfigOption","key","has","normalizePath","val","undefined","String","resolveWithHome","urlParts","requestUrl","normalizedUrl","normalizeUrl","parsed","url","parse","host","NpmRegistry","cwd","registries","requestManager","reporter","enableDefaultRc","extraneousRcFiles","folder","packageIdent","test","registry","pathname","resolved","resolve","addSuffix","replace","registryUrl","request","customHostSuffix","getRegistryOrGlobalOption","requestToRegistryHost","requestToYarn","YARN_REGISTRY","includes","requestToRegistryPath","startsWith","customHostSuffixInUse","endsWith","opts","packageName","escapeName","getRegistry","getRequestUrl","alwaysAuth","headers","Accept","unfiltered","isToRegistry","isRequestToRegistry","requestNeedsAuth","token","isScopedPackage","authorization","getAuth","otp","method","body","auth","json","buffer","gzip","OneTimePasswordError","MessageError","lang","info","notice","getOneTimePassword","clearCache","config","requestParts","Object","keys","find","option","parts","split","length","registryParts","name","range","escapedName","req","Error","repository","homepage","NpmResolver","findVersionInRegistryResponse","wantedPkg","latest","version","wanted","filename","possibles","slice","reverse","rcFile","push","localfile","concat","userconfig","userHome","home","foldersFromRootToCwd","getPosixPath","sep","pop","actuals","isHome","loc","verbose","fs","exists","readFile","mergeEnv","getPossibleConfigLocations","file","normalizeConfig","ini","offlineLoc","mirrorLoc","mkdirp","assign","match","availableRegistries","getAvailableRegistries","getScope","scope","getScopedOption","yarn","authToken","username","password","pw","Buffer","from","toString","baseRegistry","getAuthByRegistry","getOption","pre","suf","reg","getRegistryOption","overrideEnv","HOME","getConfigEnv","Registry","envReplace"],"sourceRoot":"../../src","sources":["registries/npm-registry.js"],"sourcesContent":["/* @flow */\n\nimport type Reporter from '../reporters/base-reporter.js';\nimport type RequestManager from '../util/request-manager.js';\nimport type {RegistryRequestOptions, CheckOutdatedReturn} from './base-registry.js';\nimport type Config from '../config.js';\nimport type {ConfigRegistries} from './index.js';\nimport type {Env} from '../util/env-replace.js';\nimport {YARN_REGISTRY} from '../constants.js';\nimport * as fs from '../util/fs.js';\nimport NpmResolver from '../resolvers/registries/npm-resolver.js';\nimport envReplace from '../util/env-replace.js';\nimport Registry from './base-registry.js';\nimport {addSuffix} from '../util/misc';\nimport {getPosixPath, resolveWithHome} from '../util/path';\nimport normalizeUrl from 'normalize-url';\nimport {default as userHome, home} from '../util/user-home-dir';\nimport {MessageError, OneTimePasswordError} from '../errors.js';\nimport {getOneTimePassword} from '../cli/commands/login.js';\nimport path from 'path';\nimport url from 'url';\nimport ini from 'ini';\n\nconst DEFAULT_REGISTRY = 'https://registry.npmjs.org/';\nconst REGEX_REGISTRY_ENFORCED_HTTPS = /^https?:\\/\\/([^\\/]+\\.)?(yarnpkg\\.com|npmjs\\.(org|com))(\\/|$)/;\nconst REGEX_REGISTRY_HTTP_PROTOCOL = /^https?:/i;\nconst REGEX_REGISTRY_PREFIX = /^(https?:)?\\/\\//i;\nconst REGEX_REGISTRY_SUFFIX = /registry\\/?$/;\n\nexport const SCOPE_SEPARATOR = '%2f';\n// All scoped package names are of the format `@scope%2fpkg` from the use of NpmRegistry.escapeName\n// `(?:^|\\/)` Match either the start of the string or a `/` but don't capture\n// `[^\\/?]+?` Match any character that is not '/' or '?' and capture, up until the first occurrence of:\n// `(?=%2f|\\/)` Match SCOPE_SEPARATOR, the escaped '/', or a raw `/` and don't capture\n// The reason for matching a plain `/` is NPM registry being inconsistent about escaping `/` in\n// scoped package names: when you're fetching a tarball, it is not escaped, when you want info\n// about the package, it is escaped.\nconst SCOPED_PKG_REGEXP = /(?:^|\\/)(@[^\\/?]+?)(?=%2f|\\/)/;\n\n// TODO: Use the method from src/cli/commands/global.js for this instead\nfunction getGlobalPrefix(): string {\n if (process.env.PREFIX) {\n return process.env.PREFIX;\n } else if (process.platform === 'win32') {\n // c:\\node\\node.exe --> prefix=c:\\node\\\n return path.dirname(process.execPath);\n } else {\n // /usr/local/bin/node --> prefix=/usr/local\n let prefix = path.dirname(path.dirname(process.execPath));\n\n // destdir only is respected on Unix\n if (process.env.DESTDIR) {\n prefix = path.join(process.env.DESTDIR, prefix);\n }\n\n return prefix;\n }\n}\n\nconst PATH_CONFIG_OPTIONS = new Set(['cache', 'cafile', 'prefix', 'userconfig']);\n\nfunction isPathConfigOption(key: string): boolean {\n return PATH_CONFIG_OPTIONS.has(key);\n}\n\nfunction normalizePath(val: mixed): ?string {\n if (val === undefined) {\n return undefined;\n }\n\n if (typeof val !== 'string') {\n val = String(val);\n }\n\n return resolveWithHome(val);\n}\n\ntype UrlParts = {\n host: string,\n path: string,\n};\n\nfunction urlParts(requestUrl: string): UrlParts {\n const normalizedUrl = normalizeUrl(requestUrl);\n const parsed = url.parse(normalizedUrl);\n const host = parsed.host || '';\n const path = parsed.path || '';\n return {host, path};\n}\n\nexport default class NpmRegistry extends Registry {\n constructor(\n cwd: string,\n registries: ConfigRegistries,\n requestManager: RequestManager,\n reporter: Reporter,\n enableDefaultRc: boolean,\n extraneousRcFiles: Array<string>,\n ) {\n super(cwd, registries, requestManager, reporter, enableDefaultRc, extraneousRcFiles);\n this.folder = 'node_modules';\n }\n\n static filename = 'package.json';\n\n static escapeName(name: string): string {\n // scoped packages contain slashes and the npm registry expects them to be escaped\n return name.replace('/', SCOPE_SEPARATOR);\n }\n\n isScopedPackage(packageIdent: string): boolean {\n return SCOPED_PKG_REGEXP.test(packageIdent);\n }\n\n getRequestUrl(registry: string, pathname: string): string {\n let resolved = pathname;\n\n if (!REGEX_REGISTRY_PREFIX.test(pathname)) {\n resolved = url.resolve(addSuffix(registry, '/'), `./${pathname}`);\n }\n\n if (REGEX_REGISTRY_ENFORCED_HTTPS.test(resolved)) {\n resolved = resolved.replace(/^http:\\/\\//, 'https://');\n }\n\n return resolved;\n }\n\n isRequestToRegistry(requestUrl: string, registryUrl: string): boolean {\n const request = urlParts(requestUrl);\n const registry = urlParts(registryUrl);\n const customHostSuffix = this.getRegistryOrGlobalOption(registryUrl, 'custom-host-suffix');\n\n const requestToRegistryHost = request.host === registry.host;\n const requestToYarn = YARN_REGISTRY.includes(request.host) && DEFAULT_REGISTRY.includes(registry.host);\n const requestToRegistryPath = request.path.startsWith(registry.path);\n // For some registries, the package path does not prefix with the registry path\n const customHostSuffixInUse = typeof customHostSuffix === 'string' && request.host.endsWith(customHostSuffix);\n\n return (requestToRegistryHost || requestToYarn) && (requestToRegistryPath || customHostSuffixInUse);\n }\n\n async request(pathname: string, opts?: RegistryRequestOptions = {}, packageName: ?string): Promise<*> {\n // packageName needs to be escaped when if it is passed\n const packageIdent = (packageName && NpmRegistry.escapeName(packageName)) || pathname;\n const registry = opts.registry || this.getRegistry(packageIdent);\n const requestUrl = this.getRequestUrl(registry, pathname);\n\n const alwaysAuth = this.getRegistryOrGlobalOption(registry, 'always-auth');\n\n const headers = {\n Accept:\n // This is to use less bandwidth unless we really need to get the full response.\n // See https://github.com/npm/npm-registry-client#requests\n opts.unfiltered\n ? 'application/json'\n : 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*',\n ...opts.headers,\n };\n\n const isToRegistry = this.isRequestToRegistry(requestUrl, registry) || this.requestNeedsAuth(requestUrl);\n\n // this.token must be checked to account for publish requests on non-scoped packages\n if (this.token || (isToRegistry && (alwaysAuth || this.isScopedPackage(packageIdent)))) {\n const authorization = this.getAuth(packageIdent);\n if (authorization) {\n headers.authorization = authorization;\n }\n }\n\n if (this.otp) {\n headers['npm-otp'] = this.otp;\n }\n\n try {\n return await this.requestManager.request({\n url: requestUrl,\n method: opts.method,\n body: opts.body,\n auth: opts.auth,\n headers,\n json: !opts.buffer,\n buffer: opts.buffer,\n process: opts.process,\n gzip: true,\n });\n } catch (error) {\n if (error instanceof OneTimePasswordError) {\n if (this.otp) {\n throw new MessageError(this.reporter.lang('incorrectOneTimePassword'));\n }\n\n this.reporter.info(this.reporter.lang('twoFactorAuthenticationEnabled'));\n if (error.notice) {\n this.reporter.info(error.notice);\n }\n\n this.otp = await getOneTimePassword(this.reporter);\n\n this.requestManager.clearCache();\n\n return this.request(pathname, opts, packageName);\n } else {\n throw error;\n }\n }\n }\n\n requestNeedsAuth(requestUrl: string): boolean {\n const config = this.config;\n const requestParts = urlParts(requestUrl);\n return !!Object.keys(config).find(option => {\n const parts = option.split(':');\n if ((parts.length === 2 && parts[1] === '_authToken') || parts[1] === '_password') {\n const registryParts = urlParts(parts[0]);\n if (requestParts.host === registryParts.host && requestParts.path.startsWith(registryParts.path)) {\n return true;\n }\n }\n return false;\n });\n }\n\n async checkOutdated(config: Config, name: string, range: string): CheckOutdatedReturn {\n const escapedName = NpmRegistry.escapeName(name);\n const req = await this.request(escapedName, {unfiltered: true});\n if (!req) {\n throw new Error(`couldn't find ${name}`);\n }\n\n // By default use top level 'repository' and 'homepage' values\n let {repository, homepage} = req;\n const wantedPkg = await NpmResolver.findVersionInRegistryResponse(config, escapedName, range, req);\n\n // But some local repositories like Verdaccio do not return 'repository' nor 'homepage'\n // in top level data structure, so we fallback to wanted package manifest\n if (!repository && !homepage) {\n repository = wantedPkg.repository;\n homepage = wantedPkg.homepage;\n }\n\n let latest = req['dist-tags'].latest;\n // In certain cases, registries do not return a 'latest' tag.\n if (!latest) {\n latest = wantedPkg.version;\n }\n\n const url = homepage || (repository && repository.url) || '';\n\n return {\n latest,\n wanted: wantedPkg.version,\n url,\n };\n }\n\n async getPossibleConfigLocations(filename: string, reporter: Reporter): Promise<Array<[boolean, string, string]>> {\n let possibles = [];\n\n for (const rcFile of this.extraneousRcFiles.slice().reverse()) {\n possibles.push([false, path.resolve(process.cwd(), rcFile)]);\n }\n\n if (this.enableDefaultRc) {\n // npmrc --> ./.npmrc, ~/.npmrc, ${prefix}/etc/npmrc\n const localfile = '.' + filename;\n possibles = possibles.concat([\n [false, path.join(this.cwd, localfile)],\n [true, this.config.userconfig || path.join(userHome, localfile)],\n [false, path.join(getGlobalPrefix(), 'etc', filename)],\n ]);\n\n // When home directory for global install is different from where $HOME/npmrc is stored,\n // E.g. /usr/local/share vs /root on linux machines, check the additional location\n if (home !== userHome) {\n possibles.push([true, path.join(home, localfile)]);\n }\n\n // npmrc --> ../.npmrc, ../../.npmrc, etc.\n const foldersFromRootToCwd = getPosixPath(this.cwd).split('/');\n while (foldersFromRootToCwd.length > 1) {\n possibles.push([false, path.join(foldersFromRootToCwd.join(path.sep), localfile)]);\n foldersFromRootToCwd.pop();\n }\n }\n\n const actuals = [];\n for (const [isHome, loc] of possibles) {\n reporter.verbose(reporter.lang('configPossibleFile', loc));\n if (await fs.exists(loc)) {\n reporter.verbose(reporter.lang('configFileFound', loc));\n actuals.push([isHome, loc, await fs.readFile(loc)]);\n }\n }\n\n return actuals;\n }\n\n static getConfigEnv(env: Env = process.env): Env {\n // To match NPM's behavior, HOME is always the user's home directory.\n const overrideEnv = {\n HOME: home,\n };\n return Object.assign({}, env, overrideEnv);\n }\n\n static normalizeConfig(config: Object): Object {\n const env = NpmRegistry.getConfigEnv();\n config = Registry.normalizeConfig(config);\n\n for (const key: string in config) {\n config[key] = envReplace(config[key], env);\n if (isPathConfigOption(key)) {\n config[key] = normalizePath(config[key]);\n }\n }\n\n return config;\n }\n\n async loadConfig(): Promise<void> {\n // docs: https://docs.npmjs.com/misc/config\n this.mergeEnv('npm_config_');\n\n for (const [, loc, file] of await this.getPossibleConfigLocations('npmrc', this.reporter)) {\n const config = NpmRegistry.normalizeConfig(ini.parse(file));\n\n // normalize offline mirror path relative to the current npmrc\n const offlineLoc = config['yarn-offline-mirror'];\n // don't normalize if we already have a mirror path\n if (!this.config['yarn-offline-mirror'] && offlineLoc) {\n const mirrorLoc = (config['yarn-offline-mirror'] = path.resolve(path.dirname(loc), offlineLoc));\n await fs.mkdirp(mirrorLoc);\n }\n\n this.config = Object.assign({}, config, this.config);\n }\n }\n\n getScope(packageIdent: string): string {\n const match = packageIdent.match(SCOPED_PKG_REGEXP);\n return (match && match[1]) || '';\n }\n\n getRegistry(packageIdent: string): string {\n // Try extracting registry from the url, then scoped registry, and default registry\n if (packageIdent.match(REGEX_REGISTRY_PREFIX)) {\n const availableRegistries = this.getAvailableRegistries();\n const registry = availableRegistries.find(registry => packageIdent.startsWith(registry));\n if (registry) {\n return String(registry);\n }\n }\n\n for (const scope of [this.getScope(packageIdent), '']) {\n const registry =\n this.getScopedOption(scope, 'registry') || this.registries.yarn.getScopedOption(scope, 'registry');\n if (registry) {\n return String(registry);\n }\n }\n\n return DEFAULT_REGISTRY;\n }\n\n getAuthByRegistry(registry: string): string {\n // Check for bearer token.\n const authToken = this.getRegistryOrGlobalOption(registry, '_authToken');\n if (authToken) {\n return `Bearer ${String(authToken)}`;\n }\n\n // Check for basic auth token.\n const auth = this.getRegistryOrGlobalOption(registry, '_auth');\n if (auth) {\n return `Basic ${String(auth)}`;\n }\n\n // Check for basic username/password auth.\n const username = this.getRegistryOrGlobalOption(registry, 'username');\n const password = this.getRegistryOrGlobalOption(registry, '_password');\n if (username && password) {\n const pw = Buffer.from(String(password), 'base64').toString();\n return 'Basic ' + Buffer.from(String(username) + ':' + pw).toString('base64');\n }\n\n return '';\n }\n\n getAuth(packageIdent: string): string {\n if (this.token) {\n return this.token;\n }\n\n const baseRegistry = this.getRegistry(packageIdent);\n const registries = [baseRegistry];\n\n // If sending a request to the Yarn registry, we must also send it the auth token for the npm registry\n if (baseRegistry === YARN_REGISTRY) {\n registries.push(DEFAULT_REGISTRY);\n }\n\n for (const registry of registries) {\n const auth = this.getAuthByRegistry(registry);\n\n if (auth) {\n return auth;\n }\n }\n\n return '';\n }\n\n getScopedOption(scope: string, option: string): mixed {\n return this.getOption(scope + (scope ? ':' : '') + option);\n }\n\n getRegistryOption(registry: string, option: string): mixed {\n const pre = REGEX_REGISTRY_HTTP_PROTOCOL;\n const suf = REGEX_REGISTRY_SUFFIX;\n\n // When registry is used config scope, the trailing '/' is required\n const reg = addSuffix(registry, '/');\n\n // 1st attempt, try to get option for the given registry URL\n // 2nd attempt, remove the 'https?:' prefix of the registry URL\n // 3nd attempt, remove the 'registry/?' suffix of the registry URL\n return (\n this.getScopedOption(reg, option) ||\n (pre.test(reg) && this.getRegistryOption(reg.replace(pre, ''), option)) ||\n (suf.test(reg) && this.getRegistryOption(reg.replace(suf, ''), option))\n );\n }\n\n getRegistryOrGlobalOption(registry: string, option: string): mixed {\n return this.getRegistryOption(registry, option) || this.getOption(option);\n }\n}\n"],"mappings":"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"}