Ver código fonte

first commit

wenhongquan 1 ano atrás
pai
commit
a6920320e3
93 arquivos alterados com 6851 adições e 0 exclusões
  1. 15 0
      node_modules/@vue/language-core/out/generators/script.d.ts
  2. 870 0
      node_modules/@vue/language-core/out/generators/script.js
  3. 21 0
      node_modules/@vue/language-core/out/generators/template.d.ts
  4. 1516 0
      node_modules/@vue/language-core/out/generators/template.js
  5. 16 0
      node_modules/@vue/language-core/out/index.d.ts
  6. 33 0
      node_modules/@vue/language-core/out/index.js
  7. 10 0
      node_modules/@vue/language-core/out/languageModule.d.ts
  8. 99 0
      node_modules/@vue/language-core/out/languageModule.js
  9. 16 0
      node_modules/@vue/language-core/out/parsers/scriptRanges.d.ts
  10. 58 0
      node_modules/@vue/language-core/out/parsers/scriptRanges.js
  11. 56 0
      node_modules/@vue/language-core/out/parsers/scriptSetupRanges.d.ts
  12. 292 0
      node_modules/@vue/language-core/out/parsers/scriptSetupRanges.js
  13. 25 0
      node_modules/@vue/language-core/out/plugins.d.ts
  14. 58 0
      node_modules/@vue/language-core/out/plugins.js
  15. 4 0
      node_modules/@vue/language-core/out/plugins/file-html.d.ts
  16. 81 0
      node_modules/@vue/language-core/out/plugins/file-html.js
  17. 4 0
      node_modules/@vue/language-core/out/plugins/file-md.d.ts
  18. 71 0
      node_modules/@vue/language-core/out/plugins/file-md.js
  19. 4 0
      node_modules/@vue/language-core/out/plugins/file-vue.d.ts
  20. 47 0
      node_modules/@vue/language-core/out/plugins/file-vue.js
  21. 4 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-customblocks.d.ts
  22. 33 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-customblocks.js
  23. 4 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-scripts.d.ts
  24. 42 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-scripts.js
  25. 4 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-styles.d.ts
  26. 33 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-styles.js
  27. 4 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-template.d.ts
  28. 29 0
      node_modules/@vue/language-core/out/plugins/vue-sfc-template.js
  29. 4 0
      node_modules/@vue/language-core/out/plugins/vue-template-html.d.ts
  30. 169 0
      node_modules/@vue/language-core/out/plugins/vue-template-html.js
  31. 80 0
      node_modules/@vue/language-core/out/plugins/vue-tsx.d.ts
  32. 159 0
      node_modules/@vue/language-core/out/plugins/vue-tsx.js
  33. 125 0
      node_modules/@vue/language-core/out/types.d.ts
  34. 3 0
      node_modules/@vue/language-core/out/types.js
  35. 4 0
      node_modules/@vue/language-core/out/utils/globalTypes.d.ts
  36. 135 0
      node_modules/@vue/language-core/out/utils/globalTypes.js
  37. 5 0
      node_modules/@vue/language-core/out/utils/parseCssClassNames.d.ts
  38. 19 0
      node_modules/@vue/language-core/out/utils/parseCssClassNames.js
  39. 6 0
      node_modules/@vue/language-core/out/utils/parseCssVars.d.ts
  40. 28 0
      node_modules/@vue/language-core/out/utils/parseCssVars.js
  41. 3 0
      node_modules/@vue/language-core/out/utils/parseSfc.d.ts
  42. 135 0
      node_modules/@vue/language-core/out/utils/parseSfc.js
  43. 4 0
      node_modules/@vue/language-core/out/utils/shared.d.ts
  44. 20 0
      node_modules/@vue/language-core/out/utils/shared.js
  45. 9 0
      node_modules/@vue/language-core/out/utils/transform.d.ts
  46. 195 0
      node_modules/@vue/language-core/out/utils/transform.js
  47. 9 0
      node_modules/@vue/language-core/out/utils/ts.d.ts
  48. 237 0
      node_modules/@vue/language-core/out/utils/ts.js
  49. 3 0
      node_modules/@vue/language-core/out/utils/vue2TemplateCompiler.d.ts
  50. 86 0
      node_modules/@vue/language-core/out/utils/vue2TemplateCompiler.js
  51. 4 0
      node_modules/@vue/language-core/out/virtualFile/computedFiles.d.ts
  52. 204 0
      node_modules/@vue/language-core/out/virtualFile/computedFiles.js
  53. 6 0
      node_modules/@vue/language-core/out/virtualFile/computedMappings.d.ts
  54. 39 0
      node_modules/@vue/language-core/out/virtualFile/computedMappings.js
  55. 5 0
      node_modules/@vue/language-core/out/virtualFile/computedSfc.d.ts
  56. 197 0
      node_modules/@vue/language-core/out/virtualFile/computedSfc.js
  57. 5 0
      node_modules/@vue/language-core/out/virtualFile/computedVueSfc.d.ts
  58. 41 0
      node_modules/@vue/language-core/out/virtualFile/computedVueSfc.js
  59. 13 0
      node_modules/@vue/language-core/out/virtualFile/embeddedFile.d.ts
  60. 16 0
      node_modules/@vue/language-core/out/virtualFile/embeddedFile.js
  61. 28 0
      node_modules/@vue/language-core/out/virtualFile/vueFile.d.ts
  62. 53 0
      node_modules/@vue/language-core/out/virtualFile/vueFile.js
  63. 1 0
      node_modules/computeds/out/computed.d.ts
  64. 21 0
      node_modules/computeds/out/computed.js
  65. 1 0
      node_modules/computeds/out/computeds/computedArray.d.ts
  66. 44 0
      node_modules/computeds/out/computeds/computedArray.js
  67. 1 0
      node_modules/computeds/out/computeds/computedSet.d.ts
  68. 14 0
      node_modules/computeds/out/computeds/computedSet.js
  69. 5 0
      node_modules/computeds/out/dep.d.ts
  70. 10 0
      node_modules/computeds/out/dep.js
  71. 2 0
      node_modules/computeds/out/effect.d.ts
  72. 14 0
      node_modules/computeds/out/effect.js
  73. 7 0
      node_modules/computeds/out/index.d.ts
  74. 23 0
      node_modules/computeds/out/index.js
  75. 7 0
      node_modules/computeds/out/signal.d.ts
  76. 22 0
      node_modules/computeds/out/signal.js
  77. 17 0
      node_modules/computeds/out/system.d.ts
  78. 100 0
      node_modules/computeds/out/system.js
  79. 17 0
      node_modules/computeds/out/tracker.d.ts
  80. 78 0
      node_modules/computeds/out/tracker.js
  81. 1 0
      node_modules/muggle-string/out/binarySearch.d.ts
  82. 25 0
      node_modules/muggle-string/out/binarySearch.js
  83. 10 0
      node_modules/muggle-string/out/index.d.ts
  84. 176 0
      node_modules/muggle-string/out/index.js
  85. 5 0
      node_modules/muggle-string/out/track.d.ts
  86. 132 0
      node_modules/muggle-string/out/track.js
  87. 16 0
      node_modules/muggle-string/out/types.d.ts
  88. 3 0
      node_modules/muggle-string/out/types.js
  89. 17 0
      node_modules/vue-tsc/out/index.d.ts
  90. 126 0
      node_modules/vue-tsc/out/index.js
  91. 9 0
      node_modules/vue-tsc/out/shared.d.ts
  92. 5 0
      node_modules/vue-tsc/out/shared.js
  93. 444 0
      yarn.lock

+ 15 - 0
node_modules/@vue/language-core/out/generators/script.d.ts

@@ -0,0 +1,15 @@
+import { FileRangeCapabilities, MirrorBehaviorCapabilities } from '@volar/language-core';
+import * as SourceMaps from '@volar/source-map';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import type * as templateGen from '../generators/template';
+import type { ScriptRanges } from '../parsers/scriptRanges';
+import type { ScriptSetupRanges } from '../parsers/scriptSetupRanges';
+import type { VueCompilerOptions } from '../types';
+import { Sfc } from '../types';
+export declare function generate(ts: typeof import('typescript/lib/tsserverlibrary'), fileName: string, script: Sfc['script'], scriptSetup: Sfc['scriptSetup'], styles: Sfc['styles'], // TODO: computed it
+lang: string, scriptRanges: ScriptRanges | undefined, scriptSetupRanges: ScriptSetupRanges | undefined, htmlGen: ReturnType<typeof templateGen['generate']> | undefined, compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions, codegenStack: boolean): {
+    codes: SourceMaps.Segment<FileRangeCapabilities>[];
+    codeStacks: SourceMaps.StackNode[];
+    mirrorBehaviorMappings: SourceMaps.Mapping<[MirrorBehaviorCapabilities, MirrorBehaviorCapabilities]>[];
+};
+//# sourceMappingURL=script.d.ts.map

+ 870 - 0
node_modules/@vue/language-core/out/generators/script.js

@@ -0,0 +1,870 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.generate = void 0;
+const language_core_1 = require("@volar/language-core");
+const source_map_1 = require("@volar/source-map");
+const muggle = require("muggle-string");
+const path = require("path-browserify");
+const shared_1 = require("../utils/shared");
+const transform_1 = require("../utils/transform");
+function generate(ts, fileName, script, scriptSetup, styles, // TODO: computed it
+lang, scriptRanges, scriptSetupRanges, htmlGen, compilerOptions, vueCompilerOptions, codegenStack) {
+    const [codes, codeStacks] = codegenStack ? muggle.track([]) : [[], []];
+    const mirrorBehaviorMappings = [];
+    //#region monkey fix: https://github.com/vuejs/language-tools/pull/2113
+    if (!script && !scriptSetup) {
+        scriptSetup = {
+            content: '',
+            lang: 'ts',
+            name: '',
+            start: 0,
+            end: 0,
+            startTagEnd: 0,
+            endTagStart: 0,
+            generic: undefined,
+            genericOffset: 0,
+            attrs: {},
+            ast: ts.createSourceFile('', '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS),
+        };
+        scriptSetupRanges = {
+            bindings: [],
+            props: {},
+            emits: {},
+            expose: {},
+            slots: {},
+            defineProp: [],
+            importSectionEndOffset: 0,
+            leadingCommentEndOffset: 0,
+        };
+    }
+    //#endregion
+    const bindingNames = new Set([
+        ...scriptRanges?.bindings.map(range => script.content.substring(range.start, range.end)) ?? [],
+        ...scriptSetupRanges?.bindings.map(range => scriptSetup.content.substring(range.start, range.end)) ?? [],
+    ]);
+    const bypassDefineComponent = lang === 'js' || lang === 'jsx';
+    const usedHelperTypes = {
+        DefinePropsToOptions: false,
+        MergePropDefaults: false,
+        WithTemplateSlots: false,
+        PropsChildren: false,
+    };
+    codes.push(`/* __placeholder__ */\n`);
+    let generatedTemplate = false;
+    generateSrc();
+    generateScriptSetupImports();
+    generateScriptContentBeforeExportDefault();
+    generateScriptSetupAndTemplate();
+    generateHelperTypes();
+    generateScriptContentAfterExportDefault();
+    if (!generatedTemplate) {
+        generateTemplate(false);
+    }
+    if (scriptSetup) {
+        // for code action edits
+        codes.push([
+            '',
+            'scriptSetup',
+            scriptSetup.content.length,
+            {},
+        ]);
+    }
+    return {
+        codes,
+        codeStacks,
+        mirrorBehaviorMappings,
+    };
+    function generateHelperTypes() {
+        if (usedHelperTypes.DefinePropsToOptions) {
+            if (compilerOptions.exactOptionalPropertyTypes) {
+                codes.push(`type __VLS_TypePropsToRuntimeProps<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? { type: import('${vueCompilerOptions.lib}').PropType<T[K]> } : { type: import('${vueCompilerOptions.lib}').PropType<T[K]>, required: true } };\n`);
+            }
+            else {
+                codes.push(`type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;\n`);
+                codes.push(`type __VLS_TypePropsToRuntimeProps<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? { type: import('${vueCompilerOptions.lib}').PropType<__VLS_NonUndefinedable<T[K]>> } : { type: import('${vueCompilerOptions.lib}').PropType<T[K]>, required: true } };\n`);
+            }
+        }
+        if (usedHelperTypes.MergePropDefaults) {
+            codes.push(`type __VLS_WithDefaults<P, D> = {
+					// use 'keyof Pick<P, keyof P>' instead of 'keyof P' to keep props jsdoc
+					[K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
+						default: D[K]
+					}> : P[K]
+				};\n`);
+            codes.push(`type __VLS_Prettify<T> = { [K in keyof T]: T[K]; } & {};\n`);
+        }
+        if (usedHelperTypes.WithTemplateSlots) {
+            codes.push(`type __VLS_WithTemplateSlots<T, S> = T & { new(): {\n`, `${(0, shared_1.getSlotsPropertyName)(vueCompilerOptions.target)}: S;\n`);
+            if (vueCompilerOptions.jsxSlots) {
+                usedHelperTypes.PropsChildren = true;
+                codes.push(`$props: __VLS_PropsChildren<S>;\n`);
+            }
+            codes.push(`} };\n`);
+        }
+        if (usedHelperTypes.PropsChildren) {
+            codes.push(`type __VLS_PropsChildren<S> = { [K in keyof (boolean extends (JSX.ElementChildrenAttribute extends never ? true : false) ? never : JSX.ElementChildrenAttribute)]?: S; };\n`);
+        }
+    }
+    function generateSrc() {
+        if (!script?.src)
+            return;
+        let src = script.src;
+        if (src.endsWith('.d.ts'))
+            src = src.substring(0, src.length - '.d.ts'.length);
+        else if (src.endsWith('.ts'))
+            src = src.substring(0, src.length - '.ts'.length);
+        else if (src.endsWith('.tsx'))
+            src = src.substring(0, src.length - '.tsx'.length) + '.jsx';
+        if (!src.endsWith('.js') && !src.endsWith('.jsx'))
+            src = src + '.js';
+        codes.push(`export * from `);
+        codes.push([
+            `'${src}'`,
+            'script',
+            [script.srcOffset - 1, script.srcOffset + script.src.length + 1],
+            {
+                ...language_core_1.FileRangeCapabilities.full,
+                rename: src === script.src ? true : {
+                    normalize: undefined,
+                    apply(newName) {
+                        if (newName.endsWith('.jsx')
+                            || newName.endsWith('.js')) {
+                            newName = newName.split('.').slice(0, -1).join('.');
+                        }
+                        if (script?.src?.endsWith('.d.ts')) {
+                            newName = newName + '.d.ts';
+                        }
+                        else if (script?.src?.endsWith('.ts')) {
+                            newName = newName + '.ts';
+                        }
+                        else if (script?.src?.endsWith('.tsx')) {
+                            newName = newName + '.tsx';
+                        }
+                        return newName;
+                    },
+                },
+            },
+        ]);
+        codes.push(`;\n`);
+        codes.push(`export { default } from '${src}';\n`);
+    }
+    function generateScriptContentBeforeExportDefault() {
+        if (!script)
+            return;
+        if (!!scriptSetup && scriptRanges?.exportDefault) {
+            addVirtualCode('script', 0, scriptRanges.exportDefault.expression.start);
+        }
+        else {
+            let isExportRawObject = false;
+            if (scriptRanges?.exportDefault) {
+                isExportRawObject = script.content.substring(scriptRanges.exportDefault.expression.start, scriptRanges.exportDefault.expression.end).startsWith('{');
+            }
+            if (isExportRawObject && vueCompilerOptions.optionsWrapper.length === 2 && scriptRanges?.exportDefault) {
+                addVirtualCode('script', 0, scriptRanges.exportDefault.expression.start);
+                codes.push(vueCompilerOptions.optionsWrapper[0]);
+                {
+                    codes.push(['', 'script', scriptRanges.exportDefault.expression.start, {
+                            __hint: {
+                                setting: 'vue.inlayHints.optionsWrapper',
+                                label: vueCompilerOptions.optionsWrapper[0],
+                                tooltip: [
+                                    'This is virtual code that is automatically wrapped for type support, it does not affect your runtime behavior, you can customize it via `vueCompilerOptions.optionsWrapper` option in tsconfig / jsconfig.',
+                                    'To hide it, you can set `"vue.inlayHints.optionsWrapper": false` in IDE settings.',
+                                ].join('\n\n'),
+                            }
+                        }]);
+                    addVirtualCode('script', scriptRanges.exportDefault.expression.start, scriptRanges.exportDefault.expression.end);
+                    codes.push(['', 'script', scriptRanges.exportDefault.expression.end, {
+                            __hint: {
+                                setting: 'vue.inlayHints.optionsWrapper',
+                                label: vueCompilerOptions.optionsWrapper[1],
+                                tooltip: '',
+                            }
+                        }]);
+                }
+                codes.push(vueCompilerOptions.optionsWrapper[1]);
+                addVirtualCode('script', scriptRanges.exportDefault.expression.end, script.content.length);
+            }
+            else {
+                addVirtualCode('script', 0, script.content.length);
+            }
+        }
+    }
+    function generateScriptContentAfterExportDefault() {
+        if (!script)
+            return;
+        if (!!scriptSetup && scriptRanges?.exportDefault) {
+            addVirtualCode('script', scriptRanges.exportDefault.expression.end, script.content.length);
+        }
+    }
+    function generateScriptSetupImports() {
+        if (!scriptSetup)
+            return;
+        if (!scriptSetupRanges)
+            return;
+        codes.push([
+            scriptSetup.content.substring(0, Math.max(scriptSetupRanges.importSectionEndOffset, scriptSetupRanges.leadingCommentEndOffset)) + '\n',
+            'scriptSetup',
+            0,
+            language_core_1.FileRangeCapabilities.full,
+        ]);
+    }
+    function generateScriptSetupAndTemplate() {
+        if (!scriptSetup || !scriptSetupRanges) {
+            return;
+        }
+        const definePropMirrors = {};
+        let scriptSetupGeneratedOffset;
+        if (scriptSetup.generic) {
+            if (!scriptRanges?.exportDefault) {
+                codes.push('export default ');
+            }
+            codes.push(`(<`);
+            codes.push([
+                scriptSetup.generic,
+                scriptSetup.name,
+                scriptSetup.genericOffset,
+                language_core_1.FileRangeCapabilities.full,
+            ]);
+            if (!scriptSetup.generic.endsWith(',')) {
+                codes.push(`,`);
+            }
+            codes.push(`>`);
+            codes.push('(\n');
+            codes.push(`__VLS_props: Awaited<typeof __VLS_setup>['props'],\n`);
+            codes.push(`__VLS_ctx?: __VLS_Prettify<Pick<Awaited<typeof __VLS_setup>, 'attrs' | 'emit' | 'slots'>>,\n`); // use __VLS_Prettify for less dts code
+            codes.push(`__VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>['expose'],\n`);
+            codes.push('__VLS_setup = (async () => {\n');
+            scriptSetupGeneratedOffset = generateSetupFunction(true, 'none', definePropMirrors);
+            //#region props
+            codes.push(`const __VLS_fnComponent = `);
+            codes.push(`(await import('${vueCompilerOptions.lib}')).defineComponent({\n`);
+            if (scriptSetupRanges.props.define?.arg) {
+                codes.push(`props: `);
+                addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.props.define.arg.start, scriptSetupRanges.props.define.arg.end);
+                codes.push(`,\n`);
+            }
+            if (scriptSetupRanges.emits.define) {
+                codes.push(`emits: ({} as __VLS_NormalizeEmits<typeof `, scriptSetupRanges.emits.name ?? '__VLS_emit', `>),\n`);
+            }
+            codes.push(`});\n`);
+            if (scriptSetupRanges.defineProp.length) {
+                codes.push(`const __VLS_defaults = {\n`);
+                for (const defineProp of scriptSetupRanges.defineProp) {
+                    if (defineProp.defaultValue) {
+                        if (defineProp.name) {
+                            codes.push(scriptSetup.content.substring(defineProp.name.start, defineProp.name.end));
+                        }
+                        else {
+                            codes.push('modelValue');
+                        }
+                        codes.push(`: `);
+                        codes.push(scriptSetup.content.substring(defineProp.defaultValue.start, defineProp.defaultValue.end));
+                        codes.push(`,\n`);
+                    }
+                }
+                codes.push(`};\n`);
+            }
+            codes.push(`let __VLS_fnPropsTypeOnly!: {}`); // TODO: reuse __VLS_fnPropsTypeOnly even without generic, and remove __VLS_propsOption_defineProp
+            if (scriptSetupRanges.props.define?.typeArg) {
+                codes.push(` & `);
+                addVirtualCode('scriptSetup', scriptSetupRanges.props.define.typeArg.start, scriptSetupRanges.props.define.typeArg.end);
+            }
+            if (scriptSetupRanges.defineProp.length) {
+                codes.push(` & {\n`);
+                for (const defineProp of scriptSetupRanges.defineProp) {
+                    let propName = 'modelValue';
+                    if (defineProp.name) {
+                        propName = scriptSetup.content.substring(defineProp.name.start, defineProp.name.end);
+                        const propMirrorStart = muggle.getLength(codes);
+                        definePropMirrors[propName] = [propMirrorStart, propMirrorStart + propName.length];
+                    }
+                    codes.push(`${propName}${defineProp.required ? '' : '?'}: `);
+                    if (defineProp.type) {
+                        codes.push(scriptSetup.content.substring(defineProp.type.start, defineProp.type.end));
+                    }
+                    else if (defineProp.defaultValue) {
+                        codes.push(`typeof __VLS_defaults['`);
+                        codes.push(propName);
+                        codes.push(`']`);
+                    }
+                    else {
+                        codes.push(`any`);
+                    }
+                    codes.push(',\n');
+                }
+                codes.push(`}`);
+            }
+            codes.push(`;\n`);
+            codes.push(`let __VLS_fnPropsDefineComponent!: InstanceType<typeof __VLS_fnComponent>['$props']`);
+            codes.push(`;\n`);
+            codes.push(`let __VLS_fnPropsSlots!: `);
+            if (scriptSetupRanges.slots.define && vueCompilerOptions.jsxSlots) {
+                usedHelperTypes.PropsChildren = true;
+                codes.push(`__VLS_PropsChildren<typeof __VLS_slots>`);
+            }
+            else {
+                codes.push(`{}`);
+            }
+            codes.push(`;\n`);
+            codes.push(`let __VLS_defaultProps!: `, `import('${vueCompilerOptions.lib}').VNodeProps`, `& import('${vueCompilerOptions.lib}').AllowedComponentProps`, `& import('${vueCompilerOptions.lib}').ComponentCustomProps`, `;\n`);
+            //#endregion
+            codes.push('return {} as {\n');
+            codes.push(`props: __VLS_Prettify<__VLS_OmitKeepDiscriminatedUnion<typeof __VLS_fnPropsDefineComponent & typeof __VLS_fnPropsTypeOnly, keyof typeof __VLS_defaultProps>> & typeof __VLS_fnPropsSlots & typeof __VLS_defaultProps,\n`);
+            codes.push(`expose(exposed: import('${vueCompilerOptions.lib}').ShallowUnwrapRef<${scriptSetupRanges.expose.define ? 'typeof __VLS_exposed' : '{}'}>): void,\n`);
+            codes.push('attrs: any,\n');
+            codes.push('slots: ReturnType<typeof __VLS_template>,\n');
+            codes.push(`emit: typeof ${scriptSetupRanges.emits.name ?? '__VLS_emit'},\n`);
+            codes.push('};\n');
+            codes.push('})(),\n');
+            codes.push(`) => ({} as import('${vueCompilerOptions.lib}').VNode & { __ctx?: Awaited<typeof __VLS_setup> }))`);
+        }
+        else if (!script) {
+            // no script block, generate script setup code at root
+            scriptSetupGeneratedOffset = generateSetupFunction(false, 'export', definePropMirrors);
+        }
+        else {
+            if (!scriptRanges?.exportDefault) {
+                codes.push('export default ');
+            }
+            codes.push('await (async () => {\n');
+            scriptSetupGeneratedOffset = generateSetupFunction(false, 'return', definePropMirrors);
+            codes.push(`})()`);
+        }
+        if (scriptSetupGeneratedOffset !== undefined) {
+            for (const defineProp of scriptSetupRanges.defineProp) {
+                if (!defineProp.name) {
+                    continue;
+                }
+                const propName = scriptSetup.content.substring(defineProp.name.start, defineProp.name.end);
+                const propMirror = definePropMirrors[propName];
+                if (propMirror) {
+                    mirrorBehaviorMappings.push({
+                        sourceRange: [defineProp.name.start + scriptSetupGeneratedOffset, defineProp.name.end + scriptSetupGeneratedOffset],
+                        generatedRange: propMirror,
+                        data: [
+                            language_core_1.MirrorBehaviorCapabilities.full,
+                            language_core_1.MirrorBehaviorCapabilities.full,
+                        ],
+                    });
+                }
+            }
+        }
+    }
+    function generateSetupFunction(functional, mode, definePropMirrors) {
+        if (!scriptSetupRanges || !scriptSetup) {
+            return;
+        }
+        const definePropProposalA = scriptSetup.content.trimStart().startsWith('// @experimentalDefinePropProposal=kevinEdition') || vueCompilerOptions.experimentalDefinePropProposal === 'kevinEdition';
+        const definePropProposalB = scriptSetup.content.trimStart().startsWith('// @experimentalDefinePropProposal=johnsonEdition') || vueCompilerOptions.experimentalDefinePropProposal === 'johnsonEdition';
+        if (vueCompilerOptions.target >= 3.3) {
+            codes.push('const { ');
+            for (const macro of Object.keys(vueCompilerOptions.macros)) {
+                if (!bindingNames.has(macro)) {
+                    codes.push(macro, ', ');
+                }
+            }
+            codes.push(`} = await import('${vueCompilerOptions.lib}');\n`);
+        }
+        if (definePropProposalA) {
+            codes.push(`
+declare function defineProp<T>(name: string, options: { required: true } & Record<string, unknown>): import('${vueCompilerOptions.lib}').ComputedRef<T>;
+declare function defineProp<T>(name: string, options: { default: any } & Record<string, unknown>): import('${vueCompilerOptions.lib}').ComputedRef<T>;
+declare function defineProp<T>(name?: string, options?: any): import('${vueCompilerOptions.lib}').ComputedRef<T | undefined>;
+`.trim() + '\n');
+        }
+        if (definePropProposalB) {
+            codes.push(`
+declare function defineProp<T>(value: T | (() => T), required?: boolean, rest?: any): import('${vueCompilerOptions.lib}').ComputedRef<T>;
+declare function defineProp<T>(value: T | (() => T) | undefined, required: true, rest?: any): import('${vueCompilerOptions.lib}').ComputedRef<T>;
+declare function defineProp<T>(value?: T | (() => T), required?: boolean, rest?: any): import('${vueCompilerOptions.lib}').ComputedRef<T | undefined>;
+`.trim() + '\n');
+        }
+        const scriptSetupGeneratedOffset = muggle.getLength(codes) - scriptSetupRanges.importSectionEndOffset;
+        let setupCodeModifies = [];
+        if (scriptSetupRanges.props.define && !scriptSetupRanges.props.name) {
+            const range = scriptSetupRanges.props.withDefaults ?? scriptSetupRanges.props.define;
+            const statement = scriptSetupRanges.props.define.statement;
+            if (statement.start === range.start && statement.end === range.end) {
+                setupCodeModifies.push([() => codes.push(`const __VLS_props = `), range.start, range.start]);
+            }
+            else {
+                setupCodeModifies.push([() => {
+                        codes.push(`const __VLS_props = `);
+                        addVirtualCode('scriptSetup', range.start, range.end);
+                        codes.push(`;\n`);
+                        addVirtualCode('scriptSetup', statement.start, range.start);
+                        codes.push(`__VLS_props`);
+                    }, statement.start, range.end]);
+            }
+        }
+        if (scriptSetupRanges.slots.define && !scriptSetupRanges.slots.name) {
+            setupCodeModifies.push([() => codes.push(`const __VLS_slots = `), scriptSetupRanges.slots.define.start, scriptSetupRanges.slots.define.start]);
+        }
+        if (scriptSetupRanges.emits.define && !scriptSetupRanges.emits.name) {
+            setupCodeModifies.push([() => codes.push(`const __VLS_emit = `), scriptSetupRanges.emits.define.start, scriptSetupRanges.emits.define.start]);
+        }
+        if (scriptSetupRanges.expose.define) {
+            setupCodeModifies.push([() => {
+                    if (scriptSetupRanges?.expose.define?.typeArg) {
+                        codes.push(`let __VLS_exposed!: `);
+                        addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.expose.define.typeArg.start, scriptSetupRanges.expose.define.typeArg.end);
+                        codes.push(`;\n`);
+                    }
+                    else if (scriptSetupRanges?.expose.define?.arg) {
+                        codes.push(`const __VLS_exposed = `);
+                        addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.expose.define.arg.start, scriptSetupRanges.expose.define.arg.end);
+                        codes.push(`;\n`);
+                    }
+                    else {
+                        codes.push(`const __VLS_exposed = {};\n`);
+                    }
+                }, scriptSetupRanges.expose.define.start, scriptSetupRanges.expose.define.start]);
+        }
+        setupCodeModifies = setupCodeModifies.sort((a, b) => a[1] - b[1]);
+        if (setupCodeModifies.length) {
+            addVirtualCode('scriptSetup', scriptSetupRanges.importSectionEndOffset, setupCodeModifies[0][1]);
+            while (setupCodeModifies.length) {
+                const [generate, _, end] = setupCodeModifies.shift();
+                generate();
+                if (setupCodeModifies.length) {
+                    const nextStart = setupCodeModifies[0][1];
+                    addVirtualCode('scriptSetup', end, nextStart);
+                }
+                else {
+                    addVirtualCode('scriptSetup', end);
+                }
+            }
+        }
+        else {
+            addVirtualCode('scriptSetup', scriptSetupRanges.importSectionEndOffset);
+        }
+        if (scriptSetupRanges.props.define?.typeArg && scriptSetupRanges.props.withDefaults?.arg) {
+            // fix https://github.com/vuejs/language-tools/issues/1187
+            codes.push(`const __VLS_withDefaultsArg = (function <T>(t: T) { return t })(`);
+            addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.props.withDefaults.arg.start, scriptSetupRanges.props.withDefaults.arg.end);
+            codes.push(`);\n`);
+        }
+        if (!functional && scriptSetupRanges.defineProp.length) {
+            codes.push(`let __VLS_propsOption_defineProp!: {\n`);
+            for (const defineProp of scriptSetupRanges.defineProp) {
+                let propName = 'modelValue';
+                if (defineProp.name && defineProp.nameIsString) {
+                    // renaming support
+                    addExtraReferenceVirtualCode('scriptSetup', defineProp.name.start, defineProp.name.end);
+                }
+                else if (defineProp.name) {
+                    propName = scriptSetup.content.substring(defineProp.name.start, defineProp.name.end);
+                    const start = muggle.getLength(codes);
+                    definePropMirrors[propName] = [start, start + propName.length];
+                    codes.push(propName);
+                }
+                else {
+                    codes.push(propName);
+                }
+                codes.push(`: `);
+                let type = 'any';
+                if (!defineProp.nameIsString) {
+                    type = `NonNullable<typeof ${propName}['value']>`;
+                }
+                else if (defineProp.type) {
+                    type = scriptSetup.content.substring(defineProp.type.start, defineProp.type.end);
+                }
+                if (defineProp.required) {
+                    codes.push(`{ required: true, type: import('${vueCompilerOptions.lib}').PropType<${type}> },\n`);
+                }
+                else {
+                    codes.push(`import('${vueCompilerOptions.lib}').PropType<${type}>,\n`);
+                }
+            }
+            codes.push(`};\n`);
+        }
+        generateTemplate(functional);
+        if (mode === 'return' || mode === 'export') {
+            if (!vueCompilerOptions.skipTemplateCodegen && (htmlGen?.hasSlot || scriptSetupRanges?.slots.define)) {
+                usedHelperTypes.WithTemplateSlots = true;
+                codes.push(`const __VLS_component = `);
+                generateComponent(functional);
+                codes.push(`;\n`);
+                codes.push(mode === 'return' ? 'return ' : 'export default ');
+                codes.push(`{} as __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;\n`);
+            }
+            else {
+                codes.push(mode === 'return' ? 'return ' : 'export default ');
+                generateComponent(functional);
+                codes.push(`;\n`);
+            }
+        }
+        return scriptSetupGeneratedOffset;
+    }
+    function generateComponent(functional) {
+        if (!scriptSetupRanges)
+            return;
+        if (scriptRanges?.exportDefault && scriptRanges.exportDefault.expression.start !== scriptRanges.exportDefault.args.start) {
+            // use defineComponent() from user space code if it exist
+            addVirtualCode('script', scriptRanges.exportDefault.expression.start, scriptRanges.exportDefault.args.start);
+            codes.push(`{\n`);
+        }
+        else {
+            codes.push(`(await import('${vueCompilerOptions.lib}')).defineComponent({\n`);
+        }
+        codes.push(`setup() {\n`);
+        codes.push(`return {\n`);
+        generateSetupReturns();
+        if (scriptSetupRanges.expose.define) {
+            codes.push(`...__VLS_exposed,\n`);
+        }
+        codes.push(`};\n`);
+        codes.push(`},\n`);
+        generateComponentOptions(functional);
+        codes.push(`})`);
+    }
+    function generateComponentOptions(functional) {
+        if (scriptSetupRanges && !bypassDefineComponent) {
+            const ranges = scriptSetupRanges;
+            const propsCodegens = [];
+            if (ranges.props.define?.arg) {
+                const arg = ranges.props.define.arg;
+                propsCodegens.push(() => {
+                    addExtraReferenceVirtualCode('scriptSetup', arg.start, arg.end);
+                });
+            }
+            if (ranges.props.define?.typeArg) {
+                const typeArg = ranges.props.define.typeArg;
+                propsCodegens.push(() => {
+                    usedHelperTypes.DefinePropsToOptions = true;
+                    codes.push(`{} as `);
+                    if (ranges.props.withDefaults?.arg) {
+                        usedHelperTypes.MergePropDefaults = true;
+                        codes.push(`__VLS_WithDefaults<`);
+                    }
+                    codes.push(`__VLS_TypePropsToRuntimeProps<`);
+                    if (functional) {
+                        codes.push(`typeof __VLS_fnPropsTypeOnly`);
+                    }
+                    else {
+                        addExtraReferenceVirtualCode('scriptSetup', typeArg.start, typeArg.end);
+                    }
+                    codes.push(`>`);
+                    if (ranges.props.withDefaults?.arg) {
+                        codes.push(`, typeof __VLS_withDefaultsArg`);
+                        codes.push(`>`);
+                    }
+                });
+            }
+            if (!functional && ranges.defineProp.length) {
+                propsCodegens.push(() => {
+                    codes.push(`__VLS_propsOption_defineProp`);
+                });
+            }
+            if (propsCodegens.length === 1) {
+                codes.push(`props: `);
+                for (const generate of propsCodegens) {
+                    generate();
+                }
+                codes.push(`,\n`);
+            }
+            else if (propsCodegens.length >= 2) {
+                codes.push(`props: {\n`);
+                for (const generate of propsCodegens) {
+                    codes.push('...');
+                    generate();
+                    codes.push(',\n');
+                }
+                codes.push(`},\n`);
+            }
+            if (ranges.emits.define) {
+                codes.push(`emits: ({} as __VLS_NormalizeEmits<typeof `, ranges.emits.name ?? '__VLS_emit', `>),\n`);
+            }
+        }
+        if (scriptRanges?.exportDefault?.args) {
+            addVirtualCode('script', scriptRanges.exportDefault.args.start + 1, scriptRanges.exportDefault.args.end - 1);
+        }
+    }
+    function generateSetupReturns() {
+        if (scriptSetupRanges && bypassDefineComponent) {
+            // fill $props
+            if (scriptSetupRanges.props.define) {
+                // NOTE: defineProps is inaccurate for $props
+                codes.push(`$props: __VLS_makeOptional(${scriptSetupRanges.props.name ?? `__VLS_props`}),\n`);
+                codes.push(`...${scriptSetupRanges.props.name ?? `__VLS_props`},\n`);
+            }
+            // fill $emit
+            if (scriptSetupRanges.emits.define) {
+                codes.push(`$emit: ${scriptSetupRanges.emits.name ?? '__VLS_emit'},\n`);
+            }
+        }
+    }
+    function generateTemplate(functional) {
+        generatedTemplate = true;
+        if (!vueCompilerOptions.skipTemplateCodegen) {
+            generateExportOptions();
+            generateConstNameOption();
+            codes.push(`function __VLS_template() {\n`);
+            const templateGened = generateTemplateContext();
+            codes.push(`}\n`);
+            generateComponentForTemplateUsage(functional, templateGened.cssIds);
+        }
+        else {
+            codes.push(`function __VLS_template() {\n`);
+            const templateUsageVars = [...getTemplateUsageVars()];
+            codes.push(`// @ts-ignore\n`);
+            codes.push(`[${templateUsageVars.join(', ')}]\n`);
+            codes.push(`return {};\n`);
+            codes.push(`}\n`);
+        }
+    }
+    function generateComponentForTemplateUsage(functional, cssIds) {
+        if (scriptSetup && scriptSetupRanges) {
+            codes.push(`const __VLS_internalComponent = (await import('${vueCompilerOptions.lib}')).defineComponent({\n`);
+            codes.push(`setup() {\n`);
+            codes.push(`return {\n`);
+            generateSetupReturns();
+            // bindings
+            const templateUsageVars = getTemplateUsageVars();
+            for (const [content, bindings] of [
+                [scriptSetup.content, scriptSetupRanges.bindings],
+                scriptRanges && script
+                    ? [script.content, scriptRanges.bindings]
+                    : ['', []],
+            ]) {
+                for (const expose of bindings) {
+                    const varName = content.substring(expose.start, expose.end);
+                    if (!templateUsageVars.has(varName) && !cssIds.has(varName)) {
+                        continue;
+                    }
+                    const templateStart = (0, source_map_1.getLength)(codes);
+                    codes.push(varName);
+                    const templateEnd = (0, source_map_1.getLength)(codes);
+                    codes.push(`: ${varName} as typeof `);
+                    const scriptStart = (0, source_map_1.getLength)(codes);
+                    codes.push(varName);
+                    const scriptEnd = (0, source_map_1.getLength)(codes);
+                    codes.push(',\n');
+                    mirrorBehaviorMappings.push({
+                        sourceRange: [scriptStart, scriptEnd],
+                        generatedRange: [templateStart, templateEnd],
+                        data: [
+                            language_core_1.MirrorBehaviorCapabilities.full,
+                            language_core_1.MirrorBehaviorCapabilities.full,
+                        ],
+                    });
+                }
+            }
+            codes.push(`};\n`); // return {
+            codes.push(`},\n`); // setup() {
+            generateComponentOptions(functional);
+            codes.push(`});\n`); // defineComponent({
+        }
+        else if (script) {
+            codes.push(`let __VLS_internalComponent!: typeof import('./${path.basename(fileName)}')['default'];\n`);
+        }
+        else {
+            codes.push(`const __VLS_internalComponent = (await import('${vueCompilerOptions.lib}')).defineComponent({});\n`);
+        }
+    }
+    function generateExportOptions() {
+        codes.push(`\n`);
+        codes.push(`const __VLS_componentsOption = `);
+        if (script && scriptRanges?.exportDefault?.componentsOption) {
+            const componentsOption = scriptRanges.exportDefault.componentsOption;
+            codes.push([
+                script.content.substring(componentsOption.start, componentsOption.end),
+                'script',
+                componentsOption.start,
+                {
+                    references: true,
+                    rename: true,
+                },
+            ]);
+        }
+        else {
+            codes.push('{}');
+        }
+        codes.push(`;\n`);
+    }
+    function generateConstNameOption() {
+        codes.push(`\n`);
+        if (script && scriptRanges?.exportDefault?.nameOption) {
+            const nameOption = scriptRanges.exportDefault.nameOption;
+            codes.push(`const __VLS_name = `);
+            codes.push(`${script.content.substring(nameOption.start, nameOption.end)} as const`);
+            codes.push(`;\n`);
+        }
+        else if (scriptSetup) {
+            codes.push(`let __VLS_name!: '${path.basename(fileName.substring(0, fileName.lastIndexOf('.')))}';\n`);
+        }
+        else {
+            codes.push(`const __VLS_name = undefined;\n`);
+        }
+    }
+    function generateTemplateContext() {
+        const useGlobalThisTypeInCtx = fileName.endsWith('.html');
+        codes.push(`let __VLS_ctx!: ${useGlobalThisTypeInCtx ? 'typeof globalThis &' : ''}`);
+        codes.push(`InstanceType<__VLS_PickNotAny<typeof __VLS_internalComponent, new () => {}>> & {\n`);
+        /* CSS Module */
+        for (let i = 0; i < styles.length; i++) {
+            const style = styles[i];
+            if (style.module) {
+                codes.push(`${style.module}: Record<string, string> & __VLS_Prettify<{}`);
+                for (const className of style.classNames) {
+                    generateCssClassProperty(i, className.text.substring(1), { start: className.offset, end: className.offset + className.text.length }, 'string', false, true);
+                }
+                codes.push('>;\n');
+            }
+        }
+        codes.push(`};\n`);
+        /* Components */
+        codes.push('/* Components */\n');
+        codes.push(`let __VLS_otherComponents!: NonNullable<typeof __VLS_internalComponent extends { components: infer C } ? C : {}> & typeof __VLS_componentsOption;\n`);
+        codes.push(`let __VLS_own!: __VLS_SelfComponent<typeof __VLS_name, typeof __VLS_internalComponent & (new () => { ${(0, shared_1.getSlotsPropertyName)(vueCompilerOptions.target)}: typeof ${scriptSetupRanges?.slots?.name ?? '__VLS_slots'} })>;\n`);
+        codes.push(`let __VLS_localComponents!: typeof __VLS_otherComponents & Omit<typeof __VLS_own, keyof typeof __VLS_otherComponents>;\n`);
+        codes.push(`let __VLS_components!: typeof __VLS_localComponents & __VLS_GlobalComponents & typeof __VLS_ctx;\n`); // for html completion, TS references...
+        /* Style Scoped */
+        codes.push('/* Style Scoped */\n');
+        codes.push('type __VLS_StyleScopedClasses = {}');
+        for (let i = 0; i < styles.length; i++) {
+            const style = styles[i];
+            const option = vueCompilerOptions.experimentalResolveStyleCssClasses;
+            if (option === 'always' || (option === 'scoped' && style.scoped)) {
+                for (const className of style.classNames) {
+                    generateCssClassProperty(i, className.text.substring(1), { start: className.offset, end: className.offset + className.text.length }, 'boolean', true, !style.module);
+                }
+            }
+        }
+        codes.push(';\n');
+        codes.push('let __VLS_styleScopedClasses!: __VLS_StyleScopedClasses | keyof __VLS_StyleScopedClasses | (keyof __VLS_StyleScopedClasses)[];\n');
+        codes.push(`/* CSS variable injection */\n`);
+        const cssIds = generateCssVars();
+        codes.push(`/* CSS variable injection end */\n`);
+        if (htmlGen) {
+            muggle.setTracking(false);
+            for (const s of htmlGen.codes) {
+                codes.push(s);
+            }
+            muggle.setTracking(true);
+            for (const s of htmlGen.codeStacks) {
+                codeStacks.push(s);
+            }
+        }
+        if (!htmlGen) {
+            codes.push(`// no template\n`);
+            if (!scriptSetupRanges?.slots.define) {
+                codes.push(`const __VLS_slots = {};\n`);
+            }
+        }
+        codes.push(`return ${scriptSetupRanges?.slots.name ?? '__VLS_slots'};\n`);
+        return { cssIds };
+        function generateCssClassProperty(styleIndex, className, classRange, propertyType, optional, referencesCodeLens) {
+            codes.push(`\n & { `);
+            codes.push([
+                '',
+                'style_' + styleIndex,
+                classRange.start,
+                {
+                    references: true,
+                    referencesCodeLens,
+                },
+            ]);
+            codes.push(`'`);
+            codes.push([
+                className,
+                'style_' + styleIndex,
+                [classRange.start, classRange.end],
+                {
+                    references: true,
+                    rename: {
+                        normalize: normalizeCssRename,
+                        apply: applyCssRename,
+                    },
+                },
+            ]);
+            codes.push(`'`);
+            codes.push([
+                '',
+                'style_' + styleIndex,
+                classRange.end,
+                {},
+            ]);
+            codes.push(`${optional ? '?' : ''}: ${propertyType}`);
+            codes.push(` }`);
+        }
+        function generateCssVars() {
+            const emptyLocalVars = new Map();
+            const identifiers = new Set();
+            for (const style of styles) {
+                for (const cssBind of style.cssVars) {
+                    (0, transform_1.walkInterpolationFragment)(ts, cssBind.text, ts.createSourceFile('/a.txt', cssBind.text, ts.ScriptTarget.ESNext), (frag, fragOffset, onlyForErrorMapping) => {
+                        if (fragOffset === undefined) {
+                            codes.push(frag);
+                        }
+                        else {
+                            codes.push([
+                                frag,
+                                style.name,
+                                cssBind.offset + fragOffset,
+                                onlyForErrorMapping
+                                    ? { diagnostic: true }
+                                    : language_core_1.FileRangeCapabilities.full,
+                            ]);
+                        }
+                    }, emptyLocalVars, identifiers, vueCompilerOptions);
+                    codes.push(';\n');
+                }
+            }
+            return identifiers;
+        }
+    }
+    function getTemplateUsageVars() {
+        const usageVars = new Set();
+        if (htmlGen) {
+            // fix import components unused report
+            for (const varName of bindingNames) {
+                if (!!htmlGen.tagNames[varName] || !!htmlGen.tagNames[(0, shared_1.hyphenateTag)(varName)]) {
+                    usageVars.add(varName);
+                }
+            }
+            for (const tag of Object.keys(htmlGen.tagNames)) {
+                if (tag.indexOf('.') >= 0) {
+                    usageVars.add(tag.split('.')[0]);
+                }
+            }
+            for (const _id of htmlGen.accessedGlobalVariables) {
+                usageVars.add(_id);
+            }
+        }
+        return usageVars;
+    }
+    function addVirtualCode(vueTag, start, end) {
+        muggle.offsetStack();
+        codes.push([
+            (vueTag === 'script' ? script : scriptSetup).content.substring(start, end),
+            vueTag,
+            start,
+            language_core_1.FileRangeCapabilities.full, // diagnostic also working for setup() returns unused in template checking
+        ]);
+        muggle.resetOffsetStack();
+    }
+    function addExtraReferenceVirtualCode(vueTag, start, end) {
+        muggle.offsetStack();
+        codes.push([
+            (vueTag === 'script' ? script : scriptSetup).content.substring(start, end),
+            vueTag,
+            start,
+            {
+                references: true,
+                definition: true,
+                rename: true,
+            },
+        ]);
+        muggle.resetOffsetStack();
+    }
+}
+exports.generate = generate;
+function normalizeCssRename(newName) {
+    return newName.startsWith('.') ? newName.slice(1) : newName;
+}
+function applyCssRename(newName) {
+    return '.' + newName;
+}
+//# sourceMappingURL=script.js.map

