diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/@vue/component-compiler-utils/dist/parse.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/@vue/component-compiler-utils/dist/parse.js')
| -rw-r--r-- | node_modules/@vue/component-compiler-utils/dist/parse.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/node_modules/@vue/component-compiler-utils/dist/parse.js b/node_modules/@vue/component-compiler-utils/dist/parse.js new file mode 100644 index 00000000..17c95ae1 --- /dev/null +++ b/node_modules/@vue/component-compiler-utils/dist/parse.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const hash = require('hash-sum'); +const cache = require('lru-cache')(100); +const { SourceMapGenerator } = require('source-map'); +const splitRE = /\r?\n/g; +const emptyRE = /^(?:\/\/)?\s*$/; +function parse(options) { + const { source, filename = '', compiler, compilerParseOptions = { pad: 'line' }, sourceRoot = process.cwd(), needMap = true } = options; + const cacheKey = hash(filename + source); + let output = cache.get(cacheKey); + if (output) + return output; + output = compiler.parseComponent(source, compilerParseOptions); + if (needMap) { + if (output.script && !output.script.src) { + output.script.map = generateSourceMap(filename, source, output.script.content, sourceRoot); + } + if (output.styles) { + output.styles.forEach(style => { + if (!style.src) { + style.map = generateSourceMap(filename, source, style.content, sourceRoot); + } + }); + } + } + cache.set(cacheKey, output); + return output; +} +exports.parse = parse; +function generateSourceMap(filename, source, generated, sourceRoot) { + const map = new SourceMapGenerator({ + file: filename, + sourceRoot + }); + map.setSourceContent(filename, source); + generated.split(splitRE).forEach((line, index) => { + if (!emptyRE.test(line)) { + map.addMapping({ + source: filename, + original: { + line: index + 1, + column: 0 + }, + generated: { + line: index + 1, + column: 0 + } + }); + } + }); + return map.toJSON(); +} |
