JezK
Edit File: parse.js.map
{"version":3,"file":"parse.js","names":["tokenise","require","load","FAILSAFE_SCHEMA","VERSION_REGEX","TOKEN_TYPES","string","identifier","eof","colon","newline","comment","indent","invalid","number","comma","VALID_PROP_VALUE_TOKENS","isValidPropValueToken","token","indexOf","type","input","buildToken","value","line","col","lastNewline","length","chop","nextNewline","val","substring","indentSize","i","TypeError","isEscaped","JSON","parse","SyntaxError","test","exec","char","name","slice","Parser","fileLoc","comments","tokens","invariant","trim","versionMatch","match","version","LOCKFILE_VERSION","MessageError","push","item","next","done","Error","onComment","msg","tokType","unexpected","obj","map","propToken","nextToken","key","keys","keyToken","wasColon","util","inspect","MERGE_CONFLICT_ANCESTOR","MERGE_CONFLICT_END","MERGE_CONFLICT_SEP","MERGE_CONFLICT_START","extractConflictVariants","str","variants","lines","split","skip","shift","startsWith","conflictLine","join","hasMergeConflicts","includes","parser","endsWith","error1","schema","error2","result","parseWithConflict","object","Object","assign","err","stripBOM"],"sourceRoot":"../../src","sources":["lockfile/parse.js"],"sourcesContent":["/* @flow */\n/* eslint quotes: 0 */\n\nimport util from 'util';\nimport invariant from 'invariant';\nimport stripBOM from 'strip-bom';\n\nimport {LOCKFILE_VERSION} from '../constants.js';\nimport {MessageError} from '../errors.js';\nimport map from '../util/map.js';\n\nconst {load, FAILSAFE_SCHEMA} = require('js-yaml');\n\ntype Token = {\n line: number,\n col: number,\n type: string,\n value: boolean | number | string | void,\n};\n\nexport type ParseResultType = 'merge' | 'success' | 'conflict';\n\nexport type ParseResult = {\n type: ParseResultType,\n object: Object,\n};\n\nconst VERSION_REGEX = /^yarn lockfile v(\\d+)$/;\n\nconst TOKEN_TYPES = {\n boolean: 'BOOLEAN',\n string: 'STRING',\n identifier: 'IDENTIFIER',\n eof: 'EOF',\n colon: 'COLON',\n newline: 'NEWLINE',\n comment: 'COMMENT',\n indent: 'INDENT',\n invalid: 'INVALID',\n number: 'NUMBER',\n comma: 'COMMA',\n};\n\nconst VALID_PROP_VALUE_TOKENS = [TOKEN_TYPES.boolean, TOKEN_TYPES.string, TOKEN_TYPES.number];\n\nfunction isValidPropValueToken(token): boolean {\n return VALID_PROP_VALUE_TOKENS.indexOf(token.type) >= 0;\n}\n\nfunction* tokenise(input: string): Iterator<Token> {\n let lastNewline = false;\n let line = 1;\n let col = 0;\n\n function buildToken(type, value): Token {\n return {line, col, type, value};\n }\n\n while (input.length) {\n let chop = 0;\n\n if (input[0] === '\\n' || input[0] === '\\r') {\n chop++;\n // If this is a \\r\\n line, ignore both chars but only add one new line\n if (input[1] === '\\n') {\n chop++;\n }\n line++;\n col = 0;\n yield buildToken(TOKEN_TYPES.newline);\n } else if (input[0] === '#') {\n chop++;\n\n let nextNewline = input.indexOf('\\n', chop);\n if (nextNewline === -1) {\n nextNewline = input.length;\n }\n const val = input.substring(chop, nextNewline);\n chop = nextNewline;\n yield buildToken(TOKEN_TYPES.comment, val);\n } else if (input[0] === ' ') {\n if (lastNewline) {\n let indentSize = 1;\n for (let i = 1; input[i] === ' '; i++) {\n indentSize++;\n }\n\n if (indentSize % 2) {\n throw new TypeError('Invalid number of spaces');\n } else {\n chop = indentSize;\n yield buildToken(TOKEN_TYPES.indent, indentSize / 2);\n }\n } else {\n chop++;\n }\n } else if (input[0] === '\"') {\n let i = 1;\n for (; i < input.length; i++) {\n if (input[i] === '\"') {\n const isEscaped = input[i - 1] === '\\\\' && input[i - 2] !== '\\\\';\n if (!isEscaped) {\n i++;\n break;\n }\n }\n }\n const val = input.substring(0, i);\n\n chop = i;\n\n try {\n yield buildToken(TOKEN_TYPES.string, JSON.parse(val));\n } catch (err) {\n if (err instanceof SyntaxError) {\n yield buildToken(TOKEN_TYPES.invalid);\n } else {\n throw err;\n }\n }\n } else if (/^[0-9]/.test(input)) {\n const val = /^[0-9]+/.exec(input)[0];\n chop = val.length;\n\n yield buildToken(TOKEN_TYPES.number, +val);\n } else if (/^true/.test(input)) {\n yield buildToken(TOKEN_TYPES.boolean, true);\n chop = 4;\n } else if (/^false/.test(input)) {\n yield buildToken(TOKEN_TYPES.boolean, false);\n chop = 5;\n } else if (input[0] === ':') {\n yield buildToken(TOKEN_TYPES.colon);\n chop++;\n } else if (input[0] === ',') {\n yield buildToken(TOKEN_TYPES.comma);\n chop++;\n } else if (/^[a-zA-Z\\/.-]/g.test(input)) {\n let i = 0;\n for (; i < input.length; i++) {\n const char = input[i];\n if (char === ':' || char === ' ' || char === '\\n' || char === '\\r' || char === ',') {\n break;\n }\n }\n const name = input.substring(0, i);\n chop = i;\n\n yield buildToken(TOKEN_TYPES.string, name);\n } else {\n yield buildToken(TOKEN_TYPES.invalid);\n }\n\n if (!chop) {\n // will trigger infinite recursion\n yield buildToken(TOKEN_TYPES.invalid);\n }\n\n col += chop;\n lastNewline = input[0] === '\\n' || (input[0] === '\\r' && input[1] === '\\n');\n input = input.slice(chop);\n }\n\n yield buildToken(TOKEN_TYPES.eof);\n}\n\nclass Parser {\n constructor(input: string, fileLoc: string = 'lockfile') {\n this.comments = [];\n this.tokens = tokenise(input);\n this.fileLoc = fileLoc;\n }\n\n fileLoc: string;\n token: Token;\n tokens: Iterator<Token>;\n comments: Array<string>;\n\n onComment(token: Token) {\n const value = token.value;\n invariant(typeof value === 'string', 'expected token value to be a string');\n\n const comment = value.trim();\n\n const versionMatch = comment.match(VERSION_REGEX);\n if (versionMatch) {\n const version = +versionMatch[1];\n if (version > LOCKFILE_VERSION) {\n throw new MessageError(\n `Can't install from a lockfile of version ${version} as you're on an old yarn version that only supports ` +\n `versions up to ${LOCKFILE_VERSION}. Run \\`$ yarn self-update\\` to upgrade to the latest version.`,\n );\n }\n }\n\n this.comments.push(comment);\n }\n\n next(): Token {\n const item = this.tokens.next();\n invariant(item, 'expected a token');\n\n const {done, value} = item;\n if (done || !value) {\n throw new Error('No more tokens');\n } else if (value.type === TOKEN_TYPES.comment) {\n this.onComment(value);\n return this.next();\n } else {\n return (this.token = value);\n }\n }\n\n unexpected(msg: string = 'Unexpected token') {\n throw new SyntaxError(`${msg} ${this.token.line}:${this.token.col} in ${this.fileLoc}`);\n }\n\n expect(tokType: string) {\n if (this.token.type === tokType) {\n this.next();\n } else {\n this.unexpected();\n }\n }\n\n eat(tokType: string): boolean {\n if (this.token.type === tokType) {\n this.next();\n return true;\n } else {\n return false;\n }\n }\n\n parse(indent: number = 0): Object {\n const obj = map();\n\n while (true) {\n const propToken = this.token;\n\n if (propToken.type === TOKEN_TYPES.newline) {\n const nextToken = this.next();\n if (!indent) {\n // if we have 0 indentation then the next token doesn't matter\n continue;\n }\n\n if (nextToken.type !== TOKEN_TYPES.indent) {\n // if we have no indentation after a newline then we've gone down a level\n break;\n }\n\n if (nextToken.value === indent) {\n // all is good, the indent is on our level\n this.next();\n } else {\n // the indentation is less than our level\n break;\n }\n } else if (propToken.type === TOKEN_TYPES.indent) {\n if (propToken.value === indent) {\n this.next();\n } else {\n break;\n }\n } else if (propToken.type === TOKEN_TYPES.eof) {\n break;\n } else if (propToken.type === TOKEN_TYPES.string) {\n // property key\n const key = propToken.value;\n invariant(key, 'Expected a key');\n\n const keys = [key];\n this.next();\n\n // support multiple keys\n while (this.token.type === TOKEN_TYPES.comma) {\n this.next(); // skip comma\n\n const keyToken = this.token;\n if (keyToken.type !== TOKEN_TYPES.string) {\n this.unexpected('Expected string');\n }\n\n const key = keyToken.value;\n invariant(key, 'Expected a key');\n keys.push(key);\n this.next();\n }\n\n const wasColon = this.token.type === TOKEN_TYPES.colon;\n if (wasColon) {\n this.next();\n }\n\n if (isValidPropValueToken(this.token)) {\n // plain value\n for (const key of keys) {\n obj[key] = this.token.value;\n }\n\n this.next();\n } else if (wasColon) {\n // parse object\n const val = this.parse(indent + 1);\n\n for (const key of keys) {\n obj[key] = val;\n }\n\n if (indent && this.token.type !== TOKEN_TYPES.indent) {\n break;\n }\n } else {\n this.unexpected('Invalid value type');\n }\n } else {\n this.unexpected(`Unknown token: ${util.inspect(propToken)}`);\n }\n }\n\n return obj;\n }\n}\n\nconst MERGE_CONFLICT_ANCESTOR = '|||||||';\nconst MERGE_CONFLICT_END = '>>>>>>>';\nconst MERGE_CONFLICT_SEP = '=======';\nconst MERGE_CONFLICT_START = '<<<<<<<';\n\n/**\n * Extract the two versions of the lockfile from a merge conflict.\n */\nfunction extractConflictVariants(str: string): [string, string] {\n const variants = [[], []];\n const lines = str.split(/\\r?\\n/g);\n let skip = false;\n\n while (lines.length) {\n const line = lines.shift();\n if (line.startsWith(MERGE_CONFLICT_START)) {\n // get the first variant\n while (lines.length) {\n const conflictLine = lines.shift();\n if (conflictLine === MERGE_CONFLICT_SEP) {\n skip = false;\n break;\n } else if (skip || conflictLine.startsWith(MERGE_CONFLICT_ANCESTOR)) {\n skip = true;\n continue;\n } else {\n variants[0].push(conflictLine);\n }\n }\n\n // get the second variant\n while (lines.length) {\n const conflictLine = lines.shift();\n if (conflictLine.startsWith(MERGE_CONFLICT_END)) {\n break;\n } else {\n variants[1].push(conflictLine);\n }\n }\n } else {\n variants[0].push(line);\n variants[1].push(line);\n }\n }\n\n return [variants[0].join('\\n'), variants[1].join('\\n')];\n}\n\n/**\n * Check if a lockfile has merge conflicts.\n */\nfunction hasMergeConflicts(str: string): boolean {\n return str.includes(MERGE_CONFLICT_START) && str.includes(MERGE_CONFLICT_SEP) && str.includes(MERGE_CONFLICT_END);\n}\n\n/**\n * Parse the lockfile.\n */\nfunction parse(str: string, fileLoc: string): Object {\n const parser = new Parser(str, fileLoc);\n parser.next();\n\n if (!fileLoc.endsWith(`.yml`)) {\n try {\n return parser.parse();\n } catch (error1) {\n try {\n return load(str, {\n schema: FAILSAFE_SCHEMA,\n });\n } catch (error2) {\n throw error1;\n }\n }\n } else {\n const result = load(str, {\n schema: FAILSAFE_SCHEMA,\n });\n if (typeof result === 'object') {\n return result;\n } else {\n return {};\n }\n }\n}\n\n/**\n * Parse and merge the two variants in a conflicted lockfile.\n */\nfunction parseWithConflict(str: string, fileLoc: string): ParseResult {\n const variants = extractConflictVariants(str);\n try {\n return {type: 'merge', object: Object.assign({}, parse(variants[0], fileLoc), parse(variants[1], fileLoc))};\n } catch (err) {\n if (err instanceof SyntaxError) {\n return {type: 'conflict', object: {}};\n } else {\n throw err;\n }\n }\n}\n\nexport default function(str: string, fileLoc: string = 'lockfile'): ParseResult {\n str = stripBOM(str);\n return hasMergeConflicts(str) ? parseWithConflict(str, fileLoc) : {type: 'success', object: parse(str, fileLoc)};\n}\n"],"mappings":"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"}