@vue/language-core 1.7.0

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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/out/generators/script.d.ts +14 -0
  3. package/out/generators/script.js +881 -0
  4. package/out/generators/template.d.ts +16 -0
  5. package/out/generators/template.js +1389 -0
  6. package/out/index.d.ts +12 -0
  7. package/out/index.js +30 -0
  8. package/out/languageModule.d.ts +5 -0
  9. package/out/languageModule.js +91 -0
  10. package/out/parsers/scriptRanges.d.ts +15 -0
  11. package/out/parsers/scriptRanges.js +58 -0
  12. package/out/parsers/scriptSetupRanges.d.ts +32 -0
  13. package/out/parsers/scriptSetupRanges.js +295 -0
  14. package/out/plugins/file-html.d.ts +3 -0
  15. package/out/plugins/file-html.js +80 -0
  16. package/out/plugins/file-md.d.ts +3 -0
  17. package/out/plugins/file-md.js +62 -0
  18. package/out/plugins/file-vue.d.ts +3 -0
  19. package/out/plugins/file-vue.js +39 -0
  20. package/out/plugins/vue-sfc-customblocks.d.ts +3 -0
  21. package/out/plugins/vue-sfc-customblocks.js +31 -0
  22. package/out/plugins/vue-sfc-scripts.d.ts +3 -0
  23. package/out/plugins/vue-sfc-scripts.js +39 -0
  24. package/out/plugins/vue-sfc-styles.d.ts +3 -0
  25. package/out/plugins/vue-sfc-styles.js +31 -0
  26. package/out/plugins/vue-sfc-template.d.ts +3 -0
  27. package/out/plugins/vue-sfc-template.js +27 -0
  28. package/out/plugins/vue-template-html.d.ts +3 -0
  29. package/out/plugins/vue-template-html.js +165 -0
  30. package/out/plugins/vue-tsx.d.ts +14 -0
  31. package/out/plugins/vue-tsx.js +158 -0
  32. package/out/plugins.d.ts +23 -0
  33. package/out/plugins.js +52 -0
  34. package/out/sourceFile.d.ts +71 -0
  35. package/out/sourceFile.js +528 -0
  36. package/out/types.d.ts +100 -0
  37. package/out/types.js +3 -0
  38. package/out/utils/directorySharedTypes.d.ts +6 -0
  39. package/out/utils/directorySharedTypes.js +169 -0
  40. package/out/utils/parseCssClassNames.d.ts +4 -0
  41. package/out/utils/parseCssClassNames.js +19 -0
  42. package/out/utils/parseCssVars.d.ts +5 -0
  43. package/out/utils/parseCssVars.js +26 -0
  44. package/out/utils/parseSfc.d.ts +2 -0
  45. package/out/utils/parseSfc.js +135 -0
  46. package/out/utils/shared.d.ts +1 -0
  47. package/out/utils/shared.js +8 -0
  48. package/out/utils/transform.d.ts +8 -0
  49. package/out/utils/transform.js +182 -0
  50. package/out/utils/ts.d.ts +8 -0
  51. package/out/utils/ts.js +196 -0
  52. package/out/utils/vue2TemplateCompiler.d.ts +3 -0
  53. package/out/utils/vue2TemplateCompiler.js +101 -0
  54. package/package.json +29 -0
