@lynxwall/cucumber-tsflow 4.1.6 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +243 -71
- package/bin/cucumber-tsflow +1 -1
- package/lib/behave.js +25 -2
- package/lib/cli/argv-parser.d.ts +24 -0
- package/lib/cli/argv-parser.js +117 -0
- package/lib/cli/index.d.ts +22 -0
- package/lib/cli/index.js +105 -0
- package/lib/cli/load-configuration.d.ts +20 -0
- package/lib/cli/load-configuration.js +98 -0
- package/lib/cli/run.d.ts +1 -0
- package/lib/cli/run.js +54 -0
- package/lib/cucumber/binding-decorator.js +75 -87
- package/lib/cucumber/binding-registry.d.ts +8 -0
- package/lib/cucumber/binding-registry.js +62 -11
- package/lib/cucumber/hook-decorators.d.ts +30 -12
- package/lib/cucumber/hook-decorators.js +54 -23
- package/lib/cucumber/managed-scenario-context.js +6 -3
- package/lib/cucumber/message-collector.d.ts +55 -0
- package/lib/cucumber/message-collector.js +143 -0
- package/lib/cucumber/step-definition-decorators.js +15 -8
- package/lib/cucumber/utils.d.ts +16 -0
- package/lib/cucumber/utils.js +88 -0
- package/lib/esnode.d.ts +0 -0
- package/lib/esnode.js +20 -0
- package/lib/{tsflow.d.ts → esvue.d.ts} +0 -0
- package/lib/esvue.js +52 -0
- package/lib/formatters/behave-json-formatter.d.ts +36 -5
- package/lib/formatters/behave-json-formatter.js +36 -12
- package/lib/formatters/tsflow-snippet-syntax.js +44 -14
- package/lib/gherkin/configuration.d.ts +30 -0
- package/lib/gherkin/configuration.js +37 -0
- package/lib/gherkin/gherkin-feature.d.ts +28 -0
- package/lib/gherkin/gherkin-feature.js +345 -0
- package/lib/gherkin/gherkin-manager.d.ts +29 -0
- package/lib/gherkin/gherkin-manager.js +123 -0
- package/lib/gherkin/models.d.ts +45 -0
- package/lib/{tsflow.js → gherkin/models.js} +2 -4
- package/lib/snippet.d.ts +1 -0
- package/lib/snippet.js +38 -0
- package/lib/transpilers/esbuild-transpiler.d.ts +4 -0
- package/lib/transpilers/esbuild-transpiler.js +31 -0
- package/lib/transpilers/esbuild.d.ts +12 -0
- package/lib/transpilers/esbuild.js +66 -0
- package/lib/transpilers/vue-sfc/compiler.d.ts +7 -0
- package/lib/transpilers/vue-sfc/compiler.js +32 -0
- package/lib/transpilers/vue-sfc/index.d.ts +25 -0
- package/lib/transpilers/vue-sfc/index.js +62 -0
- package/lib/transpilers/vue-sfc/main.d.ts +8 -0
- package/lib/transpilers/vue-sfc/main.js +266 -0
- package/lib/transpilers/vue-sfc/script.d.ts +5 -0
- package/lib/transpilers/vue-sfc/script.js +53 -0
- package/lib/transpilers/vue-sfc/template.d.ts +8 -0
- package/lib/transpilers/vue-sfc/template.js +113 -0
- package/lib/transpilers/vue-sfc/types.d.ts +55 -0
- package/lib/transpilers/vue-sfc/types.js +13 -0
- package/lib/transpilers/vue-sfc/utils/descriptorCache.d.ts +13 -0
- package/lib/transpilers/vue-sfc/utils/descriptorCache.js +67 -0
- package/lib/transpilers/vue-sfc/utils/error.d.ts +3 -0
- package/lib/transpilers/vue-sfc/utils/error.js +33 -0
- package/lib/transpilers/vue-sfc/utils/query.d.ts +13 -0
- package/lib/transpilers/vue-sfc/utils/query.js +46 -0
- package/lib/tsnode.js +7 -9
- package/lib/tsvue.d.ts +1 -21
- package/lib/tsvue.js +47 -45
- package/lib/types/step-binding-flags.d.ts +9 -1
- package/lib/types/step-binding-flags.js +10 -2
- package/lib/types/step-binding.d.ts +8 -2
- package/lib/types/step-binding.js +1 -1
- package/lib/utils/helpers.d.ts +6 -0
- package/lib/utils/helpers.js +28 -0
- package/lib/utils/logger.js +25 -2
- package/lib/utils/our-callsite.d.ts +1 -0
- package/lib/utils/our-callsite.js +33 -4
- package/lib/version.d.ts +1 -0
- package/lib/version.js +16 -0
- package/package.json +21 -10
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
2
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
3
|
+
};
|
|
4
|
+
(function (factory) {
|
|
5
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
6
|
+
var v = factory(require, exports);
|
|
7
|
+
if (v !== undefined) module.exports = v;
|
|
8
|
+
}
|
|
9
|
+
else if (typeof define === "function" && define.amd) {
|
|
10
|
+
define(["require", "exports", "querystring", "path", "./utils/descriptorCache", "@rollup/pluginutils", "./script", "./template", "source-map", "./utils/error", "../esbuild"], factory);
|
|
11
|
+
}
|
|
12
|
+
})(function (require, exports) {
|
|
13
|
+
"use strict";
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.transformMain = void 0;
|
|
16
|
+
const querystring_1 = __importDefault(require("querystring"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const descriptorCache_1 = require("./utils/descriptorCache");
|
|
19
|
+
const pluginutils_1 = require("@rollup/pluginutils");
|
|
20
|
+
const script_1 = require("./script");
|
|
21
|
+
const template_1 = require("./template");
|
|
22
|
+
const source_map_1 = require("source-map");
|
|
23
|
+
const error_1 = require("./utils/error");
|
|
24
|
+
const esbuild_1 = require("../esbuild");
|
|
25
|
+
const transformMain = (code, filename, options, transformerContext, ssr, asCustomElement) => {
|
|
26
|
+
var _a, _b, _c, _d, _e;
|
|
27
|
+
const { descriptor, errors } = (0, descriptorCache_1.createDescriptor)(filename, code, options);
|
|
28
|
+
if (errors.length) {
|
|
29
|
+
errors.forEach(error => transformerContext.error((0, error_1.createRollupError)(filename, error)));
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// feature information
|
|
33
|
+
const attachedProps = [];
|
|
34
|
+
const hasScoped = descriptor.styles.some(s => s.scoped);
|
|
35
|
+
// script
|
|
36
|
+
const { code: scriptCode, map } = genScriptCode(descriptor, options, transformerContext, ssr);
|
|
37
|
+
// template
|
|
38
|
+
const hasTemplateImport = descriptor.template && !(0, script_1.isUseInlineTemplate)(descriptor, true);
|
|
39
|
+
let templateCode = '';
|
|
40
|
+
let templateMap;
|
|
41
|
+
if (hasTemplateImport) {
|
|
42
|
+
({ code: templateCode, map: templateMap } = genTemplateCode(descriptor, options, transformerContext, ssr));
|
|
43
|
+
}
|
|
44
|
+
if (hasTemplateImport) {
|
|
45
|
+
attachedProps.push(ssr ? ['ssrRender', '_sfc_ssrRender'] : ['render', '_sfc_render']);
|
|
46
|
+
}
|
|
47
|
+
// styles
|
|
48
|
+
const stylesCode = genStyleCode(descriptor, transformerContext, asCustomElement, attachedProps);
|
|
49
|
+
// custom blocks
|
|
50
|
+
const customBlocksCode = genCustomBlockCode(descriptor, transformerContext);
|
|
51
|
+
const output = [scriptCode, templateCode, stylesCode, customBlocksCode];
|
|
52
|
+
if (hasScoped) {
|
|
53
|
+
attachedProps.push([`__scopeId`, JSON.stringify(`data-v-${descriptor.id}`)]);
|
|
54
|
+
}
|
|
55
|
+
// SSR module registration by wrapping user setup
|
|
56
|
+
if (ssr) {
|
|
57
|
+
const normalizedFilename = (0, pluginutils_1.normalizePath)(path_1.default.relative(options.root, filename));
|
|
58
|
+
output.push(`import { useSSRContext as __vite_useSSRContext } from 'vue'`, `const _sfc_setup = _sfc_main.setup`, `_sfc_main.setup = (props, ctx) => {`, ` const ssrContext = __vite_useSSRContext()`, ` ;(ssrContext.modules || (ssrContext.modules = new Set())).add(${JSON.stringify(normalizedFilename)})`, ` return _sfc_setup ? _sfc_setup(props, ctx) : undefined`, `}`);
|
|
59
|
+
}
|
|
60
|
+
// if the template is inlined into the main module (indicated by the presence
|
|
61
|
+
// of templateMap, we need to concatenate the two source maps.
|
|
62
|
+
let resolvedMap = options.sourceMap ? map : undefined;
|
|
63
|
+
if (resolvedMap && templateMap) {
|
|
64
|
+
const generator = source_map_1.SourceMapGenerator.fromSourceMap(new source_map_1.SourceMapConsumer(map));
|
|
65
|
+
const offset = ((_b = (_a = scriptCode.match(/\r?\n/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) + 1;
|
|
66
|
+
const templateMapConsumer = new source_map_1.SourceMapConsumer(templateMap);
|
|
67
|
+
templateMapConsumer.eachMapping(m => {
|
|
68
|
+
generator.addMapping({
|
|
69
|
+
source: m.source,
|
|
70
|
+
original: { line: m.originalLine, column: m.originalColumn },
|
|
71
|
+
generated: {
|
|
72
|
+
line: m.generatedLine + offset,
|
|
73
|
+
column: m.generatedColumn
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
resolvedMap = generator.toJSON();
|
|
78
|
+
// if this is a template only update, we will be reusing a cached version
|
|
79
|
+
// of the main module compile result, which has outdated sourcesContent.
|
|
80
|
+
resolvedMap.sourcesContent = templateMap.sourcesContent;
|
|
81
|
+
}
|
|
82
|
+
if (!attachedProps.length) {
|
|
83
|
+
output.push(`export default _sfc_main`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
output.push(`import _export_sfc from 'export default (sfc, props) => {
|
|
87
|
+
const target = sfc.__vccOpts || sfc;
|
|
88
|
+
for (const [key, val] of props) {
|
|
89
|
+
target[key] = val;
|
|
90
|
+
}
|
|
91
|
+
return target;
|
|
92
|
+
}'`, `export default /*#__PURE__*/_export_sfc(_sfc_main, [${attachedProps
|
|
93
|
+
.map(([key, val]) => `['${key}',${val}]`)
|
|
94
|
+
.join(',')}])`);
|
|
95
|
+
}
|
|
96
|
+
// handle TS transpilation
|
|
97
|
+
let resolvedCode = output.join('\n');
|
|
98
|
+
if ((((_c = descriptor.script) === null || _c === void 0 ? void 0 : _c.lang) === 'ts' || ((_d = descriptor.scriptSetup) === null || _d === void 0 ? void 0 : _d.lang) === 'ts') &&
|
|
99
|
+
!((_e = descriptor.script) === null || _e === void 0 ? void 0 : _e.src) // only normal script can have src
|
|
100
|
+
) {
|
|
101
|
+
const { output, sourceMap } = (0, esbuild_1.transpileCode)(resolvedCode, filename, '.ts');
|
|
102
|
+
resolvedCode = output;
|
|
103
|
+
resolvedMap = resolvedMap ? sourceMap : resolvedMap;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
code: resolvedCode,
|
|
107
|
+
map: resolvedMap || {
|
|
108
|
+
mappings: ''
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
exports.transformMain = transformMain;
|
|
113
|
+
const genTemplateCode = (descriptor, options, transformerContext, ssr) => {
|
|
114
|
+
const template = descriptor.template;
|
|
115
|
+
// If the template is not using pre-processor AND is not using external src,
|
|
116
|
+
// compile and inline it directly in the main module. When served in vite this
|
|
117
|
+
// saves an extra request per SFC which can improve load performance.
|
|
118
|
+
if (!template.lang && !template.src) {
|
|
119
|
+
return (0, template_1.transformTemplateInMain)(template.content, descriptor, options, transformerContext, ssr);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
if (template.src) {
|
|
123
|
+
linkSrcToDescriptor(template.src, descriptor, transformerContext);
|
|
124
|
+
}
|
|
125
|
+
const src = template.src || descriptor.filename;
|
|
126
|
+
const srcQuery = template.src ? `&src=${descriptor.id}` : ``;
|
|
127
|
+
const attrsQuery = attrsToQuery(template.attrs, 'js', true);
|
|
128
|
+
const query = `?vue&type=template${srcQuery}${attrsQuery}`;
|
|
129
|
+
const request = JSON.stringify(src + query);
|
|
130
|
+
const renderFnName = ssr ? 'ssrRender' : 'render';
|
|
131
|
+
return {
|
|
132
|
+
code: `import { ${renderFnName} as _sfc_${renderFnName} } from ${request}`,
|
|
133
|
+
map: undefined
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const genScriptCode = (descriptor, options, transformerContext, ssr) => {
|
|
138
|
+
let scriptCode = `const _sfc_main = {}`;
|
|
139
|
+
let map;
|
|
140
|
+
const script = (0, script_1.resolveScript)(descriptor, options, ssr);
|
|
141
|
+
if (script) {
|
|
142
|
+
// If the script is js/ts and has no external src, it can be directly placed
|
|
143
|
+
// in the main module.
|
|
144
|
+
if ((!script.lang || script.lang === 'ts') && !script.src) {
|
|
145
|
+
scriptCode = options.compiler.rewriteDefault(script.content, '_sfc_main', script.lang === 'ts' ? ['typescript'] : undefined);
|
|
146
|
+
map = script.map;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
if (script.src) {
|
|
150
|
+
linkSrcToDescriptor(script.src, descriptor, transformerContext);
|
|
151
|
+
}
|
|
152
|
+
const src = script.src || descriptor.filename;
|
|
153
|
+
const langFallback = (script.src && path_1.default.extname(src).slice(1)) || 'js';
|
|
154
|
+
const attrsQuery = attrsToQuery(script.attrs, langFallback);
|
|
155
|
+
const srcQuery = script.src ? `&src=${descriptor.id}` : ``;
|
|
156
|
+
const query = `?vue&type=script${srcQuery}${attrsQuery}`;
|
|
157
|
+
const request = JSON.stringify(src + query);
|
|
158
|
+
scriptCode = `import _sfc_main from ${request}\n` + `export * from ${request}`; // support named exports
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
code: scriptCode,
|
|
163
|
+
map: map
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
const genStyleCode = (descriptor, transformerContext, asCustomElement, attachedProps) => {
|
|
167
|
+
let stylesCode = ``;
|
|
168
|
+
let cssModulesMap;
|
|
169
|
+
if (descriptor.styles.length) {
|
|
170
|
+
for (let i = 0; i < descriptor.styles.length; i++) {
|
|
171
|
+
const style = descriptor.styles[i];
|
|
172
|
+
if (style.src) {
|
|
173
|
+
linkSrcToDescriptor(style.src, descriptor, transformerContext);
|
|
174
|
+
}
|
|
175
|
+
const src = style.src || descriptor.filename;
|
|
176
|
+
// do not include module in default query, since we use it to indicate
|
|
177
|
+
// that the module needs to export the modules json
|
|
178
|
+
const attrsQuery = attrsToQuery(style.attrs, 'css');
|
|
179
|
+
const srcQuery = style.src ? `&src=${descriptor.id}` : ``;
|
|
180
|
+
const directQuery = asCustomElement ? `&inline` : ``;
|
|
181
|
+
const query = `?vue&type=style&index=${i}${srcQuery}${directQuery}`;
|
|
182
|
+
const styleRequest = src + query + attrsQuery;
|
|
183
|
+
if (style.module) {
|
|
184
|
+
if (asCustomElement) {
|
|
185
|
+
throw new Error(`<style module> is not supported in custom elements mode.`);
|
|
186
|
+
}
|
|
187
|
+
const [importCode, nameMap] = genCSSModulesCode(i, styleRequest, style.module);
|
|
188
|
+
stylesCode += importCode;
|
|
189
|
+
Object.assign((cssModulesMap || (cssModulesMap = {})), nameMap);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
if (asCustomElement) {
|
|
193
|
+
stylesCode += `\nimport _style_${i} from ${JSON.stringify(styleRequest)}`;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
stylesCode += `\nimport ${JSON.stringify(styleRequest)}`;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// TODO SSR critical CSS collection
|
|
200
|
+
}
|
|
201
|
+
if (asCustomElement) {
|
|
202
|
+
attachedProps.push([`styles`, `[${descriptor.styles.map((_, i) => `_style_${i}`).join(',')}]`]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (cssModulesMap) {
|
|
206
|
+
const mappingCode = Object.entries(cssModulesMap).reduce((code, [key, value]) => code + `"${key}":${value},\n`, '{\n') + '}';
|
|
207
|
+
stylesCode += `\nconst cssModules = ${mappingCode}`;
|
|
208
|
+
attachedProps.push([`__cssModules`, `cssModules`]);
|
|
209
|
+
}
|
|
210
|
+
return stylesCode;
|
|
211
|
+
};
|
|
212
|
+
const genCSSModulesCode = (index, request, moduleName) => {
|
|
213
|
+
const styleVar = `style${index}`;
|
|
214
|
+
const exposedName = typeof moduleName === 'string' ? moduleName : '$style';
|
|
215
|
+
// inject `.module` before extension so vite handles it as css module
|
|
216
|
+
const moduleRequest = request.replace(/\.(\w+)$/, '.module.$1');
|
|
217
|
+
return [`\nimport ${styleVar} from ${JSON.stringify(moduleRequest)}`, { [exposedName]: styleVar }];
|
|
218
|
+
};
|
|
219
|
+
const genCustomBlockCode = (descriptor, transformerContext) => {
|
|
220
|
+
let code = '';
|
|
221
|
+
for (let index = 0; index < descriptor.customBlocks.length; index++) {
|
|
222
|
+
const block = descriptor.customBlocks[index];
|
|
223
|
+
if (block.src) {
|
|
224
|
+
linkSrcToDescriptor(block.src, descriptor, transformerContext);
|
|
225
|
+
}
|
|
226
|
+
const src = block.src || descriptor.filename;
|
|
227
|
+
const attrsQuery = attrsToQuery(block.attrs, block.type);
|
|
228
|
+
const srcQuery = block.src ? `&src` : ``;
|
|
229
|
+
const query = `?vue&type=${block.type}&index=${index}${srcQuery}${attrsQuery}`;
|
|
230
|
+
const request = JSON.stringify(src + query);
|
|
231
|
+
code += `import block${index} from ${request}\n`;
|
|
232
|
+
code += `if (typeof block${index} === 'function') block${index}(_sfc_main)\n`;
|
|
233
|
+
}
|
|
234
|
+
return code;
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* For blocks with src imports, it is important to link the imported file
|
|
238
|
+
* with its owner SFC descriptor so that we can get the information about
|
|
239
|
+
* the owner SFC when compiling that file in the transform phase.
|
|
240
|
+
*/
|
|
241
|
+
const linkSrcToDescriptor = (src, descriptor, transformerContext) => {
|
|
242
|
+
var _a;
|
|
243
|
+
const srcFile = ((_a = transformerContext.resolve(descriptor.filename)) === null || _a === void 0 ? void 0 : _a.id) || src;
|
|
244
|
+
// #1812 if the src points to a dep file, the resolved id may contain a
|
|
245
|
+
// version query.
|
|
246
|
+
(0, descriptorCache_1.setSrcDescriptor)(srcFile.replace(/\?.*$/, ''), descriptor);
|
|
247
|
+
};
|
|
248
|
+
// these are built-in query parameters so should be ignored
|
|
249
|
+
// if the user happen to add them as attrs
|
|
250
|
+
const ignoreList = ['id', 'index', 'src', 'type', 'lang', 'module'];
|
|
251
|
+
const attrsToQuery = (attrs, langFallback, forceLangFallback = false) => {
|
|
252
|
+
let query = ``;
|
|
253
|
+
for (const name in attrs) {
|
|
254
|
+
const value = attrs[name];
|
|
255
|
+
if (!ignoreList.includes(name)) {
|
|
256
|
+
query += `&${querystring_1.default.escape(name)}${value ? `=${querystring_1.default.escape(String(value))}` : ``}`;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (langFallback || attrs.lang) {
|
|
260
|
+
query +=
|
|
261
|
+
`lang` in attrs ? (forceLangFallback ? `&lang.${langFallback}` : `&lang.${attrs.lang}`) : `&lang.${langFallback}`;
|
|
262
|
+
}
|
|
263
|
+
return query;
|
|
264
|
+
};
|
|
265
|
+
});
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc3BpbGVycy92dWUtc2ZjL21haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsOERBQTZCO0lBQzdCLGdEQUF3QjtJQUV4Qiw2REFBNkU7SUFFN0UscURBQW9EO0lBQ3BELHFDQUE4RDtJQUM5RCx5Q0FBcUQ7SUFFckQsMkNBQW1FO0lBQ25FLHlDQUFrRDtJQUVsRCx3Q0FBMkM7SUFFcEMsTUFBTSxhQUFhLEdBQUcsQ0FDNUIsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLE9BQXdCLEVBQ3hCLGtCQUF5QyxFQUN6QyxHQUFZLEVBQ1osZUFBd0IsRUFDdkIsRUFBRTs7UUFDSCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsa0NBQWdCLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV6RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFBLHlCQUFpQixFQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEYsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELHNCQUFzQjtRQUN0QixNQUFNLGFBQWEsR0FBdUIsRUFBRSxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhELFNBQVM7UUFDVCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUU5RixXQUFXO1FBQ1gs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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SFCDescriptor, SFCScriptBlock } from 'vue/compiler-sfc';
|
|
2
|
+
import type { ResolvedOptions } from './types';
|
|
3
|
+
export declare const getResolvedScript: (descriptor: SFCDescriptor, ssr: boolean) => SFCScriptBlock | null | undefined;
|
|
4
|
+
export declare const isUseInlineTemplate: (descriptor: SFCDescriptor, isProd: boolean) => boolean;
|
|
5
|
+
export declare const resolveScript: (descriptor: SFCDescriptor, options: ResolvedOptions, ssr: boolean) => SFCScriptBlock | null;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./template"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.resolveScript = exports.isUseInlineTemplate = exports.getResolvedScript = void 0;
|
|
13
|
+
const template_1 = require("./template");
|
|
14
|
+
// ssr and non ssr builds would output different script content
|
|
15
|
+
const clientCache = new WeakMap();
|
|
16
|
+
const ssrCache = new WeakMap();
|
|
17
|
+
const getResolvedScript = (descriptor, ssr) => {
|
|
18
|
+
return (ssr ? ssrCache : clientCache).get(descriptor);
|
|
19
|
+
};
|
|
20
|
+
exports.getResolvedScript = getResolvedScript;
|
|
21
|
+
// Check if we can use compile template as inlined render function
|
|
22
|
+
// inside <script setup>. This can only be done for build because
|
|
23
|
+
// inlined template cannot be individually hot updated.
|
|
24
|
+
const isUseInlineTemplate = (descriptor, isProd) => {
|
|
25
|
+
var _a;
|
|
26
|
+
return isProd && !!descriptor.scriptSetup && !((_a = descriptor.template) === null || _a === void 0 ? void 0 : _a.src);
|
|
27
|
+
};
|
|
28
|
+
exports.isUseInlineTemplate = isUseInlineTemplate;
|
|
29
|
+
const resolveScript = (descriptor, options, ssr) => {
|
|
30
|
+
if (!descriptor.script && !descriptor.scriptSetup) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const cacheToUse = ssr ? ssrCache : clientCache;
|
|
34
|
+
const cached = cacheToUse.get(descriptor);
|
|
35
|
+
if (cached) {
|
|
36
|
+
return cached;
|
|
37
|
+
}
|
|
38
|
+
let resolved = null;
|
|
39
|
+
resolved = options.compiler.compileScript(descriptor, {
|
|
40
|
+
...options.script,
|
|
41
|
+
id: descriptor.id,
|
|
42
|
+
isProd: options.isProduction,
|
|
43
|
+
inlineTemplate: (0, exports.isUseInlineTemplate)(descriptor, true),
|
|
44
|
+
reactivityTransform: options.reactivityTransform !== false,
|
|
45
|
+
templateOptions: (0, template_1.resolveTemplateCompilerOptions)(descriptor, options, ssr),
|
|
46
|
+
sourceMap: options.sourceMap
|
|
47
|
+
});
|
|
48
|
+
cacheToUse.set(descriptor, resolved);
|
|
49
|
+
return resolved;
|
|
50
|
+
};
|
|
51
|
+
exports.resolveScript = resolveScript;
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zcGlsZXJzL3Z1ZS1zZmMvc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUVBLHlDQUE0RDtJQUU1RCwrREFBK0Q7SUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXdDLENBQUM7SUFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQXdDLENBQUM7SUFFOUQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFVBQXlCLEVBQUUsR0FBWSxFQUFxQyxFQUFFO1FBQy9HLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztJQUZXLFFBQUEsaUJBQWlCLHFCQUU1QjtJQUVGLGtFQUFrRTtJQUNsRSxpRUFBaUU7SUFDakUsdURBQXVEO0lBQ2hELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxVQUF5QixFQUFFLE1BQWUsRUFBVyxFQUFFOztRQUMxRixPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUEsTUFBQSxVQUFVLENBQUMsUUFBUSwwQ0FBRSxHQUFHLENBQUEsQ0FBQztJQUN4RSxDQUFDLENBQUM7SUFGVyxRQUFBLG1CQUFtQix1QkFFOUI7SUFFSyxNQUFNLGFBQWEsR0FBRyxDQUM1QixVQUF5QixFQUN6QixPQUF3QixFQUN4QixHQUFZLEVBQ1ksRUFBRTtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDbEQsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU0sRUFBRTtZQUNYLE9BQU8sTUFBTSxDQUFDO1NBQ2Q7UUFFRCxJQUFJLFFBQVEsR0FBMEIsSUFBSSxDQUFDO1FBRTNDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDckQsR0FBRyxPQUFPLENBQUMsTUFBTTtZQUNqQixFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQzVCLGNBQWMsRUFBRSxJQUFBLDJCQUFtQixFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7WUFDckQsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixLQUFLLEtBQUs7WUFDMUQsZUFBZSxFQUFFLElBQUEseUNBQThCLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7WUFDekUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQzVCLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUMsQ0FBQztJQTdCVyxRQUFBLGFBQWEsaUJBNkJ4QiJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SFCDescriptor, SFCTemplateCompileOptions, SFCTemplateCompileResults } from 'vue/compiler-sfc';
|
|
2
|
+
import type { ResolvedOptions, VueTransformerContext } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* transform the template directly in the main SFC module
|
|
5
|
+
*/
|
|
6
|
+
export declare const transformTemplateInMain: (code: string, descriptor: SFCDescriptor, options: ResolvedOptions, transformerContext: VueTransformerContext, ssr: boolean) => SFCTemplateCompileResults;
|
|
7
|
+
export declare const compile: (code: string, descriptor: SFCDescriptor, options: ResolvedOptions, transformerContext: VueTransformerContext, ssr: boolean) => SFCTemplateCompileResults;
|
|
8
|
+
export declare const resolveTemplateCompilerOptions: (descriptor: SFCDescriptor, options: ResolvedOptions, ssr: boolean) => Omit<SFCTemplateCompileOptions, 'source'> | undefined;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./script", "./utils/error"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.resolveTemplateCompilerOptions = exports.compile = exports.transformTemplateInMain = void 0;
|
|
13
|
+
const script_1 = require("./script");
|
|
14
|
+
const error_1 = require("./utils/error");
|
|
15
|
+
/**
|
|
16
|
+
* transform the template directly in the main SFC module
|
|
17
|
+
*/
|
|
18
|
+
const transformTemplateInMain = (code, descriptor, options, transformerContext, ssr) => {
|
|
19
|
+
const result = (0, exports.compile)(code, descriptor, options, transformerContext, ssr);
|
|
20
|
+
return {
|
|
21
|
+
...result,
|
|
22
|
+
code: result.code.replace(/\nexport (function|const) (render|ssrRender)/, '\n$1 _sfc_$2')
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.transformTemplateInMain = transformTemplateInMain;
|
|
26
|
+
const compile = (code, descriptor, options, transformerContext, ssr) => {
|
|
27
|
+
const filename = descriptor.filename;
|
|
28
|
+
const result = options.compiler.compileTemplate({
|
|
29
|
+
...(0, exports.resolveTemplateCompilerOptions)(descriptor, options, ssr),
|
|
30
|
+
source: code
|
|
31
|
+
});
|
|
32
|
+
if (result.errors.length) {
|
|
33
|
+
result.errors.forEach(error => transformerContext.error(typeof error === 'string' ? { id: filename, message: error } : (0, error_1.createRollupError)(filename, error)));
|
|
34
|
+
}
|
|
35
|
+
if (result.tips.length) {
|
|
36
|
+
result.tips.forEach(tip => transformerContext.warn({
|
|
37
|
+
id: filename,
|
|
38
|
+
message: tip
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
exports.compile = compile;
|
|
44
|
+
const resolveTemplateCompilerOptions = (descriptor, options, ssr) => {
|
|
45
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
46
|
+
const block = descriptor.template;
|
|
47
|
+
if (!block) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const resolvedScript = (0, script_1.getResolvedScript)(descriptor, ssr);
|
|
51
|
+
const hasScoped = descriptor.styles.some(s => s.scoped);
|
|
52
|
+
const { id, filename, cssVars } = descriptor;
|
|
53
|
+
let transformAssetUrls = (_a = options.template) === null || _a === void 0 ? void 0 : _a.transformAssetUrls;
|
|
54
|
+
// compiler-sfc should export `AssetURLOptions`
|
|
55
|
+
// build: force all asset urls into import requests so that they go through
|
|
56
|
+
// the assets plugin for asset registration
|
|
57
|
+
// eslint-disable-next-line prefer-const
|
|
58
|
+
const assetUrlOptions = {
|
|
59
|
+
includeAbsolute: true
|
|
60
|
+
};
|
|
61
|
+
if (transformAssetUrls && typeof transformAssetUrls === 'object') {
|
|
62
|
+
// presence of array fields means this is raw tags config
|
|
63
|
+
if (Object.values(transformAssetUrls).some(val => Array.isArray(val))) {
|
|
64
|
+
transformAssetUrls = {
|
|
65
|
+
...assetUrlOptions,
|
|
66
|
+
tags: transformAssetUrls
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
transformAssetUrls = { ...transformAssetUrls, ...assetUrlOptions };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
transformAssetUrls = assetUrlOptions;
|
|
75
|
+
}
|
|
76
|
+
let preprocessOptions = block.lang && ((_b = options.template) === null || _b === void 0 ? void 0 : _b.preprocessOptions);
|
|
77
|
+
if (block.lang === 'pug') {
|
|
78
|
+
preprocessOptions = {
|
|
79
|
+
doctype: 'html',
|
|
80
|
+
...preprocessOptions
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// if using TS, support TS syntax in template expressions
|
|
84
|
+
const expressionPlugins = ((_d = (_c = options.template) === null || _c === void 0 ? void 0 : _c.compilerOptions) === null || _d === void 0 ? void 0 : _d.expressionPlugins) || [];
|
|
85
|
+
const lang = ((_e = descriptor.scriptSetup) === null || _e === void 0 ? void 0 : _e.lang) || ((_f = descriptor.script) === null || _f === void 0 ? void 0 : _f.lang);
|
|
86
|
+
if (lang && /tsx?$/.test(lang) && !expressionPlugins.includes('typescript')) {
|
|
87
|
+
expressionPlugins.push('typescript');
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
...options.template,
|
|
91
|
+
id,
|
|
92
|
+
filename,
|
|
93
|
+
scoped: hasScoped,
|
|
94
|
+
slotted: descriptor.slotted,
|
|
95
|
+
isProd: options.isProduction,
|
|
96
|
+
inMap: block.src ? undefined : block.map,
|
|
97
|
+
ssr,
|
|
98
|
+
ssrCssVars: cssVars,
|
|
99
|
+
transformAssetUrls,
|
|
100
|
+
preprocessLang: block.lang,
|
|
101
|
+
preprocessOptions,
|
|
102
|
+
compilerOptions: {
|
|
103
|
+
...(_g = options.template) === null || _g === void 0 ? void 0 : _g.compilerOptions,
|
|
104
|
+
scopeId: hasScoped ? `data-v-${id}` : undefined,
|
|
105
|
+
bindingMetadata: resolvedScript ? resolvedScript.bindings : undefined,
|
|
106
|
+
expressionPlugins,
|
|
107
|
+
sourceMap: options.sourceMap
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
exports.resolveTemplateCompilerOptions = resolveTemplateCompilerOptions;
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwaWxlcnMvdnVlLXNmYy90ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFPQSxxQ0FBNkM7SUFDN0MseUNBQWtEO0lBRWxEOztPQUVHO0lBQ0ksTUFBTSx1QkFBdUIsR0FBRyxDQUN0QyxJQUFZLEVBQ1osVUFBeUIsRUFDekIsT0FBd0IsRUFDeEIsa0JBQXlDLEVBQ3pDLEdBQVksRUFDZ0IsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRSxPQUFPO1lBQ04sR0FBRyxNQUFNO1lBQ1QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLDhDQUE4QyxFQUFFLGNBQWMsQ0FBQztTQUN6RixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBWlcsUUFBQSx1QkFBdUIsMkJBWWxDO0lBRUssTUFBTSxPQUFPLEdBQUcsQ0FDdEIsSUFBWSxFQUNaLFVBQXlCLEVBQ3pCLE9BQXdCLEVBQ3hCLGtCQUF5QyxFQUN6QyxHQUFZLEVBQ1gsRUFBRTtRQUNILE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFDL0MsR0FBRyxJQUFBLHNDQUE4QixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFFO1lBQzVELE1BQU0sRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUM3QixrQkFBa0IsQ0FBQyxLQUFLLENBQ3ZC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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { SFCScriptCompileOptions, SFCStyleCompileOptions, SFCTemplateCompileOptions } from 'vue/compiler-sfc';
|
|
2
|
+
import type { RollupError, RollupWarning } from 'rollup';
|
|
3
|
+
import type * as _compiler from 'vue/compiler-sfc';
|
|
4
|
+
export interface Options {
|
|
5
|
+
include?: string | RegExp | (string | RegExp)[];
|
|
6
|
+
exclude?: string | RegExp | (string | RegExp)[];
|
|
7
|
+
isProduction?: boolean;
|
|
8
|
+
script?: Partial<SFCScriptCompileOptions>;
|
|
9
|
+
template?: Partial<SFCTemplateCompileOptions>;
|
|
10
|
+
style?: Partial<SFCStyleCompileOptions>;
|
|
11
|
+
/**
|
|
12
|
+
* Transform Vue SFCs into custom elements.
|
|
13
|
+
* - `true`: all `*.vue` imports are converted into custom elements
|
|
14
|
+
* - `string | RegExp`: matched files are converted into custom elements
|
|
15
|
+
*
|
|
16
|
+
* @default /\.ce\.vue$/
|
|
17
|
+
*/
|
|
18
|
+
customElement?: boolean | string | RegExp | (string | RegExp)[];
|
|
19
|
+
/**
|
|
20
|
+
* Enable Vue reactivity transform (experimental).
|
|
21
|
+
* https://github.com/vuejs/core/tree/master/packages/reactivity-transform
|
|
22
|
+
* - `true`: transform will be enabled for all vue,js(x),ts(x) files except
|
|
23
|
+
* those inside node_modules
|
|
24
|
+
* - `string | RegExp`: apply to vue + only matched files (will include
|
|
25
|
+
* node_modules, so specify directories in necessary)
|
|
26
|
+
* - `false`: disable in all cases
|
|
27
|
+
*
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
30
|
+
reactivityTransform?: boolean | string | RegExp | (string | RegExp)[];
|
|
31
|
+
/**
|
|
32
|
+
* Use custom compiler-sfc instance. Can be used to force a specific version.
|
|
33
|
+
*/
|
|
34
|
+
compiler?: typeof _compiler;
|
|
35
|
+
}
|
|
36
|
+
export interface ResolvedOptions extends Options {
|
|
37
|
+
compiler: typeof _compiler;
|
|
38
|
+
root: string;
|
|
39
|
+
sourceMap: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface VueResolvedId {
|
|
42
|
+
external: boolean | 'absolute';
|
|
43
|
+
id: string;
|
|
44
|
+
}
|
|
45
|
+
export interface VueTransformerContext {
|
|
46
|
+
error: (err: RollupError | string, pos?: number | {
|
|
47
|
+
column: number;
|
|
48
|
+
line: number;
|
|
49
|
+
}) => void;
|
|
50
|
+
resolve: (id: string) => VueResolvedId | null;
|
|
51
|
+
warn: (warning: RollupWarning | string, pos?: number | {
|
|
52
|
+
column: number;
|
|
53
|
+
line: number;
|
|
54
|
+
}) => void;
|
|
55
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNwaWxlcnMvdnVlLXNmYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CompilerError, SFCDescriptor } from 'vue/compiler-sfc';
|
|
2
|
+
import type { VueQuery } from '..';
|
|
3
|
+
import type { ResolvedOptions } from '../types';
|
|
4
|
+
export interface SFCParseResult {
|
|
5
|
+
descriptor: SFCDescriptor;
|
|
6
|
+
errors: Array<CompilerError | SyntaxError>;
|
|
7
|
+
}
|
|
8
|
+
export declare const createDescriptor: (filename: string, source: string, { root, isProduction, sourceMap, compiler }: ResolvedOptions) => SFCParseResult;
|
|
9
|
+
export declare const getPrevDescriptor: (filename: string) => SFCDescriptor | undefined;
|
|
10
|
+
export declare const setPrevDescriptor: (filename: string, entry: SFCDescriptor) => void;
|
|
11
|
+
export declare const getDescriptor: (source: string, filename: string, options: ResolvedOptions, createIfNotFound?: boolean) => SFCDescriptor | undefined;
|
|
12
|
+
export declare const getSrcDescriptor: (filename: string, query: VueQuery) => SFCDescriptor;
|
|
13
|
+
export declare const setSrcDescriptor: (filename: string, entry: SFCDescriptor) => void;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
2
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
3
|
+
};
|
|
4
|
+
(function (factory) {
|
|
5
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
6
|
+
var v = factory(require, exports);
|
|
7
|
+
if (v !== undefined) module.exports = v;
|
|
8
|
+
}
|
|
9
|
+
else if (typeof define === "function" && define.amd) {
|
|
10
|
+
define(["require", "exports", "path", "slash", "hash-sum"], factory);
|
|
11
|
+
}
|
|
12
|
+
})(function (require, exports) {
|
|
13
|
+
"use strict";
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.setSrcDescriptor = exports.getSrcDescriptor = exports.getDescriptor = exports.setPrevDescriptor = exports.getPrevDescriptor = exports.createDescriptor = void 0;
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const slash_1 = __importDefault(require("slash"));
|
|
18
|
+
const hash_sum_1 = __importDefault(require("hash-sum"));
|
|
19
|
+
const cache = new Map();
|
|
20
|
+
const prevCache = new Map();
|
|
21
|
+
const createDescriptor = (filename, source, { root, isProduction, sourceMap, compiler }) => {
|
|
22
|
+
const { descriptor, errors } = compiler.parse(source, {
|
|
23
|
+
filename,
|
|
24
|
+
sourceMap
|
|
25
|
+
});
|
|
26
|
+
// ensure the path is normalized in a way that is consistent inside
|
|
27
|
+
// project (relative to root) and on different systems.
|
|
28
|
+
const normalizedPath = (0, slash_1.default)(path_1.default.normalize(path_1.default.relative(root, filename)));
|
|
29
|
+
descriptor.id = (0, hash_sum_1.default)(normalizedPath + (isProduction ? source : ''));
|
|
30
|
+
cache.set(filename, descriptor);
|
|
31
|
+
return { descriptor, errors };
|
|
32
|
+
};
|
|
33
|
+
exports.createDescriptor = createDescriptor;
|
|
34
|
+
const getPrevDescriptor = (filename) => {
|
|
35
|
+
return prevCache.get(filename);
|
|
36
|
+
};
|
|
37
|
+
exports.getPrevDescriptor = getPrevDescriptor;
|
|
38
|
+
const setPrevDescriptor = (filename, entry) => {
|
|
39
|
+
prevCache.set(filename, entry);
|
|
40
|
+
};
|
|
41
|
+
exports.setPrevDescriptor = setPrevDescriptor;
|
|
42
|
+
const getDescriptor = (source, filename, options, createIfNotFound = true) => {
|
|
43
|
+
if (cache.has(filename)) {
|
|
44
|
+
return cache.get(filename);
|
|
45
|
+
}
|
|
46
|
+
if (createIfNotFound) {
|
|
47
|
+
const { descriptor, errors } = (0, exports.createDescriptor)(filename, source, options);
|
|
48
|
+
if (errors.length) {
|
|
49
|
+
throw errors[0];
|
|
50
|
+
}
|
|
51
|
+
return descriptor;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
};
|
|
55
|
+
exports.getDescriptor = getDescriptor;
|
|
56
|
+
const getSrcDescriptor = (filename, query) => {
|
|
57
|
+
return cache.get(`${filename}?src=${query.src}`);
|
|
58
|
+
};
|
|
59
|
+
exports.getSrcDescriptor = getSrcDescriptor;
|
|
60
|
+
const setSrcDescriptor = (filename, entry) => {
|
|
61
|
+
// if multiple Vue files use the same src file, they will be overwritten
|
|
62
|
+
// should use other key
|
|
63
|
+
cache.set(`${filename}?src=${entry.id}`, entry);
|
|
64
|
+
};
|
|
65
|
+
exports.setSrcDescriptor = setSrcDescriptor;
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvckNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zcGlsZXJzL3Z1ZS1zZmMvdXRpbHMvZGVzY3JpcHRvckNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztJQUFBLGdEQUF3QjtJQUN4QixrREFBMEI7SUFDMUIsd0RBQTRCO0lBVzVCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBRXhELE1BQU0sZ0JBQWdCLEdBQUcsQ0FDL0IsUUFBZ0IsRUFDaEIsTUFBYyxFQUNkLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFtQixFQUMzQyxFQUFFO1FBQ25CLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDckQsUUFBUTtZQUNSLFNBQVM7U0FDVCxDQUFDLENBQUM7UUFFSCxtRUFBbUU7UUFDbkUsdURBQXVEO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLElBQUEsZUFBSyxFQUFDLGNBQUksQ0FBQyxTQUFTLENBQUMsY0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBQSxrQkFBSSxFQUFDLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXBFLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBakJXLFFBQUEsZ0JBQWdCLG9CQWlCM0I7SUFFSyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBZ0IsRUFBNkIsRUFBRTtRQUNoRixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRlcsUUFBQSxpQkFBaUIscUJBRTVCO0lBRUssTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWdCLEVBQUUsS0FBb0IsRUFBUSxFQUFFO1FBQ2pGLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUZXLFFBQUEsaUJBQWlCLHFCQUU1QjtJQUVLLE1BQU0sYUFBYSxHQUFHLENBQzVCLE1BQWMsRUFDZCxRQUFnQixFQUNoQixPQUF3QixFQUN4QixnQkFBZ0IsR0FBRyxJQUFJLEVBQ0ssRUFBRTtRQUM5QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDeEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxnQkFBZ0IsRUFBRTtZQUNyQixNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsd0JBQWdCLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxVQUFVLENBQUM7U0FDbEI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFqQlcsUUFBQSxhQUFhLGlCQWlCeEI7SUFFSyxNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxLQUFlLEVBQWlCLEVBQUU7UUFDcEYsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBRSxDQUFDO0lBQ25ELENBQUMsQ0FBQztJQUZXLFFBQUEsZ0JBQWdCLG9CQUUzQjtJQUVLLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEtBQW9CLEVBQVEsRUFBRTtRQUNoRix3RUFBd0U7UUFDeEUsdUJBQXVCO1FBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLFFBQVEsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQztJQUpXLFFBQUEsZ0JBQWdCLG9CQUkzQiJ9
|