+ 21 - 0
node_modules/@vue/language-core/out/generators/template.d.ts

@@ -0,0 +1,21 @@
+import { FileRangeCapabilities } from '@volar/language-core';
+import { Segment } from '@volar/source-map';
+import * as CompilerDOM from '@vue/compiler-dom';
+import * as muggle from 'muggle-string';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { Sfc, VueCompilerOptions } from '../types';
+type Code = Segment<FileRangeCapabilities>;
+export declare function generate(ts: typeof import('typescript/lib/tsserverlibrary'), compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions, template: NonNullable<Sfc['template']>, shouldGenerateScopedClasses: boolean, stylesScopedClasses: Set<string>, hasScriptSetupSlots: boolean, slotsAssignName: string | undefined, propsAssignName: string | undefined, codegenStack: boolean): {
+    codes: Code[];
+    codeStacks: muggle.StackNode[];
+    formatCodes: Code[];
+    formatCodeStacks: muggle.StackNode[];
+    cssCodes: Code[];
+    cssCodeStacks: muggle.StackNode[];
+    tagNames: Record<string, number[]>;
+    accessedGlobalVariables: Set<string>;
+    hasSlot: boolean;
+};
+export declare function walkElementNodes(node: CompilerDOM.RootNode | CompilerDOM.TemplateChildNode, cb: (node: CompilerDOM.ElementNode) => void): void;
+export {};
+//# sourceMappingURL=template.d.ts.map

+ 1516 - 0
node_modules/@vue/language-core/out/generators/template.js

