JezK
Edit File: util.js.map
{"version":3,"file":"util.js","names":["path","require","validateLicense","PARENT_PATH","isValidLicense","license","validForNewPackages","isValidBin","bin","isAbsolute","test","normalize","stringifyPerson","person","parts","name","push","email","mail","url","web","join","parsePerson","obj","match","trim","normalizePerson","extractDescription","readme","undefined","lines","split","map","line","start","length","end","slice","extractRepositoryUrl","repository"],"sourceRoot":"../../../src","sources":["util/normalize-manifest/util.js"],"sourcesContent":["/* @flow */\n\nimport type {PersonObject} from '../../types.js';\n\nconst path = require('path');\nconst validateLicense = require('validate-npm-package-license');\n\nconst PARENT_PATH = /^\\.\\.([\\\\\\/]|$)/;\n\nexport function isValidLicense(license: string): boolean {\n return !!license && validateLicense(license).validForNewPackages;\n}\n\nexport function isValidBin(bin: string): boolean {\n return !path.isAbsolute(bin) && !PARENT_PATH.test(path.normalize(bin));\n}\n\nexport function stringifyPerson(person: mixed): any {\n if (!person || typeof person !== 'object') {\n return person;\n }\n\n const parts = [];\n if (person.name) {\n parts.push(person.name);\n }\n\n const email = person.email || person.mail;\n if (typeof email === 'string') {\n parts.push(`<${email}>`);\n }\n\n const url = person.url || person.web;\n if (typeof url === 'string') {\n parts.push(`(${url})`);\n }\n\n return parts.join(' ');\n}\n\nexport function parsePerson(person: mixed): any {\n if (typeof person !== 'string') {\n return person;\n }\n\n // format: name (url) <email>\n const obj = {};\n\n let name = person.match(/^([^\\(<]+)/);\n if (name) {\n name = name[0].trim();\n if (name) {\n obj.name = name;\n }\n }\n\n const email = person.match(/<([^>]+)>/);\n if (email) {\n obj.email = email[1];\n }\n\n const url = person.match(/\\(([^\\)]+)\\)/);\n if (url) {\n obj.url = url[1];\n }\n\n return obj;\n}\n\nexport function normalizePerson(person: mixed): mixed | PersonObject {\n return parsePerson(stringifyPerson(person));\n}\n\nexport function extractDescription(readme: mixed): ?string {\n if (typeof readme !== 'string' || readme === '') {\n return undefined;\n }\n\n // split into lines\n const lines = readme.trim().split('\\n').map((line): string => line.trim());\n\n // find the start of the first paragraph, ignore headings\n let start = 0;\n for (; start < lines.length; start++) {\n const line = lines[start];\n if (line && line.match(/^(#|$)/)) {\n // line isn't empty and isn't a heading so this is the start of a paragraph\n start++;\n break;\n }\n }\n\n // skip newlines from the header to the first line\n while (start < lines.length && !lines[start]) {\n start++;\n }\n\n // continue to the first non empty line\n let end = start;\n while (end < lines.length && lines[end]) {\n end++;\n }\n\n return lines.slice(start, end).join(' ');\n}\n\nexport function extractRepositoryUrl(repository: mixed): any {\n if (!repository || typeof repository !== 'object') {\n return repository;\n }\n return repository.url;\n}\n"],"mappings":"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"}