package/out/index.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export * from './generators/template';
2
+ export * from './languageModule';
3
+ export * from './parsers/scriptSetupRanges';
4
+ export * from './plugins';
5
+ export * from './sourceFile';
6
+ export * from './types';
7
+ export * from './utils/ts';
8
+ export * from './utils/parseSfc';
9
+ export * as scriptRanges from './parsers/scriptRanges';
10
+ export * as sharedTypes from './utils/directorySharedTypes';
11
+ export * from '@volar/language-core';
12
+ export * from '@volar/source-map';
package/out/index.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.sharedTypes = exports.scriptRanges = void 0;
18
+ __exportStar(require("./generators/template"), exports);
19
+ __exportStar(require("./languageModule"), exports);
20
+ __exportStar(require("./parsers/scriptSetupRanges"), exports);
21
+ __exportStar(require("./plugins"), exports);
22
+ __exportStar(require("./sourceFile"), exports);
23
+ __exportStar(require("./types"), exports);
24
+ __exportStar(require("./utils/ts"), exports);
25
+ __exportStar(require("./utils/parseSfc"), exports);
26
+ exports.scriptRanges = require("./parsers/scriptRanges");
27
+ exports.sharedTypes = require("./utils/directorySharedTypes");
28
+ __exportStar(require("@volar/language-core"), exports);
29
+ __exportStar(require("@volar/source-map"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,5 @@
1
+ import type { Language } from '@volar/language-core';
2
+ import { VueCompilerOptions } from './types';
3
+ import type * as ts from 'typescript/lib/tsserverlibrary';
4
+ export declare function createLanguage(compilerOptions?: ts.CompilerOptions, vueCompilerOptions?: VueCompilerOptions, ts?: typeof import('typescript/lib/tsserverlibrary')): Language;
5
+ export declare function createLanguages(compilerOptions?: ts.CompilerOptions, vueCompilerOptions?: VueCompilerOptions, ts?: typeof import('typescript/lib/tsserverlibrary')): Language[];
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLanguages = exports.createLanguage = void 0;
4
+ const path_1 = require("path");
5
+ const plugins_1 = require("./plugins");
6
+ const sourceFile_1 = require("./sourceFile");
7
+ const sharedTypes = require("./utils/directorySharedTypes");
8
+ const ts_1 = require("./utils/ts");
9
+ function createLanguage(compilerOptions = {}, vueCompilerOptions = (0, ts_1.resolveVueCompilerOptions)({}), ts = require('typescript')) {
10
+ patchResolveModuleNames(ts, vueCompilerOptions);
11
+ const vueLanguagePlugin = (0, plugins_1.getDefaultVueLanguagePlugins)(ts, compilerOptions, vueCompilerOptions);
12
+ const sharedTypesSnapshot = ts.ScriptSnapshot.fromString(sharedTypes.getTypesCode(vueCompilerOptions));
13
+ const languageModule = {
14
+ createVirtualFile(fileName, snapshot, languageId) {
15
+ if (languageId === 'vue'
16
+ || (!languageId
17
+ && vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext)))) {
18
+ return new sourceFile_1.VueFile(fileName, snapshot, ts, vueLanguagePlugin);
19
+ }
20
+ },
21
+ updateVirtualFile(sourceFile, snapshot) {
22
+ sourceFile.update(snapshot);
23
+ },
24
+ resolveHost(host) {
25
+ return {
26
+ ...host,
27
+ fileExists(fileName) {
28
+ const basename = path_1.posix.basename(fileName);
29
+ if (basename === sharedTypes.baseName) {
30
+ return true;
31
+ }
32
+ return host.fileExists(fileName);
33
+ },
34
+ getScriptFileNames() {
35
+ const fileNames = host.getScriptFileNames();
36
+ return [
37
+ ...getSharedTypesFiles(fileNames),
38
+ ...fileNames,
39
+ ];
40
+ },
41
+ getScriptVersion(fileName) {
42
+ const basename = path_1.posix.basename(fileName);
43
+ if (basename === sharedTypes.baseName) {
44
+ return '';
45
+ }
46
+ return host.getScriptVersion(fileName);
47
+ },
48
+ getScriptSnapshot(fileName) {
49
+ const basename = path_1.posix.basename(fileName);
50
+ if (basename === sharedTypes.baseName) {
51
+ return sharedTypesSnapshot;
52
+ }
53
+ return host.getScriptSnapshot(fileName);
54
+ },
55
+ };
56
+ },
57
+ };
58
+ return languageModule;
59
+ function getSharedTypesFiles(fileNames) {
60
+ const moduleFiles = fileNames.filter(fileName => vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext)));
61
+ const moduleFileDirs = [...new Set(moduleFiles.map(path_1.posix.dirname))];
62
+ return moduleFileDirs.map(dir => path_1.posix.join(dir, sharedTypes.baseName));
63
+ }
64
+ }
65
+ exports.createLanguage = createLanguage;
66
+ function createLanguages(compilerOptions = {}, vueCompilerOptions = (0, ts_1.resolveVueCompilerOptions)({}), ts = require('typescript')) {
67
+ return [
68
+ createLanguage(compilerOptions, vueCompilerOptions, ts),
69
+ ...vueCompilerOptions.experimentalAdditionalLanguageModules?.map(module => require(module)) ?? [],
70
+ ];
71
+ }
72
+ exports.createLanguages = createLanguages;
73
+ function patchResolveModuleNames(ts, vueCompilerOptions) {
74
+ try {
75
+ // from https://github.com/vuejs/language-tools/pull/1543
76
+ if (!(ts.__vuePatchResolveModuleNames)) {
77
+ ts.__vuePatchResolveModuleNames = true;
78
+ const resolveModuleNames = ts.resolveModuleName;
79
+ ts.resolveModuleName = (...args) => {
80
+ if (args[6] === ts.ModuleKind.ESNext && vueCompilerOptions.extensions.some(ext => args[0].endsWith(ext))) {
81
+ args[6] = ts.ModuleKind.CommonJS;
82
+ }
83
+ return resolveModuleNames(...args);
84
+ };
85
+ }
86
+ }
87
+ catch (e) {
88
+ // console.warn('[volar] patchResolveModuleNames failed', e);
89
+ }
90
+ }
91
+ //# sourceMappingURL=languageModule.js.map
@@ -0,0 +1,15 @@
1
+ import type { TextRange } from '../types';
2
+ import type * as ts from 'typescript/lib/tsserverlibrary';
3
+ export interface ScriptRanges extends ReturnType<typeof parseScriptRanges> {
4
+ }
5
+ export declare function parseScriptRanges(ts: typeof import('typescript/lib/tsserverlibrary'), ast: ts.SourceFile, hasScriptSetup: boolean, withNode: boolean): {
6
+ exportDefault: (TextRange & {
7
+ expression: TextRange;
8
+ args: TextRange;
9
+ argsNode: ts.ObjectLiteralExpression | undefined;
10
+ componentsOption: TextRange | undefined;
11
+ componentsOptionNode: ts.ObjectLiteralExpression | undefined;
12
+ nameOption: TextRange | undefined;
13
+ }) | undefined;
14
+ bindings: TextRange[];
15
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseScriptRanges = void 0;
4
+ const scriptSetupRanges_1 = require("./scriptSetupRanges");
5
+ function parseScriptRanges(ts, ast, hasScriptSetup, withNode) {
6
+ let exportDefault;
7
+ const bindings = hasScriptSetup ? (0, scriptSetupRanges_1.parseBindingRanges)(ts, ast, false) : [];
8
+ ast.forEachChild(raw => {
9
+ if (ts.isExportAssignment(raw)) {
10
+ let node = raw;
11
+ while (ts.isAsExpression(node.expression) || ts.isParenthesizedExpression(node.expression)) { // fix https://github.com/vuejs/language-tools/issues/1882
12
+ node = node.expression;
13
+ }
14
+ let obj;
15
+ if (ts.isObjectLiteralExpression(node.expression)) {
16
+ obj = node.expression;
17
+ }
18
+ else if (ts.isCallExpression(node.expression) && node.expression.arguments.length) {
19
+ const arg0 = node.expression.arguments[0];
20
+ if (ts.isObjectLiteralExpression(arg0)) {
21
+ obj = arg0;
22
+ }
23
+ }
24
+ if (obj) {
25
+ let componentsOptionNode;
26
+ let nameOptionNode;
27
+ obj.forEachChild(node => {
28
+ if (ts.isPropertyAssignment(node) && ts.isIdentifier(node.name)) {
29
+ if (node.name.escapedText === 'components' && ts.isObjectLiteralExpression(node.initializer)) {
30
+ componentsOptionNode = node.initializer;
31
+ }
32
+ if (node.name.escapedText === 'name') {
33
+ nameOptionNode = node.initializer;
34
+ }
35
+ }
36
+ });
37
+ exportDefault = {
38
+ ..._getStartEnd(raw),
39
+ expression: _getStartEnd(node.expression),
40
+ args: _getStartEnd(obj),
41
+ argsNode: withNode ? obj : undefined,
42
+ componentsOption: componentsOptionNode ? _getStartEnd(componentsOptionNode) : undefined,
43
+ componentsOptionNode: withNode ? componentsOptionNode : undefined,
44
+ nameOption: nameOptionNode ? _getStartEnd(nameOptionNode) : undefined,
45
+ };
46
+ }
47
+ }
48
+ });
49
+ return {
50
+ exportDefault,
51
+ bindings,
52
+ };
53
+ function _getStartEnd(node) {
54
+ return (0, scriptSetupRanges_1.getStartEnd)(node, ast);
55
+ }
56
+ }
57
+ exports.parseScriptRanges = parseScriptRanges;
58
+ //# sourceMappingURL=scriptRanges.js.map
@@ -0,0 +1,32 @@
1
+ import type * as ts from 'typescript/lib/tsserverlibrary';
2
+ import type { VueCompilerOptions, TextRange } from '../types';
3
+ export interface ScriptSetupRanges extends ReturnType<typeof parseScriptSetupRanges> {
4
+ }
5
+ export declare function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserverlibrary'), ast: ts.SourceFile, vueCompilerOptions: VueCompilerOptions): {
6
+ importSectionEndOffset: number;
7
+ bindings: TextRange[];
8
+ withDefaultsArg: TextRange | undefined;
9
+ defineProps: TextRange | undefined;
10
+ propsAssignName: string | undefined;
11
+ propsRuntimeArg: TextRange | undefined;
12
+ propsTypeArg: TextRange | undefined;
13
+ slotsTypeArg: TextRange | undefined;
14
+ emitsAssignName: string | undefined;
15
+ emitsRuntimeArg: TextRange | undefined;
16
+ emitsTypeArg: TextRange | undefined;
17
+ emitsTypeNums: number;
18
+ exposeRuntimeArg: TextRange | undefined;
19
+ defineProp: {
20
+ name: TextRange | undefined;
21
+ nameIsString: boolean;
22
+ type: TextRange | undefined;
23
+ defaultValue: TextRange | undefined;
24
+ required: boolean;
25
+ }[];
26
+ };
27
+ export declare function parseBindingRanges(ts: typeof import('typescript/lib/tsserverlibrary'), sourceFile: ts.SourceFile, isType: boolean): TextRange[];
28
+ export declare function findBindingVars(ts: typeof import('typescript/lib/tsserverlibrary'), left: ts.BindingName, sourceFile: ts.SourceFile): TextRange[];
29
+ export declare function getStartEnd(node: ts.Node, sourceFile: ts.SourceFile): {
30
+ start: number;
31
+ end: number;
32
+ };
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStartEnd = exports.findBindingVars = exports.parseBindingRanges = exports.parseScriptSetupRanges = void 0;
4
+ function parseScriptSetupRanges(ts, ast, vueCompilerOptions) {
5
+ let foundNonImportExportNode = false;
6
+ let importSectionEndOffset = 0;
7
+ let withDefaultsArg;
8
+ let propsAssignName;
9
+ let defineProps;
10
+ let propsRuntimeArg;
11
+ let propsTypeArg;
12
+ let slotsTypeArg;
13
+ let emitsAssignName;
14
+ let emitsRuntimeArg;
15
+ let emitsTypeArg;
16
+ let exposeRuntimeArg;
17
+ let emitsTypeNums = -1;
18
+ const definePropProposalA = vueCompilerOptions.experimentalDefinePropProposal === 'kevinEdition' || ast.getFullText().trimStart().startsWith('// @experimentalDefinePropProposal=kevinEdition');
19
+ const definePropProposalB = vueCompilerOptions.experimentalDefinePropProposal === 'johnsonEdition' || ast.getFullText().trimStart().startsWith('// @experimentalDefinePropProposal=johnsonEdition');
20
+ const defineProp = [];
21
+ const bindings = parseBindingRanges(ts, ast, false);
22
+ ast.forEachChild(node => {
23
+ const isTypeExport = (ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) && node.modifiers?.some(mod => mod.kind === ts.SyntaxKind.ExportKeyword);
24
+ if (!foundNonImportExportNode
25
+ && !ts.isImportDeclaration(node)
26
+ && !isTypeExport
27
+ && !ts.isEmptyStatement(node)
28
+ // fix https://github.com/vuejs/language-tools/issues/1223
29
+ && !ts.isImportEqualsDeclaration(node)) {
30
+ importSectionEndOffset = node.getStart(ast, true);
31
+ foundNonImportExportNode = true;
32
+ }
33
+ });
34
+ ast.forEachChild(child => visitNode(child, ast));
35
+ return {
36
+ importSectionEndOffset,
37
+ bindings,
38
+ withDefaultsArg,
39
+ defineProps,
40
+ propsAssignName,
41
+ propsRuntimeArg,
42
+ propsTypeArg,
43
+ slotsTypeArg,
44
+ emitsAssignName,
45
+ emitsRuntimeArg,
46
+ emitsTypeArg,
47
+ emitsTypeNums,
48
+ exposeRuntimeArg,
49
+ defineProp,
50
+ };
51
+ function _getStartEnd(node) {
52
+ return getStartEnd(node, ast);
53
+ }
54
+ function visitNode(node, parent) {
55
+ if (ts.isCallExpression(node)
56
+ && ts.isIdentifier(node.expression)) {
57
+ const callText = node.expression.getText(ast);
58
+ if (callText === 'defineModel') {
59
+ let name;
60
+ let options;
61
+ if (node.arguments.length >= 2) {
62
+ name = _getStartEnd(node.arguments[0]);
63
+ options = node.arguments[1];
64
+ }
65
+ else if (node.arguments.length >= 1) {
66
+ if (ts.isStringLiteral(node.arguments[0])) {
67
+ name = _getStartEnd(node.arguments[0]);
68
+ }
69
+ else {
70
+ options = node.arguments[0];
71
+ }
72
+ }
73
+ let required = false;
74
+ if (options && ts.isObjectLiteralExpression(options)) {
75
+ for (const property of options.properties) {
76
+ if (ts.isPropertyAssignment(property) && ts.isIdentifier(property.name) && property.name.getText(ast) === 'required' && property.initializer.kind === ts.SyntaxKind.TrueKeyword) {
77
+ required = true;
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ defineProp.push({
83
+ name,
84
+ nameIsString: true,
85
+ type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
86
+ defaultValue: undefined,
87
+ required,
88
+ });
89
+ }
90
+ else if (callText === 'defineProp') {
91
+ if (definePropProposalA) {
92
+ let required = false;
93
+ if (node.arguments.length >= 2) {
94
+ const secondArg = node.arguments[1];
95
+ if (ts.isObjectLiteralExpression(secondArg)) {
96
+ for (const property of secondArg.properties) {
97
+ if (ts.isPropertyAssignment(property) && ts.isIdentifier(property.name) && property.name.getText(ast) === 'required' && property.initializer.kind === ts.SyntaxKind.TrueKeyword) {
98
+ required = true;
99
+ break;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ if (node.arguments.length >= 1) {
105
+ defineProp.push({
106
+ name: _getStartEnd(node.arguments[0]),
107
+ nameIsString: true,
108
+ type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
109
+ defaultValue: undefined,
110
+ required,
111
+ });
112
+ }
113
+ else if (ts.isVariableDeclaration(parent)) {
114
+ defineProp.push({
115
+ name: _getStartEnd(parent.name),
116
+ nameIsString: false,
117
+ type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
118
+ defaultValue: undefined,
119
+ required,
120
+ });
121
+ }
122
+ }
123
+ else if (definePropProposalB && ts.isVariableDeclaration(parent)) {
124
+ defineProp.push({
125
+ name: _getStartEnd(parent.name),
126
+ nameIsString: false,
127
+ defaultValue: node.arguments.length >= 1 ? _getStartEnd(node.arguments[0]) : undefined,
128
+ type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
129
+ required: node.arguments.length >= 2 && node.arguments[1].kind === ts.SyntaxKind.TrueKeyword,
130
+ });
131
+ }
132
+ }
133
+ if (vueCompilerOptions.macros.defineProps.includes(callText)
134
+ || vueCompilerOptions.macros.defineSlots.includes(callText)
135
+ || vueCompilerOptions.macros.defineEmits.includes(callText)
136
+ || vueCompilerOptions.macros.defineExpose.includes(callText)) {
137
+ if (vueCompilerOptions.macros.defineProps.includes(callText)) {
138
+ defineProps = _getStartEnd(node);
139
+ }
140
+ if (node.arguments.length) {
141
+ const runtimeArg = node.arguments[0];
142
+ if (vueCompilerOptions.macros.defineProps.includes(callText)) {
143
+ propsRuntimeArg = _getStartEnd(runtimeArg);
144
+ if (ts.isVariableDeclaration(parent)) {
145
+ propsAssignName = parent.name.getText(ast);
146
+ }
147
+ }
148
+ else if (vueCompilerOptions.macros.defineEmits.includes(callText)) {
149
+ emitsRuntimeArg = _getStartEnd(runtimeArg);
150
+ if (ts.isVariableDeclaration(parent)) {
151
+ emitsAssignName = parent.name.getText(ast);
152
+ }
153
+ }
154
+ else if (vueCompilerOptions.macros.defineExpose.includes(callText)) {
155
+ exposeRuntimeArg = _getStartEnd(runtimeArg);
156
+ }
157
+ }
158
+ if (node.typeArguments?.length) {
159
+ const typeArg = node.typeArguments[0];
160
+ if (vueCompilerOptions.macros.defineProps.includes(callText)) {
161
+ propsTypeArg = _getStartEnd(typeArg);
162
+ if (ts.isVariableDeclaration(parent)) {
163
+ propsAssignName = parent.name.getText(ast);
164
+ }
165
+ }
166
+ if (vueCompilerOptions.macros.defineSlots.includes(callText)) {
167
+ slotsTypeArg = _getStartEnd(typeArg);
168
+ }
169
+ else if (vueCompilerOptions.macros.defineEmits.includes(callText)) {
170
+ emitsTypeArg = _getStartEnd(typeArg);
171
+ if (ts.isTypeLiteralNode(typeArg)) {
172
+ emitsTypeNums = typeArg.members.length;
173
+ }
174
+ if (ts.isVariableDeclaration(parent)) {
175
+ emitsAssignName = parent.name.getText(ast);
176
+ }
177
+ }
178
+ }
179
+ }
180
+ else if (vueCompilerOptions.macros.withDefaults.includes(callText)) {
181
+ if (node.arguments.length >= 2) {
182
+ const arg = node.arguments[1];
183
+ withDefaultsArg = _getStartEnd(arg);
184
+ }
185
+ if (ts.isVariableDeclaration(parent)) {
186
+ propsAssignName = parent.name.getText(ast);
187
+ }
188
+ }
189
+ }
190
+ node.forEachChild(child => visitNode(child, node));
191
+ }
192
+ }
193
+ exports.parseScriptSetupRanges = parseScriptSetupRanges;
194
+ function parseBindingRanges(ts, sourceFile, isType) {
195
+ const bindings = [];
196
+ sourceFile.forEachChild(node => {
197
+ if (!isType) {
198
+ if (ts.isVariableStatement(node)) {
199
+ for (const node_2 of node.declarationList.declarations) {
200
+ const vars = _findBindingVars(node_2.name);
201
+ for (const _var of vars) {
202
+ bindings.push(_var);
203
+ }
204
+ }
205
+ }
206
+ else if (ts.isFunctionDeclaration(node)) {
207
+ if (node.name && ts.isIdentifier(node.name)) {
208
+ bindings.push(_getStartEnd(node.name));
209
+ }
210
+ }
211
+ else if (ts.isClassDeclaration(node)) {
212
+ if (node.name) {
213
+ bindings.push(_getStartEnd(node.name));
214
+ }
215
+ }
216
+ else if (ts.isEnumDeclaration(node)) {
217
+ bindings.push(_getStartEnd(node.name));
218
+ }
219
+ }
220
+ else {
221
+ if (ts.isTypeAliasDeclaration(node)) {
222
+ bindings.push(_getStartEnd(node.name));
223
+ }
224
+ else if (ts.isInterfaceDeclaration(node)) {
225
+ bindings.push(_getStartEnd(node.name));
226
+ }
227
+ }
228
+ if (ts.isImportDeclaration(node)) {
229
+ if (node.importClause && (isType || !node.importClause.isTypeOnly)) {
230
+ if (node.importClause.name && !isType) {
231
+ bindings.push(_getStartEnd(node.importClause.name));
232
+ }
233
+ if (node.importClause.namedBindings) {
234
+ if (ts.isNamedImports(node.importClause.namedBindings)) {
235
+ for (const element of node.importClause.namedBindings.elements) {
236
+ bindings.push(_getStartEnd(element.name));
237
+ }
238
+ }
239
+ else if (ts.isNamespaceImport(node.importClause.namedBindings)) {
240
+ bindings.push(_getStartEnd(node.importClause.namedBindings.name));
241
+ }
242
+ }
243
+ }
244
+ }
245
+ });
246
+ return bindings;
247
+ function _getStartEnd(node) {
248
+ return getStartEnd(node, sourceFile);
249
+ }
250
+ function _findBindingVars(left) {
251
+ return findBindingVars(ts, left, sourceFile);
252
+ }
253
+ }
254
+ exports.parseBindingRanges = parseBindingRanges;
255
+ function findBindingVars(ts, left, sourceFile) {
256
+ const vars = [];
257
+ worker(left);
258
+ return vars;
259
+ function worker(_node) {
260
+ if (ts.isIdentifier(_node)) {
261
+ vars.push(getStartEnd(_node, sourceFile));
262
+ }
263
+ // { ? } = ...
264
+ // [ ? ] = ...
265
+ else if (ts.isObjectBindingPattern(_node) || ts.isArrayBindingPattern(_node)) {
266
+ for (const property of _node.elements) {
267
+ if (ts.isBindingElement(property)) {
268
+ worker(property.name);
269
+ }
270
+ }
271
+ }
272
+ // { foo: ? } = ...
273
+ else if (ts.isPropertyAssignment(_node)) {
274
+ worker(_node.initializer);
275
+ }
276
+ // { foo } = ...
277
+ else if (ts.isShorthandPropertyAssignment(_node)) {
278
+ vars.push(getStartEnd(_node.name, sourceFile));
279
+ }
280
+ // { ...? } = ...
281
+ // [ ...? ] = ...
282
+ else if (ts.isSpreadAssignment(_node) || ts.isSpreadElement(_node)) {
283
+ worker(_node.expression);
284
+ }
285
+ }
286
+ }
287
+ exports.findBindingVars = findBindingVars;
288
+ function getStartEnd(node, sourceFile) {
289
+ return {
290
+ start: node.getStart(sourceFile),
291
+ end: node.getEnd(),
292
+ };
293
+ }
294
+ exports.getStartEnd = getStartEnd;
295
+ //# sourceMappingURL=scriptSetupRanges.js.map
@@ -0,0 +1,3 @@
1
+ import { VueLanguagePlugin } from '../types';
2
+ declare const plugin: VueLanguagePlugin;
3
+ export = plugin;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ const plugin = () => {
3
+ return {
4
+ version: 1,
5
+ parseSFC(fileName, content) {
6
+ if (fileName.endsWith('.html')) {
7
+ let sfc = {
8
+ descriptor: {
9
+ filename: fileName,
10
+ source: content,
11
+ template: null,
12
+ script: null,
13
+ scriptSetup: null,
14
+ styles: [],
15
+ customBlocks: [],
16
+ cssVars: [],
17
+ shouldForceReload: () => false,
18
+ slotted: false,
19
+ },
20
+ errors: [],
21
+ };
22
+ let templateContent = content;
23
+ const sfcBlockReg = /\<(script|style)\b([\s\S]*?)\>([\s\S]*?)\<\/\1\>/g;
24
+ const langReg = /\blang\s*=\s*(['\"]?)(\S*)\b\1/;
25
+ for (const match of content.matchAll(sfcBlockReg)) {
26
+ const matchText = match[0];
27
+ const tag = match[1];
28
+ const attrs = match[2];
29
+ const lang = attrs.match(langReg)?.[2];
30
+ const content = match[3];
31
+ const contentStart = match.index + matchText.indexOf(content);
32
+ if (tag === 'style') {
33
+ sfc.descriptor.styles.push({
34
+ attrs: {},
35
+ content,
36
+ loc: {
37
+ start: { column: -1, line: -1, offset: contentStart },
38
+ end: { column: -1, line: -1, offset: contentStart + content.length },
39
+ source: content,
40
+ },
41
+ type: 'style',
42
+ lang,
43
+ });
44
+ }
45
+ // ignore `<script src="...">`
46
+ else if (tag === 'script' && attrs.indexOf('src=') === -1) {
47
+ let type = attrs.indexOf('type=') >= 0 ? 'scriptSetup' : 'script';
48
+ sfc.descriptor[type] = {
49
+ attrs: {},
50
+ content,
51
+ loc: {
52
+ start: { column: -1, line: -1, offset: contentStart },
53
+ end: { column: -1, line: -1, offset: contentStart + content.length },
54
+ source: content,
55
+ },
56
+ type: 'script',
57
+ lang,
58
+ };
59
+ }
60
+ templateContent = templateContent.substring(0, match.index) + ' '.repeat(matchText.length) + templateContent.substring(match.index + matchText.length);
61
+ }
62
+ sfc.descriptor.template = {
63
+ attrs: {},
64
+ content: templateContent,
65
+ loc: {
66
+ start: { column: -1, line: -1, offset: 0 },
67
+ end: { column: -1, line: -1, offset: templateContent.length },
68
+ source: templateContent,
69
+ },
70
+ type: 'template',
71
+ ast: {},
72
+ };
73
+ return sfc;
74
+ }
75
+ ;
76
+ }
77
+ };
78
+ };
79
+ module.exports = plugin;
80
+ //# sourceMappingURL=file-html.js.map
@@ -0,0 +1,3 @@
1
+ import { VueLanguagePlugin } from '../types';
2
+ declare const plugin: VueLanguagePlugin;
3
+ export = plugin;