@@ -0,0 +1,1516 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.walkElementNodes = exports.generate = void 0;
+const language_core_1 = require("@volar/language-core");
+const CompilerDOM = require("@vue/compiler-dom");
+const shared_1 = require("@vue/shared");
+const minimatch_1 = require("minimatch");
+const muggle = require("muggle-string");
+const shared_2 = require("../utils/shared");
+const transform_1 = require("../utils/transform");
+const capabilitiesPresets = {
+    all: language_core_1.FileRangeCapabilities.full,
+    allWithHiddenParam: {
+        ...language_core_1.FileRangeCapabilities.full, __hint: {
+            setting: 'vue.inlayHints.inlineHandlerLeading',
+            label: '$event =>',
+            tooltip: [
+                '`$event` is a hidden parameter, you can use it in this callback.',
+                'To hide this hint, set `vue.inlayHints.inlineHandlerLeading` to `false` in IDE settings.',
+                '[More info](https://github.com/vuejs/language-tools/issues/2445#issuecomment-1444771420)',
+            ].join('\n\n'),
+            paddingRight: true,
+        } /* TODO */
+    },
+    noDiagnostic: { ...language_core_1.FileRangeCapabilities.full, diagnostic: false },
+    diagnosticOnly: { diagnostic: true },
+    tagHover: { hover: true },
+    event: { hover: true, diagnostic: true },
+    tagReference: { references: true, definition: true, rename: { normalize: undefined, apply: noEditApply } },
+    attr: { hover: true, diagnostic: true, references: true, definition: true, rename: true },
+    attrReference: { references: true, definition: true, rename: true },
+    slotProp: { references: true, definition: true, rename: true, diagnostic: true },
+    scopedClassName: { references: true, definition: true, rename: true, completion: true },
+    slotName: { hover: true, diagnostic: true, references: true, definition: true, completion: true },
+    slotNameExport: { hover: true, diagnostic: true, references: true, definition: true, /* referencesCodeLens: true */ },
+    refAttr: { references: true, definition: true, rename: true },
+};
+const formatBrackets = {
+    normal: ['`${', '}`;'],
+    // fix https://github.com/vuejs/language-tools/issues/3572
+    params: ['(', ') => {}'],
+    // fix https://github.com/vuejs/language-tools/issues/1210
+    // fix https://github.com/vuejs/language-tools/issues/2305
+    curly: ['0 +', '+ 0;'],
+    event: ['() => ', ';'],
+};
+const validTsVarReg = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/;
+const colonReg = /:/g;
+// @ts-ignore
+const transformContext = {
+    onError: () => { },
+    helperString: str => str.toString(),
+    replaceNode: () => { },
+    cacheHandlers: false,
+    prefixIdentifiers: false,
+    scopes: {
+        vFor: 0,
+        vOnce: 0,
+        vPre: 0,
+        vSlot: 0,
+    },
+    expressionPlugins: ['typescript'],
+};
+function generate(ts, compilerOptions, vueCompilerOptions, template, shouldGenerateScopedClasses, stylesScopedClasses, hasScriptSetupSlots, slotsAssignName, propsAssignName, codegenStack) {
+    const nativeTags = new Set(vueCompilerOptions.nativeTags);
+    const [codes, codeStacks] = codegenStack ? muggle.track([]) : [[], []];
+    const [formatCodes, formatCodeStacks] = codegenStack ? muggle.track([]) : [[], []];
+    const [cssCodes, cssCodeStacks] = codegenStack ? muggle.track([]) : [[], []];
+    const slots = new Map();
+    const slotExps = new Map();
+    const tagNames = collectTagOffsets();
+    const localVars = new Map();
+    const tempVars = [];
+    const accessedGlobalVariables = new Set();
+    const scopedClasses = [];
+    const blockConditions = [];
+    const hasSlotElements = new Set();
+    const componentCtxVar2EmitEventsVar = new Map();
+    let hasSlot = false;
+    let elementIndex = 0;
+    let ignoreStart;
+    let expectedErrorStart;
+    let expectedErrorNode;
+    if (slotsAssignName) {
+        localVars.set(slotsAssignName, 1);
+    }
+    if (propsAssignName) {
+        localVars.set(propsAssignName, 1);
+    }
+    generatePreResolveComponents();
+    if (template.ast) {
+        visitNode(template.ast, undefined, undefined, undefined);
+    }
+    generateStyleScopedClasses();
+    if (!hasScriptSetupSlots) {
+        codes.push('var __VLS_slots!:', ...createSlotsTypeCode(), ';\n');
+    }
+    generateAutoImportCompletionCode();
+    return {
+        codes,
+        codeStacks,
+        formatCodes,
+        formatCodeStacks,
+        cssCodes,
+        cssCodeStacks,
+        tagNames,
+        accessedGlobalVariables,
+        hasSlot,
+    };
+    function createSlotsTypeCode() {
+        const codes = [];
+        for (const [exp, slot] of slotExps) {
+            hasSlot = true;
+            codes.push(`Partial<Record<NonNullable<typeof ${exp}>, (_: typeof ${slot.varName}) => any>> &\n`);
+        }
+        codes.push(`{\n`);
+        for (const [name, slot] of slots) {
+            hasSlot = true;
+            codes.push(...createObjectPropertyCode([
+                name,
+                'template',
+                slot.loc,
+                {
+                    ...capabilitiesPresets.slotNameExport,
+                    referencesCodeLens: true,
+                },
+            ], slot.nodeLoc));
+            codes.push(`?(_: typeof ${slot.varName}): any,\n`);
+        }
+        codes.push(`}`);
+        return codes;
+    }
+    function generateStyleScopedClasses() {
+        codes.push(`if (typeof __VLS_styleScopedClasses === 'object' && !Array.isArray(__VLS_styleScopedClasses)) {\n`);
+        for (const { className, offset } of scopedClasses) {
+            codes.push(`__VLS_styleScopedClasses[`);
+            codes.push(...createStringLiteralKeyCode([
+                className,
+                'template',
+                offset,
+                {
+                    ...capabilitiesPresets.scopedClassName,
+                    displayWithLink: stylesScopedClasses.has(className),
+                },
+            ]));
+            codes.push(`];\n`);
+        }
+        codes.push('}\n');
+    }
+    function toCanonicalComponentName(tagText) {
+        return validTsVarReg.test(tagText) ? tagText : (0, shared_1.capitalize)((0, shared_1.camelize)(tagText.replace(colonReg, '-')));
+    }
+    function getPossibleOriginalComponentName(tagText) {
+        return [...new Set([
+                // order is important: https://github.com/vuejs/language-tools/issues/2010
+                (0, shared_1.capitalize)((0, shared_1.camelize)(tagText)),
+                (0, shared_1.camelize)(tagText),
+                tagText,
+            ])];
+    }
+    function generatePreResolveComponents() {
+        codes.push(`let __VLS_resolvedLocalAndGlobalComponents!: {}\n`);
+        for (const tagName in tagNames) {
+            if (nativeTags.has(tagName))
+                continue;
+            const isNamespacedTag = tagName.indexOf('.') >= 0;
+            if (isNamespacedTag)
+                continue;
+            codes.push(`& __VLS_WithComponent<'${toCanonicalComponentName(tagName)}', typeof __VLS_localComponents, `, 
+            // order is important: https://github.com/vuejs/language-tools/issues/2010
+            `"${(0, shared_1.capitalize)((0, shared_1.camelize)(tagName))}", `, `"${(0, shared_1.camelize)(tagName)}", `, `"${tagName}"`, '>\n');
+        }
+        codes.push(`;\n`);
+        for (const tagName in tagNames) {
+            const tagOffsets = tagNames[tagName];
+            const tagRanges = tagOffsets.map(offset => [offset, offset + tagName.length]);
+            const names = nativeTags.has(tagName) ? [tagName] : getPossibleOriginalComponentName(tagName);
+            for (const name of names) {
+                for (const tagRange of tagRanges) {
+                    codes.push(nativeTags.has(tagName) ? '__VLS_intrinsicElements' : '__VLS_components', ...createPropertyAccessCode([
+                        name,
+                        'template',
+                        tagRange,
+                        {
+                            ...capabilitiesPresets.tagReference,
+                            rename: {
+                                normalize: tagName === name ? capabilitiesPresets.tagReference.rename.normalize : camelizeComponentName,
+                                apply: getTagRenameApply(tagName),
+                            },
+                            ...nativeTags.has(tagName) ? {
+                                ...capabilitiesPresets.tagHover,
+                                ...capabilitiesPresets.diagnosticOnly,
+                            } : {},
+                        },
+                    ]), ';');
+                }
+            }
+            codes.push('\n');
+            if (nativeTags.has(tagName))
+                continue;
+            const isNamespacedTag = tagName.indexOf('.') >= 0;
+            if (isNamespacedTag)
+                continue;
+            codes.push('// @ts-ignore\n', // #2304
+            '[');
+            const validName = toCanonicalComponentName(tagName);
+            for (const tagRange of tagRanges) {
+                codes.push([
+                    validName,
+                    'template',
+                    tagRange,
+                    {
+                        completion: {
+                            additional: true,
+                            autoImportOnly: true,
+                        },
+                    },
+                ]);
+                codes.push(',');
+            }
+            codes.push(`];\n`);
+        }
+    }
+    function collectTagOffsets() {
+        const tagOffsetsMap = {};
+        if (!template.ast) {
+            return tagOffsetsMap;
+        }
+        walkElementNodes(template.ast, node => {
+            if (node.tag === 'slot') {
+                // ignore
+            }
+            else if (node.tag === 'component' || node.tag === 'Component') {
+                for (const prop of node.props) {
+                    if (prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */ && prop.name === 'is' && prop.value) {
+                        const tag = prop.value.content;
+                        tagOffsetsMap[tag] ??= [];
+                        tagOffsetsMap[tag].push(prop.value.loc.start.offset + prop.value.loc.source.lastIndexOf(tag));
+                        break;
+                    }
+                }
+            }
+            else {
+                tagOffsetsMap[node.tag] ??= [];
+                const offsets = tagOffsetsMap[node.tag];
+                const source = template.content.substring(node.loc.start.offset);
+                const startTagOffset = node.loc.start.offset + source.indexOf(node.tag);
+                offsets.push(startTagOffset); // start tag
+                if (!node.isSelfClosing && template.lang === 'html') {
+                    const endTagOffset = node.loc.start.offset + node.loc.source.lastIndexOf(node.tag);
+                    if (endTagOffset !== startTagOffset) {
+                        offsets.push(endTagOffset); // end tag
+                    }
+                }
+            }
+        });
+        return tagOffsetsMap;
+    }
+    function resolveComment() {
+        if (ignoreStart !== undefined) {
+            for (let i = ignoreStart; i < codes.length; i++) {
+                const code = codes[i];
+                if (typeof code === 'string') {
+                    continue;
+                }
+                const cap = code[3];
+                if (cap.diagnostic) {
+                    code[3] = {
+                        ...cap,
+                        diagnostic: false,
+                    };
+                }
+            }
+            ignoreStart = undefined;
+        }
+        if (expectedErrorStart !== undefined && expectedErrorStart !== codes.length && expectedErrorNode) {
+            let errors = 0;
+            const suppressError = () => {
+                errors++;
+                return false;
+            };
+            for (let i = expectedErrorStart; i < codes.length; i++) {
+                const code = codes[i];
+                if (typeof code === 'string') {
+                    continue;
+                }
+                const cap = code[3];
+                if (cap.diagnostic) {
+                    code[3] = {
+                        ...cap,
+                        diagnostic: {
+                            shouldReport: suppressError,
+                        },
+                    };
+                }
+            }
+            codes.push([
+                '// @ts-expect-error __VLS_TS_EXPECT_ERROR',
+                'template',
+                [expectedErrorNode.loc.start.offset, expectedErrorNode.loc.end.offset],
+                {
+                    diagnostic: {
+                        shouldReport: () => errors === 0,
+                    },
+                },
+            ], '\n;\n');
+            expectedErrorStart = undefined;
+            expectedErrorNode = undefined;
+        }
+    }
+    function visitNode(node, parentEl, prevNode, componentCtxVar) {
+        resolveComment();
+        if (prevNode?.type === 3 /* CompilerDOM.NodeTypes.COMMENT */) {
+            const commentText = prevNode.content.trim().split(' ')[0];
+            if (commentText.match(/^@vue-skip\b[\s\S]*/)) {
+                return;
+            }
+            else if (commentText.match(/^@vue-ignore\b[\s\S]*/)) {
+                ignoreStart = codes.length;
+            }
+            else if (commentText.match(/^@vue-expect-error\b[\s\S]*/)) {
+                expectedErrorStart = codes.length;
+                expectedErrorNode = prevNode;
+            }
+        }
+        if (node.type === 0 /* CompilerDOM.NodeTypes.ROOT */) {
+            let prev;
+            for (const childNode of node.children) {
+                visitNode(childNode, parentEl, prev, componentCtxVar);
+                prev = childNode;
+            }
+            resolveComment();
+        }
+        else if (node.type === 1 /* CompilerDOM.NodeTypes.ELEMENT */) {
+            const vForNode = getVForNode(node);
+            const vIfNode = getVIfNode(node);
+            if (vForNode) {
+                visitVForNode(vForNode, parentEl, componentCtxVar);
+            }
+            else if (vIfNode) {
+                visitVIfNode(vIfNode, parentEl, componentCtxVar);
+            }
+            else {
+                visitElementNode(node, parentEl, componentCtxVar);
+            }
+        }
+        else if (node.type === 12 /* CompilerDOM.NodeTypes.TEXT_CALL */) {
+            // {{ var }}
+            visitNode(node.content, parentEl, undefined, componentCtxVar);
+        }
+        else if (node.type === 8 /* CompilerDOM.NodeTypes.COMPOUND_EXPRESSION */) {
+            // {{ ... }} {{ ... }}
+            for (const childNode of node.children) {
+                if (typeof childNode === 'object') {
+                    visitNode(childNode, parentEl, undefined, componentCtxVar);
+                }
+            }
+        }
+        else if (node.type === 5 /* CompilerDOM.NodeTypes.INTERPOLATION */) {
+            // {{ ... }}
+            let content = node.content.loc.source;
+            let start = node.content.loc.start.offset;
+            let leftCharacter;
+            let rightCharacter;
+            // fix https://github.com/vuejs/language-tools/issues/1787
+            while ((leftCharacter = template.content.substring(start - 1, start)).trim() === '' && leftCharacter.length) {
+                start--;
+                content = leftCharacter + content;
+            }
+            while ((rightCharacter = template.content.substring(start + content.length, start + content.length + 1)).trim() === '' && rightCharacter.length) {
+                content = content + rightCharacter;
+            }
+            codes.push(...createInterpolationCode(content, node.content.loc, start, capabilitiesPresets.all, '(', ');\n'));
+            const lines = content.split('\n');
+            formatCodes.push(...createFormatCode(content, start, lines.length <= 1 ? formatBrackets.curly : [
+                formatBrackets.curly[0],
+                lines[lines.length - 1].trim() === '' ? '' : formatBrackets.curly[1],
+            ]));
+        }
+        else if (node.type === 9 /* CompilerDOM.NodeTypes.IF */) {
+            // v-if / v-else-if / v-else
+            visitVIfNode(node, parentEl, componentCtxVar);
+        }
+        else if (node.type === 11 /* CompilerDOM.NodeTypes.FOR */) {
+            // v-for
+            visitVForNode(node, parentEl, componentCtxVar);
+        }
+        else if (node.type === 2 /* CompilerDOM.NodeTypes.TEXT */) {
+            // not needed progress
+        }
+    }
+    function visitVIfNode(node, parentEl, componentCtxVar) {
+        let originalBlockConditionsLength = blockConditions.length;
+        for (let i = 0; i < node.branches.length; i++) {
+            const branch = node.branches[i];
+            if (i === 0)
+                codes.push('if');
+            else if (branch.condition)
+                codes.push('else if');
+            else
+                codes.push('else');
+            let addedBlockCondition = false;
+            if (branch.condition?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                codes.push(` `);
+                const beforeCodeLength = codes.length;
+                codes.push(...createInterpolationCode(branch.condition.content, branch.condition.loc, branch.condition.loc.start.offset, capabilitiesPresets.all, '(', ')'));
+                const afterCodeLength = codes.length;
+                formatCodes.push(...createFormatCode(branch.condition.content, branch.condition.loc.start.offset, formatBrackets.normal));
+                blockConditions.push(muggle.toString(codes.slice(beforeCodeLength, afterCodeLength)));
+                addedBlockCondition = true;
+            }
+            codes.push(` {\n`);
+            let prev;
+            for (const childNode of branch.children) {
+                visitNode(childNode, parentEl, prev, componentCtxVar);
+                prev = childNode;
+            }
+            resolveComment();
+            generateAutoImportCompletionCode();
+            codes.push('}\n');
+            if (addedBlockCondition) {
+                blockConditions[blockConditions.length - 1] = `!(${blockConditions[blockConditions.length - 1]})`;
+            }
+        }
+        blockConditions.length = originalBlockConditionsLength;
+    }
+    function visitVForNode(node, parentEl, componentCtxVar) {
+        const { source, value, key, index } = node.parseResult;
+        const leftExpressionRange = value ? { start: (value ?? key ?? index).loc.start.offset, end: (index ?? key ?? value).loc.end.offset } : undefined;
+        const leftExpressionText = leftExpressionRange ? node.loc.source.substring(leftExpressionRange.start - node.loc.start.offset, leftExpressionRange.end - node.loc.start.offset) : undefined;
+        const forBlockVars = [];
+        codes.push(`for (const [`);
+        if (leftExpressionRange && leftExpressionText) {
+            const collectAst = createTsAst(node.parseResult, `const [${leftExpressionText}]`);
+            (0, transform_1.collectVars)(ts, collectAst, forBlockVars);
+            for (const varName of forBlockVars)
+                localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
+            codes.push([leftExpressionText, 'template', leftExpressionRange.start, capabilitiesPresets.all]);
+            formatCodes.push(...createFormatCode(leftExpressionText, leftExpressionRange.start, formatBrackets.normal));
+        }
+        codes.push(`] of __VLS_getVForSourceType`);
+        if (source.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+            codes.push('(', ...createInterpolationCode(source.content, source.loc, source.loc.start.offset, capabilitiesPresets.all, '(', ')'), '!)', // #3102
+            ') {\n');
+            let prev;
+            for (const childNode of node.children) {
+                visitNode(childNode, parentEl, prev, componentCtxVar);
+                prev = childNode;
+            }
+            resolveComment();
+            generateAutoImportCompletionCode();
+            codes.push('}\n');
+            formatCodes.push(...createFormatCode(source.content, source.loc.start.offset, formatBrackets.normal));
+        }
+        for (const varName of forBlockVars)
+            localVars.set(varName, localVars.get(varName) - 1);
+    }
+    function visitElementNode(node, parentEl, componentCtxVar) {
+        codes.push(`{\n`);
+        const startTagOffset = node.loc.start.offset + template.content.substring(node.loc.start.offset).indexOf(node.tag);
+        let endTagOffset = !node.isSelfClosing && template.lang === 'html' ? node.loc.start.offset + node.loc.source.lastIndexOf(node.tag) : undefined;
+        if (endTagOffset === startTagOffset) {
+            endTagOffset = undefined;
+        }
+        let tag = node.tag;
+        let tagOffsets = endTagOffset !== undefined ? [startTagOffset, endTagOffset] : [startTagOffset];
+        let props = node.props;
+        const propsFailedExps = [];
+        const isNamespacedTag = tag.indexOf('.') >= 0;
+        const var_originalComponent = `__VLS_${elementIndex++}`;
+        const var_functionalComponent = `__VLS_${elementIndex++}`;
+        const var_componentInstance = `__VLS_${elementIndex++}`;
+        let dynamicTagExp;
+        if (tag === 'slot') {
+            tagOffsets.length = 0;
+        }
+        else if (tag === 'component' || tag === 'Component') {
+            tagOffsets.length = 0;
+            for (const prop of node.props) {
+                if (prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */ && prop.name === 'is' && prop.value) {
+                    tag = prop.value.content;
+                    tagOffsets = [prop.value.loc.start.offset + prop.value.loc.source.lastIndexOf(tag)];
+                    props = props.filter(p => p !== prop);
+                    break;
+                }
+                else if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */ && prop.name === 'bind' && prop.arg?.loc.source === 'is' && prop.exp) {
+                    dynamicTagExp = prop.exp;
+                    props = props.filter(p => p !== prop);
+                    break;
+                }
+            }
+        }
+        const isIntrinsicElement = nativeTags.has(tag) && tagOffsets.length;
+        if (isIntrinsicElement) {
+            codes.push('const ', var_originalComponent, ` = __VLS_intrinsicElements[`, ...createStringLiteralKeyCode([
+                tag,
+                'template',
+                tagOffsets[0],
+                capabilitiesPresets.diagnosticOnly,
+            ]), '];\n');
+        }
+        else if (isNamespacedTag) {
+            codes.push(`const ${var_originalComponent} = `, ...createInterpolationCode(tag, node.loc, startTagOffset, capabilitiesPresets.all, '', ''), ';\n');
+        }
+        else if (dynamicTagExp) {
+            codes.push(`const ${var_originalComponent} = `, ...createInterpolationCode(dynamicTagExp.loc.source, dynamicTagExp.loc, dynamicTagExp.loc.start.offset, capabilitiesPresets.all, '(', ')'), ';\n');
+        }
+        else {
+            codes.push(`const ${var_originalComponent} = ({} as `);
+            for (const componentName of getPossibleOriginalComponentName(tag)) {
+                codes.push(`'${componentName}' extends keyof typeof __VLS_ctx ? `, `{ '${toCanonicalComponentName(tag)}': typeof __VLS_ctx`, ...createPropertyAccessCode(componentName), ` }: `);
+            }
+            codes.push(`typeof __VLS_resolvedLocalAndGlobalComponents)`, ...(tagOffsets.length
+                ? createPropertyAccessCode([
+                    toCanonicalComponentName(tag),
+                    'template',
+                    [tagOffsets[0], tagOffsets[0] + tag.length],
+                    capabilitiesPresets.diagnosticOnly,
+                ])
+                : createPropertyAccessCode(toCanonicalComponentName(tag))), ';\n');
+        }
+        if (isIntrinsicElement) {
+            codes.push(`const ${var_functionalComponent} = __VLS_elementAsFunctionalComponent(${var_originalComponent});\n`);
+        }
+        else {
+            codes.push(`const ${var_functionalComponent} = __VLS_asFunctionalComponent(`, `${var_originalComponent}, `, `new ${var_originalComponent}({`, ...createPropsCode(node, props, 'extraReferences'), '})', ');\n');
+        }
+        for (const offset of tagOffsets) {
+            if (isNamespacedTag || dynamicTagExp || isIntrinsicElement) {
+                continue;
+            }
+            const key = toCanonicalComponentName(tag);
+            codes.push(`({} as { ${key}: typeof ${var_originalComponent} }).`);
+            codes.push([
+                key,
+                'template',
+                [offset, offset + tag.length],
+                {
+                    ...capabilitiesPresets.tagHover,
+                    ...capabilitiesPresets.diagnosticOnly,
+                },
+            ], ';\n');
+        }
+        if (vueCompilerOptions.strictTemplates) {
+            // with strictTemplates, generate once for props type-checking + instance type
+            codes.push(`const ${var_componentInstance} = ${var_functionalComponent}(`, 
+            // diagnostic start
+            tagOffsets.length ? ['', 'template', tagOffsets[0], capabilitiesPresets.diagnosticOnly]
+                : dynamicTagExp ? ['', 'template', startTagOffset, capabilitiesPresets.diagnosticOnly]
+                    : '', '{ ', ...createPropsCode(node, props, 'normal', propsFailedExps), '}', 
+            // diagnostic end
+            tagOffsets.length ? ['', 'template', tagOffsets[0] + tag.length, capabilitiesPresets.diagnosticOnly]
+                : dynamicTagExp ? ['', 'template', startTagOffset + tag.length, capabilitiesPresets.diagnosticOnly]
+                    : '', `, ...__VLS_functionalComponentArgsRest(${var_functionalComponent}));\n`);
+        }
+        else {
+            // without strictTemplates, this only for instacne type
+            codes.push(`const ${var_componentInstance} = ${var_functionalComponent}(`, '{ ', ...createPropsCode(node, props, 'extraReferences'), '}', `, ...__VLS_functionalComponentArgsRest(${var_functionalComponent}));\n`);
+            // and this for props type-checking
+            codes.push(`({} as (props: __VLS_FunctionalComponentProps<typeof ${var_originalComponent}, typeof ${var_componentInstance}> & Record<string, unknown>) => void)(`, 
+            // diagnostic start
+            tagOffsets.length ? ['', 'template', tagOffsets[0], capabilitiesPresets.diagnosticOnly]
+                : dynamicTagExp ? ['', 'template', startTagOffset, capabilitiesPresets.diagnosticOnly]
+                    : '', '{ ', ...createPropsCode(node, props, 'normal', propsFailedExps), '}', 
+            // diagnostic end
+            tagOffsets.length ? ['', 'template', tagOffsets[0] + tag.length, capabilitiesPresets.diagnosticOnly]
+                : dynamicTagExp ? ['', 'template', startTagOffset + tag.length, capabilitiesPresets.diagnosticOnly]
+                    : '', `);\n`);
+        }
+        if (tag !== 'template' && tag !== 'slot') {
+            componentCtxVar = `__VLS_${elementIndex++}`;
+            const componentEventsVar = `__VLS_${elementIndex++}`;
+            codes.push(`const ${componentCtxVar} = __VLS_pickFunctionalComponentCtx(${var_originalComponent}, ${var_componentInstance})!;\n`);
+            codes.push(`let ${componentEventsVar}!: __VLS_NormalizeEmits<typeof ${componentCtxVar}.emit>;\n`);
+            componentCtxVar2EmitEventsVar.set(componentCtxVar, componentEventsVar);
+            parentEl = node;
+        }
+        //#region
+        // fix https://github.com/vuejs/language-tools/issues/1775
+        for (const failedExp of propsFailedExps) {
+            codes.push(...createInterpolationCode(failedExp.loc.source, failedExp.loc, failedExp.loc.start.offset, capabilitiesPresets.all, '(', ')'), ';\n');
+            const fb = formatBrackets.normal;
+            if (fb) {
+                formatCodes.push(...createFormatCode(failedExp.loc.source, failedExp.loc.start.offset, fb));
+            }
+        }
+        generateInlineCss(props);
+        const vScope = props.find(prop => prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */ && (prop.name === 'scope' || prop.name === 'data'));
+        let inScope = false;
+        let originalConditionsNum = blockConditions.length;
+        if (vScope?.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */ && vScope.exp) {
+            const scopeVar = `__VLS_${elementIndex++}`;
+            const condition = `__VLS_withScope(__VLS_ctx, ${scopeVar})`;
+            codes.push(`const ${scopeVar} = `);
+            codes.push([
+                vScope.exp.loc.source,
+                'template',
+                vScope.exp.loc.start.offset,
+                capabilitiesPresets.all,
+            ]);
+            codes.push(';\n');
+            codes.push(`if (${condition}) {\n`);
+            blockConditions.push(condition);
+            inScope = true;
+        }
+        generateDirectives(node);
+        generateElReferences(node); // <el ref="foo" />
+        if (shouldGenerateScopedClasses) {
+            generateClassScoped(node);
+        }
+        if (componentCtxVar) {
+            generateEvents(node, var_functionalComponent, var_componentInstance, componentCtxVar);
+        }
+        if (node.tag === 'slot') {
+            generateSlot(node, startTagOffset);
+        }
+        if (inScope) {
+            codes.push('}\n');
+            blockConditions.length = originalConditionsNum;
+        }
+        //#endregion
+        const slotDir = node.props.find(p => p.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */ && p.name === 'slot');
+        if (slotDir && componentCtxVar) {
+            if (parentEl) {
+                hasSlotElements.add(parentEl);
+            }
+            const slotBlockVars = [];
+            codes.push(`{\n`);
+            let hasProps = false;
+            if (slotDir?.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                formatCodes.push(...createFormatCode(slotDir.exp.content, slotDir.exp.loc.start.offset, formatBrackets.params));
+                const slotAst = createTsAst(slotDir, `(${slotDir.exp.content}) => {}`);
+                (0, transform_1.collectVars)(ts, slotAst, slotBlockVars);
+                hasProps = true;
+                if (slotDir.exp.content.indexOf(':') === -1) {
+                    codes.push('const [', [
+                        slotDir.exp.content,
+                        'template',
+                        slotDir.exp.loc.start.offset,
+                        capabilitiesPresets.all,
+                    ], `] = __VLS_getSlotParams(`);
+                }
+                else {
+                    codes.push('const ', [
+                        slotDir.exp.content,
+                        'template',
+                        slotDir.exp.loc.start.offset,
+                        capabilitiesPresets.all,
+                    ], ` = __VLS_getSlotParam(`);
+                }
+            }
+            codes.push(['', 'template', (slotDir.arg ?? slotDir).loc.start.offset, capabilitiesPresets.diagnosticOnly], `(${componentCtxVar}.slots!)`, ...((slotDir?.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */ && slotDir.arg.content)
+                ? createPropertyAccessCode([
+                    slotDir.arg.loc.source,
+                    'template',
+                    slotDir.arg.loc.start.offset,
+                    slotDir.arg.isStatic ? capabilitiesPresets.slotName : capabilitiesPresets.all
+                ], slotDir.arg.loc)
+                : createPropertyAccessCode([
+                    'default',
+                    'template',
+                    [slotDir.loc.start.offset, slotDir.loc.start.offset + (slotDir.loc.source.startsWith('#') ? '#'.length : slotDir.loc.source.startsWith('v-slot:') ? 'v-slot:'.length : 0)],
+                    { ...capabilitiesPresets.slotName, completion: false },
+                ])), ['', 'template', (slotDir.arg ?? slotDir).loc.end.offset, capabilitiesPresets.diagnosticOnly]);
+            if (hasProps) {
+                codes.push(')');
+            }
+            codes.push(';\n');
+            slotBlockVars.forEach(varName => {
+                localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
+            });
+            let prev;
+            for (const childNode of node.children) {
+                visitNode(childNode, parentEl, prev, componentCtxVar);
+                prev = childNode;
+            }
+            resolveComment();
+            generateAutoImportCompletionCode();
+            slotBlockVars.forEach(varName => {
+                localVars.set(varName, localVars.get(varName) - 1);
+            });
+            let isStatic = true;
+            if (slotDir?.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                isStatic = slotDir.arg.isStatic;
+            }
+            if (isStatic && slotDir && !slotDir.arg) {
+                codes.push(`${componentCtxVar}.slots!['`, [
+                    '',
+                    'template',
+                    slotDir.loc.start.offset + (slotDir.loc.source.startsWith('#') ? '#'.length : slotDir.loc.source.startsWith('v-slot:') ? 'v-slot:'.length : 0),
+                    { completion: true },
+                ], `'/* empty slot name completion */]\n`);
+            }
+            codes.push(`}\n`);
+        }
+        else {
+            let prev;
+            for (const childNode of node.children) {
+                visitNode(childNode, parentEl, prev, componentCtxVar);
+                prev = childNode;
+            }
+            resolveComment();
+            // fix https://github.com/vuejs/language-tools/issues/932
+            if (!hasSlotElements.has(node) && node.children.length) {
+                codes.push(`(${componentCtxVar}.slots!)`, ...createPropertyAccessCode([
+                    'default',
+                    'template',
+                    [
+                        node.children[0].loc.start.offset,
+                        node.children[node.children.length - 1].loc.end.offset,
+                    ],
+                    { references: true },
+                ]), ';\n');
+            }
+        }
+        codes.push(`}\n`);
+    }
+    function generateEvents(node, componentVar, componentInstanceVar, componentCtxVar) {
+        for (const prop of node.props) {
+            if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.name === 'on'
+                && prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                const eventsVar = componentCtxVar2EmitEventsVar.get(componentCtxVar);
+                const eventVar = `__VLS_${elementIndex++}`;
+                codes.push(`let ${eventVar} = { '${prop.arg.loc.source}': `, `__VLS_pickEvent(${eventsVar}['${prop.arg.loc.source}'], ({} as __VLS_FunctionalComponentProps<typeof ${componentVar}, typeof ${componentInstanceVar}>)`, ...createPropertyAccessCode([
+                    (0, shared_1.camelize)('on-' + prop.arg.loc.source), // onClickOutside
+                    'template',
+                    [prop.arg.loc.start.offset, prop.arg.loc.end.offset],
+                    {
+                        ...capabilitiesPresets.attrReference,
+                        rename: {
+                            // @click-outside -> onClickOutside
+                            normalize(newName) {
+                                return (0, shared_1.camelize)('on-' + newName);
+                            },
+                            // onClickOutside -> @click-outside
+                            apply(newName) {
+                                const hName = (0, shared_2.hyphenateAttr)(newName);
+                                if ((0, shared_2.hyphenateAttr)(newName).startsWith('on-')) {
+                                    return (0, shared_1.camelize)(hName.slice('on-'.length));
+                                }
+                                return newName;
+                            },
+                        },
+                    },
+                ]), `) };\n`, `${eventVar} = { `);
+                if (prop.arg.loc.source.startsWith('[') && prop.arg.loc.source.endsWith(']')) {
+                    codes.push('[(', ...createInterpolationCode(prop.arg.loc.source.slice(1, -1), prop.arg.loc, prop.arg.loc.start.offset + 1, capabilitiesPresets.all, '', ''), ')!]');
+                }
+                else {
+                    codes.push(...createObjectPropertyCode([
+                        prop.arg.loc.source,
+                        'template',
+                        prop.arg.loc.start.offset,
+                        capabilitiesPresets.event,
+                    ], prop.arg.loc));
+                }
+                codes.push(`: `);
+                appendExpressionNode(prop);
+                codes.push(` };\n`);
+            }
+            else if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.name === 'on'
+                && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                // for vue 2 nameless event
+                // https://github.com/johnsoncodehk/vue-tsc/issues/67
+                codes.push(...createInterpolationCode(prop.exp.content, prop.exp.loc, prop.exp.loc.start.offset, capabilitiesPresets.all, '$event => {(', ')}'), ';\n');
+                formatCodes.push(...createFormatCode(prop.exp.content, prop.exp.loc.start.offset, formatBrackets.normal));
+            }
+            function appendExpressionNode(prop) {
+                if (prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                    const ast = createTsAst(prop.exp, prop.exp.content);
+                    let isCompoundExpression = true;
+                    if (ast.getChildCount() === 2) { // with EOF 
+                        ast.forEachChild(child_1 => {
+                            if (ts.isExpressionStatement(child_1)) {
+                                child_1.forEachChild(child_2 => {
+                                    if (ts.isArrowFunction(child_2)) {
+                                        isCompoundExpression = false;
+                                    }
+                                    else if (ts.isIdentifier(child_2)) {
+                                        isCompoundExpression = false;
+                                    }
+                                });
+                            }
+                            else if (ts.isFunctionDeclaration(child_1)) {
+                                isCompoundExpression = false;
+                            }
+                        });
+                    }
+                    let prefix = '(';
+                    let suffix = ')';
+                    let isFirstMapping = true;
+                    if (isCompoundExpression) {
+                        codes.push('$event => {\n');
+                        localVars.set('$event', (localVars.get('$event') ?? 0) + 1);
+                        prefix = '';
+                        suffix = '';
+                        for (const blockCondition of blockConditions) {
+                            prefix += `if (!(${blockCondition})) return;\n`;
+                        }
+                    }
+                    codes.push(...createInterpolationCode(prop.exp.content, prop.exp.loc, prop.exp.loc.start.offset, () => {
+                        if (isCompoundExpression && isFirstMapping) {
+                            isFirstMapping = false;
+                            return capabilitiesPresets.allWithHiddenParam;
+                        }
+                        return capabilitiesPresets.all;
+                    }, prefix, suffix));
+                    if (isCompoundExpression) {
+                        localVars.set('$event', localVars.get('$event') - 1);
+                        codes.push(';\n');
+                        generateAutoImportCompletionCode();
+                        codes.push('}\n');
+                    }
+                    formatCodes.push(...createFormatCode(prop.exp.content, prop.exp.loc.start.offset, isCompoundExpression ? formatBrackets.event : formatBrackets.normal));
+                }
+                else {
+                    codes.push(`() => {}`);
+                }
+            }
+        }
+    }
+    function createPropsCode(node, props, mode, propsFailedExps) {
+        let styleAttrNum = 0;
+        let classAttrNum = 0;
+        if (props.some(prop => prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+            && prop.name === 'bind'
+            && !prop.arg
+            && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */)) {
+            // fix https://github.com/vuejs/language-tools/issues/2166
+            styleAttrNum++;
+            classAttrNum++;
+        }
+        const codes = [];
+        let caps_all = capabilitiesPresets.all;
+        let caps_diagnosticOnly = capabilitiesPresets.diagnosticOnly;
+        let caps_attr = capabilitiesPresets.attr;
+        if (mode === 'extraReferences') {
+            caps_all = {
+                references: caps_all.references,
+                rename: caps_all.rename,
+            };
+            caps_diagnosticOnly = {
+                references: caps_diagnosticOnly.references,
+                rename: caps_diagnosticOnly.rename,
+            };
+            caps_attr = {
+                references: caps_attr.references,
+                rename: caps_attr.rename,
+            };
+        }
+        codes.push(`...{ `);
+        for (const prop of props) {
+            if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.name === 'on'
+                && prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                codes.push(...createObjectPropertyCode((0, shared_1.camelize)('on-' + prop.arg.loc.source)), ': {} as any, ');
+            }
+        }
+        codes.push(`}, `);
+        const canCamelize = !nativeTags.has(node.tag) || node.tagType === 1 /* CompilerDOM.ElementTypes.COMPONENT */;
+        for (const prop of props) {
+            if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && (prop.name === 'bind' || prop.name === 'model')
+                && (prop.name === 'model' || prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */)
+                && (!prop.exp || prop.exp.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */)) {
+                let attrNameText = prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                    ? prop.arg.constType === 3 /* CompilerDOM.ConstantTypes.CAN_STRINGIFY */
+                        ? prop.arg.content
+                        : prop.arg.loc.source
+                    : getModelValuePropName(node, vueCompilerOptions.target, vueCompilerOptions);
+                if (prop.modifiers.some(m => m === 'prop' || m === 'attr')) {
+                    attrNameText = attrNameText?.substring(1);
+                }
+                if (attrNameText === undefined
+                    || vueCompilerOptions.dataAttributes.some(pattern => (0, minimatch_1.minimatch)(attrNameText, pattern))
+                    || (attrNameText === 'style' && ++styleAttrNum >= 2)
+                    || (attrNameText === 'class' && ++classAttrNum >= 2)
+                    || (attrNameText === 'name' && node.tag === 'slot') // #2308
+                ) {
+                    if (prop.exp && prop.exp.constType !== 3 /* CompilerDOM.ConstantTypes.CAN_STRINGIFY */) {
+                        propsFailedExps?.push(prop.exp);
+                    }
+                    continue;
+                }
+                let camelized = false;
+                if (canCamelize
+                    && (!prop.arg || (prop.arg.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */ && prop.arg.isStatic)) // isStatic
+                    && (0, shared_2.hyphenateAttr)(attrNameText) === attrNameText
+                    && !vueCompilerOptions.htmlAttributes.some(pattern => (0, minimatch_1.minimatch)(attrNameText, pattern))) {
+                    attrNameText = (0, shared_1.camelize)(attrNameText);
+                    camelized = true;
+                }
+                // camelize name
+                codes.push([
+                    '',
+                    'template',
+                    prop.loc.start.offset,
+                    caps_diagnosticOnly,
+                ]);
+                if (!prop.arg) {
+                    codes.push(...createObjectPropertyCode([
+                        attrNameText,
+                        'template',
+                        [prop.loc.start.offset, prop.loc.start.offset + prop.loc.source.indexOf('=')],
+                        caps_attr,
+                    ], prop.loc.name_1 ?? (prop.loc.name_1 = {})));
+                }
+                else if (prop.exp?.constType === 3 /* CompilerDOM.ConstantTypes.CAN_STRINGIFY */) {
+                    codes.push(...createObjectPropertyCode([
+                        attrNameText,
+                        'template',
+                        [prop.arg.loc.start.offset, prop.arg.loc.start.offset + attrNameText.length], // patch style attr,
+                        {
+                            ...caps_attr,
+                            rename: {
+                                normalize: shared_1.camelize,
+                                apply: camelized ? shared_2.hyphenateAttr : noEditApply,
+                            },
+                        },
+                    ], prop.loc.name_2 ?? (prop.loc.name_2 = {})));
+                }
+                else {
+                    codes.push(...createObjectPropertyCode([
+                        attrNameText,
+                        'template',
+                        [prop.arg.loc.start.offset, prop.arg.loc.end.offset],
+                        {
+                            ...caps_attr,
+                            rename: {
+                                normalize: shared_1.camelize,
+                                apply: camelized ? shared_2.hyphenateAttr : noEditApply,
+                            },
+                        },
+                    ], prop.loc.name_2 ?? (prop.loc.name_2 = {})));
+                }
+                codes.push(': (');
+                if (prop.exp && !(prop.exp.constType === 3 /* CompilerDOM.ConstantTypes.CAN_STRINGIFY */)) { // style='z-index: 2' will compile to {'z-index':'2'}
+                    codes.push(...createInterpolationCode(prop.exp.loc.source, prop.exp.loc, prop.exp.loc.start.offset, caps_all, '(', ')'));
+                    if (mode === 'normal') {
+                        formatCodes.push(...createFormatCode(prop.exp.loc.source, prop.exp.loc.start.offset, formatBrackets.normal));
+                    }
+                }
+                else {
+                    codes.push('{}');
+                }
+                codes.push(')');
+                codes.push([
+                    '',
+                    'template',
+                    prop.loc.end.offset,
+                    caps_diagnosticOnly,
+                ]);
+                codes.push(', ');
+            }
+            else if (prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */) {
+                let attrNameText = prop.name;
+                if (vueCompilerOptions.dataAttributes.some(pattern => (0, minimatch_1.minimatch)(attrNameText, pattern))
+                    || (attrNameText === 'style' && ++styleAttrNum >= 2)
+                    || (attrNameText === 'class' && ++classAttrNum >= 2)
+                    || (attrNameText === 'name' && node.tag === 'slot') // #2308
+                ) {
+                    continue;
+                }
+                let camelized = false;
+                if (canCamelize
+                    && (0, shared_2.hyphenateAttr)(prop.name) === prop.name
+                    && !vueCompilerOptions.htmlAttributes.some(pattern => (0, minimatch_1.minimatch)(attrNameText, pattern))) {
+                    attrNameText = (0, shared_1.camelize)(prop.name);
+                    camelized = true;
+                }
+                // camelize name
+                codes.push([
+                    '',
+                    'template',
+                    prop.loc.start.offset,
+                    caps_diagnosticOnly,
+                ]);
+                codes.push(...createObjectPropertyCode([
+                    attrNameText,
+                    'template',
+                    [prop.loc.start.offset, prop.loc.start.offset + prop.name.length],
+                    {
+                        ...caps_attr,
+                        rename: {
+                            normalize: shared_1.camelize,
+                            apply: camelized ? shared_2.hyphenateAttr : noEditApply,
+                        },
+                    },
+                ], prop.loc.name_1 ?? (prop.loc.name_1 = {})));
+                codes.push(': (');
+                if (prop.value) {
+                    generateAttrValue(prop.value);
+                }
+                else {
+                    codes.push('true');
+                }
+                codes.push(')');
+                codes.push([
+                    '',
+                    'template',
+                    prop.loc.end.offset,
+                    caps_diagnosticOnly,
+                ]);
+                codes.push(', ');
+            }
+            else if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.name === 'bind'
+                && !prop.arg
+                && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                codes.push(['', 'template', prop.exp.loc.start.offset, capabilitiesPresets.diagnosticOnly], '...', ...createInterpolationCode(prop.exp.content, prop.exp.loc, prop.exp.loc.start.offset, caps_all, '(', ')'), ['', 'template', prop.exp.loc.end.offset, capabilitiesPresets.diagnosticOnly], ', ');
+                if (mode === 'normal') {
+                    formatCodes.push(...createFormatCode(prop.exp.content, prop.exp.loc.start.offset, formatBrackets.normal));
+                }
+            }
+            else {
+                // comment this line to avoid affecting comments in prop expressions
+                // tsCodeGen.addText("/* " + [prop.type, prop.name, prop.arg?.loc.source, prop.exp?.loc.source, prop.loc.source].join(", ") + " */ ");
+            }
+        }
+        return codes;
+        function generateAttrValue(attrNode) {
+            const char = attrNode.loc.source.startsWith("'") ? "'" : '"';
+            codes.push(char);
+            let start = attrNode.loc.start.offset;
+            let end = attrNode.loc.end.offset;
+            let content = attrNode.loc.source;
+            if ((content.startsWith('"') && content.endsWith('"'))
+                || (content.startsWith("'") && content.endsWith("'"))) {
+                start++;
+                end--;
+                content = content.slice(1, -1);
+            }
+            codes.push([
+                toUnicodeIfNeed(content),
+                'template',
+                [start, end],
+                caps_all,
+            ]);
+            codes.push(char);
+        }
+    }
+    function generateInlineCss(props) {
+        for (const prop of props) {
+            if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.name === 'bind'
+                && prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                && prop.arg.content === 'style'
+                && prop.exp.constType === 3 /* CompilerDOM.ConstantTypes.CAN_STRINGIFY */) {
+                const endCrt = prop.arg.loc.source[prop.arg.loc.source.length - 1]; // " | '
+                const start = prop.arg.loc.source.indexOf(endCrt) + 1;
+                const end = prop.arg.loc.source.lastIndexOf(endCrt);
+                const content = prop.arg.loc.source.substring(start, end);
+                cssCodes.push(`x { `);
+                cssCodes.push([
+                    content,
+                    'template',
+                    prop.arg.loc.start.offset + start,
+                    capabilitiesPresets.all,
+                ]);
+                cssCodes.push(` }\n`);
+            }
+        }
+    }
+    function generateDirectives(node) {
+        for (const prop of node.props) {
+            if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.name !== 'slot'
+                && prop.name !== 'on'
+                && prop.name !== 'model'
+                && prop.name !== 'bind'
+                && (prop.name !== 'scope' && prop.name !== 'data')) {
+                accessedGlobalVariables.add((0, shared_1.camelize)('v-' + prop.name));
+                if (prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */ && !prop.arg.isStatic) {
+                    codes.push(...createInterpolationCode(prop.arg.content, prop.arg.loc, prop.arg.loc.start.offset + prop.arg.loc.source.indexOf(prop.arg.content), capabilitiesPresets.all, '(', ')'), ';\n');
+                    formatCodes.push(...createFormatCode(prop.arg.content, prop.arg.loc.start.offset, formatBrackets.normal));
+                }
+                codes.push([
+                    '',
+                    'template',
+                    prop.loc.start.offset,
+                    capabilitiesPresets.diagnosticOnly,
+                ], `__VLS_directiveFunction(__VLS_ctx.`, [
+                    (0, shared_1.camelize)('v-' + prop.name),
+                    'template',
+                    [prop.loc.start.offset, prop.loc.start.offset + 'v-'.length + prop.name.length],
+                    {
+                        ...capabilitiesPresets.noDiagnostic,
+                        completion: {
+                            // fix https://github.com/vuejs/language-tools/issues/1905
+                            additional: true,
+                        },
+                        rename: {
+                            normalize: shared_1.camelize,
+                            apply: getPropRenameApply(prop.name),
+                        },
+                    },
+                ], ')', '(');
+                if (prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                    codes.push(['', 'template', prop.exp.loc.start.offset, capabilitiesPresets.diagnosticOnly], ...createInterpolationCode(prop.exp.content, prop.exp.loc, prop.exp.loc.start.offset, capabilitiesPresets.all, '(', ')'), ['', 'template', prop.exp.loc.end.offset, capabilitiesPresets.diagnosticOnly]);
+                    formatCodes.push(...createFormatCode(prop.exp.content, prop.exp.loc.start.offset, formatBrackets.normal));
+                }
+                else {
+                    codes.push('undefined');
+                }
+                codes.push(')', ['', 'template', prop.loc.end.offset, capabilitiesPresets.diagnosticOnly], ';\n');
+            }
+        }
+    }
+    function generateElReferences(node) {
+        for (const prop of node.props) {
+            if (prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */
+                && prop.name === 'ref'
+                && prop.value) {
+                codes.push('// @ts-ignore\n', ...createInterpolationCode(prop.value.content, prop.value.loc, prop.value.loc.start.offset + 1, capabilitiesPresets.refAttr, '(', ')'), ';\n');
+            }
+        }
+    }
+    function generateClassScoped(node) {
+        for (const prop of node.props) {
+            if (prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */
+                && prop.name === 'class'
+                && prop.value) {
+                let startOffset = prop.value.loc.start.offset;
+                let tempClassName = '';
+                for (const char of (prop.value.loc.source + ' ')) {
+                    if (char.trim() === '' || char === '"' || char === "'") {
+                        if (tempClassName !== '') {
+                            scopedClasses.push({ className: tempClassName, offset: startOffset });
+                            startOffset += tempClassName.length;
+                            tempClassName = '';
+                        }
+                        startOffset += char.length;
+                    }
+                    else {
+                        tempClassName += char;
+                    }
+                }
+            }
+            else if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                && prop.arg.content === 'class') {
+                codes.push(`__VLS_styleScopedClasses = (`);
+                codes.push([
+                    prop.exp.content,
+                    'template',
+                    prop.exp.loc.start.offset,
+                    capabilitiesPresets.scopedClassName,
+                ]);
+                codes.push(`);\n`);
+            }
+        }
+    }
+    function generateSlot(node, startTagOffset) {
+        const varSlot = `__VLS_${elementIndex++}`;
+        const slotNameExpNode = getSlotNameExpNode();
+        if (hasScriptSetupSlots) {
+            codes.push('__VLS_normalizeSlot(', ['', 'template', node.loc.start.offset, capabilitiesPresets.diagnosticOnly], `${slotsAssignName ?? '__VLS_slots'}[`, ['', 'template', node.loc.start.offset, capabilitiesPresets.diagnosticOnly], slotNameExpNode?.content ?? `('${getSlotName()}' as const)`, ['', 'template', node.loc.end.offset, capabilitiesPresets.diagnosticOnly], ']', ['', 'template', node.loc.end.offset, capabilitiesPresets.diagnosticOnly], ')?.(', ['', 'template', startTagOffset, capabilitiesPresets.diagnosticOnly], '{\n');
+        }
+        else {
+            codes.push(`var ${varSlot} = {\n`);
+        }
+        for (const prop of node.props) {
+            if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && !prop.arg
+                && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                codes.push('...', ...createInterpolationCode(prop.exp.content, prop.exp.loc, prop.exp.loc.start.offset, capabilitiesPresets.attrReference, '(', ')'), ',\n');
+            }
+            else if (prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+                && prop.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                && prop.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */
+                && prop.arg.content !== 'name') {
+                codes.push(...createObjectPropertyCode([
+                    prop.arg.content,
+                    'template',
+                    [prop.arg.loc.start.offset, prop.arg.loc.end.offset],
+                    {
+                        ...capabilitiesPresets.slotProp,
+                        rename: {
+                            normalize: shared_1.camelize,
+                            apply: getPropRenameApply(prop.arg.content),
+                        },
+                    },
+                ], prop.arg.loc), ': ', ...createInterpolationCode(prop.exp.content, prop.exp.loc, prop.exp.loc.start.offset, capabilitiesPresets.attrReference, '(', ')'), ',\n');
+            }
+            else if (prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */
+                && prop.name !== 'name' // slot name
+            ) {
+                codes.push(...createObjectPropertyCode([
+                    prop.name,
+                    'template',
+                    prop.loc.start.offset,
+                    {
+                        ...capabilitiesPresets.attr,
+                        rename: {
+                            normalize: shared_1.camelize,
+                            apply: getPropRenameApply(prop.name),
+                        },
+                    },
+                ], prop.loc), ': (', prop.value !== undefined ? `"${toUnicodeIfNeed(prop.value.content)}"` : 'true', '),\n');
+            }
+        }
+        codes.push('}', hasScriptSetupSlots ? ['', 'template', startTagOffset + node.tag.length, capabilitiesPresets.diagnosticOnly] : '', hasScriptSetupSlots ? `);\n` : `;\n`);
+        if (hasScriptSetupSlots) {
+            return;
+        }
+        if (slotNameExpNode) {
+            const varSlotExp = `__VLS_${elementIndex++}`;
+            codes.push(`var ${varSlotExp} = `);
+            if (typeof slotNameExpNode === 'string') {
+                codes.push(slotNameExpNode);
+            }
+            else {
+                codes.push(...createInterpolationCode(slotNameExpNode.content, slotNameExpNode, undefined, undefined, '(', ')'));
+            }
+            codes.push(` as const;\n`);
+            slotExps.set(varSlotExp, {
+                varName: varSlot,
+            });
+        }
+        else {
+            const slotName = getSlotName();
+            slots.set(slotName, {
+                varName: varSlot,
+                loc: [startTagOffset, startTagOffset + node.tag.length],
+                nodeLoc: node.loc,
+            });
+        }
+        function getSlotName() {
+            for (const prop2 of node.props) {
+                if (prop2.name === 'name' && prop2.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */ && prop2.value) {
+                    if (prop2.value.content) {
+                        return prop2.value.content;
+                    }
+                }
+            }
+            return 'default';
+        }
+        function getSlotNameExpNode() {
+            for (const prop2 of node.props) {
+                if (prop2.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */ && prop2.name === 'bind' && prop2.arg?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */ && prop2.arg.content === 'name') {
+                    if (prop2.exp?.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                        return prop2.exp;
+                    }
+                }
+            }
+        }
+    }
+    function generateAutoImportCompletionCode() {
+        if (!tempVars.length)
+            return;
+        codes.push('// @ts-ignore\n'); // #2304
+        codes.push('[');
+        for (const _vars of tempVars) {
+            for (const v of _vars) {
+                codes.push([v.text, 'template', v.offset, { completion: { additional: true } }]);
+                codes.push(',');
+            }
+        }
+        codes.push('];\n');
+        tempVars.length = 0;
+    }
+    // functional like
+    function createFormatCode(mapCode, sourceOffset, formatWrapper) {
+        return [
+            formatWrapper[0],
+            [mapCode, 'template', sourceOffset, { completion: true /* fix vue-autoinsert-parentheses not working */ }],
+            formatWrapper[1],
+            '\n',
+        ];
+    }
+    function createObjectPropertyCode(a, astHolder) {
+        const aStr = typeof a === 'string' ? a : a[0];
+        if (validTsVarReg.test(aStr)) {
+            return [a];
+        }
+        else if (aStr.startsWith('[') && aStr.endsWith(']') && astHolder) {
+            const range = typeof a === 'object' ? a[2] : undefined;
+            const data = typeof a === 'object' ? a[3] : undefined;
+            return createInterpolationCode(aStr, astHolder, range && typeof range === 'object' ? range[0] : range, data, '', '');
+        }
+        else {
+            return createStringLiteralKeyCode(a);
+        }
+    }
+    function createInterpolationCode(_code, astHolder, start, data, prefix, suffix) {
+        const code = prefix + _code + suffix;
+        const ast = createTsAst(astHolder, code);
+        const codes = [];
+        const vars = (0, transform_1.walkInterpolationFragment)(ts, code, ast, (frag, fragOffset, isJustForErrorMapping) => {
+            if (fragOffset === undefined) {
+                codes.push(frag);
+            }
+            else {
+                fragOffset -= prefix.length;
+                let addSuffix = '';
+                const overLength = fragOffset + frag.length - _code.length;
+                if (overLength > 0) {
+                    addSuffix = frag.substring(frag.length - overLength);
+                    frag = frag.substring(0, frag.length - overLength);
+                }
+                if (fragOffset < 0) {
+                    codes.push(frag.substring(0, -fragOffset));
+                    frag = frag.substring(-fragOffset);
+                    fragOffset = 0;
+                }
+                if (start !== undefined && data !== undefined) {
+                    codes.push([
+                        frag,
+                        'template',
+                        start + fragOffset,
+                        isJustForErrorMapping
+                            ? capabilitiesPresets.diagnosticOnly
+                            : typeof data === 'function' ? data() : data,
+                    ]);
+                }
+                else {
+                    codes.push(frag);
+                }
+                codes.push(addSuffix);
+            }
+        }, localVars, accessedGlobalVariables, vueCompilerOptions);
+        if (start !== undefined) {
+            for (const v of vars) {
+                v.offset = start + v.offset - prefix.length;
+            }
+            if (vars.length) {
+                tempVars.push(vars);
+            }
+        }
+        return codes;
+    }
+    function createTsAst(astHolder, text) {
+        if (astHolder.__volar_ast_text !== text) {
+            astHolder.__volar_ast_text = text;
+            astHolder.__volar_ast = ts.createSourceFile('/a.ts', text, ts.ScriptTarget.ESNext);
+        }
+        return astHolder.__volar_ast;
+    }
+    function createPropertyAccessCode(a, astHolder) {
+        const aStr = typeof a === 'string' ? a : a[0];
+        if (!compilerOptions.noPropertyAccessFromIndexSignature && validTsVarReg.test(aStr)) {
+            return ['.', a];
+        }
+        else if (aStr.startsWith('[') && aStr.endsWith(']')) {
+            if (typeof a === 'string' || !astHolder) {
+                return [a];
+            }
+            else {
+                return createInterpolationCode(a[0], astHolder, typeof a[2] === 'number' ? a[2] : a[2][0], a[3], '', '');
+            }
+        }
+        else {
+            return ['[', ...createStringLiteralKeyCode(a), ']'];
+        }
+    }
+    function createStringLiteralKeyCode(a) {
+        let codes = ['"', a, '"'];
+        if (typeof a === 'object') {
+            const start = typeof a[2] === 'number' ? a[2] : a[2][0];
+            const end = typeof a[2] === 'number' ? a[2] : a[2][1];
+            codes = [
+                ['', 'template', start, a[3]],
+                ...codes,
+                ['', 'template', end, a[3]],
+            ];
+        }
+        return codes;
+    }
+}
+exports.generate = generate;
+;
+function walkElementNodes(node, cb) {
+    if (node.type === 0 /* CompilerDOM.NodeTypes.ROOT */) {
+        for (const child of node.children) {
+            walkElementNodes(child, cb);
+        }
+    }
+    else if (node.type === 1 /* CompilerDOM.NodeTypes.ELEMENT */) {
+        const patchForNode = getVForNode(node);
+        if (patchForNode) {
+            walkElementNodes(patchForNode, cb);
+        }
+        else {
+            cb(node);
+            for (const child of node.children) {
+                walkElementNodes(child, cb);
+            }
+        }
+    }
+    else if (node.type === 9 /* CompilerDOM.NodeTypes.IF */) {
+        // v-if / v-else-if / v-else
+        for (let i = 0; i < node.branches.length; i++) {
+            const branch = node.branches[i];
+            for (const childNode of branch.children) {
+                walkElementNodes(childNode, cb);
+            }
+        }
+    }
+    else if (node.type === 11 /* CompilerDOM.NodeTypes.FOR */) {
+        // v-for
+        for (const child of node.children) {
+            walkElementNodes(child, cb);
+        }
+    }
+}
+exports.walkElementNodes = walkElementNodes;
+function toUnicodeIfNeed(str) {
+    if (str.indexOf('\\') === -1 && str.indexOf('\n') === -1) {
+        return str;
+    }
+    return toUnicode(str);
+}
+function toUnicode(str) {
+    return str.split('').map(value => {
+        const temp = value.charCodeAt(0).toString(16).padStart(4, '0');
+        if (temp.length > 2) {
+            return '\\u' + temp;
+        }
+        return value;
+    }).join('');
+}
+function camelizeComponentName(newName) {
+    return (0, shared_1.camelize)('-' + newName);
+}
+function getTagRenameApply(oldName) {
+    return oldName === (0, shared_2.hyphenateTag)(oldName) ? shared_2.hyphenateTag : noEditApply;
+}
+function getPropRenameApply(oldName) {
+    return oldName === (0, shared_2.hyphenateAttr)(oldName) ? shared_2.hyphenateAttr : noEditApply;
+}
+function noEditApply(n) {
+    return n;
+}
+function getModelValuePropName(node, vueVersion, vueCompilerOptions) {
+    for (const modelName in vueCompilerOptions.experimentalModelPropName) {
+        const tags = vueCompilerOptions.experimentalModelPropName[modelName];
+        for (const tag in tags) {
+            if (node.tag === tag || node.tag === (0, shared_2.hyphenateTag)(tag)) {
+                const v = tags[tag];
+                if (typeof v === 'object') {
+                    const arr = Array.isArray(v) ? v : [v];
+                    for (const attrs of arr) {
+                        let failed = false;
+                        for (const attr in attrs) {
+                            const attrNode = node.props.find(prop => prop.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */ && prop.name === attr);
+                            if (!attrNode || attrNode.value?.content !== attrs[attr]) {
+                                failed = true;
+                                break;
+                            }
+                        }
+                        if (!failed) {
+                            // all match
+                            return modelName || undefined;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    for (const modelName in vueCompilerOptions.experimentalModelPropName) {
+        const tags = vueCompilerOptions.experimentalModelPropName[modelName];
+        for (const tag in tags) {
+            if (node.tag === tag || node.tag === (0, shared_2.hyphenateTag)(tag)) {
+                const attrs = tags[tag];
+                if (attrs === true) {
+                    return modelName || undefined;
+                }
+            }
+        }
+    }
+    return vueVersion < 3 ? 'value' : 'modelValue';
+}
+// TODO: track https://github.com/vuejs/vue-next/issues/3498
+function getVForNode(node) {
+    const forDirective = node.props.find((prop) => prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+        && prop.name === 'for');
+    if (forDirective) {
+        let forNode;
+        CompilerDOM.processFor(node, forDirective, transformContext, _forNode => {
+            forNode = { ..._forNode };
+            return undefined;
+        });
+        if (forNode) {
+            forNode.children = [{
+                    ...node,
+                    props: node.props.filter(prop => prop !== forDirective),
+                }];
+            return forNode;
+        }
+    }
+}
+function getVIfNode(node) {
+    const forDirective = node.props.find((prop) => prop.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */
+        && prop.name === 'if');
+    if (forDirective) {
+        let ifNode;
+        CompilerDOM.processIf(node, forDirective, transformContext, _ifNode => {
+            ifNode = { ..._ifNode };
+            return undefined;
+        });
+        if (ifNode) {
+            for (const branch of ifNode.branches) {
+                branch.children = [{
+                        ...node,
+                        props: node.props.filter(prop => prop !== forDirective),
+                    }];
+            }
+            return ifNode;
+        }
+    }
+}
+//# sourceMappingURL=template.js.map

+ 16 - 0
node_modules/@vue/language-core/out/index.d.ts

@@ -0,0 +1,16 @@
+export * from './generators/template';
+export * from './languageModule';
+export * from './parsers/scriptSetupRanges';
+export * from './plugins';
+export * from './virtualFile/vueFile';
+export * from './types';
+export * from './utils/ts';
+export * from './utils/parseSfc';
+export * as scriptRanges from './parsers/scriptRanges';
+export * as sharedTypes from './utils/globalTypes';
+export * from './utils/shared';
+export { tsCodegen } from './plugins/vue-tsx';
+export * from '@volar/language-core';
+export * from '@volar/source-map';
+export type * as CompilerDOM from '@vue/compiler-dom';
+//# sourceMappingURL=index.d.ts.map

+ 33 - 0
node_modules/@vue/language-core/out/index.js

@@ -0,0 +1,33 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.tsCodegen = exports.sharedTypes = exports.scriptRanges = void 0;
+__exportStar(require("./generators/template"), exports);
+__exportStar(require("./languageModule"), exports);
+__exportStar(require("./parsers/scriptSetupRanges"), exports);
+__exportStar(require("./plugins"), exports);
+__exportStar(require("./virtualFile/vueFile"), exports);
+__exportStar(require("./types"), exports);
+__exportStar(require("./utils/ts"), exports);
+__exportStar(require("./utils/parseSfc"), exports);
+exports.scriptRanges = require("./parsers/scriptRanges");
+exports.sharedTypes = require("./utils/globalTypes");
+__exportStar(require("./utils/shared"), exports);
+var vue_tsx_1 = require("./plugins/vue-tsx");
+Object.defineProperty(exports, "tsCodegen", { enumerable: true, get: function () { return vue_tsx_1.tsCodegen; } });
+__exportStar(require("@volar/language-core"), exports);
+__exportStar(require("@volar/source-map"), exports);
+//# sourceMappingURL=index.js.map

+ 10 - 0
node_modules/@vue/language-core/out/languageModule.d.ts

@@ -0,0 +1,10 @@
+import type { Language } from '@volar/language-core';
+import { VueFile } from './virtualFile/vueFile';
+import { VueCompilerOptions } from './types';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+export declare function createVueLanguage(ts: typeof import('typescript/lib/tsserverlibrary'), compilerOptions?: ts.CompilerOptions, _vueCompilerOptions?: Partial<VueCompilerOptions>, codegenStack?: boolean): Language<VueFile>;
+/**
+ * @deprecated planed to remove in 2.0, please use createVueLanguage instead of
+ */
+export declare function createLanguages(ts: typeof import('typescript/lib/tsserverlibrary'), compilerOptions?: ts.CompilerOptions, vueCompilerOptions?: Partial<VueCompilerOptions>, codegenStack?: boolean): Language[];
+//# sourceMappingURL=languageModule.d.ts.map

+ 99 - 0
node_modules/@vue/language-core/out/languageModule.js

@@ -0,0 +1,99 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createLanguages = exports.createVueLanguage = void 0;
+const path = require("path-browserify");
+const plugins_1 = require("./plugins");
+const vueFile_1 = require("./virtualFile/vueFile");
+const sharedTypes = require("./utils/globalTypes");
+const ts_1 = require("./utils/ts");
+const fileRegistries = [];
+function getVueFileRegistry(key, plugins) {
+    let fileRegistry = fileRegistries.find(r => r.key === key
+        && r.plugins.length === plugins.length
+        && r.plugins.every(plugin => plugins.includes(plugin)))?.files;
+    if (!fileRegistry) {
+        fileRegistry = new Map();
+        fileRegistries.push({
+            key: key,
+            plugins: plugins,
+            files: fileRegistry,
+        });
+    }
+    return fileRegistry;
+}
+function createVueLanguage(ts, compilerOptions = {}, _vueCompilerOptions = {}, codegenStack = false) {
+    const vueCompilerOptions = (0, ts_1.resolveVueCompilerOptions)(_vueCompilerOptions);
+    const plugins = (0, plugins_1.getDefaultVueLanguagePlugins)(ts, compilerOptions, vueCompilerOptions, codegenStack);
+    const keys = [
+        ...Object.keys(vueCompilerOptions)
+            .sort()
+            .filter(key => key !== 'plugins')
+            .map(key => [key, vueCompilerOptions[key]]),
+        [...new Set(plugins.map(plugin => plugin.requiredCompilerOptions ?? []).flat())]
+            .sort()
+            .map(key => [key, compilerOptions[key]]),
+    ];
+    const fileRegistry = getVueFileRegistry(JSON.stringify(keys), _vueCompilerOptions.plugins ?? []);
+    const allowLanguageIds = new Set(['vue']);
+    if (vueCompilerOptions.extensions.includes('.md')) {
+        allowLanguageIds.add('markdown');
+    }
+    if (vueCompilerOptions.extensions.includes('.html')) {
+        allowLanguageIds.add('html');
+    }
+    return {
+        createVirtualFile(fileName, snapshot, languageId) {
+            if ((languageId && allowLanguageIds.has(languageId))
+                || (!languageId && vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext)))) {
+                if (fileRegistry.has(fileName)) {
+                    const reusedVueFile = fileRegistry.get(fileName);
+                    reusedVueFile.update(snapshot);
+                    return reusedVueFile;
+                }
+                const vueFile = new vueFile_1.VueFile(fileName, snapshot, vueCompilerOptions, plugins, ts, codegenStack);
+                fileRegistry.set(fileName, vueFile);
+                return vueFile;
+            }
+        },
+        updateVirtualFile(sourceFile, snapshot) {
+            sourceFile.update(snapshot);
+        },
+        resolveHost(host) {
+            const sharedTypesSnapshot = ts.ScriptSnapshot.fromString(sharedTypes.getTypesCode(vueCompilerOptions));
+            const sharedTypesFileName = path.join(host.rootPath, sharedTypes.baseName);
+            return {
+                ...host,
+                resolveModuleName(moduleName, impliedNodeFormat) {
+                    if (impliedNodeFormat === ts.ModuleKind.ESNext && vueCompilerOptions.extensions.some(ext => moduleName.endsWith(ext))) {
+                        return `${moduleName}.js`;
+                    }
+                    return host.resolveModuleName?.(moduleName, impliedNodeFormat) ?? moduleName;
+                },
+                getScriptFileNames() {
+                    return [
+                        sharedTypesFileName,
+                        ...host.getScriptFileNames(),
+                    ];
+                },
+                getScriptSnapshot(fileName) {
+                    if (fileName === sharedTypesFileName) {
+                        return sharedTypesSnapshot;
+                    }
+                    return host.getScriptSnapshot(fileName);
+                },
+            };
+        },
+    };
+}
+exports.createVueLanguage = createVueLanguage;
+/**
+ * @deprecated planed to remove in 2.0, please use createVueLanguage instead of
+ */
+function createLanguages(ts, compilerOptions = {}, vueCompilerOptions = {}, codegenStack = false) {
+    return [
+        createVueLanguage(ts, compilerOptions, vueCompilerOptions, codegenStack),
+        ...vueCompilerOptions.experimentalAdditionalLanguageModules?.map(module => require(module)) ?? [],
+    ];
+}
+exports.createLanguages = createLanguages;
+//# sourceMappingURL=languageModule.js.map

+ 16 - 0
node_modules/@vue/language-core/out/parsers/scriptRanges.d.ts

@@ -0,0 +1,16 @@
+import type { TextRange } from '../types';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+export interface ScriptRanges extends ReturnType<typeof parseScriptRanges> {
+}
+export declare function parseScriptRanges(ts: typeof import('typescript/lib/tsserverlibrary'), ast: ts.SourceFile, hasScriptSetup: boolean, withNode: boolean): {
+    exportDefault: (TextRange & {
+        expression: TextRange;
+        args: TextRange;
+        argsNode: ts.ObjectLiteralExpression | undefined;
+        componentsOption: TextRange | undefined;
+        componentsOptionNode: ts.ObjectLiteralExpression | undefined;
+        nameOption: TextRange | undefined;
+    }) | undefined;
+    bindings: TextRange[];
+};
+//# sourceMappingURL=scriptRanges.d.ts.map

+ 58 - 0
node_modules/@vue/language-core/out/parsers/scriptRanges.js

@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseScriptRanges = void 0;
+const scriptSetupRanges_1 = require("./scriptSetupRanges");
+function parseScriptRanges(ts, ast, hasScriptSetup, withNode) {
+    let exportDefault;
+    const bindings = hasScriptSetup ? (0, scriptSetupRanges_1.parseBindingRanges)(ts, ast) : [];
+    ast.forEachChild(raw => {
+        if (ts.isExportAssignment(raw)) {
+            let node = raw;
+            while (ts.isAsExpression(node.expression) || ts.isParenthesizedExpression(node.expression)) { // fix https://github.com/vuejs/language-tools/issues/1882
+                node = node.expression;
+            }
+            let obj;
+            if (ts.isObjectLiteralExpression(node.expression)) {
+                obj = node.expression;
+            }
+            else if (ts.isCallExpression(node.expression) && node.expression.arguments.length) {
+                const arg0 = node.expression.arguments[0];
+                if (ts.isObjectLiteralExpression(arg0)) {
+                    obj = arg0;
+                }
+            }
+            if (obj) {
+                let componentsOptionNode;
+                let nameOptionNode;
+                obj.forEachChild(node => {
+                    if (ts.isPropertyAssignment(node) && ts.isIdentifier(node.name)) {
+                        if (node.name.escapedText === 'components' && ts.isObjectLiteralExpression(node.initializer)) {
+                            componentsOptionNode = node.initializer;
+                        }
+                        if (node.name.escapedText === 'name') {
+                            nameOptionNode = node.initializer;
+                        }
+                    }
+                });
+                exportDefault = {
+                    ..._getStartEnd(raw),
+                    expression: _getStartEnd(node.expression),
+                    args: _getStartEnd(obj),
+                    argsNode: withNode ? obj : undefined,
+                    componentsOption: componentsOptionNode ? _getStartEnd(componentsOptionNode) : undefined,
+                    componentsOptionNode: withNode ? componentsOptionNode : undefined,
+                    nameOption: nameOptionNode ? _getStartEnd(nameOptionNode) : undefined,
+                };
+            }
+        }
+    });
+    return {
+        exportDefault,
+        bindings,
+    };
+    function _getStartEnd(node) {
+        return (0, scriptSetupRanges_1.getStartEnd)(node, ast);
+    }
+}
+exports.parseScriptRanges = parseScriptRanges;
+//# sourceMappingURL=scriptRanges.js.map

+ 56 - 0
node_modules/@vue/language-core/out/parsers/scriptSetupRanges.d.ts

@@ -0,0 +1,56 @@
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import type { VueCompilerOptions, TextRange } from '../types';
+export interface ScriptSetupRanges extends ReturnType<typeof parseScriptSetupRanges> {
+}
+export declare function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserverlibrary'), ast: ts.SourceFile, vueCompilerOptions: VueCompilerOptions): {
+    leadingCommentEndOffset: number;
+    importSectionEndOffset: number;
+    bindings: TextRange[];
+    props: {
+        name?: string | undefined;
+        define?: (TextRange & {
+            arg?: TextRange | undefined;
+            typeArg?: TextRange | undefined;
+        } & {
+            statement: TextRange;
+        }) | undefined;
+        withDefaults?: (TextRange & {
+            arg?: TextRange | undefined;
+        }) | undefined;
+    };
+    slots: {
+        name?: string | undefined;
+        define?: (TextRange & {
+            arg?: TextRange | undefined;
+            typeArg?: TextRange | undefined;
+        }) | undefined;
+    };
+    emits: {
+        name?: string | undefined;
+        define?: (TextRange & {
+            arg?: TextRange | undefined;
+            typeArg?: TextRange | undefined;
+        }) | undefined;
+    };
+    expose: {
+        name?: string | undefined;
+        define?: (TextRange & {
+            arg?: TextRange | undefined;
+            typeArg?: TextRange | undefined;
+        }) | undefined;
+    };
+    defineProp: {
+        name: TextRange | undefined;
+        nameIsString: boolean;
+        type: TextRange | undefined;
+        defaultValue: TextRange | undefined;
+        required: boolean;
+    }[];
+};
+export declare function parseBindingRanges(ts: typeof import('typescript/lib/tsserverlibrary'), sourceFile: ts.SourceFile): TextRange[];
+export declare function findBindingVars(ts: typeof import('typescript/lib/tsserverlibrary'), left: ts.BindingName, sourceFile: ts.SourceFile): TextRange[];
+export declare function getStartEnd(node: ts.Node, sourceFile: ts.SourceFile): {
+    start: number;
+    end: number;
+};
+//# sourceMappingURL=scriptSetupRanges.d.ts.map

+ 292 - 0
node_modules/@vue/language-core/out/parsers/scriptSetupRanges.js

@@ -0,0 +1,292 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getStartEnd = exports.findBindingVars = exports.parseBindingRanges = exports.parseScriptSetupRanges = void 0;
+function parseScriptSetupRanges(ts, ast, vueCompilerOptions) {
+    let foundNonImportExportNode = false;
+    let importSectionEndOffset = 0;
+    const props = {};
+    const slots = {};
+    const emits = {};
+    const expose = {};
+    const definePropProposalA = vueCompilerOptions.experimentalDefinePropProposal === 'kevinEdition' || ast.getFullText().trimStart().startsWith('// @experimentalDefinePropProposal=kevinEdition');
+    const definePropProposalB = vueCompilerOptions.experimentalDefinePropProposal === 'johnsonEdition' || ast.getFullText().trimStart().startsWith('// @experimentalDefinePropProposal=johnsonEdition');
+    const defineProp = [];
+    const bindings = parseBindingRanges(ts, ast);
+    const text = ast.getFullText();
+    const leadingCommentEndOffset = ts.getLeadingCommentRanges(text, 0)?.reverse()[0].end ?? 0;
+    ast.forEachChild(node => {
+        const isTypeExport = (ts.isTypeAliasDeclaration(node) || ts.isInterfaceDeclaration(node)) && node.modifiers?.some(mod => mod.kind === ts.SyntaxKind.ExportKeyword);
+        if (!foundNonImportExportNode
+            && !ts.isImportDeclaration(node)
+            && !isTypeExport
+            && !ts.isEmptyStatement(node)
+            // fix https://github.com/vuejs/language-tools/issues/1223
+            && !ts.isImportEqualsDeclaration(node)) {
+            const commentRanges = ts.getLeadingCommentRanges(text, node.getFullStart());
+            if (commentRanges?.length) {
+                const commentRange = commentRanges.sort((a, b) => a.pos - b.pos)[0];
+                importSectionEndOffset = commentRange.pos;
+            }
+            else {
+                importSectionEndOffset = node.getStart(ast);
+            }
+            foundNonImportExportNode = true;
+        }
+    });
+    ast.forEachChild(child => visitNode(child, [ast]));
+    return {
+        leadingCommentEndOffset,
+        importSectionEndOffset,
+        bindings,
+        props,
+        slots,
+        emits,
+        expose,
+        defineProp,
+    };
+    function _getStartEnd(node) {
+        return getStartEnd(node, ast);
+    }
+    function parseDefineFunction(node) {
+        return {
+            ..._getStartEnd(node),
+            arg: node.arguments.length ? _getStartEnd(node.arguments[0]) : undefined,
+            typeArg: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
+        };
+    }
+    function visitNode(node, parents) {
+        const parent = parents[parents.length - 1];
+        if (ts.isCallExpression(node)
+            && ts.isIdentifier(node.expression)) {
+            const callText = node.expression.getText(ast);
+            if (vueCompilerOptions.macros.defineModel.includes(callText)) {
+                let name;
+                let options;
+                if (node.arguments.length >= 2) {
+                    name = _getStartEnd(node.arguments[0]);
+                    options = node.arguments[1];
+                }
+                else if (node.arguments.length >= 1) {
+                    if (ts.isStringLiteral(node.arguments[0])) {
+                        name = _getStartEnd(node.arguments[0]);
+                    }
+                    else {
+                        options = node.arguments[0];
+                    }
+                }
+                let required = false;
+                if (options && ts.isObjectLiteralExpression(options)) {
+                    for (const property of options.properties) {
+                        if (ts.isPropertyAssignment(property) && ts.isIdentifier(property.name) && property.name.getText(ast) === 'required' && property.initializer.kind === ts.SyntaxKind.TrueKeyword) {
+                            required = true;
+                            break;
+                        }
+                    }
+                }
+                defineProp.push({
+                    name,
+                    nameIsString: true,
+                    type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
+                    defaultValue: undefined,
+                    required,
+                });
+            }
+            else if (callText === 'defineProp') {
+                if (definePropProposalA) {
+                    let required = false;
+                    if (node.arguments.length >= 2) {
+                        const secondArg = node.arguments[1];
+                        if (ts.isObjectLiteralExpression(secondArg)) {
+                            for (const property of secondArg.properties) {
+                                if (ts.isPropertyAssignment(property) && ts.isIdentifier(property.name) && property.name.getText(ast) === 'required' && property.initializer.kind === ts.SyntaxKind.TrueKeyword) {
+                                    required = true;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    if (node.arguments.length >= 1) {
+                        defineProp.push({
+                            name: _getStartEnd(node.arguments[0]),
+                            nameIsString: true,
+                            type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
+                            defaultValue: undefined,
+                            required,
+                        });
+                    }
+                    else if (ts.isVariableDeclaration(parent)) {
+                        defineProp.push({
+                            name: _getStartEnd(parent.name),
+                            nameIsString: false,
+                            type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
+                            defaultValue: undefined,
+                            required,
+                        });
+                    }
+                }
+                else if (definePropProposalB && ts.isVariableDeclaration(parent)) {
+                    defineProp.push({
+                        name: _getStartEnd(parent.name),
+                        nameIsString: false,
+                        defaultValue: node.arguments.length >= 1 ? _getStartEnd(node.arguments[0]) : undefined,
+                        type: node.typeArguments?.length ? _getStartEnd(node.typeArguments[0]) : undefined,
+                        required: node.arguments.length >= 2 && node.arguments[1].kind === ts.SyntaxKind.TrueKeyword,
+                    });
+                }
+            }
+            else if (vueCompilerOptions.macros.defineSlots.includes(callText)) {
+                slots.define = parseDefineFunction(node);
+                if (ts.isVariableDeclaration(parent)) {
+                    slots.name = parent.name.getText(ast);
+                }
+            }
+            else if (vueCompilerOptions.macros.defineEmits.includes(callText)) {
+                emits.define = parseDefineFunction(node);
+                if (ts.isVariableDeclaration(parent)) {
+                    emits.name = parent.name.getText(ast);
+                }
+            }
+            else if (vueCompilerOptions.macros.defineExpose.includes(callText)) {
+                expose.define = parseDefineFunction(node);
+            }
+            else if (vueCompilerOptions.macros.defineProps.includes(callText)) {
+                let statementRange;
+                for (let i = parents.length - 1; i >= 0; i--) {
+                    if (ts.isStatement(parents[i])) {
+                        const statement = parents[i];
+                        statement.forEachChild(child => {
+                            const range = _getStartEnd(child);
+                            statementRange ??= range;
+                            statementRange.end = range.end;
+                        });
+                        break;
+                    }
+                }
+                if (!statementRange) {
+                    statementRange = _getStartEnd(node);
+                }
+                props.define = {
+                    ...parseDefineFunction(node),
+                    statement: statementRange,
+                };
+                if (ts.isVariableDeclaration(parent)) {
+                    props.name = parent.name.getText(ast);
+                }
+                if (node.arguments.length) {
+                    props.define.arg = _getStartEnd(node.arguments[0]);
+                }
+                if (node.typeArguments?.length) {
+                    props.define.typeArg = _getStartEnd(node.typeArguments[0]);
+                }
+            }
+            else if (vueCompilerOptions.macros.withDefaults.includes(callText)) {
+                props.withDefaults = _getStartEnd(node);
+                if (node.arguments.length >= 2) {
+                    const arg = node.arguments[1];
+                    props.withDefaults.arg = _getStartEnd(arg);
+                }
+                if (ts.isVariableDeclaration(parent)) {
+                    props.name = parent.name.getText(ast);
+                }
+            }
+        }
+        node.forEachChild(child => {
+            parents.push(node);
+            visitNode(child, parents);
+            parents.pop();
+        });
+    }
+}
+exports.parseScriptSetupRanges = parseScriptSetupRanges;
+function parseBindingRanges(ts, sourceFile) {
+    const bindings = [];
+    sourceFile.forEachChild(node => {
+        if (ts.isVariableStatement(node)) {
+            for (const node_2 of node.declarationList.declarations) {
+                const vars = _findBindingVars(node_2.name);
+                for (const _var of vars) {
+                    bindings.push(_var);
+                }
+            }
+        }
+        else if (ts.isFunctionDeclaration(node)) {
+            if (node.name && ts.isIdentifier(node.name)) {
+                bindings.push(_getStartEnd(node.name));
+            }
+        }
+        else if (ts.isClassDeclaration(node)) {
+            if (node.name) {
+                bindings.push(_getStartEnd(node.name));
+            }
+        }
+        else if (ts.isEnumDeclaration(node)) {
+            bindings.push(_getStartEnd(node.name));
+        }
+        if (ts.isImportDeclaration(node)) {
+            if (node.importClause && !node.importClause.isTypeOnly) {
+                if (node.importClause.name) {
+                    bindings.push(_getStartEnd(node.importClause.name));
+                }
+                if (node.importClause.namedBindings) {
+                    if (ts.isNamedImports(node.importClause.namedBindings)) {
+                        for (const element of node.importClause.namedBindings.elements) {
+                            bindings.push(_getStartEnd(element.name));
+                        }
+                    }
+                    else if (ts.isNamespaceImport(node.importClause.namedBindings)) {
+                        bindings.push(_getStartEnd(node.importClause.namedBindings.name));
+                    }
+                }
+            }
+        }
+    });
+    return bindings;
+    function _getStartEnd(node) {
+        return getStartEnd(node, sourceFile);
+    }
+    function _findBindingVars(left) {
+        return findBindingVars(ts, left, sourceFile);
+    }
+}
+exports.parseBindingRanges = parseBindingRanges;
+function findBindingVars(ts, left, sourceFile) {
+    const vars = [];
+    worker(left);
+    return vars;
+    function worker(_node) {
+        if (ts.isIdentifier(_node)) {
+            vars.push(getStartEnd(_node, sourceFile));
+        }
+        // { ? } = ...
+        // [ ? ] = ...
+        else if (ts.isObjectBindingPattern(_node) || ts.isArrayBindingPattern(_node)) {
+            for (const property of _node.elements) {
+                if (ts.isBindingElement(property)) {
+                    worker(property.name);
+                }
+            }
+        }
+        // { foo: ? } = ...
+        else if (ts.isPropertyAssignment(_node)) {
+            worker(_node.initializer);
+        }
+        // { foo } = ...
+        else if (ts.isShorthandPropertyAssignment(_node)) {
+            vars.push(getStartEnd(_node.name, sourceFile));
+        }
+        // { ...? } = ...
+        // [ ...? ] = ...
+        else if (ts.isSpreadAssignment(_node) || ts.isSpreadElement(_node)) {
+            worker(_node.expression);
+        }
+    }
+}
+exports.findBindingVars = findBindingVars;
+function getStartEnd(node, sourceFile) {
+    return {
+        start: node.getStart(sourceFile),
+        end: node.getEnd(),
+    };
+}
+exports.getStartEnd = getStartEnd;
+//# sourceMappingURL=scriptSetupRanges.js.map

+ 25 - 0
node_modules/@vue/language-core/out/plugins.d.ts

@@ -0,0 +1,25 @@
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { VueCompilerOptions } from './types';
+import * as CompilerDOM from '@vue/compiler-dom';
+export declare function getDefaultVueLanguagePlugins(ts: typeof import('typescript/lib/tsserverlibrary'), compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions, codegenStack: boolean): {
+    version: 1;
+    name?: string | undefined;
+    order?: number | undefined;
+    requiredCompilerOptions?: string[] | undefined;
+    parseSFC?(fileName: string, content: string): import("@vue/compiler-sfc").SFCParseResult | undefined;
+    updateSFC?(oldResult: import("@vue/compiler-sfc").SFCParseResult, textChange: {
+        start: number;
+        end: number;
+        newText: string;
+    }): import("@vue/compiler-sfc").SFCParseResult | undefined;
+    resolveTemplateCompilerOptions?(options: CompilerDOM.CompilerOptions): CompilerDOM.CompilerOptions;
+    compileSFCTemplate?(lang: string, template: string, options: CompilerDOM.CompilerOptions): CompilerDOM.CodegenResult | undefined;
+    updateSFCTemplate?(oldResult: CompilerDOM.CodegenResult, textChange: {
+        start: number;
+        end: number;
+        newText: string;
+    }): CompilerDOM.CodegenResult | undefined;
+    getEmbeddedFileNames?(fileName: string, sfc: import("./types").Sfc): string[];
+    resolveEmbeddedFile?(fileName: string, sfc: import("./types").Sfc, embeddedFile: import("./virtualFile/embeddedFile").VueEmbeddedFile): void;
+}[];
+//# sourceMappingURL=plugins.d.ts.map

+ 58 - 0
node_modules/@vue/language-core/out/plugins.js

@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getDefaultVueLanguagePlugins = void 0;
+const file_html_1 = require("./plugins/file-html");
+const file_md_1 = require("./plugins/file-md");
+const file_vue_1 = require("./plugins/file-vue");
+const vue_sfc_customblocks_1 = require("./plugins/vue-sfc-customblocks");
+const vue_sfc_scripts_1 = require("./plugins/vue-sfc-scripts");
+const vue_sfc_styles_1 = require("./plugins/vue-sfc-styles");
+const vue_sfc_template_1 = require("./plugins/vue-sfc-template");
+const vue_template_html_1 = require("./plugins/vue-template-html");
+const vue_tsx_1 = require("./plugins/vue-tsx");
+const CompilerDOM = require("@vue/compiler-dom");
+const CompilerVue2 = require("./utils/vue2TemplateCompiler");
+function getDefaultVueLanguagePlugins(ts, compilerOptions, vueCompilerOptions, codegenStack) {
+    const plugins = [
+        file_md_1.default, // .md for VitePress
+        file_html_1.default, // .html for PetiteVue
+        file_vue_1.default, // .vue and others for Vue
+        vue_template_html_1.default,
+        vue_sfc_styles_1.default,
+        vue_sfc_customblocks_1.default,
+        vue_sfc_scripts_1.default,
+        vue_sfc_template_1.default,
+        vue_tsx_1.default,
+        ...vueCompilerOptions.plugins,
+    ];
+    const pluginCtx = {
+        modules: {
+            '@vue/compiler-dom': vueCompilerOptions.target < 3
+                ? {
+                    ...CompilerDOM,
+                    compile: CompilerVue2.compile,
+                }
+                : CompilerDOM,
+            typescript: ts,
+        },
+        compilerOptions,
+        vueCompilerOptions,
+        codegenStack,
+    };
+    const pluginInstances = plugins
+        .map(plugin => plugin(pluginCtx))
+        .sort((a, b) => {
+        const aOrder = a.order ?? 0;
+        const bOrder = b.order ?? 0;
+        return aOrder - bOrder;
+    });
+    return pluginInstances.filter((plugin) => {
+        const valid = plugin.version >= 1 && plugin.version < 2;
+        if (!valid) {
+            console.warn(`Plugin ${JSON.stringify(plugin.name)} API version incompatible, expected 1.x but got ${JSON.stringify(plugin.version)}`);
+        }
+        return valid;
+    });
+}
+exports.getDefaultVueLanguagePlugins = getDefaultVueLanguagePlugins;
+//# sourceMappingURL=plugins.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/file-html.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=file-html.d.ts.map

+ 81 - 0
node_modules/@vue/language-core/out/plugins/file-html.js

@@ -0,0 +1,81 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const sfcBlockReg = /\<(script|style)\b([\s\S]*?)\>([\s\S]*?)\<\/\1\>/g;
+const langReg = /\blang\s*=\s*(['\"]?)(\S*)\b\1/;
+const plugin = () => {
+    return {
+        version: 1,
+        parseSFC(fileName, content) {
+            if (fileName.endsWith('.html')) {
+                let sfc = {
+                    descriptor: {
+                        filename: fileName,
+                        source: content,
+                        template: null,
+                        script: null,
+                        scriptSetup: null,
+                        styles: [],
+                        customBlocks: [],
+                        cssVars: [],
+                        shouldForceReload: () => false,
+                        slotted: false,
+                    },
+                    errors: [],
+                };
+                let templateContent = content;
+                for (const match of content.matchAll(sfcBlockReg)) {
+                    const matchText = match[0];
+                    const tag = match[1];
+                    const attrs = match[2];
+                    const lang = attrs.match(langReg)?.[2];
+                    const content = match[3];
+                    const contentStart = match.index + matchText.indexOf(content);
+                    if (tag === 'style') {
+                        sfc.descriptor.styles.push({
+                            attrs: {},
+                            content,
+                            loc: {
+                                start: { column: -1, line: -1, offset: contentStart },
+                                end: { column: -1, line: -1, offset: contentStart + content.length },
+                                source: content,
+                            },
+                            type: 'style',
+                            lang,
+                        });
+                    }
+                    // ignore `<script src="...">`
+                    else if (tag === 'script' && attrs.indexOf('src=') === -1) {
+                        let type = attrs.indexOf('type=') >= 0 ? 'scriptSetup' : 'script';
+                        sfc.descriptor[type] = {
+                            attrs: {},
+                            content,
+                            loc: {
+                                start: { column: -1, line: -1, offset: contentStart },
+                                end: { column: -1, line: -1, offset: contentStart + content.length },
+                                source: content,
+                            },
+                            type: 'script',
+                            lang,
+                        };
+                    }
+                    templateContent = templateContent.substring(0, match.index) + ' '.repeat(matchText.length) + templateContent.substring(match.index + matchText.length);
+                }
+                sfc.descriptor.template = {
+                    attrs: {},
+                    content: templateContent,
+                    loc: {
+                        start: { column: -1, line: -1, offset: 0 },
+                        end: { column: -1, line: -1, offset: templateContent.length },
+                        source: templateContent,
+                    },
+                    type: 'template',
+                    ast: {},
+                };
+                return sfc;
+            }
+            ;
+        }
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=file-html.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/file-md.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=file-md.d.ts.map

+ 71 - 0
node_modules/@vue/language-core/out/plugins/file-md.js

@@ -0,0 +1,71 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const source_map_1 = require("@volar/source-map");
+const parseSfc_1 = require("../utils/parseSfc");
+const codeblockReg = /```[\s\S]+?```/g;
+const inlineCodeblockReg = /`[^\n`]+?`/g;
+const scriptSetupReg = /\\\<[\s\S]+?\>\n?/g;
+const sfcBlockReg = /\<(script|style)\b[\s\S]*?\>([\s\S]*?)\<\/\1\>/g;
+const angleBracketReg = /\<\S*\:\S*\>/g;
+const linkReg = /\[[\s\S]*?\]\([\s\S]*?\)/g;
+const codeSnippetImportReg = /^\s*<<<\s*.+/gm;
+const plugin = () => {
+    return {
+        version: 1,
+        parseSFC(fileName, content) {
+            if (fileName.endsWith('.md')) {
+                content = content
+                    // code block
+                    .replace(codeblockReg, match => '```' + ' '.repeat(match.length - 6) + '```')
+                    // inline code block
+                    .replace(inlineCodeblockReg, match => `\`${' '.repeat(match.length - 2)}\``)
+                    // # \<script setup>
+                    .replace(scriptSetupReg, match => ' '.repeat(match.length))
+                    // <<< https://vitepress.dev/guide/markdown#import-code-snippets
+                    .replace(codeSnippetImportReg, match => ' '.repeat(match.length));
+                const codes = [];
+                for (const match of content.matchAll(sfcBlockReg)) {
+                    if (match.index !== undefined) {
+                        const matchText = match[0];
+                        codes.push([matchText, undefined, match.index]);
+                        codes.push('\n\n');
+                        content = content.substring(0, match.index) + ' '.repeat(matchText.length) + content.substring(match.index + matchText.length);
+                    }
+                }
+                content = content
+                    // angle bracket: <http://foo.com>
+                    .replace(angleBracketReg, match => ' '.repeat(match.length))
+                    // [foo](http://foo.com)
+                    .replace(linkReg, match => ' '.repeat(match.length));
+                codes.push('<template>\n');
+                codes.push([content, undefined, 0]);
+                codes.push('\n</template>');
+                const file2VueSourceMap = new source_map_1.SourceMap((0, source_map_1.buildMappings)(codes));
+                const sfc = (0, parseSfc_1.parse)((0, source_map_1.toString)(codes));
+                if (sfc.descriptor.template) {
+                    transformRange(sfc.descriptor.template);
+                }
+                if (sfc.descriptor.script) {
+                    transformRange(sfc.descriptor.script);
+                }
+                if (sfc.descriptor.scriptSetup) {
+                    transformRange(sfc.descriptor.scriptSetup);
+                }
+                for (const style of sfc.descriptor.styles) {
+                    transformRange(style);
+                }
+                for (const customBlock of sfc.descriptor.customBlocks) {
+                    transformRange(customBlock);
+                }
+                return sfc;
+                function transformRange(block) {
+                    block.loc.start.offset = file2VueSourceMap.toSourceOffset(block.loc.start.offset)?.[0] ?? -1;
+                    block.loc.end.offset = file2VueSourceMap.toSourceOffset(block.loc.end.offset)?.[0] ?? -1;
+                }
+            }
+            ;
+        }
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=file-md.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/file-vue.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=file-vue.d.ts.map

+ 47 - 0
node_modules/@vue/language-core/out/plugins/file-vue.js

@@ -0,0 +1,47 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const parseSfc_1 = require("../utils/parseSfc");
+const plugin = (_ctx) => {
+    return {
+        version: 1,
+        parseSFC(_fileName, content) {
+            return (0, parseSfc_1.parse)(content);
+        },
+        updateSFC(sfc, change) {
+            const blocks = [
+                sfc.descriptor.template,
+                sfc.descriptor.script,
+                sfc.descriptor.scriptSetup,
+                ...sfc.descriptor.styles,
+                ...sfc.descriptor.customBlocks,
+            ].filter((block) => !!block);
+            const hitBlock = blocks.find(block => change.start >= block.loc.start.offset && change.end <= block.loc.end.offset);
+            if (!hitBlock) {
+                return;
+            }
+            const oldContent = hitBlock.content;
+            const newContent = hitBlock.content =
+                hitBlock.content.substring(0, change.start - hitBlock.loc.start.offset)
+                    + change.newText
+                    + hitBlock.content.substring(change.end - hitBlock.loc.start.offset);
+            // #3449
+            const endTagRegex = new RegExp(`</\\s*${hitBlock.type}\\s*>`);
+            const insertedEndTag = !!oldContent.match(endTagRegex) !== !!newContent.match(endTagRegex);
+            if (insertedEndTag) {
+                return;
+            }
+            const lengthDiff = change.newText.length - (change.end - change.start);
+            for (const block of blocks) {
+                if (block.loc.start.offset > change.end) {
+                    block.loc.start.offset += lengthDiff;
+                }
+                if (block.loc.end.offset >= change.end) {
+                    block.loc.end.offset += lengthDiff;
+                }
+            }
+            return sfc;
+        },
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=file-vue.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-customblocks.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=vue-sfc-customblocks.d.ts.map

+ 33 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-customblocks.js

@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const language_core_1 = require("@volar/language-core");
+const customBlockReg = /^(.*)\.customBlock_([^_]+)_(\d+)\.([^.]+)$/;
+const plugin = () => {
+    return {
+        version: 1,
+        getEmbeddedFileNames(fileName, sfc) {
+            const names = [];
+            for (let i = 0; i < sfc.customBlocks.length; i++) {
+                const customBlock = sfc.customBlocks[i];
+                names.push(fileName + '.customBlock_' + customBlock.type + '_' + i + '.' + customBlock.lang);
+            }
+            return names;
+        },
+        resolveEmbeddedFile(_fileName, sfc, embeddedFile) {
+            const match = embeddedFile.fileName.match(customBlockReg);
+            if (match) {
+                const index = parseInt(match[3]);
+                const customBlock = sfc.customBlocks[index];
+                embeddedFile.capabilities = language_core_1.FileCapabilities.full;
+                embeddedFile.content.push([
+                    customBlock.content,
+                    customBlock.name,
+                    0,
+                    language_core_1.FileRangeCapabilities.full,
+                ]);
+            }
+        },
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=vue-sfc-customblocks.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-scripts.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=vue-sfc-scripts.d.ts.map

+ 42 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-scripts.js

@@ -0,0 +1,42 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const language_core_1 = require("@volar/language-core");
+const scriptFormatReg = /^(.*)\.script_format\.([^.]+)$/;
+const scriptSetupFormatReg = /^(.*)\.scriptSetup_format\.([^.]+)$/;
+const plugin = () => {
+    return {
+        version: 1,
+        getEmbeddedFileNames(fileName, sfc) {
+            const names = [];
+            if (sfc.script) {
+                names.push(fileName + '.script_format.' + sfc.script.lang);
+            }
+            if (sfc.scriptSetup) {
+                names.push(fileName + '.scriptSetup_format.' + sfc.scriptSetup.lang);
+            }
+            return names;
+        },
+        resolveEmbeddedFile(_fileName, sfc, embeddedFile) {
+            const scriptMatch = embeddedFile.fileName.match(scriptFormatReg);
+            const scriptSetupMatch = embeddedFile.fileName.match(scriptSetupFormatReg);
+            const script = scriptMatch ? sfc.script : scriptSetupMatch ? sfc.scriptSetup : undefined;
+            if (script) {
+                embeddedFile.kind = language_core_1.FileKind.TextFile;
+                embeddedFile.capabilities = {
+                    ...language_core_1.FileCapabilities.full,
+                    diagnostic: false,
+                    codeAction: false,
+                    inlayHint: false,
+                };
+                embeddedFile.content.push([
+                    script.content,
+                    script.name,
+                    0,
+                    {},
+                ]);
+            }
+        },
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=vue-sfc-scripts.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-styles.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=vue-sfc-styles.d.ts.map

+ 33 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-styles.js

@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const language_core_1 = require("@volar/language-core");
+const styleReg = /^(.*)\.style_(\d+)\.([^.]+)$/;
+const plugin = () => {
+    return {
+        version: 1,
+        getEmbeddedFileNames(fileName, sfc) {
+            const names = [];
+            for (let i = 0; i < sfc.styles.length; i++) {
+                const style = sfc.styles[i];
+                names.push(fileName + '.style_' + i + '.' + style.lang);
+            }
+            return names;
+        },
+        resolveEmbeddedFile(_fileName, sfc, embeddedFile) {
+            const match = embeddedFile.fileName.match(styleReg);
+            if (match) {
+                const index = parseInt(match[2]);
+                const style = sfc.styles[index];
+                embeddedFile.capabilities = language_core_1.FileCapabilities.full;
+                embeddedFile.content.push([
+                    style.content,
+                    style.name,
+                    0,
+                    language_core_1.FileRangeCapabilities.full,
+                ]);
+            }
+        },
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=vue-sfc-styles.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-template.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=vue-sfc-template.d.ts.map

+ 29 - 0
node_modules/@vue/language-core/out/plugins/vue-sfc-template.js

@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const language_core_1 = require("@volar/language-core");
+const templateReg = /^(.*)\.template\.([^.]+)$/;
+const plugin = () => {
+    return {
+        version: 1,
+        getEmbeddedFileNames(fileName, sfc) {
+            if (sfc.template) {
+                return [fileName + '.template.' + sfc.template.lang];
+            }
+            return [];
+        },
+        resolveEmbeddedFile(_fileName, sfc, embeddedFile) {
+            const match = embeddedFile.fileName.match(templateReg);
+            if (match && sfc.template) {
+                embeddedFile.capabilities = language_core_1.FileCapabilities.full;
+                embeddedFile.content.push([
+                    sfc.template.content,
+                    sfc.template.name,
+                    0,
+                    language_core_1.FileRangeCapabilities.full,
+                ]);
+            }
+        },
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=vue-sfc-template.js.map

+ 4 - 0
node_modules/@vue/language-core/out/plugins/vue-template-html.d.ts

@@ -0,0 +1,4 @@
+import { VueLanguagePlugin } from '../types';
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=vue-template-html.d.ts.map

+ 169 - 0
node_modules/@vue/language-core/out/plugins/vue-template-html.js

@@ -0,0 +1,169 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const plugin = ({ modules }) => {
+    return {
+        version: 1,
+        compileSFCTemplate(lang, template, options) {
+            if (lang === 'html') {
+                const compiler = modules['@vue/compiler-dom'];
+                return compiler.compile(template, {
+                    ...options,
+                    comments: true,
+                });
+            }
+        },
+        updateSFCTemplate(oldResult, change) {
+            const CompilerDOM = modules['@vue/compiler-dom'];
+            const lengthDiff = change.newText.length - (change.end - change.start);
+            let hitNodes = [];
+            if (tryUpdateNode(oldResult.ast) && hitNodes.length) {
+                hitNodes = hitNodes.sort((a, b) => a.loc.source.length - b.loc.source.length);
+                const hitNode = hitNodes[0];
+                if (hitNode.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                    return oldResult;
+                }
+            }
+            function tryUpdateNode(node) {
+                if (withinChangeRange(node.loc)) {
+                    hitNodes.push(node);
+                }
+                if (tryUpdateNodeLoc(node.loc)) {
+                    if (node.type === 0 /* CompilerDOM.NodeTypes.ROOT */) {
+                        for (const child of node.children) {
+                            if (!tryUpdateNode(child)) {
+                                return false;
+                            }
+                        }
+                    }
+                    else if (node.type === 1 /* CompilerDOM.NodeTypes.ELEMENT */) {
+                        if (withinChangeRange(node.loc)) {
+                            // if not self closing, should not hit tag name
+                            const start = node.loc.start.offset + 2;
+                            const end = node.loc.start.offset + node.loc.source.lastIndexOf('</');
+                            if (!withinChangeRange({ start: { offset: start }, end: { offset: end }, source: '' })) {
+                                return false;
+                            }
+                        }
+                        for (const prop of node.props) {
+                            if (!tryUpdateNode(prop)) {
+                                return false;
+                            }
+                        }
+                        for (const child of node.children) {
+                            if (!tryUpdateNode(child)) {
+                                return false;
+                            }
+                        }
+                    }
+                    else if (node.type === 6 /* CompilerDOM.NodeTypes.ATTRIBUTE */) {
+                        if (node.value && !tryUpdateNode(node.value)) {
+                            return false;
+                        }
+                    }
+                    else if (node.type === 7 /* CompilerDOM.NodeTypes.DIRECTIVE */) {
+                        if (node.arg && withinChangeRange(node.arg.loc) && node.name === 'slot') {
+                            return false;
+                        }
+                        if (node.exp && withinChangeRange(node.exp.loc) && node.name === 'for') { // #2266
+                            return false;
+                        }
+                        if (node.arg && !tryUpdateNode(node.arg)) {
+                            return false;
+                        }
+                        if (node.exp && !tryUpdateNode(node.exp)) {
+                            return false;
+                        }
+                    }
+                    else if (node.type === 12 /* CompilerDOM.NodeTypes.TEXT_CALL */) {
+                        if (!tryUpdateNode(node.content)) {
+                            return false;
+                        }
+                    }
+                    else if (node.type === 8 /* CompilerDOM.NodeTypes.COMPOUND_EXPRESSION */) {
+                        for (const childNode of node.children) {
+                            if (typeof childNode === 'object') {
+                                if (!tryUpdateNode(childNode)) {
+                                    return false;
+                                }
+                            }
+                        }
+                    }
+                    else if (node.type === 9 /* CompilerDOM.NodeTypes.IF */) {
+                        for (const branch of node.branches) {
+                            if (branch.condition && !tryUpdateNode(branch.condition)) {
+                                return false;
+                            }
+                            for (const child of branch.children) {
+                                if (!tryUpdateNode(child)) {
+                                    return false;
+                                }
+                            }
+                        }
+                    }
+                    else if (node.type === 11 /* CompilerDOM.NodeTypes.FOR */) {
+                        for (const child of [
+                            node.parseResult.source,
+                            node.parseResult.value,
+                            node.parseResult.key,
+                            node.parseResult.index,
+                        ]) {
+                            if (child && !tryUpdateNode(child)) {
+                                return false;
+                            }
+                        }
+                        for (const child of node.children) {
+                            if (!tryUpdateNode(child)) {
+                                return false;
+                            }
+                        }
+                    }
+                    else if (node.type === 5 /* CompilerDOM.NodeTypes.INTERPOLATION */) {
+                        if (!tryUpdateNode(node.content)) {
+                            return false;
+                        }
+                    }
+                    else if (node.type === 4 /* CompilerDOM.NodeTypes.SIMPLE_EXPRESSION */) {
+                        if (withinChangeRange(node.loc)) { // TODO: review this (slot name?)
+                            if (node.isStatic) {
+                                return false;
+                            }
+                            else {
+                                node.content = node.loc.source;
+                            }
+                        }
+                    }
+                    return true;
+                }
+                return false;
+            }
+            function tryUpdateNodeLoc(loc) {
+                delete loc.__endOffset;
+                if (withinChangeRange(loc)) {
+                    loc.source =
+                        loc.source.substring(0, change.start - loc.start.offset)
+                            + change.newText
+                            + loc.source.substring(change.end - loc.start.offset);
+                    loc.__endOffset = loc.end.offset;
+                    loc.end.offset += lengthDiff;
+                    return true;
+                }
+                else if (change.end <= loc.start.offset) {
+                    loc.__endOffset = loc.end.offset;
+                    loc.start.offset += lengthDiff;
+                    loc.end.offset += lengthDiff;
+                    return true;
+                }
+                else if (change.start >= loc.end.offset) {
+                    return true; // no need update
+                }
+                return false;
+            }
+            function withinChangeRange(loc) {
+                const originalLocEnd = loc.__endOffset ?? loc.end.offset;
+                return change.start >= loc.start.offset && change.end <= originalLocEnd;
+            }
+        },
+    };
+};
+exports.default = plugin;
+//# sourceMappingURL=vue-template-html.js.map

+ 80 - 0
node_modules/@vue/language-core/out/plugins/vue-tsx.d.ts

@@ -0,0 +1,80 @@
+import { Sfc, VueLanguagePlugin } from '../types';
+import * as muggle from 'muggle-string';
+export declare const tsCodegen: WeakMap<Sfc, {
+    scriptRanges: () => {
+        exportDefault: (import("../types").TextRange & {
+            expression: import("../types").TextRange;
+            args: import("../types").TextRange;
+            argsNode: import("typescript").ObjectLiteralExpression | undefined;
+            componentsOption: import("../types").TextRange | undefined;
+            componentsOptionNode: import("typescript").ObjectLiteralExpression | undefined;
+            nameOption: import("../types").TextRange | undefined;
+        }) | undefined;
+        bindings: import("../types").TextRange[];
+    } | undefined;
+    scriptSetupRanges: () => {
+        leadingCommentEndOffset: number;
+        importSectionEndOffset: number;
+        bindings: import("../types").TextRange[];
+        props: {
+            name?: string | undefined;
+            define?: (import("../types").TextRange & {
+                arg?: import("../types").TextRange | undefined;
+                typeArg?: import("../types").TextRange | undefined;
+            } & {
+                statement: import("../types").TextRange;
+            }) | undefined;
+            withDefaults?: (import("../types").TextRange & {
+                arg?: import("../types").TextRange | undefined;
+            }) | undefined;
+        };
+        slots: {
+            name?: string | undefined;
+            define?: (import("../types").TextRange & {
+                arg?: import("../types").TextRange | undefined;
+                typeArg?: import("../types").TextRange | undefined;
+            }) | undefined;
+        };
+        emits: {
+            name?: string | undefined;
+            define?: (import("../types").TextRange & {
+                arg?: import("../types").TextRange | undefined;
+                typeArg?: import("../types").TextRange | undefined;
+            }) | undefined;
+        };
+        expose: {
+            name?: string | undefined;
+            define?: (import("../types").TextRange & {
+                arg?: import("../types").TextRange | undefined;
+                typeArg?: import("../types").TextRange | undefined;
+            }) | undefined;
+        };
+        defineProp: {
+            name: import("../types").TextRange | undefined;
+            nameIsString: boolean;
+            type: import("../types").TextRange | undefined;
+            defaultValue: import("../types").TextRange | undefined;
+            required: boolean;
+        }[];
+    } | undefined;
+    lang: () => string;
+    generatedScript: () => {
+        codes: muggle.Segment<import("@volar/language-core").FileRangeCapabilities>[];
+        codeStacks: muggle.StackNode[];
+        mirrorBehaviorMappings: import("@volar/source-map").Mapping<[import("@volar/language-core").MirrorBehaviorCapabilities, import("@volar/language-core").MirrorBehaviorCapabilities]>[];
+    };
+    generatedTemplate: () => {
+        codes: (string | [string, string | undefined, number | [number, number], import("@volar/language-core").FileRangeCapabilities])[];
+        codeStacks: muggle.StackNode[];
+        formatCodes: (string | [string, string | undefined, number | [number, number], import("@volar/language-core").FileRangeCapabilities])[];
+        formatCodeStacks: muggle.StackNode[];
+        cssCodes: (string | [string, string | undefined, number | [number, number], import("@volar/language-core").FileRangeCapabilities])[];
+        cssCodeStacks: muggle.StackNode[];
+        tagNames: Record<string, number[]>;
+        accessedGlobalVariables: Set<string>;
+        hasSlot: boolean;
+    } | undefined;
+}>;
+declare const plugin: VueLanguagePlugin;
+export default plugin;
+//# sourceMappingURL=vue-tsx.d.ts.map

+ 159 - 0
node_modules/@vue/language-core/out/plugins/vue-tsx.js

@@ -0,0 +1,159 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.tsCodegen = void 0;
+const computeds_1 = require("computeds");
+const script_1 = require("../generators/script");
+const template_1 = require("../generators/template");
+const scriptRanges_1 = require("../parsers/scriptRanges");
+const scriptSetupRanges_1 = require("../parsers/scriptSetupRanges");
+const language_core_1 = require("@volar/language-core");
+const muggle = require("muggle-string");
+const templateFormatReg = /^\.template_format\.ts$/;
+const templateStyleCssReg = /^\.template_style\.css$/;
+exports.tsCodegen = new WeakMap();
+const plugin = (ctx) => {
+    return {
+        version: 1,
+        requiredCompilerOptions: [
+            'noPropertyAccessFromIndexSignature',
+            'exactOptionalPropertyTypes',
+        ],
+        getEmbeddedFileNames(fileName, sfc) {
+            const tsx = useTsx(fileName, sfc);
+            const fileNames = [];
+            if (['js', 'ts', 'jsx', 'tsx'].includes(tsx.lang())) {
+                fileNames.push(fileName + '.' + tsx.lang());
+            }
+            if (sfc.template) {
+                fileNames.push(fileName + '.template_format.ts');
+                fileNames.push(fileName + '.template_style.css');
+            }
+            return fileNames;
+        },
+        resolveEmbeddedFile(fileName, sfc, embeddedFile) {
+            const _tsx = useTsx(fileName, sfc);
+            const suffix = embeddedFile.fileName.replace(fileName, '');
+            if (suffix === '.' + _tsx.lang()) {
+                embeddedFile.kind = language_core_1.FileKind.TypeScriptHostFile;
+                embeddedFile.capabilities = {
+                    ...language_core_1.FileCapabilities.full,
+                    foldingRange: false,
+                    documentFormatting: false,
+                    documentSymbol: false,
+                };
+                const tsx = _tsx.generatedScript();
+                if (tsx) {
+                    const [content, contentStacks] = ctx.codegenStack ? muggle.track([...tsx.codes], [...tsx.codeStacks]) : [[...tsx.codes], [...tsx.codeStacks]];
+                    embeddedFile.content = content;
+                    embeddedFile.contentStacks = contentStacks;
+                    embeddedFile.mirrorBehaviorMappings = [...tsx.mirrorBehaviorMappings];
+                }
+            }
+            else if (suffix.match(templateFormatReg)) {
+                embeddedFile.parentFileName = fileName + '.template.' + sfc.template?.lang;
+                embeddedFile.kind = language_core_1.FileKind.TextFile;
+                embeddedFile.capabilities = {
+                    ...language_core_1.FileCapabilities.full,
+                    diagnostic: false,
+                    foldingRange: false,
+                    codeAction: false,
+                    inlayHint: false,
+                };
+                const template = _tsx.generatedTemplate();
+                if (template) {
+                    const [content, contentStacks] = ctx.codegenStack
+                        ? muggle.track([...template.formatCodes], [...template.formatCodeStacks])
+                        : [[...template.formatCodes], [...template.formatCodeStacks]];
+                    embeddedFile.content = content;
+                    embeddedFile.contentStacks = contentStacks;
+                }
+                for (const style of sfc.styles) {
+                    embeddedFile.content.push('\n\n');
+                    for (const cssVar of style.cssVars) {
+                        embeddedFile.content.push('(');
+                        embeddedFile.content.push([
+                            cssVar.text,
+                            style.name,
+                            cssVar.offset,
+                            {},
+                        ]);
+                        embeddedFile.content.push(');\n');
+                    }
+                }
+            }
+            else if (suffix.match(templateStyleCssReg)) {
+                embeddedFile.parentFileName = fileName + '.template.' + sfc.template?.lang;
+                const template = _tsx.generatedTemplate();
+                if (template) {
+                    const [content, contentStacks] = ctx.codegenStack
+                        ? muggle.track([...template.cssCodes], [...template.cssCodeStacks])
+                        : [[...template.cssCodes], [...template.cssCodeStacks]];
+                    embeddedFile.content = content;
+                    embeddedFile.contentStacks = contentStacks;
+                }
+                // for color pickers support
+                embeddedFile.capabilities.documentSymbol = true;
+            }
+        },
+    };
+    function useTsx(fileName, sfc) {
+        if (!exports.tsCodegen.has(sfc)) {
+            exports.tsCodegen.set(sfc, createTsx(fileName, sfc, ctx));
+        }
+        return exports.tsCodegen.get(sfc);
+    }
+};
+exports.default = plugin;
+function createTsx(fileName, _sfc, { vueCompilerOptions, compilerOptions, codegenStack, modules }) {
+    const ts = modules.typescript;
+    const lang = (0, computeds_1.computed)(() => {
+        return !_sfc.script && !_sfc.scriptSetup ? 'ts'
+            : _sfc.scriptSetup && _sfc.scriptSetup.lang !== 'js' ? _sfc.scriptSetup.lang
+                : _sfc.script && _sfc.script.lang !== 'js' ? _sfc.script.lang
+                    : 'js';
+    });
+    const scriptRanges = (0, computeds_1.computed)(() => _sfc.script
+        ? (0, scriptRanges_1.parseScriptRanges)(ts, _sfc.script.ast, !!_sfc.scriptSetup, false)
+        : undefined);
+    const scriptSetupRanges = (0, computeds_1.computed)(() => _sfc.scriptSetup
+        ? (0, scriptSetupRanges_1.parseScriptSetupRanges)(ts, _sfc.scriptSetup.ast, vueCompilerOptions)
+        : undefined);
+    const shouldGenerateScopedClasses = (0, computeds_1.computed)(() => {
+        const option = vueCompilerOptions.experimentalResolveStyleCssClasses;
+        return _sfc.styles.some(s => {
+            return option === 'always' || (option === 'scoped' && s.scoped);
+        });
+    });
+    const stylesScopedClasses = (0, computeds_1.computedSet)(() => {
+        const classes = new Set();
+        if (!shouldGenerateScopedClasses()) {
+            return classes;
+        }
+        for (const style of _sfc.styles) {
+            const option = vueCompilerOptions.experimentalResolveStyleCssClasses;
+            if (option === 'always' || (option === 'scoped' && style.scoped)) {
+                for (const className of style.classNames) {
+                    classes.add(className.text.substring(1));
+                }
+            }
+        }
+        return classes;
+    });
+    const generatedTemplate = (0, computeds_1.computed)(() => {
+        if (!_sfc.template)
+            return;
+        return (0, template_1.generate)(ts, compilerOptions, vueCompilerOptions, _sfc.template, shouldGenerateScopedClasses(), stylesScopedClasses(), hasScriptSetupSlots(), slotsAssignName(), propsAssignName(), codegenStack);
+    });
+    const hasScriptSetupSlots = (0, computeds_1.computed)(() => !!scriptSetupRanges()?.slots.define);
+    const slotsAssignName = (0, computeds_1.computed)(() => scriptSetupRanges()?.slots.name);
+    const propsAssignName = (0, computeds_1.computed)(() => scriptSetupRanges()?.props.name);
+    const generatedScript = (0, computeds_1.computed)(() => (0, script_1.generate)(ts, fileName, _sfc.script, _sfc.scriptSetup, _sfc.styles, lang(), scriptRanges(), scriptSetupRanges(), generatedTemplate(), compilerOptions, vueCompilerOptions, codegenStack));
+    return {
+        scriptRanges,
+        scriptSetupRanges,
+        lang,
+        generatedScript,
+        generatedTemplate,
+    };
+}
+//# sourceMappingURL=vue-tsx.js.map

+ 125 - 0
node_modules/@vue/language-core/out/types.d.ts

@@ -0,0 +1,125 @@
+import type * as CompilerDOM from '@vue/compiler-dom';
+import type { SFCParseResult } from '@vue/compiler-sfc';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import type { VueEmbeddedFile } from './virtualFile/embeddedFile';
+export type { SFCParseResult } from '@vue/compiler-sfc';
+export type RawVueCompilerOptions = Partial<Omit<VueCompilerOptions, 'target' | 'plugins'>> & {
+    target?: 'auto' | 2 | 2.7 | 3 | 3.3;
+    plugins?: string[];
+};
+export interface VueCompilerOptions {
+    target: number;
+    lib: string;
+    extensions: string[];
+    jsxSlots: boolean;
+    strictTemplates: boolean;
+    skipTemplateCodegen: boolean;
+    nativeTags: string[];
+    dataAttributes: string[];
+    htmlAttributes: string[];
+    optionsWrapper: [string, string] | [];
+    macros: {
+        defineProps: string[];
+        defineSlots: string[];
+        defineEmits: string[];
+        defineExpose: string[];
+        defineModel: string[];
+        defineOptions: string[];
+        withDefaults: string[];
+    };
+    plugins: VueLanguagePlugin[];
+    hooks: string[];
+    experimentalDefinePropProposal: 'kevinEdition' | 'johnsonEdition' | false;
+    experimentalResolveStyleCssClasses: 'scoped' | 'always' | 'never';
+    experimentalModelPropName: Record<string, Record<string, boolean | Record<string, string> | Record<string, string>[]>>;
+    experimentalUseElementAccessInTemplate: boolean;
+    experimentalAdditionalLanguageModules: string[];
+}
+export type VueLanguagePlugin = (ctx: {
+    modules: {
+        typescript: typeof import('typescript/lib/tsserverlibrary');
+        '@vue/compiler-dom': typeof import('@vue/compiler-dom');
+    };
+    compilerOptions: ts.CompilerOptions;
+    vueCompilerOptions: VueCompilerOptions;
+    codegenStack: boolean;
+}) => {
+    version: 1;
+    name?: string;
+    order?: number;
+    requiredCompilerOptions?: string[];
+    parseSFC?(fileName: string, content: string): SFCParseResult | undefined;
+    updateSFC?(oldResult: SFCParseResult, textChange: {
+        start: number;
+        end: number;
+        newText: string;
+    }): SFCParseResult | undefined;
+    resolveTemplateCompilerOptions?(options: CompilerDOM.CompilerOptions): CompilerDOM.CompilerOptions;
+    compileSFCTemplate?(lang: string, template: string, options: CompilerDOM.CompilerOptions): CompilerDOM.CodegenResult | undefined;
+    updateSFCTemplate?(oldResult: CompilerDOM.CodegenResult, textChange: {
+        start: number;
+        end: number;
+        newText: string;
+    }): CompilerDOM.CodegenResult | undefined;
+    getEmbeddedFileNames?(fileName: string, sfc: Sfc): string[];
+    resolveEmbeddedFile?(fileName: string, sfc: Sfc, embeddedFile: VueEmbeddedFile): void;
+};
+export interface SfcBlock {
+    name: string;
+    start: number;
+    end: number;
+    startTagEnd: number;
+    endTagStart: number;
+    lang: string;
+    content: string;
+    attrs: Record<string, string | true>;
+}
+export interface Sfc {
+    template: SfcBlock & {
+        ast: CompilerDOM.RootNode | undefined;
+        errors: CompilerDOM.CompilerError[];
+        warnings: CompilerDOM.CompilerError[];
+    } | undefined;
+    script: (SfcBlock & {
+        src: string | undefined;
+        srcOffset: number;
+        ast: ts.SourceFile;
+    }) | undefined;
+    scriptSetup: SfcBlock & {
+        generic: string | undefined;
+        genericOffset: number;
+        ast: ts.SourceFile;
+    } | undefined;
+    styles: readonly (SfcBlock & {
+        module: string | undefined;
+        scoped: boolean;
+        cssVars: {
+            text: string;
+            offset: number;
+        }[];
+        classNames: {
+            text: string;
+            offset: number;
+        }[];
+    })[];
+    customBlocks: readonly (SfcBlock & {
+        type: string;
+    })[];
+    /**
+     * @deprecated use `template.ast` instead
+     */
+    templateAst: CompilerDOM.RootNode | undefined;
+    /**
+     * @deprecated use `script.ast` instead
+     */
+    scriptAst: ts.SourceFile | undefined;
+    /**
+     * @deprecated use `scriptSetup.ast` instead
+     */
+    scriptSetupAst: ts.SourceFile | undefined;
+}
+export interface TextRange {
+    start: number;
+    end: number;
+}
+//# sourceMappingURL=types.d.ts.map

+ 3 - 0
node_modules/@vue/language-core/out/types.js

@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=types.js.map

+ 4 - 0
node_modules/@vue/language-core/out/utils/globalTypes.d.ts

@@ -0,0 +1,4 @@
+import { VueCompilerOptions } from '../types';
+export declare const baseName = "__VLS_types.d.ts";
+export declare function getTypesCode(vueCompilerOptions: VueCompilerOptions): string;
+//# sourceMappingURL=globalTypes.d.ts.map

+ 135 - 0
node_modules/@vue/language-core/out/utils/globalTypes.js

@@ -0,0 +1,135 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getTypesCode = exports.baseName = void 0;
+const shared_1 = require("./shared");
+exports.baseName = '__VLS_types.d.ts';
+function getTypesCode(vueCompilerOptions) {
+    return `
+// @ts-nocheck
+
+type __VLS_IntrinsicElements = __VLS_PickNotAny<import('vue/jsx-runtime').JSX.IntrinsicElements, __VLS_PickNotAny<JSX.IntrinsicElements, Record<string, any>>>;
+type __VLS_Element = __VLS_PickNotAny<import('vue/jsx-runtime').JSX.Element, JSX.Element>;
+
+type __VLS_IsAny<T> = 0 extends 1 & T ? true : false;
+type __VLS_PickNotAny<A, B> = __VLS_IsAny<A> extends true ? B : A;
+
+type __VLS_Prettify<T> = { [K in keyof T]: T[K]; } & {};
+
+type __VLS_OmitKeepDiscriminatedUnion<T, K extends keyof any> =
+	T extends any
+		? Pick<T, Exclude<keyof T, K>>
+		: never;
+
+type __VLS_GlobalComponents =
+	__VLS_PickNotAny<import('vue').GlobalComponents, {}>
+	& __VLS_PickNotAny<import('@vue/runtime-core').GlobalComponents, {}>
+	& __VLS_PickNotAny<import('@vue/runtime-dom').GlobalComponents, {}>
+	& Pick<typeof import('${vueCompilerOptions.lib}'),
+		'Transition'
+		| 'TransitionGroup'
+		| 'KeepAlive'
+		| 'Suspense'
+		| 'Teleport'
+	>;
+
+declare const __VLS_intrinsicElements: __VLS_IntrinsicElements;
+
+// v-for
+declare function __VLS_getVForSourceType(source: number): [number, number, number][];
+declare function __VLS_getVForSourceType(source: string): [string, number, number][];
+declare function __VLS_getVForSourceType<T extends any[]>(source: T): [
+	T[number], // item
+	number, // key
+	number, // index
+][];
+declare function __VLS_getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
+	T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never, // item 
+	number, // key
+	undefined, // index
+][];
+declare function __VLS_getVForSourceType<T>(source: T): [
+	T[keyof T], // item
+	keyof T, // key
+	number, // index
+][];
+
+declare function __VLS_getSlotParams<T>(slot: T): Parameters<__VLS_PickNotAny<NonNullable<T>, (...args: any[]) => any>>;
+declare function __VLS_getSlotParam<T>(slot: T): Parameters<__VLS_PickNotAny<NonNullable<T>, (...args: any[]) => any>>[0];
+declare function __VLS_directiveFunction<T>(dir: T):
+	T extends import('${vueCompilerOptions.lib}').ObjectDirective<infer E, infer V> | import('${vueCompilerOptions.lib}').FunctionDirective<infer E, infer V> ? (value: V) => void
+	: T;
+declare function __VLS_withScope<T, K>(ctx: T, scope: K): ctx is T & K;
+declare function __VLS_makeOptional<T>(t: T): { [K in keyof T]?: T[K] };
+
+type __VLS_SelfComponent<N, C> = string extends N ? {} : N extends string ? { [P in N]: C } : {};
+type __VLS_WithComponent<N0 extends string, LocalComponents, N1 extends string, N2 extends string, N3 extends string> =
+	N1 extends keyof LocalComponents ? N1 extends N0 ? Pick<LocalComponents, N0> : { [K in N0]: LocalComponents[N1] } :
+	N2 extends keyof LocalComponents ? N2 extends N0 ? Pick<LocalComponents, N0> : { [K in N0]: LocalComponents[N2] } :
+	N3 extends keyof LocalComponents ? N3 extends N0 ? Pick<LocalComponents, N0> : { [K in N0]: LocalComponents[N3] } :
+	N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N1] } :
+	N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N2] } :
+	N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N3] } :
+	${vueCompilerOptions.strictTemplates ? '{}' : '{ [K in N0]: unknown }'}
+
+type __VLS_FillingEventArg_ParametersLength<E extends (...args: any) => any> = __VLS_IsAny<Parameters<E>> extends true ? -1 : Parameters<E>['length'];
+type __VLS_FillingEventArg<E> = E extends (...args: any) => any ? __VLS_FillingEventArg_ParametersLength<E> extends 0 ? ($event?: undefined) => ReturnType<E> : E : E;
+declare function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
+	T extends new (...args: any) => any
+	? (props: (K extends { $props: infer Props } ? Props : any)${vueCompilerOptions.strictTemplates ? '' : ' & Record<string, unknown>'}, ctx?: {
+		attrs?: any,
+		slots?: K extends { ${(0, shared_1.getSlotsPropertyName)(vueCompilerOptions.target)}: infer Slots } ? Slots : any,
+		emit?: K extends { $emit: infer Emit } ? Emit : any
+	}) => __VLS_Element & { __ctx?: typeof ctx & { props?: typeof props; expose?(exposed: K): void; } }
+	: T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>
+	: T extends (...args: any) => any ? T
+	: (_: {}${vueCompilerOptions.strictTemplates ? '' : ' & Record<string, unknown>'}, ctx?: any) => { __ctx?: { attrs?: any, expose?: any, slots?: any, emit?: any, props?: {}${vueCompilerOptions.strictTemplates ? '' : ' & Record<string, unknown>'} } };
+declare function __VLS_elementAsFunctionalComponent<T>(t: T): (_: T${vueCompilerOptions.strictTemplates ? '' : ' & Record<string, unknown>'}, ctx?: any) => { __ctx?: { attrs?: any, expose?: any, slots?: any, emit?: any, props?: T${vueCompilerOptions.strictTemplates ? '' : ' & Record<string, unknown>'} } };
+declare function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): Parameters<T>['length'] extends 2 ? [any] : [];
+declare function __VLS_pickEvent<E1, E2>(emitEvent: E1, propEvent: E2): __VLS_FillingEventArg<
+	__VLS_PickNotAny<
+		__VLS_AsFunctionOrAny<E2>,
+		__VLS_AsFunctionOrAny<E1>
+	>
+> | undefined;
+declare function __VLS_pickFunctionalComponentCtx<T, K>(comp: T, compInstance: K): __VLS_PickNotAny<
+	'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: infer Ctx } ? Ctx : never : any
+	, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
+>;
+type __VLS_FunctionalComponentProps<T, K> =
+	'__ctx' extends keyof __VLS_PickNotAny<K, {}> ? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
+	: T extends (props: infer P, ...args: any) => any ? P :
+	{};
+type __VLS_AsFunctionOrAny<F> = unknown extends F ? any : ((...args: any) => any) extends F ? F : any;
+
+declare function __VLS_normalizeSlot<S>(s: S): S extends () => infer R ? (props: {}) => R : S;
+
+/**
+ * emit
+ */
+// fix https://github.com/vuejs/language-tools/issues/926
+type __VLS_UnionToIntersection<U> = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never;
+type __VLS_OverloadUnionInner<T, U = unknown> = U & T extends (...args: infer A) => infer R
+	? U extends T
+	? never
+	: __VLS_OverloadUnionInner<T, Pick<T, keyof T> & U & ((...args: A) => R)> | ((...args: A) => R)
+	: never;
+type __VLS_OverloadUnion<T> = Exclude<
+	__VLS_OverloadUnionInner<(() => never) & T>,
+	T extends () => never ? never : () => never
+>;
+type __VLS_ConstructorOverloads<T> = __VLS_OverloadUnion<T> extends infer F
+	? F extends (event: infer E, ...args: infer A) => any
+	? { [K in E & string]: (...args: A) => void; }
+	: never
+	: never;
+type __VLS_NormalizeEmits<T> = __VLS_Prettify<
+	__VLS_UnionToIntersection<
+		__VLS_ConstructorOverloads<T> & {
+			[K in keyof T]: T[K] extends any[] ? { (...args: T[K]): void } : never
+		}
+	>
+>;
+`.trim();
+}
+exports.getTypesCode = getTypesCode;
+//# sourceMappingURL=globalTypes.js.map

+ 5 - 0
node_modules/@vue/language-core/out/utils/parseCssClassNames.d.ts

@@ -0,0 +1,5 @@
+export declare function parseCssClassNames(styleContent: string): Generator<{
+    offset: number;
+    text: string;
+}, void, unknown>;
+//# sourceMappingURL=parseCssClassNames.d.ts.map

+ 19 - 0
node_modules/@vue/language-core/out/utils/parseCssClassNames.js

@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseCssClassNames = void 0;
+const parseCssVars_1 = require("./parseCssVars");
+const cssClassNameReg = /(?=([\.]{1}[a-zA-Z_]+[\w\_\-]*)[\s\.\+\{\>#\:]{1})/g;
+function* parseCssClassNames(styleContent) {
+    styleContent = (0, parseCssVars_1.clearComments)(styleContent);
+    const matches = styleContent.matchAll(cssClassNameReg);
+    for (const match of matches) {
+        if (match.index !== undefined) {
+            const matchText = match[1];
+            if (matchText !== undefined) {
+                yield { offset: match.index, text: matchText };
+            }
+        }
+    }
+}
+exports.parseCssClassNames = parseCssClassNames;
+//# sourceMappingURL=parseCssClassNames.js.map

+ 6 - 0
node_modules/@vue/language-core/out/utils/parseCssVars.d.ts

@@ -0,0 +1,6 @@
+export declare function parseCssVars(styleContent: string): Generator<{
+    offset: number;
+    text: string;
+}, void, unknown>;
+export declare function clearComments(css: string): string;
+//# sourceMappingURL=parseCssVars.d.ts.map

+ 28 - 0
node_modules/@vue/language-core/out/utils/parseCssVars.js

@@ -0,0 +1,28 @@
+"use strict";
+// https://github.com/vuejs/core/blob/main/packages/compiler-sfc/src/cssVars.ts#L47-L61
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.clearComments = exports.parseCssVars = void 0;
+const vBindCssVarReg = /\bv-bind\(\s*(?:'([^']+)'|"([^"]+)"|([^'"][^)]*))\s*\)/g;
+const commentReg1 = /\/\*([\s\S]*?)\*\//g;
+const commentReg2 = /\/\/([\s\S]*?)\n/g;
+function* parseCssVars(styleContent) {
+    styleContent = clearComments(styleContent);
+    const matchs = styleContent.matchAll(vBindCssVarReg);
+    for (const match of matchs) {
+        if (match.index !== undefined) {
+            const matchText = match[1] ?? match[2] ?? match[3];
+            if (matchText !== undefined) {
+                const offset = match.index + styleContent.slice(match.index).indexOf(matchText);
+                yield { offset, text: matchText };
+            }
+        }
+    }
+}
+exports.parseCssVars = parseCssVars;
+function clearComments(css) {
+    return css
+        .replace(commentReg1, match => `/*${' '.repeat(match.length - 4)}*/`)
+        .replace(commentReg2, match => `//${' '.repeat(match.length - 3)}\n`);
+}
+exports.clearComments = clearComments;
+//# sourceMappingURL=parseCssVars.js.map

+ 3 - 0
node_modules/@vue/language-core/out/utils/parseSfc.d.ts

@@ -0,0 +1,3 @@
+import type { SFCParseResult } from '@vue/compiler-sfc';
+export declare function parse(source: string): SFCParseResult;
+//# sourceMappingURL=parseSfc.d.ts.map

+ 135 - 0
node_modules/@vue/language-core/out/utils/parseSfc.js

@@ -0,0 +1,135 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parse = void 0;
+const compiler = require("@vue/compiler-dom");
+function parse(source) {
+    const errors = [];
+    const ast = compiler.parse(source, {
+        // there are no components at SFC parsing level
+        isNativeTag: () => true,
+        // preserve all whitespaces
+        isPreTag: () => true,
+        getTextMode: ({ tag, props }, parent) => {
+            if ((!parent && tag !== 'template')
+                || (tag === 'template'
+                    && props.some(p => p.type === 6 /* compiler.NodeTypes.ATTRIBUTE */ &&
+                        p.name === 'lang' &&
+                        p.value &&
+                        p.value.content &&
+                        p.value.content !== 'html'))) {
+                return 2 /* compiler.TextModes.RAWTEXT */;
+            }
+            else {
+                return 0 /* compiler.TextModes.DATA */;
+            }
+        },
+        onError: e => {
+            errors.push(e);
+        },
+        comments: true,
+    });
+    const descriptor = {
+        filename: 'anonymous.vue',
+        source,
+        template: null,
+        script: null,
+        scriptSetup: null,
+        styles: [],
+        customBlocks: [],
+        cssVars: [],
+        slotted: false,
+        shouldForceReload: () => false,
+    };
+    ast.children.forEach(node => {
+        if (node.type !== 1 /* compiler.NodeTypes.ELEMENT */) {
+            return;
+        }
+        switch (node.tag) {
+            case 'template':
+                const templateBlock = (descriptor.template = createBlock(node, source));
+                templateBlock.ast = node;
+                break;
+            case 'script':
+                const scriptBlock = createBlock(node, source);
+                const isSetup = !!scriptBlock.attrs.setup;
+                if (isSetup && !descriptor.scriptSetup) {
+                    descriptor.scriptSetup = scriptBlock;
+                    break;
+                }
+                if (!isSetup && !descriptor.script) {
+                    descriptor.script = scriptBlock;
+                    break;
+                }
+                break;
+            case 'style':
+                const styleBlock = createBlock(node, source);
+                descriptor.styles.push(styleBlock);
+                break;
+            default:
+                descriptor.customBlocks.push(createBlock(node, source));
+                break;
+        }
+    });
+    return {
+        descriptor,
+        errors,
+    };
+}
+exports.parse = parse;
+function createBlock(node, source) {
+    const type = node.tag;
+    let { start, end } = node.loc;
+    let content = '';
+    if (node.children.length) {
+        start = node.children[0].loc.start;
+        end = node.children[node.children.length - 1].loc.end;
+        content = source.slice(start.offset, end.offset);
+    }
+    else {
+        const offset = node.loc.source.indexOf(`</`);
+        if (offset > -1) {
+            start = {
+                line: start.line,
+                column: start.column + offset,
+                offset: start.offset + offset
+            };
+        }
+        end = Object.assign({}, start);
+    }
+    const loc = {
+        source: content,
+        start,
+        end
+    };
+    const attrs = {};
+    const block = {
+        type,
+        content,
+        loc,
+        attrs
+    };
+    node.props.forEach(p => {
+        if (p.type === 6 /* compiler.NodeTypes.ATTRIBUTE */) {
+            attrs[p.name] = p.value ? p.value.content || true : true;
+            if (p.name === 'lang') {
+                block.lang = p.value && p.value.content;
+            }
+            else if (p.name === 'src') {
+                block.src = p.value && p.value.content;
+            }
+            else if (type === 'style') {
+                if (p.name === 'scoped') {
+                    block.scoped = true;
+                }
+                else if (p.name === 'module') {
+                    block.module = attrs[p.name];
+                }
+            }
+            else if (type === 'script' && p.name === 'setup') {
+                block.setup = attrs.setup;
+            }
+        }
+    });
+    return block;
+}
+//# sourceMappingURL=parseSfc.js.map

+ 4 - 0
node_modules/@vue/language-core/out/utils/shared.d.ts

@@ -0,0 +1,4 @@
+export declare function getSlotsPropertyName(vueVersion: number): "$scopedSlots" | "$slots";
+export { hyphenate as hyphenateTag } from '@vue/shared';
+export declare function hyphenateAttr(str: string): string;
+//# sourceMappingURL=shared.d.ts.map

+ 20 - 0
node_modules/@vue/language-core/out/utils/shared.js

@@ -0,0 +1,20 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.hyphenateAttr = exports.hyphenateTag = exports.getSlotsPropertyName = void 0;
+const shared_1 = require("@vue/shared");
+function getSlotsPropertyName(vueVersion) {
+    return vueVersion < 3 ? '$scopedSlots' : '$slots';
+}
+exports.getSlotsPropertyName = getSlotsPropertyName;
+var shared_2 = require("@vue/shared");
+Object.defineProperty(exports, "hyphenateTag", { enumerable: true, get: function () { return shared_2.hyphenate; } });
+function hyphenateAttr(str) {
+    let hyphencase = (0, shared_1.hyphenate)(str);
+    // fix https://github.com/vuejs/core/issues/8811
+    if (str.length && str[0] !== str[0].toLowerCase()) {
+        hyphencase = '-' + hyphencase;
+    }
+    return hyphencase;
+}
+exports.hyphenateAttr = hyphenateAttr;
+//# sourceMappingURL=shared.js.map

+ 9 - 0
node_modules/@vue/language-core/out/utils/transform.d.ts

@@ -0,0 +1,9 @@
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { VueCompilerOptions } from '../types';
+export declare function walkInterpolationFragment(ts: typeof import('typescript/lib/tsserverlibrary'), code: string, ast: ts.SourceFile, cb: (fragment: string, offset: number | undefined, isJustForErrorMapping?: boolean) => void, localVars: Map<string, number>, identifiers: Set<string>, vueOptions: VueCompilerOptions): {
+    text: string;
+    isShorthand: boolean;
+    offset: number;
+}[];
+export declare function collectVars(ts: typeof import('typescript/lib/tsserverlibrary'), node: ts.Node, result: string[]): void;
+//# sourceMappingURL=transform.d.ts.map

+ 195 - 0
node_modules/@vue/language-core/out/utils/transform.js

@@ -0,0 +1,195 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.collectVars = exports.walkInterpolationFragment = void 0;
+const shared_1 = require("@vue/shared");
+function walkInterpolationFragment(ts, code, ast, cb, localVars, identifiers, vueOptions) {
+    let ctxVars = [];
+    const varCb = (id, isShorthand) => {
+        if (localVars.get(id.text) ||
+            // https://github.com/vuejs/core/blob/245230e135152900189f13a4281302de45fdcfaa/packages/compiler-core/src/transforms/transformExpression.ts#L342-L352
+            (0, shared_1.isGloballyWhitelisted)(id.text) ||
+            id.text === 'require' ||
+            id.text.startsWith('__VLS_')) {
+            // localVarOffsets.push(localVar.getStart(ast));
+        }
+        else {
+            ctxVars.push({
+                text: id.text,
+                isShorthand: isShorthand,
+                offset: id.getStart(ast),
+            });
+            identifiers.add(id.text);
+        }
+    };
+    ast.forEachChild(node => walkIdentifiers(ts, node, varCb, localVars));
+    ctxVars = ctxVars.sort((a, b) => a.offset - b.offset);
+    if (ctxVars.length) {
+        if (ctxVars[0].isShorthand) {
+            cb(code.substring(0, ctxVars[0].offset + ctxVars[0].text.length), 0);
+            cb(': ', undefined);
+        }
+        else {
+            cb(code.substring(0, ctxVars[0].offset), 0);
+        }
+        for (let i = 0; i < ctxVars.length - 1; i++) {
+            // fix https://github.com/vuejs/language-tools/issues/1205
+            // fix https://github.com/vuejs/language-tools/issues/1264
+            cb('', ctxVars[i + 1].offset, true);
+            if (vueOptions.experimentalUseElementAccessInTemplate) {
+                const varStart = ctxVars[i].offset;
+                const varEnd = ctxVars[i].offset + ctxVars[i].text.length;
+                cb('__VLS_ctx[', undefined);
+                cb('', varStart, true);
+                cb("'", undefined);
+                cb(code.substring(varStart, varEnd), varStart);
+                cb("'", undefined);
+                cb('', varEnd, true);
+                cb(']', undefined);
+                if (ctxVars[i + 1].isShorthand) {
+                    cb(code.substring(varEnd, ctxVars[i + 1].offset + ctxVars[i + 1].text.length), varEnd);
+                    cb(': ', undefined);
+                }
+                else {
+                    cb(code.substring(varEnd, ctxVars[i + 1].offset), varEnd);
+                }
+            }
+            else {
+                cb('__VLS_ctx.', undefined);
+                if (ctxVars[i + 1].isShorthand) {
+                    cb(code.substring(ctxVars[i].offset, ctxVars[i + 1].offset + ctxVars[i + 1].text.length), ctxVars[i].offset);
+                    cb(': ', undefined);
+                }
+                else {
+                    cb(code.substring(ctxVars[i].offset, ctxVars[i + 1].offset), ctxVars[i].offset);
+                }
+            }
+        }
+        if (vueOptions.experimentalUseElementAccessInTemplate) {
+            const varStart = ctxVars[ctxVars.length - 1].offset;
+            const varEnd = ctxVars[ctxVars.length - 1].offset + ctxVars[ctxVars.length - 1].text.length;
+            cb('__VLS_ctx[', undefined);
+            cb('', varStart, true);
+            cb("'", undefined);
+            cb(code.substring(varStart, varEnd), varStart);
+            cb("'", undefined);
+            cb('', varEnd, true);
+            cb(']', undefined);
+            cb(code.substring(varEnd), varEnd);
+        }
+        else {
+            cb('', ctxVars[ctxVars.length - 1].offset, true);
+            cb('__VLS_ctx.', undefined);
+            cb(code.substring(ctxVars[ctxVars.length - 1].offset), ctxVars[ctxVars.length - 1].offset);
+        }
+    }
+    else {
+        cb(code, 0);
+    }
+    return ctxVars;
+}
+exports.walkInterpolationFragment = walkInterpolationFragment;
+function walkIdentifiers(ts, node, cb, localVars, blockVars = [], isRoot = true) {
+    if (ts.isIdentifier(node)) {
+        cb(node, false);
+    }
+    else if (ts.isShorthandPropertyAssignment(node)) {
+        cb(node.name, true);
+    }
+    else if (ts.isPropertyAccessExpression(node)) {
+        walkIdentifiers(ts, node.expression, cb, localVars, blockVars, false);
+    }
+    else if (ts.isVariableDeclaration(node)) {
+        collectVars(ts, node.name, blockVars);
+        for (const varName of blockVars) {
+            localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
+        }
+        if (node.initializer)
+            walkIdentifiers(ts, node.initializer, cb, localVars, blockVars, false);
+    }
+    else if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
+        const functionArgs = [];
+        for (const param of node.parameters) {
+            collectVars(ts, param.name, functionArgs);
+            if (param.type) {
+                walkIdentifiers(ts, param.type, cb, localVars, blockVars, false);
+            }
+        }
+        for (const varName of functionArgs)
+            localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
+        walkIdentifiers(ts, node.body, cb, localVars, blockVars, false);
+        for (const varName of functionArgs)
+            localVars.set(varName, localVars.get(varName) - 1);
+    }
+    else if (ts.isObjectLiteralExpression(node)) {
+        for (const prop of node.properties) {
+            if (ts.isPropertyAssignment(prop)) {
+                // fix https://github.com/vuejs/language-tools/issues/1176
+                if (ts.isComputedPropertyName(prop.name)) {
+                    walkIdentifiers(ts, prop.name.expression, cb, localVars, blockVars, false);
+                }
+                walkIdentifiers(ts, prop.initializer, cb, localVars, blockVars, false);
+            }
+            // fix https://github.com/vuejs/language-tools/issues/1156
+            else if (ts.isShorthandPropertyAssignment(prop)) {
+                walkIdentifiers(ts, prop, cb, localVars, blockVars, false);
+            }
+            // fix https://github.com/vuejs/language-tools/issues/1148#issuecomment-1094378126
+            else if (ts.isSpreadAssignment(prop)) {
+                // TODO: cannot report "Spread types may only be created from object types.ts(2698)"
+                walkIdentifiers(ts, prop.expression, cb, localVars, blockVars, false);
+            }
+        }
+    }
+    else if (ts.isTypeReferenceNode(node)) {
+        // fix https://github.com/vuejs/language-tools/issues/1422
+        node.forEachChild(node => walkIdentifiersInTypeReference(ts, node, cb));
+    }
+    else {
+        const _blockVars = blockVars;
+        if (ts.isBlock(node)) {
+            blockVars = [];
+        }
+        node.forEachChild(node => walkIdentifiers(ts, node, cb, localVars, blockVars, false));
+        if (ts.isBlock(node)) {
+            for (const varName of blockVars) {
+                localVars.set(varName, localVars.get(varName) - 1);
+            }
+        }
+        blockVars = _blockVars;
+    }
+    if (isRoot) {
+        for (const varName of blockVars) {
+            localVars.set(varName, localVars.get(varName) - 1);
+        }
+    }
+}
+function walkIdentifiersInTypeReference(ts, node, cb) {
+    if (ts.isTypeQueryNode(node) && ts.isIdentifier(node.exprName)) {
+        cb(node.exprName, false);
+    }
+    else {
+        node.forEachChild(node => walkIdentifiersInTypeReference(ts, node, cb));
+    }
+}
+function collectVars(ts, node, result) {
+    if (ts.isIdentifier(node)) {
+        result.push(node.text);
+    }
+    else if (ts.isObjectBindingPattern(node)) {
+        for (const el of node.elements) {
+            collectVars(ts, el.name, result);
+        }
+    }
+    else if (ts.isArrayBindingPattern(node)) {
+        for (const el of node.elements) {
+            if (ts.isBindingElement(el)) {
+                collectVars(ts, el.name, result);
+            }
+        }
+    }
+    else {
+        node.forEachChild(node => collectVars(ts, node, result));
+    }
+}
+exports.collectVars = collectVars;
+//# sourceMappingURL=transform.js.map

+ 9 - 0
node_modules/@vue/language-core/out/utils/ts.d.ts

@@ -0,0 +1,9 @@
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import type { VueCompilerOptions } from '../types';
+export type ParsedCommandLine = ts.ParsedCommandLine & {
+    vueOptions: Partial<VueCompilerOptions>;
+};
+export declare function createParsedCommandLineByJson(ts: typeof import('typescript/lib/tsserverlibrary'), parseConfigHost: ts.ParseConfigHost, rootDir: string, json: any, configFileName?: string): ParsedCommandLine;
+export declare function createParsedCommandLine(ts: typeof import('typescript/lib/tsserverlibrary'), parseConfigHost: ts.ParseConfigHost, tsConfigPath: string): ParsedCommandLine;
+export declare function resolveVueCompilerOptions(vueOptions: Partial<VueCompilerOptions>): VueCompilerOptions;
+//# sourceMappingURL=ts.d.ts.map

+ 237 - 0
node_modules/@vue/language-core/out/utils/ts.js

@@ -0,0 +1,237 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resolveVueCompilerOptions = exports.createParsedCommandLine = exports.createParsedCommandLineByJson = void 0;
+const path = require("path-browserify");
+function createParsedCommandLineByJson(ts, parseConfigHost, rootDir, json, configFileName = rootDir + '/jsconfig.json') {
+    const proxyHost = proxyParseConfigHostForExtendConfigPaths(parseConfigHost);
+    ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, configFileName);
+    let vueOptions = {};
+    for (const extendPath of proxyHost.extendConfigPaths.reverse()) {
+        try {
+            vueOptions = {
+                ...vueOptions,
+                ...getPartialVueCompilerOptions(ts, ts.readJsonConfigFile(extendPath, proxyHost.host.readFile)),
+            };
+        }
+        catch (err) { }
+    }
+    const parsed = ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, configFileName, undefined, (vueOptions.extensions ?? ['.vue']).map(extension => ({
+        extension: extension.slice(1),
+        isMixedContent: true,
+        scriptKind: ts.ScriptKind.Deferred,
+    })));
+    // fix https://github.com/vuejs/language-tools/issues/1786
+    // https://github.com/microsoft/TypeScript/issues/30457
+    // patching ts server broke with outDir + rootDir + composite/incremental
+    parsed.options.outDir = undefined;
+    return {
+        ...parsed,
+        vueOptions,
+    };
+}
+exports.createParsedCommandLineByJson = createParsedCommandLineByJson;
+function createParsedCommandLine(ts, parseConfigHost, tsConfigPath) {
+    try {
+        const proxyHost = proxyParseConfigHostForExtendConfigPaths(parseConfigHost);
+        const config = ts.readJsonConfigFile(tsConfigPath, proxyHost.host.readFile);
+        ts.parseJsonSourceFileConfigFileContent(config, proxyHost.host, path.dirname(tsConfigPath), {}, tsConfigPath);
+        let vueOptions = {};
+        for (const extendPath of proxyHost.extendConfigPaths.reverse()) {
+            try {
+                vueOptions = {
+                    ...vueOptions,
+                    ...getPartialVueCompilerOptions(ts, ts.readJsonConfigFile(extendPath, proxyHost.host.readFile)),
+                };
+            }
+            catch (err) { }
+        }
+        const parsed = ts.parseJsonSourceFileConfigFileContent(config, proxyHost.host, path.dirname(tsConfigPath), {}, tsConfigPath, undefined, (vueOptions.extensions ?? ['.vue']).map(extension => ({
+            extension: extension.slice(1),
+            isMixedContent: true,
+            scriptKind: ts.ScriptKind.Deferred,
+        })));
+        // fix https://github.com/vuejs/language-tools/issues/1786
+        // https://github.com/microsoft/TypeScript/issues/30457
+        // patching ts server broke with outDir + rootDir + composite/incremental
+        parsed.options.outDir = undefined;
+        return {
+            ...parsed,
+            vueOptions,
+        };
+    }
+    catch (err) {
+        // console.warn('Failed to resolve tsconfig path:', tsConfigPath, err);
+        return {
+            fileNames: [],
+            options: {},
+            vueOptions: resolveVueCompilerOptions({}),
+            errors: [],
+        };
+    }
+}
+exports.createParsedCommandLine = createParsedCommandLine;
+function proxyParseConfigHostForExtendConfigPaths(parseConfigHost) {
+    const extendConfigPaths = [];
+    const host = new Proxy(parseConfigHost, {
+        get(target, key) {
+            if (key === 'readFile') {
+                return (fileName) => {
+                    if (!fileName.endsWith('/package.json') && !extendConfigPaths.includes(fileName)) {
+                        extendConfigPaths.push(fileName);
+                    }
+                    return target.readFile(fileName);
+                };
+            }
+            return target[key];
+        }
+    });
+    return {
+        host,
+        extendConfigPaths,
+    };
+}
+function getPartialVueCompilerOptions(ts, tsConfigSourceFile) {
+    const folder = path.dirname(tsConfigSourceFile.fileName);
+    const obj = ts.convertToObject(tsConfigSourceFile, []);
+    const rawOptions = obj?.vueCompilerOptions ?? {};
+    const result = {
+        ...rawOptions,
+    };
+    const target = rawOptions.target ?? 'auto';
+    if (target === 'auto') {
+        const resolvedPath = resolvePath('vue/package.json');
+        if (resolvedPath) {
+            const vuePackageJson = require(resolvedPath);
+            const versionNumbers = vuePackageJson.version.split('.');
+            result.target = Number(versionNumbers[0] + '.' + versionNumbers[1]);
+        }
+        else {
+            // console.warn('Load vue/package.json failed from', folder);
+        }
+    }
+    else {
+        result.target = target;
+    }
+    if (rawOptions.plugins) {
+        const plugins = rawOptions.plugins
+            .map((pluginPath) => {
+            try {
+                const resolvedPath = resolvePath(pluginPath);
+                if (resolvedPath) {
+                    return require(resolvedPath);
+                }
+                else {
+                    console.warn('Load plugin failed:', pluginPath);
+                }
+            }
+            catch (error) {
+                console.warn('Load plugin failed:', pluginPath, error);
+            }
+            return [];
+        })
+            .flat(Infinity);
+        result.plugins = plugins;
+    }
+    if (rawOptions.hooks) {
+        result.hooks = rawOptions.hooks
+            .map(resolvePath)
+            .filter((hook) => !!hook);
+    }
+    if (rawOptions.experimentalAdditionalLanguageModules) {
+        result.experimentalAdditionalLanguageModules = rawOptions.experimentalAdditionalLanguageModules
+            .map(resolvePath)
+            .filter((module) => !!module);
+    }
+    return result;
+    function resolvePath(scriptPath) {
+        try {
+            if (require?.resolve) {
+                return require.resolve(scriptPath, { paths: [folder] });
+            }
+            else {
+                // console.warn('failed to resolve path:', scriptPath, 'require.resolve is not supported in web');
+            }
+        }
+        catch (error) {
+            // console.warn(error);
+        }
+    }
+}
+// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
+const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +
+    'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +
+    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +
+    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +
+    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +
+    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +
+    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +
+    'option,output,progress,select,textarea,details,dialog,menu,' +
+    'summary,template,blockquote,iframe,tfoot';
+// https://developer.mozilla.org/en-US/docs/Web/SVG/Element
+const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +
+    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +
+    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +
+    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +
+    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +
+    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +
+    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +
+    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +
+    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +
+    'text,textPath,title,tspan,unknown,use,view';
+function resolveVueCompilerOptions(vueOptions) {
+    const target = vueOptions.target ?? 3.3;
+    const lib = vueOptions.lib || (target < 2.7 ? '@vue/runtime-dom' : 'vue');
+    return {
+        ...vueOptions,
+        target,
+        extensions: vueOptions.extensions ?? ['.vue'],
+        lib,
+        jsxSlots: vueOptions.jsxSlots ?? false,
+        strictTemplates: vueOptions.strictTemplates ?? false,
+        skipTemplateCodegen: vueOptions.skipTemplateCodegen ?? false,
+        nativeTags: vueOptions.nativeTags ?? [...new Set([
+                ...HTML_TAGS.split(','),
+                ...SVG_TAGS.split(','),
+                // fix https://github.com/johnsoncodehk/volar/issues/1340
+                'hgroup',
+                'slot',
+                'component',
+            ])],
+        dataAttributes: vueOptions.dataAttributes ?? [],
+        htmlAttributes: vueOptions.htmlAttributes ?? ['aria-*'],
+        optionsWrapper: vueOptions.optionsWrapper ?? (target >= 2.7
+            ? [`(await import('${lib}')).defineComponent(`, `)`]
+            : [`(await import('vue')).default.extend(`, `)`]),
+        macros: {
+            defineProps: ['defineProps'],
+            defineSlots: ['defineSlots'],
+            defineEmits: ['defineEmits'],
+            defineExpose: ['defineExpose'],
+            defineModel: ['defineModel'],
+            defineOptions: ['defineOptions'],
+            withDefaults: ['withDefaults'],
+            ...vueOptions.macros,
+        },
+        plugins: vueOptions.plugins ?? [],
+        hooks: vueOptions.hooks ?? [],
+        // experimental
+        experimentalDefinePropProposal: vueOptions.experimentalDefinePropProposal ?? false,
+        experimentalAdditionalLanguageModules: vueOptions.experimentalAdditionalLanguageModules ?? [],
+        experimentalResolveStyleCssClasses: vueOptions.experimentalResolveStyleCssClasses ?? 'scoped',
+        // https://github.com/vuejs/vue-next/blob/master/packages/compiler-dom/src/transforms/vModel.ts#L49-L51
+        // https://vuejs.org/guide/essentials/forms.html#form-input-bindings
+        experimentalModelPropName: vueOptions.experimentalModelPropName ?? {
+            '': {
+                input: true
+            },
+            value: {
+                input: { type: 'text' },
+                textarea: true,
+                select: true
+            }
+        },
+        experimentalUseElementAccessInTemplate: vueOptions.experimentalUseElementAccessInTemplate ?? false,
+    };
+}
+exports.resolveVueCompilerOptions = resolveVueCompilerOptions;
+//# sourceMappingURL=ts.js.map

+ 3 - 0
node_modules/@vue/language-core/out/utils/vue2TemplateCompiler.d.ts

@@ -0,0 +1,3 @@
+import * as CompilerDOM from '@vue/compiler-dom';
+export declare function compile(template: string, options?: CompilerDOM.CompilerOptions): CompilerDOM.CodegenResult;
+//# sourceMappingURL=vue2TemplateCompiler.d.ts.map

+ 86 - 0
node_modules/@vue/language-core/out/utils/vue2TemplateCompiler.js

@@ -0,0 +1,86 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.compile = void 0;
+const CompilerDOM = require("@vue/compiler-dom");
+const Vue2TemplateCompiler = require('vue-template-compiler/build');
+function compile(template, options = {}) {
+    const onError = options.onError;
+    const onWarn = options.onWarn;
+    options.onError = (error) => {
+        if (error.code === 33 // :key binding allowed in v-for template child in vue 2
+            || error.code === 29 // fix https://github.com/vuejs/language-tools/issues/1638
+        ) {
+            return;
+        }
+        if (onError) {
+            onError(error);
+        }
+        else {
+            throw error;
+        }
+    };
+    const vue2Result = Vue2TemplateCompiler.compile(template, { outputSourceRange: true });
+    for (const error of vue2Result.errors) {
+        onError?.({
+            code: 'vue-template-compiler',
+            name: '',
+            message: error.msg,
+            loc: {
+                source: '',
+                start: { column: -1, line: -1, offset: error.start },
+                end: { column: -1, line: -1, offset: error.end ?? error.start },
+            },
+        });
+    }
+    for (const error of vue2Result.tips) {
+        onWarn?.({
+            code: 'vue-template-compiler',
+            name: '',
+            message: error.msg,
+            loc: {
+                source: '',
+                start: { column: -1, line: -1, offset: error.start },
+                end: { column: -1, line: -1, offset: error.end ?? error.start },
+            },
+        });
+    }
+    return baseCompile(template, Object.assign({}, CompilerDOM.parserOptions, options, {
+        nodeTransforms: [
+            ...CompilerDOM.DOMNodeTransforms,
+            ...(options.nodeTransforms || [])
+        ],
+        directiveTransforms: Object.assign({}, CompilerDOM.DOMDirectiveTransforms, options.directiveTransforms || {}),
+    }));
+}
+exports.compile = compile;
+function baseCompile(template, options = {}) {
+    const onError = options.onError || ((error) => { throw error; });
+    const isModuleMode = options.mode === 'module';
+    const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode;
+    if (!prefixIdentifiers && options.cacheHandlers) {
+        onError(CompilerDOM.createCompilerError(49));
+    }
+    if (options.scopeId && !isModuleMode) {
+        onError(CompilerDOM.createCompilerError(50));
+    }
+    const ast = CompilerDOM.baseParse(template, options);
+    const [nodeTransforms, directiveTransforms] = CompilerDOM.getBaseTransformPreset(prefixIdentifiers);
+    // v-for > v-if in vue 2
+    const transformIf = nodeTransforms[1];
+    const transformFor = nodeTransforms[3];
+    nodeTransforms[1] = transformFor;
+    nodeTransforms[3] = transformIf;
+    CompilerDOM.transform(ast, Object.assign({}, options, {
+        prefixIdentifiers,
+        nodeTransforms: [
+            ...nodeTransforms,
+            ...(options.nodeTransforms || []) // user transforms
+        ],
+        directiveTransforms: Object.assign({}, directiveTransforms, options.directiveTransforms || {} // user transforms
+        )
+    }));
+    return CompilerDOM.generate(ast, Object.assign({}, options, {
+        prefixIdentifiers
+    }));
+}
+//# sourceMappingURL=vue2TemplateCompiler.js.map

+ 4 - 0
node_modules/@vue/language-core/out/virtualFile/computedFiles.d.ts

@@ -0,0 +1,4 @@
+import { VirtualFile } from '@volar/language-core';
+import type { Sfc, VueLanguagePlugin } from '../types';
+export declare function computedFiles(plugins: ReturnType<VueLanguagePlugin>[], fileName: string, sfc: Sfc, codegenStack: boolean): () => VirtualFile[];
+//# sourceMappingURL=computedFiles.d.ts.map

+ 204 - 0
node_modules/@vue/language-core/out/virtualFile/computedFiles.js

@@ -0,0 +1,204 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computedFiles = void 0;
+const source_map_1 = require("@volar/source-map");
+const muggle = require("muggle-string");
+const embeddedFile_1 = require("./embeddedFile");
+const computeds_1 = require("computeds");
+function computedFiles(plugins, fileName, sfc, codegenStack) {
+    const nameToBlock = (0, computeds_1.computed)(() => {
+        const blocks = {};
+        if (sfc.template) {
+            blocks[sfc.template.name] = sfc.template;
+        }
+        if (sfc.script) {
+            blocks[sfc.script.name] = sfc.script;
+        }
+        if (sfc.scriptSetup) {
+            blocks[sfc.scriptSetup.name] = sfc.scriptSetup;
+        }
+        for (const block of sfc.styles) {
+            blocks[block.name] = block;
+        }
+        for (const block of sfc.customBlocks) {
+            blocks[block.name] = block;
+        }
+        return blocks;
+    });
+    const pluginsResult = plugins.map(plugin => compiledPluginFiles(plugins, plugin, fileName, sfc, nameToBlock, codegenStack));
+    const flatResult = (0, computeds_1.computed)(() => pluginsResult.map(r => r()).flat());
+    const structuredResult = (0, computeds_1.computed)(() => {
+        const embeddedFiles = [];
+        let remain = [...flatResult()];
+        while (remain.length) {
+            const beforeLength = remain.length;
+            consumeRemain();
+            if (beforeLength === remain.length) {
+                break;
+            }
+        }
+        for (const { file, snapshot, mappings, codegenStacks } of remain) {
+            embeddedFiles.push({
+                ...file,
+                snapshot,
+                mappings,
+                codegenStacks,
+                embeddedFiles: [],
+            });
+            console.error('Unable to resolve embedded: ' + file.parentFileName + ' -> ' + file.fileName);
+        }
+        return embeddedFiles;
+        function consumeRemain() {
+            for (let i = remain.length - 1; i >= 0; i--) {
+                const { file, snapshot, mappings, codegenStacks } = remain[i];
+                if (!file.parentFileName) {
+                    embeddedFiles.push({
+                        ...file,
+                        snapshot,
+                        mappings,
+                        codegenStacks,
+                        embeddedFiles: [],
+                    });
+                    remain.splice(i, 1);
+                }
+                else {
+                    const parent = findParentStructure(file.parentFileName, embeddedFiles);
+                    if (parent) {
+                        parent.embeddedFiles.push({
+                            ...file,
+                            snapshot,
+                            mappings,
+                            codegenStacks,
+                            embeddedFiles: [],
+                        });
+                        remain.splice(i, 1);
+                    }
+                }
+            }
+        }
+        function findParentStructure(fileName, current) {
+            for (const child of current) {
+                if (child.fileName === fileName) {
+                    return child;
+                }
+                let parent = findParentStructure(fileName, child.embeddedFiles);
+                if (parent) {
+                    return parent;
+                }
+            }
+        }
+    });
+    return structuredResult;
+}
+exports.computedFiles = computedFiles;
+function compiledPluginFiles(plugins, plugin, fileName, sfc, nameToBlock, codegenStack) {
+    const embeddedFiles = {};
+    const files = (0, computeds_1.computed)(() => {
+        try {
+            if (!plugin.getEmbeddedFileNames) {
+                return Object.values(embeddedFiles);
+            }
+            const embeddedFileNames = plugin.getEmbeddedFileNames(fileName, sfc);
+            for (const oldFileName of Object.keys(embeddedFiles)) {
+                if (!embeddedFileNames.includes(oldFileName)) {
+                    delete embeddedFiles[oldFileName];
+                }
+            }
+            for (const embeddedFileName of embeddedFileNames) {
+                if (!embeddedFiles[embeddedFileName]) {
+                    embeddedFiles[embeddedFileName] = (0, computeds_1.computed)(() => {
+                        const [content, stacks] = codegenStack ? muggle.track([]) : [[], []];
+                        const file = new embeddedFile_1.VueEmbeddedFile(embeddedFileName, content, stacks);
+                        for (const plugin of plugins) {
+                            if (!plugin.resolveEmbeddedFile) {
+                                continue;
+                            }
+                            try {
+                                plugin.resolveEmbeddedFile(fileName, sfc, file);
+                            }
+                            catch (e) {
+                                console.error(e);
+                            }
+                        }
+                        const newText = (0, source_map_1.toString)(file.content);
+                        const changeRanges = new Map();
+                        const snapshot = {
+                            getText: (start, end) => newText.slice(start, end),
+                            getLength: () => newText.length,
+                            getChangeRange(oldSnapshot) {
+                                if (!changeRanges.has(oldSnapshot)) {
+                                    changeRanges.set(oldSnapshot, undefined);
+                                    const oldText = oldSnapshot.getText(0, oldSnapshot.getLength());
+                                    const changeRange = fullDiffTextChangeRange(oldText, newText);
+                                    if (changeRange) {
+                                        changeRanges.set(oldSnapshot, changeRange);
+                                    }
+                                }
+                                return changeRanges.get(oldSnapshot);
+                            },
+                        };
+                        return {
+                            file,
+                            snapshot,
+                        };
+                    });
+                }
+            }
+        }
+        catch (e) {
+            console.error(e);
+        }
+        return Object.values(embeddedFiles);
+    });
+    return (0, computeds_1.computed)(() => {
+        return files().map(_file => {
+            const { file, snapshot } = _file();
+            const mappings = (0, source_map_1.buildMappings)(file.content);
+            for (const mapping of mappings) {
+                if (mapping.source !== undefined) {
+                    const block = nameToBlock()[mapping.source];
+                    if (block) {
+                        mapping.sourceRange = [
+                            mapping.sourceRange[0] + block.startTagEnd,
+                            mapping.sourceRange[1] + block.startTagEnd,
+                        ];
+                    }
+                    else {
+                        // ignore
+                    }
+                    mapping.source = undefined;
+                }
+            }
+            return {
+                file,
+                snapshot,
+                mappings,
+                codegenStacks: (0, source_map_1.buildStacks)(file.content, file.contentStacks),
+            };
+        });
+    });
+}
+function fullDiffTextChangeRange(oldText, newText) {
+    for (let start = 0; start < oldText.length && start < newText.length; start++) {
+        if (oldText[start] !== newText[start]) {
+            let end = oldText.length;
+            for (let i = 0; i < oldText.length - start && i < newText.length - start; i++) {
+                if (oldText[oldText.length - i - 1] !== newText[newText.length - i - 1]) {
+                    break;
+                }
+                end--;
+            }
+            let length = end - start;
+            let newLength = length + (newText.length - oldText.length);
+            if (newLength < 0) {
+                length -= newLength;
+                newLength = 0;
+            }
+            return {
+                span: { start, length },
+                newLength,
+            };
+        }
+    }
+}
+//# sourceMappingURL=computedFiles.js.map

+ 6 - 0
node_modules/@vue/language-core/out/virtualFile/computedMappings.d.ts

@@ -0,0 +1,6 @@
+import { FileRangeCapabilities } from '@volar/language-core';
+import { Mapping } from '@volar/source-map';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { Sfc } from '../types';
+export declare function computedMappings(snapshot: () => ts.IScriptSnapshot, sfc: Sfc): () => Mapping<FileRangeCapabilities>[];
+//# sourceMappingURL=computedMappings.d.ts.map

+ 39 - 0
node_modules/@vue/language-core/out/virtualFile/computedMappings.js

@@ -0,0 +1,39 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computedMappings = void 0;
+const language_core_1 = require("@volar/language-core");
+const muggle = require("muggle-string");
+const computeds_1 = require("computeds");
+function computedMappings(snapshot, sfc) {
+    return (0, computeds_1.computed)(() => {
+        const str = [[snapshot().getText(0, snapshot().getLength()), undefined, 0, language_core_1.FileRangeCapabilities.full]];
+        for (const block of [
+            sfc.script,
+            sfc.scriptSetup,
+            sfc.template,
+            ...sfc.styles,
+            ...sfc.customBlocks,
+        ]) {
+            if (block) {
+                muggle.replaceSourceRange(str, undefined, block.startTagEnd, block.endTagStart, [
+                    block.content,
+                    undefined,
+                    block.startTagEnd,
+                    {},
+                ]);
+            }
+        }
+        return str.map((m) => {
+            const text = m[0];
+            const start = m[2];
+            const end = start + text.length;
+            return {
+                sourceRange: [start, end],
+                generatedRange: [start, end],
+                data: m[3],
+            };
+        });
+    });
+}
+exports.computedMappings = computedMappings;
+//# sourceMappingURL=computedMappings.js.map

+ 5 - 0
node_modules/@vue/language-core/out/virtualFile/computedSfc.d.ts

@@ -0,0 +1,5 @@
+import type { SFCParseResult } from '@vue/compiler-sfc';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { Sfc, VueLanguagePlugin } from '../types';
+export declare function computedSfc(ts: typeof import('typescript/lib/tsserverlibrary'), plugins: ReturnType<VueLanguagePlugin>[], fileName: string, snapshot: () => ts.IScriptSnapshot, parsed: () => SFCParseResult | undefined): Sfc;
+//# sourceMappingURL=computedSfc.d.ts.map

+ 197 - 0
node_modules/@vue/language-core/out/virtualFile/computedSfc.js

@@ -0,0 +1,197 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computedSfc = void 0;
+const parseCssClassNames_1 = require("../utils/parseCssClassNames");
+const parseCssVars_1 = require("../utils/parseCssVars");
+const computeds_1 = require("computeds");
+function computedSfc(ts, plugins, fileName, snapshot, parsed) {
+    const untrackedSnapshot = () => {
+        (0, computeds_1.pauseTracking)();
+        const res = snapshot();
+        (0, computeds_1.resetTracking)();
+        return res;
+    };
+    const template = computedNullableSfcBlock('template', 'html', (0, computeds_1.computed)(() => parsed()?.descriptor.template ?? undefined), (_block, base) => {
+        const compiledAst = computedTemplateAst(base);
+        return mergeObject(base, {
+            get ast() { return compiledAst()?.ast; },
+            get errors() { return compiledAst()?.errors; },
+            get warnings() { return compiledAst()?.warnings; },
+        });
+    });
+    const script = computedNullableSfcBlock('script', 'js', (0, computeds_1.computed)(() => parsed()?.descriptor.script ?? undefined), (block, base) => {
+        const src = (0, computeds_1.computed)(() => block().src);
+        const srcOffset = (0, computeds_1.computed)(() => {
+            const _src = src();
+            return _src ? untrackedSnapshot().getText(0, base.startTagEnd).lastIndexOf(_src) - base.startTagEnd : -1;
+        });
+        const ast = (0, computeds_1.computed)(() => ts.createSourceFile(fileName + '.' + base.lang, base.content, ts.ScriptTarget.Latest));
+        return mergeObject(base, {
+            get src() { return src(); },
+            get srcOffset() { return srcOffset(); },
+            get ast() { return ast(); },
+        });
+    });
+    const scriptSetup = computedNullableSfcBlock('scriptSetup', 'js', (0, computeds_1.computed)(() => parsed()?.descriptor.scriptSetup ?? undefined), (block, base) => {
+        const generic = (0, computeds_1.computed)(() => {
+            const _block = block();
+            return typeof _block.attrs.generic === 'string' ? _block.attrs.generic : undefined;
+        });
+        const genericOffset = (0, computeds_1.computed)(() => {
+            const _generic = generic();
+            return _generic !== undefined ? untrackedSnapshot().getText(0, base.startTagEnd).lastIndexOf(_generic) - base.startTagEnd : -1;
+        });
+        const ast = (0, computeds_1.computed)(() => ts.createSourceFile(fileName + '.' + base.lang, base.content, ts.ScriptTarget.Latest));
+        return mergeObject(base, {
+            get generic() { return generic(); },
+            get genericOffset() { return genericOffset(); },
+            get ast() { return ast(); },
+        });
+    });
+    const styles = (0, computeds_1.computedArray)((0, computeds_1.computed)(() => parsed()?.descriptor.styles ?? []), (block, i) => {
+        const base = computedSfcBlock('style_' + i, 'css', block);
+        const module = (0, computeds_1.computed)(() => typeof block().module === 'string' ? block().module : block().module ? '$style' : undefined);
+        const scoped = (0, computeds_1.computed)(() => !!block().scoped);
+        const cssVars = (0, computeds_1.computed)(() => [...(0, parseCssVars_1.parseCssVars)(base.content)]);
+        const classNames = (0, computeds_1.computed)(() => [...(0, parseCssClassNames_1.parseCssClassNames)(base.content)]);
+        return (0, computeds_1.computed)(() => mergeObject(base, {
+            get module() { return module(); },
+            get scoped() { return scoped(); },
+            get cssVars() { return cssVars(); },
+            get classNames() { return classNames(); },
+        }));
+    });
+    const customBlocks = (0, computeds_1.computedArray)((0, computeds_1.computed)(() => parsed()?.descriptor.customBlocks ?? []), (block, i) => {
+        const base = computedSfcBlock('customBlock_' + i, 'txt', block);
+        const type = (0, computeds_1.computed)(() => block().type);
+        return (0, computeds_1.computed)(() => mergeObject(base, {
+            get type() { return type(); },
+        }));
+    });
+    return {
+        get template() { return template(); },
+        get script() { return script(); },
+        get scriptSetup() { return scriptSetup(); },
+        get styles() { return styles; },
+        get customBlocks() { return customBlocks; },
+        get templateAst() { return template()?.ast; },
+        get scriptAst() { return script()?.ast; },
+        get scriptSetupAst() { return scriptSetup()?.ast; },
+    };
+    function computedTemplateAst(base) {
+        let cache;
+        return (0, computeds_1.computed)(() => {
+            if (cache?.template === base.content) {
+                return {
+                    errors: [],
+                    warnings: [],
+                    ast: cache?.result.ast,
+                };
+            }
+            // incremental update
+            if (cache?.plugin.updateSFCTemplate) {
+                const change = untrackedSnapshot().getChangeRange(cache.snapshot);
+                if (change) {
+                    (0, computeds_1.pauseTracking)();
+                    const templateOffset = base.startTagEnd;
+                    (0, computeds_1.resetTracking)();
+                    const newText = untrackedSnapshot().getText(change.span.start, change.span.start + change.newLength);
+                    const newResult = cache.plugin.updateSFCTemplate(cache.result, {
+                        start: change.span.start - templateOffset,
+                        end: change.span.start + change.span.length - templateOffset,
+                        newText,
+                    });
+                    if (newResult) {
+                        cache.template = base.content;
+                        cache.snapshot = untrackedSnapshot();
+                        cache.result = newResult;
+                        return {
+                            errors: [],
+                            warnings: [],
+                            ast: newResult.ast,
+                        };
+                    }
+                }
+            }
+            const errors = [];
+            const warnings = [];
+            let options = {
+                onError: (err) => errors.push(err),
+                onWarn: (err) => warnings.push(err),
+                expressionPlugins: ['typescript'],
+            };
+            for (const plugin of plugins) {
+                if (plugin.resolveTemplateCompilerOptions) {
+                    options = plugin.resolveTemplateCompilerOptions(options);
+                }
+            }
+            for (const plugin of plugins) {
+                let result;
+                try {
+                    result = plugin.compileSFCTemplate?.(base.lang, base.content, options);
+                }
+                catch (e) {
+                    const err = e;
+                    errors.push(err);
+                }
+                if (result || errors.length) {
+                    if (result && !errors.length && !warnings.length) {
+                        cache = {
+                            template: base.content,
+                            snapshot: untrackedSnapshot(),
+                            result: result,
+                            plugin,
+                        };
+                    }
+                    else {
+                        cache = undefined;
+                    }
+                    return {
+                        errors,
+                        warnings,
+                        ast: result?.ast,
+                    };
+                }
+            }
+            return {
+                errors,
+                warnings,
+                ast: undefined,
+            };
+        });
+    }
+    function computedNullableSfcBlock(name, defaultLang, block, resolve) {
+        const hasBlock = (0, computeds_1.computed)(() => !!block());
+        return (0, computeds_1.computed)(() => {
+            if (!hasBlock()) {
+                return;
+            }
+            const _block = (0, computeds_1.computed)(() => block());
+            return resolve(_block, computedSfcBlock(name, defaultLang, _block));
+        });
+    }
+    function computedSfcBlock(name, defaultLang, block) {
+        const lang = (0, computeds_1.computed)(() => block().lang ?? defaultLang);
+        const attrs = (0, computeds_1.computed)(() => block().attrs); // TODO: computed it
+        const content = (0, computeds_1.computed)(() => block().content);
+        const startTagEnd = (0, computeds_1.computed)(() => block().loc.start.offset);
+        const endTagStart = (0, computeds_1.computed)(() => block().loc.end.offset);
+        const start = (0, computeds_1.computed)(() => untrackedSnapshot().getText(0, startTagEnd()).lastIndexOf('<' + block().type));
+        const end = (0, computeds_1.computed)(() => endTagStart() + untrackedSnapshot().getText(endTagStart(), untrackedSnapshot().getLength()).indexOf('>') + 1);
+        return {
+            name,
+            get lang() { return lang(); },
+            get attrs() { return attrs(); },
+            get content() { return content(); },
+            get startTagEnd() { return startTagEnd(); },
+            get endTagStart() { return endTagStart(); },
+            get start() { return start(); },
+            get end() { return end(); },
+        };
+    }
+}
+exports.computedSfc = computedSfc;
+function mergeObject(a, b) {
+    return Object.defineProperties(a, Object.getOwnPropertyDescriptors(b));
+}
+//# sourceMappingURL=computedSfc.js.map

+ 5 - 0
node_modules/@vue/language-core/out/virtualFile/computedVueSfc.d.ts

@@ -0,0 +1,5 @@
+import type { SFCParseResult } from '@vue/compiler-sfc';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { VueLanguagePlugin } from '../types';
+export declare function computedVueSfc(plugins: ReturnType<VueLanguagePlugin>[], fileName: string, snapshot: () => ts.IScriptSnapshot): () => SFCParseResult | undefined;
+//# sourceMappingURL=computedVueSfc.d.ts.map

+ 41 - 0
node_modules/@vue/language-core/out/virtualFile/computedVueSfc.js

@@ -0,0 +1,41 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computedVueSfc = void 0;
+const computeds_1 = require("computeds");
+function computedVueSfc(plugins, fileName, snapshot) {
+    let cache;
+    return (0, computeds_1.computed)(() => {
+        // incremental update
+        if (cache?.plugin.updateSFC) {
+            const change = snapshot().getChangeRange(cache.snapshot);
+            if (change) {
+                const newSfc = cache.plugin.updateSFC(cache.sfc, {
+                    start: change.span.start,
+                    end: change.span.start + change.span.length,
+                    newText: snapshot().getText(change.span.start, change.span.start + change.newLength),
+                });
+                if (newSfc) {
+                    cache.snapshot = snapshot();
+                    // force dirty
+                    cache.sfc = JSON.parse(JSON.stringify(newSfc));
+                    return cache.sfc;
+                }
+            }
+        }
+        for (const plugin of plugins) {
+            const sfc = plugin.parseSFC?.(fileName, snapshot().getText(0, snapshot().getLength()));
+            if (sfc) {
+                if (!sfc.errors.length) {
+                    cache = {
+                        snapshot: snapshot(),
+                        sfc,
+                        plugin,
+                    };
+                }
+                return sfc;
+            }
+        }
+    });
+}
+exports.computedVueSfc = computedVueSfc;
+//# sourceMappingURL=computedVueSfc.js.map

+ 13 - 0
node_modules/@vue/language-core/out/virtualFile/embeddedFile.d.ts

@@ -0,0 +1,13 @@
+import { FileCapabilities, FileKind, FileRangeCapabilities, MirrorBehaviorCapabilities } from '@volar/language-core';
+import { Mapping, Segment, StackNode } from '@volar/source-map';
+export declare class VueEmbeddedFile {
+    fileName: string;
+    content: Segment<FileRangeCapabilities>[];
+    contentStacks: StackNode[];
+    parentFileName?: string;
+    kind: FileKind;
+    capabilities: FileCapabilities;
+    mirrorBehaviorMappings: Mapping<[MirrorBehaviorCapabilities, MirrorBehaviorCapabilities]>[];
+    constructor(fileName: string, content: Segment<FileRangeCapabilities>[], contentStacks: StackNode[]);
+}
+//# sourceMappingURL=embeddedFile.d.ts.map

+ 16 - 0
node_modules/@vue/language-core/out/virtualFile/embeddedFile.js

@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VueEmbeddedFile = void 0;
+const language_core_1 = require("@volar/language-core");
+class VueEmbeddedFile {
+    constructor(fileName, content, contentStacks) {
+        this.fileName = fileName;
+        this.content = content;
+        this.contentStacks = contentStacks;
+        this.kind = language_core_1.FileKind.TextFile;
+        this.capabilities = {};
+        this.mirrorBehaviorMappings = [];
+    }
+}
+exports.VueEmbeddedFile = VueEmbeddedFile;
+//# sourceMappingURL=embeddedFile.js.map

+ 28 - 0
node_modules/@vue/language-core/out/virtualFile/vueFile.d.ts

@@ -0,0 +1,28 @@
+import { FileCapabilities, FileKind, VirtualFile } from '@volar/language-core';
+import { Stack } from '@volar/source-map';
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import { VueCompilerOptions, VueLanguagePlugin } from '../types';
+import { Signal } from 'computeds';
+export declare class VueFile implements VirtualFile {
+    fileName: string;
+    initSnapshot: ts.IScriptSnapshot;
+    vueCompilerOptions: VueCompilerOptions;
+    plugins: ReturnType<VueLanguagePlugin>[];
+    ts: typeof import('typescript/lib/tsserverlibrary');
+    codegenStack: boolean;
+    _snapshot: Signal<ts.IScriptSnapshot>;
+    getVueSfc: () => import("@vue/compiler-sfc").SFCParseResult | undefined;
+    sfc: import("../types").Sfc;
+    getMappings: () => import("@volar/source-map").Mapping<import("@volar/language-core").FileRangeCapabilities>[];
+    getEmbeddedFiles: () => VirtualFile[];
+    capabilities: FileCapabilities;
+    kind: FileKind;
+    codegenStacks: Stack[];
+    get embeddedFiles(): VirtualFile[];
+    get mainScriptName(): string;
+    get snapshot(): ts.IScriptSnapshot;
+    get mappings(): import("@volar/source-map").Mapping<import("@volar/language-core").FileRangeCapabilities>[];
+    constructor(fileName: string, initSnapshot: ts.IScriptSnapshot, vueCompilerOptions: VueCompilerOptions, plugins: ReturnType<VueLanguagePlugin>[], ts: typeof import('typescript/lib/tsserverlibrary'), codegenStack: boolean);
+    update(newSnapshot: ts.IScriptSnapshot): void;
+}
+//# sourceMappingURL=vueFile.d.ts.map

+ 53 - 0
node_modules/@vue/language-core/out/virtualFile/vueFile.js

@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VueFile = void 0;
+const language_core_1 = require("@volar/language-core");
+const computedFiles_1 = require("./computedFiles");
+const computedMappings_1 = require("./computedMappings");
+const computedSfc_1 = require("./computedSfc");
+const computedVueSfc_1 = require("./computedVueSfc");
+const computeds_1 = require("computeds");
+const jsxReg = /^\.(js|ts)x?$/;
+class VueFile {
+    get embeddedFiles() {
+        return this.getEmbeddedFiles();
+    }
+    get mainScriptName() {
+        let res = '';
+        (0, language_core_1.forEachEmbeddedFile)(this, file => {
+            if (file.kind === language_core_1.FileKind.TypeScriptHostFile && file.fileName.replace(this.fileName, '').match(jsxReg)) {
+                res = file.fileName;
+            }
+        });
+        return res;
+    }
+    get snapshot() {
+        return this._snapshot();
+    }
+    get mappings() {
+        return this.getMappings();
+    }
+    constructor(fileName, initSnapshot, vueCompilerOptions, plugins, ts, codegenStack) {
+        this.fileName = fileName;
+        this.initSnapshot = initSnapshot;
+        this.vueCompilerOptions = vueCompilerOptions;
+        this.plugins = plugins;
+        this.ts = ts;
+        this.codegenStack = codegenStack;
+        // computeds
+        this.getVueSfc = (0, computedVueSfc_1.computedVueSfc)(this.plugins, this.fileName, () => this._snapshot());
+        this.sfc = (0, computedSfc_1.computedSfc)(this.ts, this.plugins, this.fileName, () => this._snapshot(), this.getVueSfc);
+        this.getMappings = (0, computedMappings_1.computedMappings)(() => this._snapshot(), this.sfc);
+        this.getEmbeddedFiles = (0, computedFiles_1.computedFiles)(this.plugins, this.fileName, this.sfc, this.codegenStack);
+        // others
+        this.capabilities = language_core_1.FileCapabilities.full;
+        this.kind = language_core_1.FileKind.TextFile;
+        this.codegenStacks = [];
+        this._snapshot = (0, computeds_1.signal)(initSnapshot);
+    }
+    update(newSnapshot) {
+        this._snapshot.set(newSnapshot);
+    }
+}
+exports.VueFile = VueFile;
+//# sourceMappingURL=vueFile.js.map

+ 1 - 0
node_modules/computeds/out/computed.d.ts

@@ -0,0 +1 @@
+export declare function computed<T>(getter: (oldValue?: T) => T): () => T;

+ 21 - 0
node_modules/computeds/out/computed.js

@@ -0,0 +1,21 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computed = void 0;
+const tracker_1 = require("./tracker");
+const system_1 = require("./system");
+const dep_1 = require("./dep");
+function computed(getter) {
+    let oldValue;
+    const tracker = new tracker_1.Tracker(() => (0, system_1.trigger)(dep, 1 /* DirtyLevels.ComputedValueMaybeDirty */));
+    const fn = () => {
+        (0, system_1.track)(dep);
+        if (tracker.dirty
+            && !Object.is(oldValue, oldValue = tracker.track(() => getter(oldValue)))) {
+            (0, system_1.trigger)(dep, 2 /* DirtyLevels.ComputedValueDirty */);
+        }
+        return oldValue;
+    };
+    const dep = new dep_1.Dep(fn);
+    return fn;
+}
+exports.computed = computed;

+ 1 - 0
node_modules/computeds/out/computeds/computedArray.d.ts

@@ -0,0 +1 @@
+export declare function computedArray<I, O>(arr: () => I[], computedItem: (item: () => I, index: number) => () => O): readonly Readonly<O>[];

+ 44 - 0
node_modules/computeds/out/computeds/computedArray.js

@@ -0,0 +1,44 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computedArray = void 0;
+const computed_1 = require("../computed");
+function computedArray(arr, computedItem) {
+    const length = (0, computed_1.computed)(() => arr().length);
+    const keys = (0, computed_1.computed)(() => {
+        const keys = [];
+        for (let i = 0; i < length(); i++) {
+            keys.push(String(i));
+        }
+        return keys;
+    });
+    const items = (0, computed_1.computed)((array) => {
+        array ??= [];
+        while (array.length < length()) {
+            const index = array.length;
+            const item = (0, computed_1.computed)(() => arr()[index]);
+            array.push(computedItem(item, index));
+        }
+        if (array.length > length()) {
+            array.length = length();
+        }
+        return array;
+    });
+    return new Proxy({}, {
+        get(_, p, receiver) {
+            if (p === 'length') {
+                return length();
+            }
+            if (typeof p === 'string' && !isNaN(Number(p))) {
+                return items()[Number(p)]?.();
+            }
+            return Reflect.get(items(), p, receiver);
+        },
+        has(_, p) {
+            return Reflect.has(items(), p);
+        },
+        ownKeys() {
+            return keys();
+        },
+    });
+}
+exports.computedArray = computedArray;

+ 1 - 0
node_modules/computeds/out/computeds/computedSet.d.ts

@@ -0,0 +1 @@
+export declare function computedSet<T>(getter: () => Set<T>): () => Set<T>;

+ 14 - 0
node_modules/computeds/out/computeds/computedSet.js

@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.computedSet = void 0;
+const computed_1 = require("../computed");
+function computedSet(getter) {
+    return (0, computed_1.computed)((oldValue) => {
+        const newValue = getter();
+        if (oldValue?.size === newValue.size && [...oldValue].every(c => newValue.has(c))) {
+            return oldValue;
+        }
+        return newValue;
+    });
+}
+exports.computedSet = computedSet;

+ 5 - 0
node_modules/computeds/out/dep.d.ts

@@ -0,0 +1,5 @@
+import type { TrackToken } from './tracker';
+export declare class Dep extends Map<TrackToken, number> {
+    computed?: (() => void) | undefined;
+    constructor(computed?: (() => void) | undefined);
+}

+ 10 - 0
node_modules/computeds/out/dep.js

@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Dep = void 0;
+class Dep extends Map {
+    constructor(computed) {
+        super();
+        this.computed = computed;
+    }
+}
+exports.Dep = Dep;

+ 2 - 0
node_modules/computeds/out/effect.d.ts

@@ -0,0 +1,2 @@
+import { Tracker } from './tracker';
+export declare function effect(fn: () => void): Tracker;

+ 14 - 0
node_modules/computeds/out/effect.js

@@ -0,0 +1,14 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.effect = void 0;
+const tracker_1 = require("./tracker");
+function effect(fn) {
+    const tracker = new tracker_1.Tracker(() => { }, () => {
+        if (tracker.dirty) {
+            tracker.track(fn);
+        }
+    });
+    tracker.track(fn);
+    return tracker;
+}
+exports.effect = effect;

+ 7 - 0
node_modules/computeds/out/index.d.ts

@@ -0,0 +1,7 @@
+export * from './computed';
+export * from './effect';
+export * from './tracker';
+export * from './signal';
+export * from './system';
+export * from './computeds/computedArray';
+export * from './computeds/computedSet';

+ 23 - 0
node_modules/computeds/out/index.js

@@ -0,0 +1,23 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./computed"), exports);
+__exportStar(require("./effect"), exports);
+__exportStar(require("./tracker"), exports);
+__exportStar(require("./signal"), exports);
+__exportStar(require("./system"), exports);
+__exportStar(require("./computeds/computedArray"), exports);
+__exportStar(require("./computeds/computedSet"), exports);

+ 7 - 0
node_modules/computeds/out/signal.d.ts

@@ -0,0 +1,7 @@
+export interface Signal<T = any> {
+    (): T;
+    set(newValue: T): void;
+    markDirty(): void;
+}
+export declare function signal<T>(): Signal<T | undefined>;
+export declare function signal<T>(oldValue: T): Signal<T>;

+ 22 - 0
node_modules/computeds/out/signal.js

@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.signal = void 0;
+const system_1 = require("./system");
+const dep_1 = require("./dep");
+function signal(oldValue) {
+    const dep = new dep_1.Dep();
+    const fn = (() => {
+        (0, system_1.track)(dep);
+        return oldValue;
+    });
+    fn.markDirty = () => {
+        (0, system_1.trigger)(dep, 3 /* DirtyLevels.Dirty */);
+    };
+    fn.set = (newValue) => {
+        if (!Object.is(oldValue, oldValue = newValue)) {
+            fn.markDirty();
+        }
+    };
+    return fn;
+}
+exports.signal = signal;

+ 17 - 0
node_modules/computeds/out/system.d.ts

@@ -0,0 +1,17 @@
+import type { Dep } from './dep';
+import type { Tracker, TrackToken } from './tracker';
+export declare const enum DirtyLevels {
+    NotDirty = 0,
+    ComputedValueMaybeDirty = 1,
+    ComputedValueDirty = 2,
+    Dirty = 3
+}
+export declare let activeTrackers: Tracker[];
+export declare function pauseTracking(): void;
+export declare function resetTracking(): void;
+export declare function pauseEffect(): void;
+export declare function resetEffect(): void;
+export declare const depsMap: WeakMap<TrackToken, Dep[]>;
+export declare function track(dep: Dep): void;
+export declare function cleanupDepEffect(dep: Dep, tracker: Tracker): void;
+export declare function trigger(dep: Dep, dirtyLevel: DirtyLevels): void;

+ 100 - 0
node_modules/computeds/out/system.js

@@ -0,0 +1,100 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.trigger = exports.cleanupDepEffect = exports.track = exports.depsMap = exports.resetEffect = exports.pauseEffect = exports.resetTracking = exports.pauseTracking = exports.activeTrackers = void 0;
+exports.activeTrackers = [];
+let pauseEffectStack = 0;
+const pausedTrackers = [];
+const pausedEffects = [];
+function pauseTracking() {
+    pausedTrackers.push(exports.activeTrackers);
+    exports.activeTrackers = [];
+}
+exports.pauseTracking = pauseTracking;
+function resetTracking() {
+    exports.activeTrackers = pausedTrackers.pop();
+}
+exports.resetTracking = resetTracking;
+function pauseEffect() {
+    pauseEffectStack++;
+}
+exports.pauseEffect = pauseEffect;
+function resetEffect() {
+    pauseEffectStack--;
+    while (!pauseEffectStack && pausedEffects.length) {
+        pausedEffects.shift().effect();
+    }
+}
+exports.resetEffect = resetEffect;
+exports.depsMap = new WeakMap();
+const trackerRegistry = new FinalizationRegistry(trackToken => {
+    const deps = exports.depsMap.get(trackToken);
+    if (deps) {
+        for (const dep of deps) {
+            dep.delete(trackToken);
+        }
+        deps.length = 0;
+    }
+});
+function track(dep) {
+    if (exports.activeTrackers.length) {
+        const tracker = exports.activeTrackers[exports.activeTrackers.length - 1];
+        if (!tracker.trackToken) {
+            if (tracker.effect) {
+                tracker.trackToken = tracker;
+            }
+            else {
+                tracker.trackToken = new WeakRef(tracker);
+                trackerRegistry.register(tracker, tracker.trackToken, tracker);
+            }
+            exports.depsMap.set(tracker.trackToken, []);
+        }
+        const trackToken = tracker.trackToken;
+        const deps = exports.depsMap.get(trackToken);
+        if (deps) {
+            if (dep.get(tracker) !== tracker.trackId) {
+                dep.set(tracker, tracker.trackId);
+                const oldDep = deps[tracker.depsLength];
+                if (oldDep !== dep) {
+                    if (oldDep) {
+                        cleanupDepEffect(oldDep, tracker);
+                    }
+                    deps[tracker.depsLength++] = dep;
+                }
+                else {
+                    tracker.depsLength++;
+                }
+            }
+        }
+    }
+}
+exports.track = track;
+function cleanupDepEffect(dep, tracker) {
+    const trackId = dep.get(tracker);
+    if (trackId !== undefined && tracker.trackId !== trackId) {
+        dep.delete(tracker);
+    }
+}
+exports.cleanupDepEffect = cleanupDepEffect;
+function trigger(dep, dirtyLevel) {
+    pauseEffect();
+    for (const trackToken of dep.keys()) {
+        const tracker = trackToken.deref();
+        if (!tracker) {
+            continue;
+        }
+        if (tracker.dirtyLevel < dirtyLevel &&
+            (!tracker.runnings || dirtyLevel !== 2 /* DirtyLevels.ComputedValueDirty */)) {
+            const lastDirtyLevel = tracker.dirtyLevel;
+            tracker.dirtyLevel = dirtyLevel;
+            if (lastDirtyLevel === 0 /* DirtyLevels.NotDirty */ &&
+                (!tracker.queryings || dirtyLevel !== 2 /* DirtyLevels.ComputedValueDirty */)) {
+                tracker.spread();
+                if (tracker.effect) {
+                    pausedEffects.push(tracker);
+                }
+            }
+        }
+    }
+    resetEffect();
+}
+exports.trigger = trigger;

+ 17 - 0
node_modules/computeds/out/tracker.d.ts

@@ -0,0 +1,17 @@
+import { DirtyLevels } from './system';
+export type TrackToken = WeakRef<Tracker> | Tracker;
+export declare class Tracker {
+    spread: () => void;
+    effect?: (() => void) | undefined;
+    trackToken?: TrackToken;
+    dirtyLevel: DirtyLevels;
+    trackId: number;
+    runnings: number;
+    queryings: number;
+    depsLength: number;
+    constructor(spread: () => void, effect?: (() => void) | undefined);
+    get dirty(): boolean;
+    track<T>(fn: () => T): T;
+    reset(): void;
+    deref(): this;
+}

+ 78 - 0
node_modules/computeds/out/tracker.js

@@ -0,0 +1,78 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Tracker = void 0;
+const system_1 = require("./system");
+class Tracker {
+    constructor(spread, effect) {
+        this.spread = spread;
+        this.effect = effect;
+        this.dirtyLevel = 3 /* DirtyLevels.Dirty */;
+        this.trackId = 0;
+        this.runnings = 0;
+        this.queryings = 0;
+        this.depsLength = 0;
+    }
+    get dirty() {
+        if (this.dirtyLevel === 1 /* DirtyLevels.ComputedValueMaybeDirty */) {
+            this.dirtyLevel = 0 /* DirtyLevels.NotDirty */;
+            if (this.trackToken) {
+                const deps = system_1.depsMap.get(this.trackToken);
+                if (deps) {
+                    this.queryings++;
+                    (0, system_1.pauseTracking)();
+                    for (const dep of deps) {
+                        if (dep.computed) {
+                            dep.computed();
+                            if (this.dirtyLevel >= 2 /* DirtyLevels.ComputedValueDirty */) {
+                                break;
+                            }
+                        }
+                    }
+                    (0, system_1.resetTracking)();
+                    this.queryings--;
+                }
+            }
+        }
+        return this.dirtyLevel >= 2 /* DirtyLevels.ComputedValueDirty */;
+    }
+    track(fn) {
+        try {
+            system_1.activeTrackers.push(this);
+            this.runnings++;
+            preCleanup(this);
+            return fn();
+        }
+        finally {
+            postCleanup(this);
+            this.runnings--;
+            system_1.activeTrackers.pop();
+            if (!this.runnings) {
+                this.dirtyLevel = 0 /* DirtyLevels.NotDirty */;
+            }
+        }
+    }
+    reset() {
+        preCleanup(this);
+        postCleanup(this);
+        this.dirtyLevel = 3 /* DirtyLevels.Dirty */;
+    }
+    deref() {
+        return this;
+    }
+}
+exports.Tracker = Tracker;
+function preCleanup(tracker) {
+    tracker.trackId++;
+    tracker.depsLength = 0;
+}
+function postCleanup(tracker) {
+    if (tracker.trackToken) {
+        const deps = system_1.depsMap.get(tracker.trackToken);
+        if (deps && deps.length > tracker.depsLength) {
+            for (let i = tracker.depsLength; i < deps.length; i++) {
+                (0, system_1.cleanupDepEffect)(deps[i], tracker);
+            }
+            deps.length = tracker.depsLength;
+        }
+    }
+}

+ 1 - 0
node_modules/muggle-string/out/binarySearch.d.ts

@@ -0,0 +1 @@
+export declare function binarySearch(offsets: number[], start: number): number;

+ 25 - 0
node_modules/muggle-string/out/binarySearch.js

@@ -0,0 +1,25 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.binarySearch = void 0;
+function binarySearch(offsets, start) {
+    let low = 0;
+    let high = offsets.length - 1;
+    while (low <= high) {
+        const mid = Math.floor((low + high) / 2);
+        const midValue = offsets[mid];
+        if (midValue < start) {
+            low = mid + 1;
+        }
+        else if (midValue > start) {
+            high = mid - 1;
+        }
+        else {
+            low = mid;
+            high = mid;
+            break;
+        }
+    }
+    return Math.max(Math.min(low, high, offsets.length - 1), 0);
+}
+exports.binarySearch = binarySearch;
+//# sourceMappingURL=binarySearch.js.map

+ 10 - 0
node_modules/muggle-string/out/index.d.ts

@@ -0,0 +1,10 @@
+import { Segment } from "./types";
+export * from './types';
+export * from './track';
+export declare function getLength(segments: Segment<any>[]): number;
+export declare function toString<T extends Segment<any>>(segments: T[]): string;
+export declare function create(source: string): Segment[];
+export declare function replace<T extends Segment<any>>(segments: T[], pattern: string | RegExp, ...replacers: (T | ((match: string) => T))[]): void;
+export declare function replaceAll<T extends Segment<any>>(segments: T[], pattern: RegExp, ...replacers: (T | ((match: string) => T))[]): void;
+export declare function replaceSourceRange<T extends Segment<any>>(segments: T[], source: string | undefined, startOffset: number, endOffset: number, ...newSegments: T[]): boolean;
+export declare function replaceRange<T extends Segment<any>>(segments: T[], startOffset: number, endOffset: number, ...newSegments: T[]): void;

+ 176 - 0
node_modules/muggle-string/out/index.js

@@ -0,0 +1,176 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.replaceRange = exports.replaceSourceRange = exports.replaceAll = exports.replace = exports.create = exports.toString = exports.getLength = void 0;
+const binarySearch_1 = require("./binarySearch");
+const track_1 = require("./track");
+__exportStar(require("./types"), exports);
+__exportStar(require("./track"), exports);
+function getLength(segments) {
+    let length = 0;
+    for (const segment of segments) {
+        length += typeof segment == 'string' ? segment.length : segment[0].length;
+    }
+    return length;
+}
+exports.getLength = getLength;
+function toString(segments) {
+    return segments.map(s => typeof s === 'string' ? s : s[0]).join('');
+}
+exports.toString = toString;
+function create(source) {
+    return [[source, undefined, 0]];
+}
+exports.create = create;
+function replace(segments, pattern, ...replacers) {
+    const str = toString(segments);
+    const match = str.match(pattern);
+    if (match && match.index !== undefined) {
+        const startOffset = match.index;
+        const endOffset = startOffset + match[0].length;
+        (0, track_1.offsetStack)();
+        replaceRange(segments, startOffset, endOffset, ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
+        (0, track_1.resetOffsetStack)();
+    }
+}
+exports.replace = replace;
+function replaceAll(segments, pattern, ...replacers) {
+    const str = toString(segments);
+    const allMatch = str.matchAll(pattern);
+    let length = str.length;
+    let lengthDiff = 0;
+    for (const match of allMatch) {
+        if (match.index !== undefined) {
+            const startOffset = match.index + lengthDiff;
+            const endOffset = startOffset + match[0].length;
+            (0, track_1.offsetStack)();
+            replaceRange(segments, startOffset, endOffset, ...replacers.map(replacer => typeof replacer === 'function' ? replacer(match[0]) : replacer));
+            (0, track_1.resetOffsetStack)();
+            const newLength = getLength(segments);
+            lengthDiff += newLength - length;
+            length = newLength;
+        }
+    }
+}
+exports.replaceAll = replaceAll;
+function replaceSourceRange(segments, source, startOffset, endOffset, ...newSegments) {
+    for (const segment of segments) {
+        if (typeof segment === 'string') {
+            continue;
+        }
+        if (segment[1] === source) {
+            const segmentStart = typeof segment[2] === 'number' ? segment[2] : segment[2][0];
+            const segmentEnd = typeof segment[2] === 'number' ? segment[2] + segment[0].length : segment[2][1];
+            if (segmentStart <= startOffset && segmentEnd >= endOffset) {
+                const inserts = [];
+                if (startOffset > segmentStart) {
+                    inserts.push(trimSegmentEnd(segment, startOffset - segmentStart));
+                }
+                for (const newSegment of newSegments) {
+                    inserts.push(newSegment);
+                }
+                if (endOffset < segmentEnd) {
+                    inserts.push(trimSegmentStart(segment, endOffset - segmentEnd));
+                }
+                combineStrings(inserts);
+                (0, track_1.offsetStack)();
+                segments.splice(segments.indexOf(segment), 1, ...inserts);
+                (0, track_1.resetOffsetStack)();
+                return true;
+            }
+        }
+    }
+    return false;
+}
+exports.replaceSourceRange = replaceSourceRange;
+function replaceRange(segments, startOffset, endOffset, ...newSegments) {
+    const offsets = toOffsets(segments);
+    const startIndex = (0, binarySearch_1.binarySearch)(offsets, startOffset);
+    const endIndex = (0, binarySearch_1.binarySearch)(offsets, endOffset);
+    const startSegment = segments[startIndex];
+    const endSegment = segments[endIndex];
+    const startSegmentStart = offsets[startIndex];
+    const endSegmentStart = offsets[endIndex];
+    const endSegmentEnd = offsets[endIndex] + (typeof endSegment === 'string' ? endSegment.length : endSegment[0].length);
+    const inserts = [];
+    if (startOffset > startSegmentStart) {
+        inserts.push(trimSegmentEnd(startSegment, startOffset - startSegmentStart));
+    }
+    for (const newSegment of newSegments) {
+        inserts.push(newSegment);
+    }
+    if (endOffset < endSegmentEnd) {
+        inserts.push(trimSegmentStart(endSegment, endOffset - endSegmentStart));
+    }
+    combineStrings(inserts);
+    (0, track_1.offsetStack)();
+    segments.splice(startIndex, endIndex - startIndex + 1, ...inserts);
+    (0, track_1.resetOffsetStack)();
+}
+exports.replaceRange = replaceRange;
+function combineStrings(segments) {
+    for (let i = segments.length - 1; i >= 1; i--) {
+        if (typeof segments[i] === 'string' && typeof segments[i - 1] === 'string') {
+            segments[i - 1] = segments[i - 1] + segments[i];
+            (0, track_1.offsetStack)();
+            segments.splice(i, 1);
+            (0, track_1.resetOffsetStack)();
+        }
+    }
+}
+function trimSegmentEnd(segment, trimEnd) {
+    if (typeof segment === 'string') {
+        return segment.slice(0, trimEnd);
+    }
+    const originalString = segment[0];
+    const originalRange = segment[2];
+    const newString = originalString.slice(0, trimEnd);
+    const newRange = typeof originalRange === 'number' ? originalRange : [originalRange[0], originalRange[1] - (originalString.length - newString.length)];
+    return [
+        newString,
+        segment[1],
+        newRange,
+        ...segment.slice(3),
+    ];
+}
+function trimSegmentStart(segment, trimStart) {
+    if (typeof segment === 'string') {
+        return segment.slice(trimStart);
+    }
+    const originalString = segment[0];
+    const originalRange = segment[2];
+    const newString = originalString.slice(trimStart);
+    if (trimStart < 0) {
+        trimStart += originalString.length;
+    }
+    const newRange = typeof originalRange === 'number' ? originalRange + trimStart : [originalRange[0] + trimStart, originalRange[1]];
+    return [
+        newString,
+        segment[1],
+        newRange,
+        ...segment.slice(3),
+    ];
+}
+function toOffsets(segments) {
+    const offsets = [];
+    let offset = 0;
+    for (const segment of segments) {
+        offsets.push(offset);
+        offset += typeof segment == 'string' ? segment.length : segment[0].length;
+    }
+    return offsets;
+}
+//# sourceMappingURL=index.js.map

+ 5 - 0
node_modules/muggle-string/out/track.d.ts

@@ -0,0 +1,5 @@
+import { Segment, StackNode } from "./types";
+export declare function setTracking(value: boolean): void;
+export declare function offsetStack(): void;
+export declare function resetOffsetStack(): void;
+export declare function track<T extends Segment<any>[]>(segments: T, stacks?: StackNode[]): [T, StackNode[]];

+ 132 - 0
node_modules/muggle-string/out/track.js

@@ -0,0 +1,132 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.track = exports.resetOffsetStack = exports.offsetStack = exports.setTracking = void 0;
+let tracking = true;
+let stackOffset = 0;
+function setTracking(value) {
+    tracking = value;
+}
+exports.setTracking = setTracking;
+function offsetStack() {
+    stackOffset++;
+}
+exports.offsetStack = offsetStack;
+function resetOffsetStack() {
+    stackOffset--;
+}
+exports.resetOffsetStack = resetOffsetStack;
+function track(segments, stacks = []) {
+    return [
+        new Proxy(segments, {
+            get(target, prop, receiver) {
+                if (tracking) {
+                    if (prop === 'push')
+                        return push;
+                    if (prop === 'pop')
+                        return pop;
+                    if (prop === 'shift')
+                        return shift;
+                    if (prop === 'unshift')
+                        return unshift;
+                    if (prop === 'splice')
+                        return splice;
+                    if (prop === 'sort')
+                        return sort;
+                    if (prop === 'reverse')
+                        return reverse;
+                }
+                return Reflect.get(target, prop, receiver);
+            }
+        }),
+        stacks,
+    ];
+    function push(...items) {
+        stacks.push({ stack: getStack(), length: items.length });
+        return segments.push(...items);
+    }
+    function pop() {
+        if (stacks.length) {
+            const last = stacks[stacks.length - 1];
+            if (last.length > 1) {
+                last.length--;
+            }
+            else {
+                stacks.pop();
+            }
+        }
+        return segments.pop();
+    }
+    function shift() {
+        if (stacks.length) {
+            const first = stacks[0];
+            if (first.length > 1) {
+                first.length--;
+            }
+            else {
+                stacks.shift();
+            }
+        }
+        return segments.shift();
+    }
+    function unshift(...items) {
+        stacks.unshift({ stack: getStack(), length: items.length });
+        return segments.unshift(...items);
+    }
+    function splice(start, deleteCount, ...items) {
+        if (deleteCount === undefined) {
+            deleteCount = segments.length - start;
+        }
+        let _stackStart = 0;
+        let operateIndex;
+        for (let i = 0; i < stacks.length; i++) {
+            const stack = stacks[i];
+            const stackStart = _stackStart;
+            const stackEnd = stackStart + stack.length;
+            _stackStart = stackEnd;
+            if (start >= stackStart) {
+                operateIndex = i + 1;
+                const originalLength = stack.length;
+                stack.length = start - stackStart;
+                stacks.splice(operateIndex, 0, { stack: stack.stack, length: originalLength - stack.length });
+                break;
+            }
+        }
+        if (operateIndex === undefined) {
+            throw new Error('Invalid splice operation');
+        }
+        let _deleteCount = deleteCount;
+        for (let i = operateIndex; i < stacks.length; i++) {
+            const stack = stacks[i];
+            while (_deleteCount > 0 && stack.length > 0) {
+                stack.length--;
+                _deleteCount--;
+            }
+            if (_deleteCount === 0) {
+                break;
+            }
+        }
+        stacks.splice(operateIndex, 0, { stack: getStack(), length: items.length });
+        return segments.splice(start, deleteCount, ...items);
+    }
+    function sort(compareFn) {
+        stacks.splice(0, stacks.length, { stack: getStack(), length: segments.length });
+        return segments.sort(compareFn);
+    }
+    function reverse() {
+        stacks.splice(0, stacks.length, { stack: getStack(), length: segments.length });
+        return segments.reverse();
+    }
+    function getStack() {
+        const stack = new Error().stack;
+        let source = stack.split('\n')[3 + stackOffset].trim();
+        if (source.endsWith(')')) {
+            source = source.slice(source.lastIndexOf('(') + 1, -1);
+        }
+        else {
+            source = source.slice(source.lastIndexOf(' ') + 1);
+        }
+        return source;
+    }
+}
+exports.track = track;
+//# sourceMappingURL=track.js.map

+ 16 - 0
node_modules/muggle-string/out/types.d.ts

@@ -0,0 +1,16 @@
+declare const NO_DATA_SYMBOL: unique symbol;
+export type Segment<T = typeof NO_DATA_SYMBOL> = string | (T extends typeof NO_DATA_SYMBOL ? [
+    string,
+    string | undefined,
+    number | [number, number]
+] : [
+    string,
+    string | undefined,
+    number | [number, number],
+    T
+]);
+export interface StackNode {
+    length: number;
+    stack: string;
+}
+export {};

+ 3 - 0
node_modules/muggle-string/out/types.js

@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=types.js.map

+ 17 - 0
node_modules/vue-tsc/out/index.d.ts

@@ -0,0 +1,17 @@
+import type * as ts from 'typescript/lib/tsserverlibrary';
+import * as vue from '@vue/language-core';
+export type Hook = (program: _Program) => void;
+export type _Program = ts.Program & {
+    __vue: ProgramContext;
+};
+interface ProgramContext {
+    projectVersion: number;
+    options: ts.CreateProgramOptions;
+    languageHost: vue.TypeScriptLanguageHost;
+    vueCompilerOptions: Partial<vue.VueCompilerOptions>;
+    langaugeContext: vue.LanguageContext;
+    languageService: ts.LanguageService;
+}
+export declare function createProgram(options: ts.CreateProgramOptions): _Program;
+export {};
+//# sourceMappingURL=index.d.ts.map

+ 126 - 0
node_modules/vue-tsc/out/index.js

@@ -0,0 +1,126 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createProgram = void 0;
+const vue = require("@vue/language-core");
+const volarTs = require("@volar/typescript");
+const shared_1 = require("./shared");
+const windowsPathReg = /\\/g;
+function createProgram(options) {
+    if (!options.options.noEmit && !options.options.emitDeclarationOnly)
+        throw toThrow('js emit is not supported');
+    if (!options.options.noEmit && options.options.noEmitOnError)
+        throw toThrow('noEmitOnError is not supported');
+    if (options.options.extendedDiagnostics || options.options.generateTrace)
+        throw toThrow('--extendedDiagnostics / --generateTrace is not supported, please run `Write Virtual Files` in VSCode to write virtual files and use `--extendedDiagnostics` / `--generateTrace` via tsc instead of vue-tsc to debug.');
+    if (!options.host)
+        throw toThrow('!options.host');
+    const ts = require('typescript');
+    let program = options.oldProgram;
+    if (shared_1.state.hook) {
+        program = shared_1.state.hook.program;
+        program.__vue.options = options;
+    }
+    else if (!program) {
+        const ctx = {
+            projectVersion: 0,
+            options,
+            get languageHost() {
+                return languageHost;
+            },
+            get vueCompilerOptions() {
+                return vueCompilerOptions;
+            },
+            get languageService() {
+                return vueTsLs;
+            },
+            get langaugeContext() {
+                return languageContext;
+            },
+        };
+        const vueCompilerOptions = getVueCompilerOptions();
+        const scripts = new Map();
+        const languageHost = {
+            workspacePath: ctx.options.host.getCurrentDirectory().replace(windowsPathReg, '/'),
+            rootPath: ctx.options.host.getCurrentDirectory().replace(windowsPathReg, '/'),
+            getCompilationSettings: () => ctx.options.options,
+            getScriptFileNames: () => {
+                return ctx.options.rootNames;
+            },
+            getScriptSnapshot,
+            getProjectVersion: () => {
+                return ctx.projectVersion.toString();
+            },
+            getProjectReferences: () => ctx.options.projectReferences,
+            getCancellationToken: ctx.options.host.getCancellationToken ? () => ctx.options.host.getCancellationToken() : undefined,
+        };
+        const languageContext = vue.createLanguageContext(languageHost, vue.createLanguages(ts, languageHost.getCompilationSettings(), vueCompilerOptions));
+        const languageServiceHost = volarTs.createLanguageServiceHost(languageContext, ts, ts.sys);
+        const vueTsLs = ts.createLanguageService(languageServiceHost, volarTs.getDocumentRegistry(ts, ts.sys.useCaseSensitiveFileNames, languageHost.workspacePath));
+        volarTs.decorateLanguageService(languageContext.virtualFiles, vueTsLs, false);
+        program = volarTs.getProgram(ts, languageContext, vueTsLs, ts.sys);
+        program.__vue = ctx;
+        function getVueCompilerOptions() {
+            const tsConfig = ctx.options.options.configFilePath;
+            if (typeof tsConfig === 'string') {
+                return vue.createParsedCommandLine(ts, ts.sys, tsConfig.replace(windowsPathReg, '/')).vueOptions;
+            }
+            return {};
+        }
+        function getScriptSnapshot(fileName) {
+            return getScript(fileName)?.scriptSnapshot;
+        }
+        function getScript(fileName) {
+            const script = scripts.get(fileName);
+            if (script?.projectVersion === ctx.projectVersion) {
+                return script;
+            }
+            const modifiedTime = ts.sys.getModifiedTime?.(fileName)?.valueOf() ?? 0;
+            if (script?.modifiedTime === modifiedTime) {
+                return script;
+            }
+            if (ctx.options.host.fileExists(fileName)) {
+                const fileContent = ctx.options.host.readFile(fileName);
+                if (fileContent !== undefined) {
+                    const script = {
+                        projectVersion: ctx.projectVersion,
+                        modifiedTime,
+                        scriptSnapshot: ts.ScriptSnapshot.fromString(fileContent),
+                        version: ctx.options.host.createHash?.(fileContent) ?? fileContent,
+                    };
+                    scripts.set(fileName, script);
+                    return script;
+                }
+            }
+        }
+    }
+    else {
+        const ctx = program.__vue;
+        ctx.options = options;
+        ctx.projectVersion++;
+    }
+    const vueCompilerOptions = program.__vue.vueCompilerOptions;
+    if (vueCompilerOptions?.hooks) {
+        const index = (shared_1.state.hook?.index ?? -1) + 1;
+        if (index < vueCompilerOptions.hooks.length) {
+            const hookPath = vueCompilerOptions.hooks[index];
+            const hook = require(hookPath);
+            shared_1.state.hook = {
+                program,
+                index,
+                worker: (async () => await hook(program))(),
+            };
+            throw 'hook';
+        }
+    }
+    for (const rootName of options.rootNames) {
+        // register file watchers
+        options.host.getSourceFile(rootName, ts.ScriptTarget.ESNext);
+    }
+    return program;
+}
+exports.createProgram = createProgram;
+function toThrow(msg) {
+    console.error(msg);
+    return msg;
+}
+//# sourceMappingURL=index.js.map

+ 9 - 0
node_modules/vue-tsc/out/shared.d.ts

@@ -0,0 +1,9 @@
+import type { _Program } from './index';
+export declare const state: {
+    hook?: {
+        program: _Program;
+        index: number;
+        worker: Promise<any>;
+    };
+};
+//# sourceMappingURL=shared.d.ts.map

+ 5 - 0
node_modules/vue-tsc/out/shared.js

@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.state = void 0;
+exports.state = {};
+//# sourceMappingURL=shared.js.map

+ 444 - 0
yarn.lock

@@ -0,0 +1,444 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/helper-string-parser@^7.25.9":
+  version "7.25.9"
+  resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
+  integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
+
+"@babel/helper-validator-identifier@^7.25.9":
+  version "7.25.9"
+  resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
+  integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+
+"@babel/parser@^7.25.3":
+  version "7.26.7"
+  resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c"
+  integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==
+  dependencies:
+    "@babel/types" "^7.26.7"
+
+"@babel/types@^7.26.7":
+  version "7.26.7"
+  resolved "https://registry.npmmirror.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a"
+  integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==
+  dependencies:
+    "@babel/helper-string-parser" "^7.25.9"
+    "@babel/helper-validator-identifier" "^7.25.9"
+
+"@esbuild/android-arm64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
+  integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
+
+"@esbuild/android-arm@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
+  integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
+
+"@esbuild/android-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
+  integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
+
+"@esbuild/darwin-arm64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
+  integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
+
+"@esbuild/darwin-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
+  integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
+
+"@esbuild/freebsd-arm64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
+  integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
+
+"@esbuild/freebsd-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
+  integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
+
+"@esbuild/linux-arm64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
+  integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
+
+"@esbuild/linux-arm@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
+  integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
+
+"@esbuild/linux-ia32@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
+  integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
+
+"@esbuild/linux-loong64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
+  integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
+
+"@esbuild/linux-mips64el@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
+  integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
+
+"@esbuild/linux-ppc64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
+  integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
+
+"@esbuild/linux-riscv64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
+  integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
+
+"@esbuild/linux-s390x@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
+  integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
+
+"@esbuild/linux-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
+  integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
+
+"@esbuild/netbsd-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
+  integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
+
+"@esbuild/openbsd-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
+  integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
+
+"@esbuild/sunos-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
+  integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
+
+"@esbuild/win32-arm64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
+  integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
+
+"@esbuild/win32-ia32@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
+  integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
+
+"@esbuild/win32-x64@0.18.20":
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
+  integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
+
+"@jridgewell/sourcemap-codec@^1.5.0":
+  version "1.5.0"
+  resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
+  integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+
+"@vitejs/plugin-vue@^4.2.3":
+  version "4.6.2"
+  resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz#057d2ded94c4e71b94e9814f92dcd9306317aa46"
+  integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==
+
+"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1":
+  version "1.11.1"
+  resolved "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f"
+  integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==
+  dependencies:
+    "@volar/source-map" "1.11.1"
+
+"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1":
+  version "1.11.1"
+  resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f"
+  integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==
+  dependencies:
+    muggle-string "^0.3.1"
+
+"@volar/typescript@~1.11.1":
+  version "1.11.1"
+  resolved "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627"
+  integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==
+  dependencies:
+    "@volar/language-core" "1.11.1"
+    path-browserify "^1.0.1"
+
+"@vue/compiler-core@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05"
+  integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==
+  dependencies:
+    "@babel/parser" "^7.25.3"
+    "@vue/shared" "3.5.13"
+    entities "^4.5.0"
+    estree-walker "^2.0.2"
+    source-map-js "^1.2.0"
+
+"@vue/compiler-dom@3.5.13", "@vue/compiler-dom@^3.3.0":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58"
+  integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==
+  dependencies:
+    "@vue/compiler-core" "3.5.13"
+    "@vue/shared" "3.5.13"
+
+"@vue/compiler-sfc@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46"
+  integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==
+  dependencies:
+    "@babel/parser" "^7.25.3"
+    "@vue/compiler-core" "3.5.13"
+    "@vue/compiler-dom" "3.5.13"
+    "@vue/compiler-ssr" "3.5.13"
+    "@vue/shared" "3.5.13"
+    estree-walker "^2.0.2"
+    magic-string "^0.30.11"
+    postcss "^8.4.48"
+    source-map-js "^1.2.0"
+
+"@vue/compiler-ssr@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba"
+  integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==
+  dependencies:
+    "@vue/compiler-dom" "3.5.13"
+    "@vue/shared" "3.5.13"
+
+"@vue/language-core@1.8.27":
+  version "1.8.27"
+  resolved "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz#2ca6892cb524e024a44e554e4c55d7a23e72263f"
+  integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==
+  dependencies:
+    "@volar/language-core" "~1.11.1"
+    "@volar/source-map" "~1.11.1"
+    "@vue/compiler-dom" "^3.3.0"
+    "@vue/shared" "^3.3.0"
+    computeds "^0.0.1"
+    minimatch "^9.0.3"
+    muggle-string "^0.3.1"
+    path-browserify "^1.0.1"
+    vue-template-compiler "^2.7.14"
+
+"@vue/reactivity@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f"
+  integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==
+  dependencies:
+    "@vue/shared" "3.5.13"
+
+"@vue/runtime-core@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz#1fafa4bf0b97af0ebdd9dbfe98cd630da363a455"
+  integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==
+  dependencies:
+    "@vue/reactivity" "3.5.13"
+    "@vue/shared" "3.5.13"
+
+"@vue/runtime-dom@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz#610fc795de9246300e8ae8865930d534e1246215"
+  integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==
+  dependencies:
+    "@vue/reactivity" "3.5.13"
+    "@vue/runtime-core" "3.5.13"
+    "@vue/shared" "3.5.13"
+    csstype "^3.1.3"
+
+"@vue/server-renderer@3.5.13":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz#429ead62ee51de789646c22efe908e489aad46f7"
+  integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==
+  dependencies:
+    "@vue/compiler-ssr" "3.5.13"
+    "@vue/shared" "3.5.13"
+
+"@vue/shared@3.5.13", "@vue/shared@^3.3.0":
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f"
+  integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+computeds@^0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e"
+  integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==
+
+csstype@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+  integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+de-indent@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
+  integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
+
+entities@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+  integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+esbuild@^0.18.10:
+  version "0.18.20"
+  resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
+  integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
+  optionalDependencies:
+    "@esbuild/android-arm" "0.18.20"
+    "@esbuild/android-arm64" "0.18.20"
+    "@esbuild/android-x64" "0.18.20"
+    "@esbuild/darwin-arm64" "0.18.20"
+    "@esbuild/darwin-x64" "0.18.20"
+    "@esbuild/freebsd-arm64" "0.18.20"
+    "@esbuild/freebsd-x64" "0.18.20"
+    "@esbuild/linux-arm" "0.18.20"
+    "@esbuild/linux-arm64" "0.18.20"
+    "@esbuild/linux-ia32" "0.18.20"
+    "@esbuild/linux-loong64" "0.18.20"
+    "@esbuild/linux-mips64el" "0.18.20"
+    "@esbuild/linux-ppc64" "0.18.20"
+    "@esbuild/linux-riscv64" "0.18.20"
+    "@esbuild/linux-s390x" "0.18.20"
+    "@esbuild/linux-x64" "0.18.20"
+    "@esbuild/netbsd-x64" "0.18.20"
+    "@esbuild/openbsd-x64" "0.18.20"
+    "@esbuild/sunos-x64" "0.18.20"
+    "@esbuild/win32-arm64" "0.18.20"
+    "@esbuild/win32-ia32" "0.18.20"
+    "@esbuild/win32-x64" "0.18.20"
+
+estree-walker@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+fsevents@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+he@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+magic-string@^0.30.11:
+  version "0.30.17"
+  resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
+  integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
+  dependencies:
+    "@jridgewell/sourcemap-codec" "^1.5.0"
+
+minimatch@^9.0.3:
+  version "9.0.5"
+  resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+  integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+muggle-string@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a"
+  integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==
+
+nanoid@^3.3.8:
+  version "3.3.8"
+  resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
+  integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
+
+path-browserify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
+  integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
+
+picocolors@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
+  integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+postcss@^8.4.27, postcss@^8.4.48:
+  version "8.5.1"
+  resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214"
+  integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==
+  dependencies:
+    nanoid "^3.3.8"
+    picocolors "^1.1.1"
+    source-map-js "^1.2.1"
+
+rollup@^3.27.1:
+  version "3.29.5"
+  resolved "https://registry.npmmirror.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54"
+  integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+semver@^7.5.4:
+  version "7.7.1"
+  resolved "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
+  integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
+
+source-map-js@^1.2.0, source-map-js@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
+  integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
+typescript@^5.0.2:
+  version "5.7.3"
+  resolved "https://registry.npmmirror.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e"
+  integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==
+
+vite@^4.4.5:
+  version "4.5.9"
+  resolved "https://registry.npmmirror.com/vite/-/vite-4.5.9.tgz#f4dfd4c4295743b50c3e3f90df798d70de699e4f"
+  integrity sha512-qK9W4xjgD3gXbC0NmdNFFnVFLMWSNiR3swj957yutwzzN16xF/E7nmtAyp1rT9hviDroQANjE4HK3H4WqWdFtw==
+  dependencies:
+    esbuild "^0.18.10"
+    postcss "^8.4.27"
+    rollup "^3.27.1"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+vue-template-compiler@^2.7.14:
+  version "2.7.16"
+  resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b"
+  integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==
+  dependencies:
+    de-indent "^1.0.2"
+    he "^1.2.0"
+
+vue-tsc@^1.8.5:
+  version "1.8.27"
+  resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c"
+  integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==
+  dependencies:
+    "@volar/typescript" "~1.11.1"
+    "@vue/language-core" "1.8.27"
+    semver "^7.5.4"
+
+vue@^3.3.4:
+  version "3.5.13"
+  resolved "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a"
+  integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==
+  dependencies:
+    "@vue/compiler-dom" "3.5.13"
+    "@vue/compiler-sfc" "3.5.13"
+    "@vue/runtime-dom" "3.5.13"
+    "@vue/server-renderer" "3.5.13"
+    "@vue/shared" "3.5.13"