JezK
Edit File: fix.js.map
{"version":3,"file":"fix.js","names":["semver","require","path","url","VALID_BIN_KEYS","LICENSE_RENAMES","X11","info","moduleLoc","reporter","warn","looseSemver","fs","readdir","files","version","clean","name","man","keywords","split","contributors","indexOf","authorsFilepath","join","stat","authorsFilestats","isFile","readFile","authors","map","line","replace","trim","filter","author","normalizePerson","Array","isArray","maintainers","readme","readmeCandidates","filename","lower","toLowerCase","sort","filename1","filename2","readmeFilename","readmeFilepath","readmeFileStats","description","desc","extractDescription","engines","str","patternParts","repository","type","repo","hostedGitFragmentToGitUrl","bugs","homepage","parts","parse","protocol","pathname","hostname","format","bin","length","Object","keys","key","target","test","isValidBin","lang","normalize","bundledDependencies","bundleDependencies","scripts","start","install","dirs","directories","binDir","fullBinDir","exists","scriptName","manDir","fullManDir","push","licenses","license","licenseTypes","isValidLicense","licenseFile","find","startsWith","licenseFilepath","licenseFileStats","licenseContent","inferredLicense","inferLicense","licenseText","basicLicense","expandedLicense","noticeFile","noticeFilepath","noticeFileStats","noticeText","MANIFEST_FIELDS","dependencyType","dependencyList"],"sourceRoot":"../../../src","sources":["util/normalize-manifest/fix.js"],"sourcesContent":["/* @flow */\n\nimport {MANIFEST_FIELDS} from '../../constants';\nimport type {Reporter} from '../../reporters/index.js';\nimport {isValidBin, isValidLicense} from './util.js';\nimport {normalizePerson, extractDescription} from './util.js';\nimport {hostedGitFragmentToGitUrl} from '../../resolvers/index.js';\nimport inferLicense from './infer-license.js';\nimport * as fs from '../fs.js';\n\nconst semver = require('semver');\nconst path = require('path');\nconst url = require('url');\n\nconst VALID_BIN_KEYS = /^(?!\\.{0,2}$)[a-z0-9._-]+$/i;\n\nconst LICENSE_RENAMES: {[key: string]: ?string} = {\n 'MIT/X11': 'MIT',\n X11: 'MIT',\n};\n\ntype Dict<T> = {\n [key: string]: T,\n};\n\ntype WarnFunction = (msg: string) => void;\n\nexport default (async function(\n info: Dict<mixed>,\n moduleLoc: string,\n reporter: Reporter,\n warn: WarnFunction,\n looseSemver: boolean,\n): Promise<void> {\n const files = await fs.readdir(moduleLoc);\n\n // clean info.version\n if (typeof info.version === 'string') {\n info.version = semver.clean(info.version, looseSemver) || info.version;\n }\n\n // if name or version aren't set then set them to empty strings\n info.name = info.name || '';\n info.version = info.version || '';\n\n // if the man field is a string then coerce it to an array\n if (typeof info.man === 'string') {\n info.man = [info.man];\n }\n\n // if the keywords field is a string then split it on any whitespace\n if (typeof info.keywords === 'string') {\n info.keywords = info.keywords.split(/\\s+/g);\n }\n\n // if there's no contributors field but an authors field then expand it\n if (!info.contributors && files.indexOf('AUTHORS') >= 0) {\n const authorsFilepath = path.join(moduleLoc, 'AUTHORS');\n const authorsFilestats = await fs.stat(authorsFilepath);\n if (authorsFilestats.isFile()) {\n let authors = await fs.readFile(authorsFilepath);\n authors = authors\n .split(/\\r?\\n/g) // split on lines\n .map((line): string => line.replace(/^\\s*#.*$/, '').trim()) // remove comments\n .filter((line): boolean => !!line); // remove empty lines\n info.contributors = authors;\n }\n }\n\n // expand people fields to objects\n if (typeof info.author === 'string' || typeof info.author === 'object') {\n info.author = normalizePerson(info.author);\n }\n if (Array.isArray(info.contributors)) {\n info.contributors = info.contributors.map(normalizePerson);\n }\n if (Array.isArray(info.maintainers)) {\n info.maintainers = info.maintainers.map(normalizePerson);\n }\n\n // if there's no readme field then load the README file from the cwd\n if (!info.readme) {\n const readmeCandidates = files\n .filter((filename): boolean => {\n const lower = filename.toLowerCase();\n return lower === 'readme' || lower.indexOf('readme.') === 0;\n })\n .sort((filename1, filename2): number => {\n // favor files with extensions\n return filename2.indexOf('.') - filename1.indexOf('.');\n });\n\n for (const readmeFilename of readmeCandidates) {\n const readmeFilepath = path.join(moduleLoc, readmeFilename);\n const readmeFileStats = await fs.stat(readmeFilepath);\n if (readmeFileStats.isFile()) {\n info.readmeFilename = readmeFilename;\n info.readme = await fs.readFile(readmeFilepath);\n break;\n }\n }\n }\n\n // if there's no description then take the first paragraph from the readme\n if (!info.description && info.readme) {\n const desc = extractDescription(info.readme);\n if (desc) {\n info.description = desc;\n }\n }\n\n // support array of engine keys\n if (Array.isArray(info.engines)) {\n const engines = {};\n for (const str of info.engines) {\n if (typeof str === 'string') {\n const [name, ...patternParts] = str.trim().split(/ +/g);\n engines[name] = patternParts.join(' ');\n }\n }\n info.engines = engines;\n }\n\n // if the repository field is a string then assume it's a git repo and expand it\n if (typeof info.repository === 'string') {\n info.repository = {\n type: 'git',\n url: info.repository,\n };\n }\n\n const repo = info.repository;\n\n // explode info.repository.url if it's a hosted git shorthand\n if (repo && typeof repo === 'object' && typeof repo.url === 'string') {\n repo.url = hostedGitFragmentToGitUrl(repo.url, reporter);\n }\n\n // allow bugs to be specified as a string, expand it to an object with a single url prop\n if (typeof info.bugs === 'string') {\n info.bugs = {url: info.bugs};\n }\n\n // normalize homepage url to http\n if (typeof info.homepage === 'string') {\n const parts = url.parse(info.homepage);\n parts.protocol = parts.protocol || 'http:';\n if (parts.pathname && !parts.hostname) {\n parts.hostname = parts.pathname;\n parts.pathname = '';\n }\n info.homepage = url.format(parts);\n }\n\n // if the `bin` field is as string then expand it to an object with a single property\n // based on the original `bin` field and `name field`\n // { name: \"foo\", bin: \"cli.js\" } -> { name: \"foo\", bin: { foo: \"cli.js\" } }\n if (typeof info.name === 'string' && typeof info.bin === 'string' && info.bin.length > 0) {\n // Remove scoped package name for consistency with NPM's bin field fixing behaviour\n const name = info.name.replace(/^@[^\\/]+\\//, '');\n info.bin = {[name]: info.bin};\n }\n\n // Validate that the bin entries reference only files within their package, and that\n // their name is a valid file name\n if (typeof info.bin === 'object' && info.bin !== null) {\n const bin: Object = info.bin;\n for (const key of Object.keys(bin)) {\n const target = bin[key];\n if (!VALID_BIN_KEYS.test(key) || !isValidBin(target)) {\n delete bin[key];\n warn(reporter.lang('invalidBinEntry', info.name, key));\n } else {\n bin[key] = path.normalize(target);\n }\n }\n } else if (typeof info.bin !== 'undefined') {\n delete info.bin;\n warn(reporter.lang('invalidBinField', info.name));\n }\n\n // bundleDependencies is an alias for bundledDependencies\n if (info.bundledDependencies) {\n info.bundleDependencies = info.bundledDependencies;\n delete info.bundledDependencies;\n }\n\n let scripts: Object;\n\n // dummy script object to shove file inferred scripts onto\n if (info.scripts && typeof info.scripts === 'object') {\n scripts = info.scripts;\n } else {\n scripts = {};\n }\n\n // if there's a server.js file and no start script then set it to `node server.js`\n if (!scripts.start && files.indexOf('server.js') >= 0) {\n scripts.start = 'node server.js';\n }\n\n // if there's a binding.gyp file and no install script then set it to `node-gyp rebuild`\n if (!scripts.install && files.indexOf('binding.gyp') >= 0) {\n scripts.install = 'node-gyp rebuild';\n }\n\n // set scripts if we've polluted the empty object\n if (Object.keys(scripts).length) {\n info.scripts = scripts;\n }\n\n const dirs = info.directories;\n\n if (dirs && typeof dirs === 'object') {\n const binDir = dirs.bin;\n\n if (!info.bin && binDir && typeof binDir === 'string') {\n const bin = (info.bin = {});\n const fullBinDir = path.join(moduleLoc, binDir);\n\n if (await fs.exists(fullBinDir)) {\n for (const scriptName of await fs.readdir(fullBinDir)) {\n if (scriptName[0] === '.') {\n continue;\n }\n bin[scriptName] = path.join('.', binDir, scriptName);\n }\n } else {\n warn(reporter.lang('manifestDirectoryNotFound', binDir, info.name));\n }\n }\n\n const manDir = dirs.man;\n\n if (!info.man && typeof manDir === 'string') {\n const man = (info.man = []);\n const fullManDir = path.join(moduleLoc, manDir);\n\n if (await fs.exists(fullManDir)) {\n for (const filename of await fs.readdir(fullManDir)) {\n if (/^(.*?)\\.[0-9]$/.test(filename)) {\n man.push(path.join('.', manDir, filename));\n }\n }\n } else {\n warn(reporter.lang('manifestDirectoryNotFound', manDir, info.name));\n }\n }\n }\n\n delete info.directories;\n\n // normalize licenses field\n const licenses = info.licenses;\n if (Array.isArray(licenses) && !info.license) {\n let licenseTypes = [];\n\n for (let license of licenses) {\n if (license && typeof license === 'object') {\n license = license.type;\n }\n if (typeof license === 'string') {\n licenseTypes.push(license);\n }\n }\n\n licenseTypes = licenseTypes.filter(isValidLicense);\n\n if (licenseTypes.length === 1) {\n info.license = licenseTypes[0];\n } else if (licenseTypes.length) {\n info.license = `(${licenseTypes.join(' OR ')})`;\n }\n }\n\n const license = info.license;\n\n // normalize license\n if (license && typeof license === 'object') {\n info.license = license.type;\n }\n\n // get license file\n const licenseFile = files.find((filename): boolean => {\n const lower = filename.toLowerCase();\n return (\n lower === 'license' || lower.startsWith('license.') || lower === 'unlicense' || lower.startsWith('unlicense.')\n );\n });\n if (licenseFile) {\n const licenseFilepath = path.join(moduleLoc, licenseFile);\n const licenseFileStats = await fs.stat(licenseFilepath);\n if (licenseFileStats.isFile()) {\n const licenseContent = await fs.readFile(licenseFilepath);\n const inferredLicense = inferLicense(licenseContent);\n info.licenseText = licenseContent;\n\n const license = info.license;\n\n if (typeof license === 'string') {\n if (inferredLicense && isValidLicense(inferredLicense) && !isValidLicense(license)) {\n // some packages don't specify their license version but we can infer it based on their license file\n const basicLicense = license.toLowerCase().replace(/(-like|\\*)$/g, '');\n const expandedLicense = inferredLicense.toLowerCase();\n if (expandedLicense.startsWith(basicLicense)) {\n // TODO consider doing something to notify the user\n info.license = inferredLicense;\n }\n }\n } else if (inferredLicense) {\n // if there's no license then infer it based on the license file\n info.license = inferredLicense;\n } else {\n // valid expression to refer to a license in a file\n info.license = `SEE LICENSE IN ${licenseFile}`;\n }\n }\n }\n\n if (typeof info.license === 'string') {\n // sometimes licenses are known by different names, reduce them\n info.license = LICENSE_RENAMES[info.license] || info.license;\n } else if (typeof info.readme === 'string') {\n // the license might be at the bottom of the README\n const inferredLicense = inferLicense(info.readme);\n if (inferredLicense) {\n info.license = inferredLicense;\n }\n }\n\n // get notice file\n const noticeFile = files.find((filename): boolean => {\n const lower = filename.toLowerCase();\n return lower === 'notice' || lower.startsWith('notice.');\n });\n if (noticeFile) {\n const noticeFilepath = path.join(moduleLoc, noticeFile);\n const noticeFileStats = await fs.stat(noticeFilepath);\n if (noticeFileStats.isFile()) {\n info.noticeText = await fs.readFile(noticeFilepath);\n }\n }\n\n for (const dependencyType of MANIFEST_FIELDS) {\n const dependencyList = info[dependencyType];\n if (dependencyList && typeof dependencyList === 'object') {\n delete dependencyList['//'];\n for (const name in dependencyList) {\n dependencyList[name] = dependencyList[name] || '';\n }\n }\n }\n});\n"],"mappings":"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"}