JezK
Edit File: validate.js.map
{"version":3,"file":"validate.js","names":["isBuiltinModule","require","strings","dependencyKeys","isValidName","name","match","encodeURIComponent","isValidScopedName","parts","slice","split","length","isValidPackageName","info","isRoot","reporter","warn","key","typos","lang","MessageError","lower","toLowerCase","license","replace","isValidLicense","val","cleanDependencies","depTypes","type","deps","push","nonTrivialDeps","Map","Object","keys","version","has","set","setDeps","Set","dep","get","add"],"sourceRoot":"../../../src","sources":["util/normalize-manifest/validate.js"],"sourcesContent":["/* @flow */\n\nimport type {Reporter} from '../../reporters/index.js';\nimport {MessageError} from '../../errors.js';\nimport {isValidLicense} from './util.js';\nimport typos from './typos.js';\n\nconst isBuiltinModule = require('is-builtin-module');\n\nconst strings = ['name', 'version'];\n\nconst dependencyKeys = [\n // npm registry will include optionalDependencies in dependencies and we'll want to dedupe them from the\n // other fields first\n 'optionalDependencies',\n\n // it's seemingly common to include a dependency in dependencies and devDependencies of the same name but\n // different ranges, this can cause a lot of issues with our determinism and the behaviour of npm is\n // currently unspecified.\n 'dependencies',\n\n 'devDependencies',\n];\n\nfunction isValidName(name: string): boolean {\n return !name.match(/[\\/@\\s\\+%:]/) && encodeURIComponent(name) === name;\n}\n\nfunction isValidScopedName(name: string): boolean {\n if (name[0] !== '@') {\n return false;\n }\n\n const parts = name.slice(1).split('/');\n return parts.length === 2 && isValidName(parts[0]) && isValidName(parts[1]);\n}\n\nexport function isValidPackageName(name: string): boolean {\n return isValidName(name) || isValidScopedName(name);\n}\n\ntype WarnFunction = (msg: string) => void;\n\nexport default function(info: Object, isRoot: boolean, reporter: Reporter, warn: WarnFunction) {\n if (isRoot) {\n for (const key in typos) {\n if (key in info) {\n warn(reporter.lang('manifestPotentialTypo', key, typos[key]));\n }\n }\n }\n\n // validate name\n const {name} = info;\n if (typeof name === 'string') {\n if (isRoot && isBuiltinModule(name)) {\n warn(reporter.lang('manifestBuiltinModule', name));\n }\n\n // cannot start with a dot\n if (name[0] === '.') {\n throw new MessageError(reporter.lang('manifestNameDot'));\n }\n\n // cannot contain the following characters\n if (!isValidPackageName(name)) {\n throw new MessageError(reporter.lang('manifestNameIllegalChars'));\n }\n\n // cannot equal node_modules or favicon.ico\n const lower = name.toLowerCase();\n if (lower === 'node_modules' || lower === 'favicon.ico') {\n throw new MessageError(reporter.lang('manifestNameBlacklisted'));\n }\n }\n\n // validate license\n if (isRoot && !info.private) {\n if (typeof info.license === 'string') {\n const license = info.license.replace(/\\*$/g, '');\n if (!isValidLicense(license)) {\n warn(reporter.lang('manifestLicenseInvalid'));\n }\n } else {\n warn(reporter.lang('manifestLicenseNone'));\n }\n }\n\n // validate strings\n for (const key of strings) {\n const val = info[key];\n if (val && typeof val !== 'string') {\n throw new MessageError(reporter.lang('manifestStringExpected', key));\n }\n }\n\n cleanDependencies(info, isRoot, reporter, warn);\n}\n\nexport function cleanDependencies(info: Object, isRoot: boolean, reporter: Reporter, warn: WarnFunction) {\n // get dependency objects\n const depTypes = [];\n for (const type of dependencyKeys) {\n const deps = info[type];\n if (!deps || typeof deps !== 'object') {\n continue;\n }\n depTypes.push([type, deps]);\n }\n\n // aggregate all non-trivial deps (not '' or '*')\n const nonTrivialDeps: Map<string, {type: string, version: string}> = new Map();\n for (const [type, deps] of depTypes) {\n for (const name of Object.keys(deps)) {\n const version = deps[name];\n if (!nonTrivialDeps.has(name) && version && version !== '*') {\n nonTrivialDeps.set(name, {type, version});\n }\n }\n }\n\n // overwrite first dep of package with non-trivial version, remove the rest\n const setDeps: Set<string> = new Set();\n for (const [type, deps] of depTypes) {\n for (const name of Object.keys(deps)) {\n let version = deps[name];\n\n const dep = nonTrivialDeps.get(name);\n if (dep) {\n if (version && version !== '*' && version !== dep.version && isRoot) {\n // only throw a warning when at the root\n warn(reporter.lang('manifestDependencyCollision', dep.type, name, dep.version, type, version));\n }\n version = dep.version;\n }\n\n if (setDeps.has(name)) {\n delete deps[name];\n } else {\n deps[name] = version;\n setDeps.add(name);\n }\n }\n }\n}\n"],"mappings":"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"}