diff --git a/.vscode/launch.json b/.vscode/launch.json index 7ef11b5db0..1631ace705 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,6 +6,7 @@ "name": "Launch Client", "type": "extensionHost", "request": "launch", + "autoAttachChildProcesses": true, "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceRoot}/extensions/vscode", diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e05ce6689..9571468e5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,42 @@ > [Join the Insiders Program](https://github.com/vuejs/language-tools/wiki/Get-Insiders-Edition) for more exclusive features and updates. +## 2.0.28 official, 2.0.29 insiders (2024-07-22) + +### Features + +- **vscode:** focus mode Insiders +- **language-core:** Plugin API 2.1 + - Added plugin hooks: `getLanguageId`, `isValidFile`, `parseSFC2` + - Improve backward compatibility (#4585) - Thanks @zhiyuanzmj +- **language-core:** support default prop when using __typeProps (#4602) - Thanks @zhiyuanzmj +- **language-core:** improve nested plugins (#4581) - Thanks @zhiyuanzmj +- **language-service:** remove `v-bind` code action (#4601) +- **vscode:** add empty pattern to codeblock attributes scope (#4590) - Thanks @KermanX + +### Fixes + +- **tsc:** errors should be thrown instead of being console.log printed +- **language-server:** observe named pipes changes when server startup (#4292) +- **language-core:** infer define model type from options type (#4545) - Thanks @davidmatter +- **language-core:** type-checking not working with hyphen in slot name with JS (#4478) - Thanks @KermanX +- **language-core:** add type check for v-model without argument (#4598) - Thanks @zhiyuanzmj +- **language-service:** filter special tags (#4596) - Thanks @so1ve +- **typescript-plugin:** improve named pipes reliability (#4603) +- **language-core** property access is incorrectly identified as compound expression (#4600) +- **language-core** fix compatibility of generic component virtual code with TS 5.5 (#4577) +- **tsc** TS4082 not reported for functional component (#4569) + +### Other Changes + +- Upgraded Volar from `v2.4.0-alpha.15` to `v2.4.0-alpha.18`: + - Fix VS Code IntelliSense will be lost in new created files (#4424) + - Add workspace symbols support in Hybrid Mode (#4595) + - Add workspace `addMissingImports` action support in Hybrid Mode (#4586) +- Fix yarn 4 compatibility (#4587) +- Add vue vine to hybrid mode compatible list (#4543) - Thanks @so1ve +- Add global components prop validation test (#4542) - Thanks @davidmatter + ## 2.0.26 official, 2.0.27 insiders (2024-07-04) ### Features @@ -18,7 +54,7 @@ ### Other Changes -- Upgraded Volar from `v2.4.0-alpha.2` to `v2.4.0-alpha.14`: +- Upgraded Volar from `v2.4.0-alpha.2` to `v2.4.0-alpha.15`: - Fixed an issue where, when Hybrid Mode is disabled, TS support for Vue files not included in tsconfig may be missing. - Improved the consistency of `vue-tsc` and `tsc` behavior. (#3526) - Fixed the `--clean` flag support for `vue-tsc`. diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index 6467e204c2..908bc07e50 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "volar", - "version": "2.0.26", + "version": "2.0.28", "repository": { "type": "git", "url": "https://github.com/vuejs/language-tools.git", @@ -543,10 +543,10 @@ "devDependencies": { "@types/semver": "^7.5.3", "@types/vscode": "^1.82.0", - "@volar/vscode": "~2.4.0-alpha.15", - "@vue/language-core": "2.0.26", - "@vue/language-server": "2.0.26", - "@vue/typescript-plugin": "2.0.26", + "@volar/vscode": "~2.4.0-alpha.18", + "@vue/language-core": "2.0.28", + "@vue/language-server": "2.0.28", + "@vue/typescript-plugin": "2.0.28", "esbuild": "~0.21.0", "esbuild-plugin-copy": "latest", "esbuild-visualizer": "latest", diff --git a/extensions/vscode/src/common.ts b/extensions/vscode/src/common.ts index a1339d207a..985eefaf31 100644 --- a/extensions/vscode/src/common.ts +++ b/extensions/vscode/src/common.ts @@ -62,6 +62,7 @@ function isExtensionCompatibleWithHybridMode(extension: vscode.Extension) { || extension.id === 'styled-components.vscode-styled-components' || extension.id === 'Divlo.vscode-styled-jsx-languageserver' || extension.id === 'nrwl.angular-console' + || extension.id === 'ShenQingchuan.vue-vine-extension' ) { return true; } diff --git a/extensions/vscode/src/features/splitEditors.ts b/extensions/vscode/src/features/splitEditors.ts index 0b2cacda44..64a509f524 100644 --- a/extensions/vscode/src/features/splitEditors.ts +++ b/extensions/vscode/src/features/splitEditors.ts @@ -8,7 +8,7 @@ type SFCBlock = SFCParseResult['descriptor']['customBlocks'][number]; export function register(context: vscode.ExtensionContext, client: BaseLanguageClient) { - const getDocDescriptor = useDocDescriptor(); + const getDocDescriptor = useDocDescriptor(client); context.subscriptions.push(vscode.commands.registerCommand('vue.action.splitEditors', onSplit)); @@ -96,23 +96,23 @@ export function register(context: vscode.ExtensionContext, client: BaseLanguageC } } } +} - function useDocDescriptor() { +export function useDocDescriptor(client: BaseLanguageClient) { - let splitDocText: string | undefined; - let splitDocDescriptor: SFCParseResult | undefined; + let splitDocText: string | undefined; + let splitDocDescriptor: SFCParseResult | undefined; - return getDescriptor; + return getDescriptor; - async function getDescriptor(text: string) { - if (text !== splitDocText) { - splitDocText = text; - splitDocDescriptor = await client.sendRequest(ExecuteCommandRequest.type, { - command: commands.parseSfc, - arguments: [text], - } satisfies ExecuteCommandParams); - } - return splitDocDescriptor; + async function getDescriptor(text: string) { + if (text !== splitDocText) { + splitDocText = text; + splitDocDescriptor = await client.sendRequest(ExecuteCommandRequest.type, { + command: commands.parseSfc, + arguments: [text], + } satisfies ExecuteCommandParams); } + return splitDocDescriptor; } } diff --git a/extensions/vscode/syntaxes/markdown-vue.json b/extensions/vscode/syntaxes/markdown-vue.json index 198ebdd6ef..c95ea6be7d 100644 --- a/extensions/vscode/syntaxes/markdown-vue.json +++ b/extensions/vscode/syntaxes/markdown-vue.json @@ -20,7 +20,8 @@ "name": "fenced_code.block.language.markdown" }, "5": { - "name": "fenced_code.block.language.attributes.markdown" + "name": "fenced_code.block.language.attributes.markdown", + "patterns": [] } }, "endCaptures": { diff --git a/insiders.json b/insiders.json index 6d2ec1f3ac..7a0a860d7c 100644 --- a/insiders.json +++ b/insiders.json @@ -1,6 +1,14 @@ { - "latest": "2.0.25", + "latest": "2.0.27", "versions": [ + { + "version": "2.0.27", + "date": "2024-7-4", + "downloads": { + "GitHub": "https://github.com/volarjs/insiders/releases/tag/v2.0.27", + "AFDIAN": "https://afdian.net/p/fbd701003a0511ef806352540025c377" + } + }, { "version": "2.0.25", "date": "2024-6-30", @@ -122,4 +130,4 @@ } } ] -} \ No newline at end of file +} diff --git a/lerna.json b/lerna.json index fa01477078..e9830a7209 100644 --- a/lerna.json +++ b/lerna.json @@ -6,5 +6,5 @@ "packages/*", "test-workspace" ], - "version": "2.0.26" + "version": "2.0.28" } diff --git a/package.json b/package.json index a517f5a569..8fdf765785 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@lerna-lite/publish": "latest", "@tsslint/cli": "latest", "@tsslint/config": "latest", - "@volar/language-service": "~2.4.0-alpha.15", + "@volar/language-service": "~2.4.0-alpha.18", "typescript": "latest", "vite": "latest", "vitest": "latest" diff --git a/packages/component-meta/lib/base.ts b/packages/component-meta/lib/base.ts index f83a497cce..2b18d45d16 100644 --- a/packages/component-meta/lib/base.ts +++ b/packages/component-meta/lib/base.ts @@ -144,17 +144,14 @@ export function baseCreate( } }; - const vueLanguagePlugin = vue.createVueLanguagePlugin( + const vueLanguagePlugin = vue.createVueLanguagePlugin2( ts, id => id, - () => projectHost.getProjectVersion?.() ?? '', - fileName => { - const fileMap = new vue.FileMap(ts.sys.useCaseSensitiveFileNames); - for (const vueFileName of projectHost.getScriptFileNames()) { - fileMap.set(vueFileName, undefined); - } - return fileMap.has(fileName); - }, + vue.createRootFileChecker( + projectHost.getProjectVersion ? () => projectHost.getProjectVersion!() : undefined, + () => projectHost.getScriptFileNames(), + ts.sys.useCaseSensitiveFileNames + ), projectHost.getCompilationSettings(), vueCompilerOptions ); diff --git a/packages/component-meta/package.json b/packages/component-meta/package.json index 0f63f72814..a904348e96 100644 --- a/packages/component-meta/package.json +++ b/packages/component-meta/package.json @@ -1,6 +1,6 @@ { "name": "vue-component-meta", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "**/*.js", @@ -12,10 +12,10 @@ "directory": "packages/component-meta" }, "dependencies": { - "@volar/typescript": "~2.4.0-alpha.15", - "@vue/language-core": "2.0.26", + "@volar/typescript": "~2.4.0-alpha.18", + "@vue/language-core": "2.0.28", "path-browserify": "^1.0.1", - "vue-component-type-helpers": "2.0.26" + "vue-component-type-helpers": "2.0.28" }, "peerDependencies": { "typescript": "*" diff --git a/packages/component-type-helpers/package.json b/packages/component-type-helpers/package.json index ddd7b43b49..d03c4db3dc 100644 --- a/packages/component-type-helpers/package.json +++ b/packages/component-type-helpers/package.json @@ -1,6 +1,6 @@ { "name": "vue-component-type-helpers", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "**/*.js", diff --git a/packages/language-core/index.ts b/packages/language-core/index.ts index 390a66f6aa..d539d6591c 100644 --- a/packages/language-core/index.ts +++ b/packages/language-core/index.ts @@ -1,5 +1,5 @@ export * from './lib/codegen/template'; -export * from './lib/languageModule'; +export * from './lib/languagePlugin'; export * from './lib/parsers/scriptSetupRanges'; export * from './lib/plugins'; export * from './lib/virtualFile/vueFile'; diff --git a/packages/language-core/lib/codegen/script/component.ts b/packages/language-core/lib/codegen/script/component.ts index 8e76cefc88..db9305102c 100644 --- a/packages/language-core/lib/codegen/script/component.ts +++ b/packages/language-core/lib/codegen/script/component.ts @@ -80,7 +80,7 @@ export function* generatePropsOption( if (options.vueCompilerOptions.target >= 3.5 && ctx.generatedPropsType) { yield `__typeProps: {} as __VLS_PublicProps,${newLine}`; } - else { + if (options.vueCompilerOptions.target < 3.5 || !ctx.generatedPropsType || scriptSetupRanges.props.withDefaults) { const codegens: (() => Generator)[] = []; if (ctx.generatedPropsType) { diff --git a/packages/language-core/lib/codegen/script/globalTypes.ts b/packages/language-core/lib/codegen/script/globalTypes.ts index 0c3dbc21ea..7148e107b0 100644 --- a/packages/language-core/lib/codegen/script/globalTypes.ts +++ b/packages/language-core/lib/codegen/script/globalTypes.ts @@ -17,18 +17,9 @@ declare global { : `globalThis.JSX.Element;` } type __VLS_GlobalComponents = ${vueCompilerOptions.target >= 3.5 - ? `import('${vueCompilerOptions.lib}').GlobalComponents` + ? `import('${vueCompilerOptions.lib}').GlobalComponents;` : `import('${vueCompilerOptions.lib}').GlobalComponents & Pick;` } - type __VLS_BuiltInPublicProps = ${vueCompilerOptions.target >= 3.4 - ? `import('${vueCompilerOptions.lib}').PublicProps;` - : vueCompilerOptions.target >= 3.0 - ? `import('${vueCompilerOptions.lib}').VNodeProps - & import('${vueCompilerOptions.lib}').AllowedComponentProps - & import('${vueCompilerOptions.lib}').ComponentCustomProps;` - : `globalThis.JSX.IntrinsicAttributes;` - - } type __VLS_IsAny = 0 extends 1 & T ? true : false; type __VLS_PickNotAny = __VLS_IsAny extends true ? B : A; @@ -68,6 +59,7 @@ declare global { : T; function __VLS_withScope(ctx: T, scope: K): ctx is T & K; function __VLS_makeOptional(t: T): { [K in keyof T]?: T[K] }; + function __VLS_nonNullable(t: T): T extends null | undefined ? never : T; type __VLS_SelfComponent = string extends N ? {} : N extends string ? { [P in N]: C } : {}; type __VLS_WithComponent = diff --git a/packages/language-core/lib/codegen/script/index.ts b/packages/language-core/lib/codegen/script/index.ts index 77a535156f..c12ce1d839 100644 --- a/packages/language-core/lib/codegen/script/index.ts +++ b/packages/language-core/lib/codegen/script/index.ts @@ -125,7 +125,19 @@ export function* generateScript(options: ScriptCodegenOptions): Generator yield* generateDefineProp(options, options.sfc.scriptSetup); yield* generateScriptSetup(options, ctx, options.sfc.scriptSetup, options.scriptSetupRanges); } - yield endOfLine; + + yield `;`; + if (options.sfc.scriptSetup) { + // #4569 + yield [ + '', + 'scriptSetup', + options.sfc.scriptSetup.content.length, + codeFeatures.verification, + ]; + } + yield newLine; + if (options.globalTypes) { yield generateGlobalTypes(options.vueCompilerOptions); } diff --git a/packages/language-core/lib/codegen/script/scriptSetup.ts b/packages/language-core/lib/codegen/script/scriptSetup.ts index 2a7587d776..07024b5757 100644 --- a/packages/language-core/lib/codegen/script/scriptSetup.ts +++ b/packages/language-core/lib/codegen/script/scriptSetup.ts @@ -29,6 +29,15 @@ export function* generateScriptSetup( if (scriptSetup.generic) { if (!options.scriptRanges?.exportDefault) { + if (options.sfc.scriptSetup) { + // #4569 + yield [ + '', + 'scriptSetup', + options.sfc.scriptSetup.content.length, + codeFeatures.verification, + ]; + } yield `export default `; } yield `(<`; @@ -42,8 +51,8 @@ export function* generateScriptSetup( yield `,`; } yield `>(${newLine}` - + ` __VLS_props: Awaited['props'],${newLine}` - + ` __VLS_ctx?: ${ctx.helperTypes.Prettify.name}, 'attrs' | 'emit' | 'slots'>>,${newLine}` // use __VLS_Prettify for less dts code + + ` __VLS_props: NonNullable>['props'],${newLine}` + + ` __VLS_ctx?: ${ctx.helperTypes.Prettify.name}>, 'attrs' | 'emit' | 'slots'>>,${newLine}` // use __VLS_Prettify for less dts code + ` __VLS_expose?: NonNullable>['expose'],${newLine}` + ` __VLS_setup = (async () => {${newLine}`; yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, undefined, definePropMirrors); @@ -267,6 +276,17 @@ function* generateComponentProps( } yield* generateEmitsOption(options, scriptSetup, scriptSetupRanges); yield `})${endOfLine}`; + + yield `type __VLS_BuiltInPublicProps = ${options.vueCompilerOptions.target >= 3.4 + ? `import('${options.vueCompilerOptions.lib}').PublicProps;` + : options.vueCompilerOptions.target >= 3.0 + ? `import('${options.vueCompilerOptions.lib}').VNodeProps + & import('${options.vueCompilerOptions.lib}').AllowedComponentProps + & import('${options.vueCompilerOptions.lib}').ComponentCustomProps;` + : `globalThis.JSX.IntrinsicAttributes;` + }`; + yield endOfLine; + yield `let __VLS_functionalComponentProps!: `; yield `${ctx.helperTypes.OmitKeepDiscriminatedUnion.name}['$props'], keyof __VLS_BuiltInPublicProps>`; yield endOfLine; @@ -308,6 +328,8 @@ function* generateComponentProps( if (defineProp.name && defineProp.nameIsString) { // renaming support yield generateSfcBlockSection(scriptSetup, defineProp.name.start, defineProp.name.end, codeFeatures.navigation); + propName = scriptSetup.content.substring(defineProp.name.start, defineProp.name.end); + propName = propName.replace(/['"]+/g, ''); } else if (defineProp.name) { propName = scriptSetup.content.substring(defineProp.name.start, defineProp.name.end); @@ -320,18 +342,7 @@ function* generateComponentProps( yield defineProp.required ? `: ` : `?: `; - if (defineProp.type) { - yield scriptSetup.content.substring(defineProp.type.start, defineProp.type.end); - } - else if (!defineProp.nameIsString) { - yield `NonNullable`; - } - else if (defineProp.defaultValue) { - yield `typeof __VLS_defaults['${propName}']`; - } - else { - yield `any`; - } + yield* generateDefinePropType(scriptSetup, propName, defineProp); yield `,${newLine}`; if (defineProp.modifierType) { @@ -382,12 +393,7 @@ function* generateModelEmits( propName = propName.replace(/['"]+/g, ''); } yield `'update:${propName}': [${propName}:`; - if (defineProp.type) { - yield scriptSetup.content.substring(defineProp.type.start, defineProp.type.end); - } - else { - yield `any`; - } + yield* generateDefinePropType(scriptSetup, propName, defineProp); yield `]${endOfLine}`; } yield `}`; @@ -399,3 +405,21 @@ function* generateModelEmits( } yield endOfLine; } + +function* generateDefinePropType(scriptSetup: NonNullable, propName: string, defineProp: ScriptSetupRanges['defineProp'][number]) { + if (defineProp.type) { + // Infer from defineProp + yield scriptSetup.content.substring(defineProp.type.start, defineProp.type.end); + } + else if ((defineProp.name && defineProp.nameIsString) || !defineProp.nameIsString) { + // Infer from actual prop declaration code + yield `NonNullable`; + } + else if (defineProp.defaultValue) { + // Infer from defineProp({default: T}) + yield `typeof __VLS_defaults['${propName}']`; + } + else { + yield `any`; + } +} diff --git a/packages/language-core/lib/codegen/template/element.ts b/packages/language-core/lib/codegen/template/element.ts index 47291c5e31..e7e7e5e450 100644 --- a/packages/language-core/lib/codegen/template/element.ts +++ b/packages/language-core/lib/codegen/template/element.ts @@ -13,6 +13,7 @@ import type { TemplateCodegenOptions } from './index'; import { generateInterpolation } from './interpolation'; import { generatePropertyAccess } from './propertyAccess'; import { generateTemplateChild } from './templateChild'; +import { generateObjectProperty } from './objectProperty'; const colonReg = /:/g; @@ -246,6 +247,14 @@ export function* generateComponent( ctx.usedComponentCtxVars.add(componentCtxVar); const usedComponentEventsVar = yield* generateElementEvents(options, ctx, node, var_functionalComponent, var_componentInstance, var_componentEmit, var_componentEvents); + if (var_defineComponentCtx && ctx.usedComponentCtxVars.has(var_defineComponentCtx)) { + yield `const ${componentCtxVar} = __VLS_nonNullable(__VLS_pickFunctionalComponentCtx(${var_originalComponent}, ${var_componentInstance}))${endOfLine}`; + } + if (usedComponentEventsVar) { + yield `let ${var_componentEmit}!: typeof ${componentCtxVar}.emit${endOfLine}`; + yield `let ${var_componentEvents}!: __VLS_NormalizeEmits${endOfLine}`; + } + const slotDir = node.props.find(p => p.type === CompilerDOM.NodeTypes.DIRECTIVE && p.name === 'slot') as CompilerDOM.DirectiveNode; if (slotDir) { yield* generateComponentSlot(options, ctx, node, slotDir, currentComponent, componentCtxVar); @@ -253,14 +262,6 @@ export function* generateComponent( else { yield* generateElementChildren(options, ctx, node, currentComponent, componentCtxVar); } - - if (var_defineComponentCtx && ctx.usedComponentCtxVars.has(var_defineComponentCtx)) { - yield `const ${componentCtxVar} = __VLS_pickFunctionalComponentCtx(${var_originalComponent}, ${var_componentInstance})!${endOfLine}`; - } - if (usedComponentEventsVar) { - yield `let ${var_componentEmit}!: typeof ${componentCtxVar}.emit${endOfLine}`; - yield `let ${var_componentEvents}!: __VLS_NormalizeEmits${endOfLine}`; - } } export function* generateElement( @@ -419,12 +420,38 @@ function* generateComponentSlot( ctx.hasSlotElements.add(currentComponent); } const slotBlockVars: string[] = []; - let hasProps = false; - if (slotDir?.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { + yield `const {`; + if (slotDir?.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && slotDir.arg.content) { + yield* generateObjectProperty( + options, + ctx, + slotDir.arg.loc.source, + slotDir.arg.loc.start.offset, + slotDir.arg.isStatic ? ctx.codeFeatures.withoutHighlight : ctx.codeFeatures.all, + slotDir.arg.loc + ); + yield ': __VLS_thisSlot'; + } + else { + yield `default: `; + yield* wrapWith( + slotDir.loc.start.offset, + slotDir.loc.start.offset + ( + slotDir.loc.source.startsWith('#') + ? '#'.length + : slotDir.loc.source.startsWith('v-slot:') + ? 'v-slot:'.length + : 0 + ), + ctx.codeFeatures.withoutHighlightAndCompletion, + `__VLS_thisSlot` + ); + } + yield `} = __VLS_nonNullable(${componentCtxVar}.slots)${endOfLine}`; + if (slotDir?.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { const slotAst = createTsAst(options.ts, slotDir, `(${slotDir.exp.content}) => {}`); collectVars(options.ts, slotAst, slotAst, slotBlockVars); - hasProps = true; if (!slotDir.exp.content.includes(':')) { yield `const [`; yield [ @@ -433,7 +460,7 @@ function* generateComponentSlot( slotDir.exp.loc.start.offset, ctx.codeFeatures.all, ]; - yield `] = __VLS_getSlotParams(`; + yield `] = __VLS_getSlotParams(__VLS_thisSlot)${endOfLine}`; } else { yield `const `; @@ -443,45 +470,9 @@ function* generateComponentSlot( slotDir.exp.loc.start.offset, ctx.codeFeatures.all, ]; - yield ` = __VLS_getSlotParam(`; + yield ` = __VLS_getSlotParam(__VLS_thisSlot)${endOfLine}`; } } - yield* wrapWith( - (slotDir.arg ?? slotDir).loc.start.offset, - (slotDir.arg ?? slotDir).loc.end.offset, - ctx.codeFeatures.verification, - `(${componentCtxVar}.slots!)`, - ...( - slotDir?.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && slotDir.arg.content - ? generatePropertyAccess( - options, - ctx, - slotDir.arg.loc.source, - slotDir.arg.loc.start.offset, - slotDir.arg.isStatic ? ctx.codeFeatures.withoutHighlight : ctx.codeFeatures.all, - slotDir.arg.loc - ) - : [ - `.`, - ...wrapWith( - slotDir.loc.start.offset, - slotDir.loc.start.offset + ( - slotDir.loc.source.startsWith('#') - ? '#'.length - : slotDir.loc.source.startsWith('v-slot:') - ? 'v-slot:'.length - : 0 - ), - ctx.codeFeatures.withoutHighlightAndCompletion, - `default` - ) - ] - ) - ); - if (hasProps) { - yield `)`; - } - yield endOfLine; for (const varName of slotBlockVars) { ctx.addLocalVariable(varName); @@ -503,7 +494,7 @@ function* generateComponentSlot( isStatic = slotDir.arg.isStatic; } if (isStatic && slotDir && !slotDir.arg) { - yield `${componentCtxVar}.slots!['`; + yield `__VLS_nonNullable(${componentCtxVar}.slots)['`; yield [ '', 'template', diff --git a/packages/language-core/lib/codegen/template/elementChildren.ts b/packages/language-core/lib/codegen/template/elementChildren.ts index 7eb16dd18b..67e38651c1 100644 --- a/packages/language-core/lib/codegen/template/elementChildren.ts +++ b/packages/language-core/lib/codegen/template/elementChildren.ts @@ -28,7 +28,7 @@ export function* generateElementChildren( && node.tagType !== CompilerDOM.ElementTypes.ELEMENT && node.tagType !== CompilerDOM.ElementTypes.TEMPLATE ) { - yield `(${componentCtxVar}.slots!).`; + yield `__VLS_nonNullable(${componentCtxVar}.slots).`; yield* wrapWith( node.children[0].loc.start.offset, node.children[node.children.length - 1].loc.end.offset, diff --git a/packages/language-core/lib/codegen/template/elementEvents.ts b/packages/language-core/lib/codegen/template/elementEvents.ts index 33b2fcb064..a4fa92d959 100644 --- a/packages/language-core/lib/codegen/template/elementEvents.ts +++ b/packages/language-core/lib/codegen/template/elementEvents.ts @@ -196,7 +196,7 @@ export function isCompoundExpression(ts: typeof import('typescript'), ast: ts.So if (ts.isArrowFunction(child_2)) { result = false; } - else if (ts.isIdentifier(child_2)) { + else if (isPropertyAccessOrId(ts, child_2)) { result = false; } }); @@ -208,3 +208,13 @@ export function isCompoundExpression(ts: typeof import('typescript'), ast: ts.So } return result; } + +function isPropertyAccessOrId(ts: typeof import('typescript'), node: ts.Node): boolean { + if (ts.isIdentifier(node)) { + return true; + } + if (ts.isPropertyAccessExpression(node)) { + return isPropertyAccessOrId(ts, node.expression); + } + return false; +} diff --git a/packages/language-core/lib/codegen/template/elementProps.ts b/packages/language-core/lib/codegen/template/elementProps.ts index dcbd5a9102..7bbb49dbcc 100644 --- a/packages/language-core/lib/codegen/template/elementProps.ts +++ b/packages/language-core/lib/codegen/template/elementProps.ts @@ -132,7 +132,12 @@ export function* generateElementProps( (prop.loc as any).name_2 ?? ((prop.loc as any).name_2 = {}), shouldCamelize ) - : [propName] + : wrapWith( + prop.loc.start.offset, + prop.loc.start.offset + 'v-model'.length, + ctx.codeFeatures.verification, + propName + ) ), `: (`, ...genereatePropExp( diff --git a/packages/language-core/lib/languageModule.ts b/packages/language-core/lib/languagePlugin.ts similarity index 63% rename from packages/language-core/lib/languageModule.ts rename to packages/language-core/lib/languagePlugin.ts index f416de2e5e..d6bb0ff457 100644 --- a/packages/language-core/lib/languageModule.ts +++ b/packages/language-core/lib/languagePlugin.ts @@ -1,14 +1,12 @@ -import { forEachEmbeddedCode, type LanguagePlugin } from '@volar/language-core'; -import type * as ts from 'typescript'; -import { getBasePlugins } from './plugins'; -import type { VueCompilerOptions, VueLanguagePlugin } from './types'; -import { VueVirtualCode } from './virtualFile/vueFile'; +/// + +import { FileMap, forEachEmbeddedCode, type LanguagePlugin } from '@volar/language-core'; import * as CompilerDOM from '@vue/compiler-dom'; +import type * as ts from 'typescript'; +import { createPlugins } from './plugins'; +import type { VueCompilerOptions, VueLanguagePlugin, VueLanguagePluginReturn } from './types'; import * as CompilerVue2 from './utils/vue2TemplateCompiler'; -import useHtmlFilePlugin from './plugins/file-html'; -import useMdFilePlugin from './plugins/file-md'; -import useVueFilePlugin from './plugins/file-vue'; -import type * as _ from '@volar/typescript'; +import { VueVirtualCode } from './virtualFile/vueFile'; const normalFileRegistries: { key: string; @@ -38,7 +36,7 @@ function getVueFileRegistry(isGlobalTypesHolder: boolean, key: string, plugins: function getFileRegistryKey( compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions, - plugins: ReturnType[] + plugins: VueLanguagePluginReturn[] ) { const values = [ ...Object.keys(vueCompilerOptions) @@ -52,10 +50,46 @@ function getFileRegistryKey( return JSON.stringify(values); } +export function createRootFileChecker( + getProjectVersion: (() => string) | undefined, + getRootFileNames: () => string[], + caseSensitive: boolean +) { + const fileNames = new FileMap(caseSensitive); + let projectVersion: string | undefined; + return (fileName: string) => { + if (!getProjectVersion || projectVersion !== getProjectVersion()) { + projectVersion = getProjectVersion?.(); + fileNames.clear(); + for (const rootFileName of getRootFileNames()) { + fileNames.set(rootFileName, undefined); + } + } + return fileNames.has(fileName); + }; +} + +// TODO: replace `createVueLanguagePlugin` with `createVueLanguagePlugin2` in 2.1 export function createVueLanguagePlugin( ts: typeof import('typescript'), asFileName: (scriptId: T) => string, - getProjectVersion: () => string, + _getProjectVersion: (() => string) | undefined, + isRootFile: (fileName: string) => boolean, + compilerOptions: ts.CompilerOptions, + vueCompilerOptions: VueCompilerOptions +): LanguagePlugin { + return createVueLanguagePlugin2( + ts, + asFileName, + isRootFile, + compilerOptions, + vueCompilerOptions + ); +} + +export function createVueLanguagePlugin2( + ts: typeof import('typescript'), + asFileName: (scriptId: T) => string, isRootFile: (fileName: string) => boolean, compilerOptions: ts.CompilerOptions, vueCompilerOptions: VueCompilerOptions @@ -74,31 +108,21 @@ export function createVueLanguagePlugin( vueCompilerOptions, globalTypesHolder: undefined, }; - const basePlugins = getBasePlugins(pluginContext); - const vueSfcPlugin = useVueFilePlugin(pluginContext); - const vitePressSfcPlugin = useMdFilePlugin(pluginContext); - const petiteVueSfcPlugin = useHtmlFilePlugin(pluginContext); - - let canonicalRootFileNamesVersion: string | undefined; + const plugins = createPlugins(pluginContext); return { getLanguageId(scriptId) { - if (vueCompilerOptions.extensions.some(ext => asFileName(scriptId).endsWith(ext))) { - return 'vue'; - } - if (vueCompilerOptions.vitePressExtensions.some(ext => asFileName(scriptId).endsWith(ext))) { - return 'markdown'; - } - if (vueCompilerOptions.petiteVueExtensions.some(ext => asFileName(scriptId).endsWith(ext))) { - return 'html'; + const fileName = asFileName(scriptId); + for (const plugin of plugins) { + const languageId = plugin.getLanguageId?.(fileName); + if (languageId) { + return languageId; + } } }, createVirtualCode(scriptId, languageId, snapshot) { - if (languageId === 'vue' || languageId === 'markdown' || languageId === 'html') { - const fileName = asFileName(scriptId); - if (getProjectVersion() !== canonicalRootFileNamesVersion) { - canonicalRootFileNamesVersion = getProjectVersion(); - } + const fileName = asFileName(scriptId); + if (plugins.some(plugin => plugin.isValidFile?.(fileName, languageId))) { if (!pluginContext.globalTypesHolder && isRootFile(fileName)) { pluginContext.globalTypesHolder = fileName; } @@ -114,11 +138,7 @@ export function createVueLanguagePlugin( languageId, snapshot, vueCompilerOptions, - languageId === 'html' - ? [petiteVueSfcPlugin, ...basePlugins] - : languageId === 'markdown' - ? [vitePressSfcPlugin, ...basePlugins] - : [vueSfcPlugin, ...basePlugins], + plugins, ts, ); fileRegistry.set(fileName, code); @@ -155,15 +175,12 @@ export function createVueLanguagePlugin( // } // }, typescript: { - extraFileExtensions: [ - ...vueCompilerOptions.extensions, - ...vueCompilerOptions.vitePressExtensions, - ...vueCompilerOptions.petiteVueExtensions, - ].map(ext => ({ - extension: ext.slice(1), - isMixedContent: true, - scriptKind: 7 satisfies ts.ScriptKind.Deferred, - })), + extraFileExtensions: getAllExtensions(vueCompilerOptions) + .map(ext => ({ + extension: ext.slice(1), + isMixedContent: true, + scriptKind: 7 satisfies ts.ScriptKind.Deferred, + })), getServiceScript(root) { for (const code of forEachEmbeddedCode(root)) { if (/script_(js|jsx|ts|tsx)/.test(code.id)) { @@ -185,8 +202,23 @@ export function createVueLanguagePlugin( function getFileRegistry(isGlobalTypesHolder: boolean) { return getVueFileRegistry( isGlobalTypesHolder, - getFileRegistryKey(compilerOptions, vueCompilerOptions, basePlugins), + getFileRegistryKey(compilerOptions, vueCompilerOptions, plugins), vueCompilerOptions.plugins ); } } + +export function getAllExtensions(options: VueCompilerOptions) { + const result = new Set(); + for (const key in options) { + if (key === 'extensions' || key.endsWith('Extensions')) { + const value = options[key as keyof VueCompilerOptions]; + if (Array.isArray(value) && value.every(v => typeof v === 'string')) { + for (const ext of value) { + result.add(ext); + } + } + } + } + return [...result]; +} diff --git a/packages/language-core/lib/plugins.ts b/packages/language-core/lib/plugins.ts index 205d881ea6..e6645ebc60 100644 --- a/packages/language-core/lib/plugins.ts +++ b/packages/language-core/lib/plugins.ts @@ -1,19 +1,25 @@ +import useHtmlFilePlugin from './plugins/file-html'; +import useMdFilePlugin from './plugins/file-md'; +import useVueFilePlugin from './plugins/file-vue'; +import vueScriptJsPlugin from './plugins/vue-script-js'; import vueSfcCustomBlocks from './plugins/vue-sfc-customblocks'; import vueSfcScriptsFormat from './plugins/vue-sfc-scripts'; import vueSfcStyles from './plugins/vue-sfc-styles'; import vueSfcTemplate from './plugins/vue-sfc-template'; -import vueScriptJsPlugin from './plugins/vue-script-js'; import vueTemplateHtmlPlugin from './plugins/vue-template-html'; import vueTemplateInlineCssPlugin from './plugins/vue-template-inline-css'; import vueTemplateInlineTsPlugin from './plugins/vue-template-inline-ts'; import vueTsx from './plugins/vue-tsx'; -import { pluginVersion, type VueLanguagePlugin } from './types'; +import { validVersions, VueLanguagePlugin } from './types'; -export * from './plugins/shared' +export * from './plugins/shared'; -export function getBasePlugins(pluginContext: Parameters[0]) { +export function createPlugins(pluginContext: Parameters[0]) { const plugins: VueLanguagePlugin[] = [ + useVueFilePlugin, + useMdFilePlugin, + useHtmlFilePlugin, vueScriptJsPlugin, vueTemplateHtmlPlugin, vueTemplateInlineCssPlugin, @@ -27,16 +33,23 @@ export function getBasePlugins(pluginContext: Parameters[0]) ]; const pluginInstances = plugins - .map(plugin => { + .flatMap(plugin => { try { const instance = plugin(pluginContext); - instance.name ??= (plugin as any).__moduleName; + const moduleName = (plugin as any).__moduleName; + if (Array.isArray(instance)) { + for (let i = 0; i < instance.length; i++) { + instance[i].name ??= `${moduleName} (${i})`; + } + } else { + instance.name ??= moduleName; + } return instance; } catch (err) { console.warn('[Vue] Failed to create plugin', err); } }) - .filter((plugin): plugin is ReturnType => !!plugin) + .filter(plugin => !!plugin) .sort((a, b) => { const aOrder = a.order ?? 0; const bOrder = b.order ?? 0; @@ -44,10 +57,10 @@ export function getBasePlugins(pluginContext: Parameters[0]) }); return pluginInstances.filter(plugin => { - const valid = plugin.version === pluginVersion; - if (!valid) { - console.warn(`[Vue] Plugin ${JSON.stringify(plugin.name)} API version incompatible, expected "${pluginVersion}" but got "${plugin.version}".`); + if (!validVersions.includes(plugin.version)) { + console.warn(`[Vue] Plugin ${plugin.name} is not compatible with the current Vue language tools version. (version: ${plugin.version}, supported versions: ${JSON.stringify(validVersions)})`); + return false; } - return valid; + return true; }); } diff --git a/packages/language-core/lib/plugins/file-html.ts b/packages/language-core/lib/plugins/file-html.ts index 353cb3d8a8..036d6bf03b 100644 --- a/packages/language-core/lib/plugins/file-html.ts +++ b/packages/language-core/lib/plugins/file-html.ts @@ -4,13 +4,26 @@ import type { VueLanguagePlugin } from '../types'; const sfcBlockReg = /\<(script|style)\b([\s\S]*?)\>([\s\S]*?)\<\/\1\>/g; const langReg = /\blang\s*=\s*(['\"]?)(\S*)\b\1/; -const plugin: VueLanguagePlugin = () => { +const plugin: VueLanguagePlugin = ({ vueCompilerOptions }) => { return { - version: 2, + version: 2.1, - parseSFC(fileName, content) { + getLanguageId(fileName) { + if (vueCompilerOptions.petiteVueExtensions.some(ext => fileName.endsWith(ext))) { + return 'html'; + } + }, + + isValidFile(_fileName, languageId) { + return languageId === 'html'; + }, + + parseSFC2(fileName, languageId, content) { + if (languageId !== 'html') { + return; + } let sfc: SFCParseResult = { descriptor: { diff --git a/packages/language-core/lib/plugins/file-md.ts b/packages/language-core/lib/plugins/file-md.ts index fde444fd05..1c3bf353a5 100644 --- a/packages/language-core/lib/plugins/file-md.ts +++ b/packages/language-core/lib/plugins/file-md.ts @@ -13,13 +13,26 @@ const angleBracketReg = /\<\S*\:\S*\>/g; const linkReg = /\[[\s\S]*?\]\([\s\S]*?\)/g; const codeSnippetImportReg = /^\s*<<<\s*.+/gm; -const plugin: VueLanguagePlugin = () => { +const plugin: VueLanguagePlugin = ({ vueCompilerOptions }) => { return { - version: 2, + version: 2.1, - parseSFC(_fileName, content) { + getLanguageId(fileName) { + if (vueCompilerOptions.vitePressExtensions.some(ext => fileName.endsWith(ext))) { + return 'markdown'; + } + }, + + isValidFile(_fileName, languageId) { + return languageId === 'markdown'; + }, + + parseSFC2(_fileName, languageId, content) { + if (languageId !== 'markdown') { + return; + } content = content // code block diff --git a/packages/language-core/lib/plugins/file-vue.ts b/packages/language-core/lib/plugins/file-vue.ts index 6c94322ef8..476a44b015 100644 --- a/packages/language-core/lib/plugins/file-vue.ts +++ b/packages/language-core/lib/plugins/file-vue.ts @@ -1,13 +1,26 @@ import type { VueLanguagePlugin } from '../types'; import { parse } from '../utils/parseSfc'; -const plugin: VueLanguagePlugin = _ctx => { +const plugin: VueLanguagePlugin = ({ vueCompilerOptions }) => { return { - version: 2, + version: 2.1, - parseSFC(_fileName, content) { + getLanguageId(fileName) { + if (vueCompilerOptions.extensions.some(ext => fileName.endsWith(ext))) { + return 'vue'; + } + }, + + isValidFile(_fileName, languageId) { + return languageId === 'vue'; + }, + + parseSFC2(_fileName, languageId, content) { + if (languageId !== 'vue') { + return; + } return parse(content); }, diff --git a/packages/language-core/lib/plugins/vue-script-js.ts b/packages/language-core/lib/plugins/vue-script-js.ts index 1e47036f6b..225ebaf5ab 100644 --- a/packages/language-core/lib/plugins/vue-script-js.ts +++ b/packages/language-core/lib/plugins/vue-script-js.ts @@ -4,7 +4,7 @@ const plugin: VueLanguagePlugin = ({ modules }) => { return { - version: 2, + version: 2.1, compileSFCScript(lang, script) { if (lang === 'js' || lang === 'ts' || lang === 'jsx' || lang === 'tsx') { diff --git a/packages/language-core/lib/plugins/vue-sfc-customblocks.ts b/packages/language-core/lib/plugins/vue-sfc-customblocks.ts index 2fe33eb4b2..be3068d836 100644 --- a/packages/language-core/lib/plugins/vue-sfc-customblocks.ts +++ b/packages/language-core/lib/plugins/vue-sfc-customblocks.ts @@ -5,7 +5,7 @@ const plugin: VueLanguagePlugin = () => { return { - version: 2, + version: 2.1, getEmbeddedCodes(_fileName, sfc) { return sfc.customBlocks.map((customBlock, i) => ({ diff --git a/packages/language-core/lib/plugins/vue-sfc-scripts.ts b/packages/language-core/lib/plugins/vue-sfc-scripts.ts index be30eed318..3939546239 100644 --- a/packages/language-core/lib/plugins/vue-sfc-scripts.ts +++ b/packages/language-core/lib/plugins/vue-sfc-scripts.ts @@ -4,7 +4,7 @@ const plugin: VueLanguagePlugin = () => { return { - version: 2, + version: 2.1, getEmbeddedCodes(_fileName, sfc) { const names: { diff --git a/packages/language-core/lib/plugins/vue-sfc-styles.ts b/packages/language-core/lib/plugins/vue-sfc-styles.ts index e473f78799..c1f8323e1d 100644 --- a/packages/language-core/lib/plugins/vue-sfc-styles.ts +++ b/packages/language-core/lib/plugins/vue-sfc-styles.ts @@ -5,7 +5,7 @@ const plugin: VueLanguagePlugin = () => { return { - version: 2, + version: 2.1, getEmbeddedCodes(_fileName, sfc) { const result: { diff --git a/packages/language-core/lib/plugins/vue-sfc-template.ts b/packages/language-core/lib/plugins/vue-sfc-template.ts index 3350e9b7a5..1dabe5f1d3 100644 --- a/packages/language-core/lib/plugins/vue-sfc-template.ts +++ b/packages/language-core/lib/plugins/vue-sfc-template.ts @@ -5,7 +5,7 @@ const plugin: VueLanguagePlugin = () => { return { - version: 2, + version: 2.1, getEmbeddedCodes(_fileName, sfc) { if (sfc.template) { diff --git a/packages/language-core/lib/plugins/vue-template-html.ts b/packages/language-core/lib/plugins/vue-template-html.ts index f6c324ae9e..9808dcf9d2 100644 --- a/packages/language-core/lib/plugins/vue-template-html.ts +++ b/packages/language-core/lib/plugins/vue-template-html.ts @@ -12,7 +12,7 @@ const plugin: VueLanguagePlugin = ({ modules }) => { return { - version: 2, + version: 2.1, compileSFCTemplate(lang, template, options) { diff --git a/packages/language-core/lib/plugins/vue-template-inline-css.ts b/packages/language-core/lib/plugins/vue-template-inline-css.ts index f8d147720b..cd285bf75a 100644 --- a/packages/language-core/lib/plugins/vue-template-inline-css.ts +++ b/packages/language-core/lib/plugins/vue-template-inline-css.ts @@ -13,7 +13,7 @@ const plugin: VueLanguagePlugin = () => { return { - version: 2, + version: 2.1, getEmbeddedCodes(_fileName, sfc) { if (!sfc.template?.ast) { diff --git a/packages/language-core/lib/plugins/vue-template-inline-ts.ts b/packages/language-core/lib/plugins/vue-template-inline-ts.ts index 99e3099c0f..ad38f5e013 100644 --- a/packages/language-core/lib/plugins/vue-template-inline-ts.ts +++ b/packages/language-core/lib/plugins/vue-template-inline-ts.ts @@ -27,7 +27,7 @@ const plugin: VueLanguagePlugin = ctx => { return { - version: 2, + version: 2.1, getEmbeddedCodes(_fileName, sfc) { if (!sfc.template?.ast) { diff --git a/packages/language-core/lib/plugins/vue-tsx.ts b/packages/language-core/lib/plugins/vue-tsx.ts index 960117985e..21ff38353a 100644 --- a/packages/language-core/lib/plugins/vue-tsx.ts +++ b/packages/language-core/lib/plugins/vue-tsx.ts @@ -13,7 +13,7 @@ const plugin: VueLanguagePlugin = ctx => { return { - version: 2, + version: 2.1, requiredCompilerOptions: [ 'noPropertyAccessFromIndexSignature', diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts index 577c92f0ab..72c14f4915 100644 --- a/packages/language-core/lib/types.ts +++ b/packages/language-core/lib/types.ts @@ -57,22 +57,17 @@ export interface VueCompilerOptions { experimentalModelPropName: Record | Record[]>>; } -export const pluginVersion = 2; +export const validVersions = [2, 2.1] as const; -export type VueLanguagePlugin = (ctx: { - modules: { - typescript: typeof import('typescript'); - '@vue/compiler-dom': typeof import('@vue/compiler-dom'); - }; - compilerOptions: ts.CompilerOptions; - vueCompilerOptions: VueCompilerOptions; - globalTypesHolder: string | undefined; -}) => { - version: typeof pluginVersion; +export type VueLanguagePluginReturn = { + version: typeof validVersions[number]; name?: string; order?: number; requiredCompilerOptions?: string[]; + getLanguageId?(fileName: string): string | undefined; + isValidFile?(fileName: string, languageId: string): boolean; parseSFC?(fileName: string, content: string): SFCParseResult | undefined; + parseSFC2?(fileName: string, languageId: string, content: string): SFCParseResult | undefined; updateSFC?(oldResult: SFCParseResult, textChange: { start: number, end: number, newText: string; }): SFCParseResult | undefined; resolveTemplateCompilerOptions?(options: CompilerDOM.CompilerOptions): CompilerDOM.CompilerOptions; compileSFCScript?(lang: string, script: string): ts.SourceFile | undefined; @@ -82,6 +77,16 @@ export type VueLanguagePlugin = (ctx: { resolveEmbeddedCode?(fileName: string, sfc: Sfc, embeddedFile: VueEmbeddedCode): void; }; +export type VueLanguagePlugin = (ctx: { + modules: { + typescript: typeof import('typescript'); + '@vue/compiler-dom': typeof import('@vue/compiler-dom'); + }; + compilerOptions: ts.CompilerOptions; + vueCompilerOptions: VueCompilerOptions; + globalTypesHolder: string | undefined; +}) => VueLanguagePluginReturn | VueLanguagePluginReturn[]; + export interface SfcBlock { name: string; start: number; diff --git a/packages/language-core/lib/utils/ts.ts b/packages/language-core/lib/utils/ts.ts index cefd77ea9d..0c793d3645 100644 --- a/packages/language-core/lib/utils/ts.ts +++ b/packages/language-core/lib/utils/ts.ts @@ -1,6 +1,7 @@ import type * as ts from 'typescript'; import * as path from 'path-browserify'; import type { RawVueCompilerOptions, VueCompilerOptions, VueLanguagePlugin } from '../types'; +import { getAllExtensions } from '../languagePlugin'; export type ParsedCommandLine = ts.ParsedCommandLine & { vueOptions: VueCompilerOptions; @@ -36,15 +37,12 @@ export function createParsedCommandLineByJson( {}, configFileName, undefined, - [ - ...resolvedVueOptions.extensions, - ...resolvedVueOptions.vitePressExtensions, - ...resolvedVueOptions.petiteVueExtensions, - ].map(extension => ({ - extension: extension.slice(1), - isMixedContent: true, - scriptKind: ts.ScriptKind.Deferred, - })) + getAllExtensions(resolvedVueOptions) + .map(extension => ({ + extension: extension.slice(1), + isMixedContent: true, + scriptKind: ts.ScriptKind.Deferred, + })) ); // fix https://github.com/vuejs/language-tools/issues/1786 @@ -87,15 +85,12 @@ export function createParsedCommandLine( {}, tsConfigPath, undefined, - [ - ...resolvedVueOptions.extensions, - ...resolvedVueOptions.vitePressExtensions, - ...resolvedVueOptions.petiteVueExtensions, - ].map(extension => ({ - extension: extension.slice(1), - isMixedContent: true, - scriptKind: ts.ScriptKind.Deferred, - })) + getAllExtensions(resolvedVueOptions) + .map(extension => ({ + extension: extension.slice(1), + isMixedContent: true, + scriptKind: ts.ScriptKind.Deferred, + })) ); // fix https://github.com/vuejs/language-tools/issues/1786 @@ -169,19 +164,12 @@ function getPartialVueCompilerOptions( } if (rawOptions.plugins) { const plugins = rawOptions.plugins - .map((pluginPath: string) => { + .map((pluginPath: string) => { try { const resolvedPath = resolvePath(pluginPath); if (resolvedPath) { const plugin = require(resolvedPath); - if (Array.isArray(plugin)) { - for (let i = 0; i < plugin.length; i++) { - plugin[i].__moduleName = `${pluginPath} (${i})`; - } - } - else { - plugin.__moduleName = pluginPath; - } + plugin.__moduleName = pluginPath; return plugin; } else { @@ -192,8 +180,7 @@ function getPartialVueCompilerOptions( console.warn('[Vue] Resolve plugin path failed:', pluginPath, error); } return []; - }) - .flat(Infinity as 1); + }); result.plugins = plugins; } diff --git a/packages/language-core/lib/virtualFile/computedFiles.ts b/packages/language-core/lib/virtualFile/computedFiles.ts index 2a197d53a3..731e5dee20 100644 --- a/packages/language-core/lib/virtualFile/computedFiles.ts +++ b/packages/language-core/lib/virtualFile/computedFiles.ts @@ -2,12 +2,12 @@ import type { VirtualCode } from '@volar/language-core'; import { computed } from 'computeds'; import { toString } from 'muggle-string'; import type * as ts from 'typescript'; -import type { Code, Sfc, SfcBlock, VueLanguagePlugin } from '../types'; +import type { Code, Sfc, SfcBlock, VueLanguagePluginReturn } from '../types'; import { buildMappings } from '../utils/buildMappings'; import { VueEmbeddedCode } from './embeddedFile'; export function computedFiles( - plugins: ReturnType[], + plugins: VueLanguagePluginReturn[], fileName: string, sfc: Sfc ) { @@ -101,8 +101,8 @@ export function computedFiles( } function computedPluginEmbeddedCodes( - plugins: ReturnType[], - plugin: ReturnType, + plugins: VueLanguagePluginReturn[], + plugin: VueLanguagePluginReturn, fileName: string, sfc: Sfc, nameToBlock: () => Record diff --git a/packages/language-core/lib/virtualFile/computedSfc.ts b/packages/language-core/lib/virtualFile/computedSfc.ts index b24c5e39e2..5b0fc75cbc 100644 --- a/packages/language-core/lib/virtualFile/computedSfc.ts +++ b/packages/language-core/lib/virtualFile/computedSfc.ts @@ -2,13 +2,13 @@ import type * as CompilerDOM from '@vue/compiler-dom'; import type { SFCBlock, SFCParseResult } from '@vue/compiler-sfc'; import { computed, computedArray, pauseTracking, resetTracking } from 'computeds'; import type * as ts from 'typescript'; -import type { Sfc, SfcBlock, VueLanguagePlugin } from '../types'; +import type { Sfc, SfcBlock, VueLanguagePluginReturn } from '../types'; import { parseCssClassNames } from '../utils/parseCssClassNames'; import { parseCssVars } from '../utils/parseCssVars'; export function computedSfc( ts: typeof import('typescript'), - plugins: ReturnType[], + plugins: VueLanguagePluginReturn[], fileName: string, snapshot: () => ts.IScriptSnapshot, parsed: () => SFCParseResult | undefined @@ -150,7 +150,7 @@ export function computedSfc( template: string, snapshot: ts.IScriptSnapshot, result: CompilerDOM.CodegenResult, - plugin: ReturnType, + plugin: VueLanguagePluginReturn, } | undefined; return computed(() => { diff --git a/packages/language-core/lib/virtualFile/computedVueSfc.ts b/packages/language-core/lib/virtualFile/computedVueSfc.ts index 21e5280ffe..f11f136420 100644 --- a/packages/language-core/lib/virtualFile/computedVueSfc.ts +++ b/packages/language-core/lib/virtualFile/computedVueSfc.ts @@ -1,18 +1,19 @@ import type { SFCParseResult } from '@vue/compiler-sfc'; import { computed } from 'computeds'; import type * as ts from 'typescript'; -import type { VueLanguagePlugin } from '../types'; +import type { VueLanguagePluginReturn } from '../types'; export function computedVueSfc( - plugins: ReturnType[], + plugins: VueLanguagePluginReturn[], fileName: string, + languageId: string, snapshot: () => ts.IScriptSnapshot ) { let cache: { snapshot: ts.IScriptSnapshot, sfc: SFCParseResult, - plugin: ReturnType, + plugin: VueLanguagePluginReturn, } | undefined; return computed(() => { @@ -36,7 +37,8 @@ export function computedVueSfc( } for (const plugin of plugins) { - const sfc = plugin.parseSFC?.(fileName, snapshot().getText(0, snapshot().getLength())); + const sfc = plugin.parseSFC?.(fileName, snapshot().getText(0, snapshot().getLength())) + ?? plugin.parseSFC2?.(fileName, languageId, snapshot().getText(0, snapshot().getLength())); if (sfc) { if (!sfc.errors.length) { cache = { diff --git a/packages/language-core/lib/virtualFile/vueFile.ts b/packages/language-core/lib/virtualFile/vueFile.ts index c1e6211eb5..d3115fac68 100644 --- a/packages/language-core/lib/virtualFile/vueFile.ts +++ b/packages/language-core/lib/virtualFile/vueFile.ts @@ -1,7 +1,7 @@ import type { VirtualCode } from '@volar/language-core'; import { Signal, signal } from 'computeds'; import type * as ts from 'typescript'; -import type { VueCompilerOptions, VueLanguagePlugin } from '../types'; +import type { VueCompilerOptions, VueLanguagePluginReturn } from '../types'; import { computedFiles } from './computedFiles'; import { computedMappings } from './computedMappings'; import { computedSfc } from './computedSfc'; @@ -17,7 +17,7 @@ export class VueVirtualCode implements VirtualCode { // computeds - getVueSfc = computedVueSfc(this.plugins, this.fileName, () => this._snapshot()); + getVueSfc = computedVueSfc(this.plugins, this.fileName, this.languageId, () => this._snapshot()); sfc = computedSfc(this.ts, this.plugins, this.fileName, () => this._snapshot(), this.getVueSfc); getMappings = computedMappings(() => this._snapshot(), this.sfc); getEmbeddedCodes = computedFiles(this.plugins, this.fileName, this.sfc); @@ -39,7 +39,7 @@ export class VueVirtualCode implements VirtualCode { public languageId: string, public initSnapshot: ts.IScriptSnapshot, public vueCompilerOptions: VueCompilerOptions, - public plugins: ReturnType[], + public plugins: VueLanguagePluginReturn[], public ts: typeof import('typescript'), ) { this._snapshot = signal(initSnapshot); diff --git a/packages/language-core/package.json b/packages/language-core/package.json index 6fdb9818b2..c4424f6eed 100644 --- a/packages/language-core/package.json +++ b/packages/language-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-core", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "**/*.js", @@ -12,7 +12,7 @@ "directory": "packages/language-core" }, "dependencies": { - "@volar/language-core": "~2.4.0-alpha.15", + "@volar/language-core": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", @@ -25,7 +25,7 @@ "@types/minimatch": "^5.1.2", "@types/node": "latest", "@types/path-browserify": "^1.0.1", - "@volar/typescript": "~2.4.0-alpha.15", + "@volar/typescript": "~2.4.0-alpha.18", "@vue/compiler-sfc": "^3.4.0" }, "peerDependencies": { diff --git a/packages/language-plugin-pug/index.ts b/packages/language-plugin-pug/index.ts index 67caa9893f..a8036a4d59 100644 --- a/packages/language-plugin-pug/index.ts +++ b/packages/language-plugin-pug/index.ts @@ -8,7 +8,7 @@ const plugin: VueLanguagePlugin = ({ modules }) => { name: require('./package.json').name, - version: 2, + version: 2.1, compileSFCTemplate(lang, template, options) { diff --git a/packages/language-plugin-pug/package.json b/packages/language-plugin-pug/package.json index 2ee3cbc34f..89d52962d5 100644 --- a/packages/language-plugin-pug/package.json +++ b/packages/language-plugin-pug/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-plugin-pug", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "**/*.js", @@ -13,10 +13,10 @@ }, "devDependencies": { "@types/node": "latest", - "@vue/language-core": "2.0.26" + "@vue/language-core": "2.0.28" }, "dependencies": { - "@volar/source-map": "~2.4.0-alpha.15", - "volar-service-pug": "volar-2.4" + "@volar/source-map": "~2.4.0-alpha.18", + "volar-service-pug": "0.0.59" } } diff --git a/packages/language-server/lib/hybridModeProject.ts b/packages/language-server/lib/hybridModeProject.ts index bc504bb0a7..4478ad5b5a 100644 --- a/packages/language-server/lib/hybridModeProject.ts +++ b/packages/language-server/lib/hybridModeProject.ts @@ -2,7 +2,7 @@ import type { Language, LanguagePlugin, LanguageServer, LanguageServerProject, P import { createLanguageServiceEnvironment } from '@volar/language-server/lib/project/simpleProject'; import { createLanguage } from '@vue/language-core'; import { createLanguageService, createUriMap, LanguageService } from '@vue/language-service'; -import { searchNamedPipeServerForFile } from '@vue/typescript-plugin/lib/utils'; +import { getReadyNamedPipePaths, onSomePipeReadyCallbacks, searchNamedPipeServerForFile } from '@vue/typescript-plugin/lib/utils'; import { URI } from 'vscode-uri'; export function createHybridModeProject( @@ -17,25 +17,39 @@ export function createHybridModeProject( }): void; }> ): LanguageServerProject { - let initialized = false; let simpleLs: Promise | undefined; let server: LanguageServer; const tsconfigProjects = createUriMap>(); - - return { + const project: LanguageServerProject = { setup(_server) { server = _server; + onSomePipeReadyCallbacks.push(() => { + server.refresh(project); + }); + server.onDidChangeWatchedFiles(({ changes }) => { + for (const change of changes) { + const changeUri = URI.parse(change.uri); + if (tsconfigProjects.has(changeUri)) { + tsconfigProjects.get(changeUri)?.then(project => project.dispose()); + tsconfigProjects.delete(changeUri); + server.clearPushDiagnostics(); + } + } + }); + const end = Date.now() + 60000; + const pipeWatcher = setInterval(() => { + getReadyNamedPipePaths(); + if (Date.now() > end) { + clearInterval(pipeWatcher); + } + }, 1000); }, async getLanguageService(uri) { - if (!initialized) { - initialized = true; - initialize(server); - } const fileName = asFileName(uri); - const projectInfo = (await searchNamedPipeServerForFile(fileName))?.projectInfo; - if (projectInfo?.kind === 1) { - const tsconfig = projectInfo.name; + const namedPipeServer = (await searchNamedPipeServerForFile(fileName)); + if (namedPipeServer?.projectInfo?.kind === 1) { + const tsconfig = namedPipeServer.projectInfo.name; const tsconfigUri = URI.file(tsconfig); if (!tsconfigProjects.has(tsconfigUri)) { tsconfigProjects.set(tsconfigUri, createLs(server, tsconfig)); @@ -65,23 +79,12 @@ export function createHybridModeProject( }, }; + return project; + function asFileName(uri: URI) { return uri.fsPath.replace(/\\/g, '/'); } - function initialize(server: LanguageServer) { - server.onDidChangeWatchedFiles(({ changes }) => { - for (const change of changes) { - const changeUri = URI.parse(change.uri); - if (tsconfigProjects.has(changeUri)) { - tsconfigProjects.get(changeUri)?.then(project => project.dispose()); - tsconfigProjects.delete(changeUri); - server.clearPushDiagnostics(); - } - } - }); - } - async function createLs(server: LanguageServer, tsconfig: string | undefined) { const { languagePlugins, setup } = await create({ configFileName: tsconfig, diff --git a/packages/language-server/lib/initialize.ts b/packages/language-server/lib/initialize.ts index 34def32f86..042e6d13f5 100644 --- a/packages/language-server/lib/initialize.ts +++ b/packages/language-server/lib/initialize.ts @@ -1,6 +1,6 @@ import type { LanguageServer } from '@volar/language-server'; import { createTypeScriptProject } from '@volar/language-server/node'; -import { createParsedCommandLine, createVueLanguagePlugin, FileMap, resolveVueCompilerOptions, VueCompilerOptions } from '@vue/language-core'; +import { createParsedCommandLine, createRootFileChecker, createVueLanguagePlugin2, getAllExtensions, resolveVueCompilerOptions, VueCompilerOptions } from '@vue/language-core'; import { Disposable, getFullLanguageServicePlugins, InitializeParams } from '@vue/language-service'; import type * as ts from 'typescript'; @@ -39,17 +39,14 @@ export function initialize( } updateFileWatcher(vueCompilerOptions); return { - languagePlugins: [createVueLanguagePlugin( + languagePlugins: [createVueLanguagePlugin2( ts, s => uriConverter.asFileName(s), - () => projectHost.getProjectVersion?.() ?? '', - fileName => { - const fileMap = new FileMap(sys.useCaseSensitiveFileNames ?? false); - for (const vueFileName of projectHost.getScriptFileNames() ?? []) { - fileMap.set(vueFileName, undefined); - } - return fileMap.has(fileName); - }, + createRootFileChecker( + projectHost.getProjectVersion ? () => projectHost.getProjectVersion!() : undefined, + () => projectHost.getScriptFileNames(), + sys.useCaseSensitiveFileNames + ), compilerOptions, vueCompilerOptions )], @@ -65,9 +62,7 @@ export function initialize( function updateFileWatcher(vueCompilerOptions: VueCompilerOptions) { const extensions = [ 'js', 'cjs', 'mjs', 'ts', 'cts', 'mts', 'jsx', 'tsx', 'json', - ...vueCompilerOptions.extensions.map(ext => ext.slice(1)), - ...vueCompilerOptions.vitePressExtensions.map(ext => ext.slice(1)), - ...vueCompilerOptions.petiteVueExtensions.map(ext => ext.slice(1)), + ...getAllExtensions(vueCompilerOptions).map(ext => ext.slice(1)), ]; const newExtensions = extensions.filter(ext => !watchingExtensions.has(ext)); if (newExtensions.length) { diff --git a/packages/language-server/node.ts b/packages/language-server/node.ts index 888926236c..850a5dec91 100644 --- a/packages/language-server/node.ts +++ b/packages/language-server/node.ts @@ -1,5 +1,5 @@ import { createConnection, createServer, loadTsdkByPath } from '@volar/language-server/node'; -import { createParsedCommandLine, createVueLanguagePlugin, resolveVueCompilerOptions } from '@vue/language-core'; +import { createParsedCommandLine, createVueLanguagePlugin2, resolveVueCompilerOptions } from '@vue/language-core'; import { getHybridModeLanguageServicePlugins } from '@vue/language-service'; import * as namedPipeClient from '@vue/typescript-plugin/lib/client'; import { createHybridModeProject } from './lib/hybridModeProject'; @@ -27,10 +27,9 @@ connection.onInitialize(params => { options: ts.getDefaultCompilerOptions(), }; return { - languagePlugins: [createVueLanguagePlugin( + languagePlugins: [createVueLanguagePlugin2( ts, asFileName, - () => '', () => false, commandLine.options, commandLine.vueOptions diff --git a/packages/language-server/package.json b/packages/language-server/package.json index b52c09f7a5..6e6002742e 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-server", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "**/*.js", @@ -15,11 +15,11 @@ "directory": "packages/language-server" }, "dependencies": { - "@volar/language-core": "~2.4.0-alpha.15", - "@volar/language-server": "~2.4.0-alpha.15", - "@vue/language-core": "2.0.26", - "@vue/language-service": "2.0.26", - "@vue/typescript-plugin": "2.0.26", + "@volar/language-core": "~2.4.0-alpha.18", + "@volar/language-server": "~2.4.0-alpha.18", + "@vue/language-core": "2.0.28", + "@vue/language-service": "2.0.28", + "@vue/typescript-plugin": "2.0.28", "vscode-languageserver-protocol": "^3.17.5", "vscode-uri": "^3.0.8" } diff --git a/packages/language-service/index.ts b/packages/language-service/index.ts index 12cd4e264a..e837df7c6e 100644 --- a/packages/language-service/index.ts +++ b/packages/language-service/index.ts @@ -1,3 +1,5 @@ +/// + export * from '@volar/language-service'; export * from '@vue/language-core'; export * from './lib/ideFeatures/nameCasing'; @@ -22,7 +24,6 @@ import { create as createVueDocumentLinksPlugin } from './lib/plugins/vue-docume import { create as createVueExtractFilePlugin } from './lib/plugins/vue-extract-file'; import { create as createVueSfcPlugin } from './lib/plugins/vue-sfc'; import { create as createVueTemplatePlugin } from './lib/plugins/vue-template'; -import { create as createVueToggleVBindPlugin } from './lib/plugins/vue-toggle-v-bind-codeaction'; import { create as createVueTwoslashQueriesPlugin } from './lib/plugins/vue-twoslash-queries'; import { create as createVueVisualizeHiddenCallbackParamPlugin } from './lib/plugins/vue-visualize-hidden-callback-param'; @@ -198,7 +199,6 @@ function getCommonLanguageServicePlugins( createVueVisualizeHiddenCallbackParamPlugin(), createVueDirectiveCommentsPlugin(), createVueExtractFilePlugin(ts, getTsPluginClient), - createVueToggleVBindPlugin(ts), createEmmetPlugin({ mappedLanguages: { 'vue': 'html', diff --git a/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts b/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts index 69510758e7..6a347c6c68 100644 --- a/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts +++ b/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts @@ -3,7 +3,6 @@ import { hyphenateAttr } from '@vue/language-core'; import type * as ts from 'typescript'; import type { TextDocument } from 'vscode-languageserver-textdocument'; import { URI } from 'vscode-uri'; -import * as _ from '@volar/typescript'; const asts = new WeakMap(); diff --git a/packages/language-service/lib/plugins/vue-template.ts b/packages/language-service/lib/plugins/vue-template.ts index beb8bab575..7d67146123 100644 --- a/packages/language-service/lib/plugins/vue-template.ts +++ b/packages/language-service/lib/plugins/vue-template.ts @@ -15,6 +15,8 @@ import { loadModelModifiersData, loadTemplateData } from './data'; let builtInData: html.HTMLDataV1; let modelData: html.HTMLDataV1; +const specialTags = new Set(['slot', 'component', 'template']); + export function create( mode: 'html' | 'pug', ts: typeof import('typescript'), @@ -419,14 +421,8 @@ export function create( if (builtInData.tags) { for (const tag of builtInData.tags) { - if (tag.name === 'slot') { - continue; - } - if (tag.name === 'component') { - continue; - } - if (tag.name === 'template') { - continue; + if (specialTags.has(tag.name)) { + tag.name = createInternalItemId('specialTag', [tag.name]); } if (casing.tag === TagNameCasing.Kebab) { tag.name = hyphenateTag(tag.name); @@ -735,6 +731,26 @@ export function create( for (const item of completionList.items) { + if (specialTags.has(item.label)) { + completionList.items = completionList.items.filter(i => i !== item); + } + + const nameId = readInternalItemId(item.label); + + if (nameId) { + const name = nameId.args[0]; + item.label = name; + if (item.textEdit) { + item.textEdit.newText = name; + }; + if (item.insertText) { + item.insertText = name; + } + if (item.sortText) { + item.sortText = name; + } + } + const itemIdKey = typeof item.documentation === 'string' ? item.documentation : item.documentation?.value; const itemId = itemIdKey ? readInternalItemId(itemIdKey) : undefined; @@ -848,7 +864,7 @@ export function create( } }; -function createInternalItemId(type: 'componentEvent' | 'componentProp', args: string[]) { +function createInternalItemId(type: 'componentEvent' | 'componentProp' | 'specialTag', args: string[]) { return '__VLS_::' + type + '::' + args.join(','); } @@ -856,7 +872,7 @@ function readInternalItemId(key: string) { if (key.startsWith('__VLS_::')) { const strs = key.split('::'); return { - type: strs[1] as 'componentEvent' | 'componentProp', + type: strs[1] as 'componentEvent' | 'componentProp' | 'specialTag', args: strs[2].split(','), }; } diff --git a/packages/language-service/lib/plugins/vue-toggle-v-bind-codeaction.ts b/packages/language-service/lib/plugins/vue-toggle-v-bind-codeaction.ts deleted file mode 100644 index e21100e593..0000000000 --- a/packages/language-service/lib/plugins/vue-toggle-v-bind-codeaction.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { LanguageServicePlugin, LanguageServicePluginInstance } from '@volar/language-service'; -import { VueVirtualCode, forEachElementNode, type CompilerDOM } from '@vue/language-core'; -import type * as vscode from 'vscode-languageserver-protocol'; -import { URI } from 'vscode-uri'; - -export function create(ts: typeof import('typescript')): LanguageServicePlugin { - return { - name: 'vue-toggle-v-bind-codeaction', - capabilities: { - codeActionProvider: { - codeActionKinds: ['refactor'], - }, - }, - create(context): LanguageServicePluginInstance { - return { - provideCodeActions(document, range, _context) { - - const startOffset = document.offsetAt(range.start); - const endOffset = document.offsetAt(range.end); - const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); - const sourceScript = decoded && context.language.scripts.get(decoded[0]); - const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); - if (!(virtualCode instanceof VueVirtualCode)) { - return; - } - - const { template } = virtualCode.sfc; - if (!template?.ast) { - return; - } - - const templateStartOffset = template.startTagEnd; - const result: vscode.CodeAction[] = []; - - for (const node of forEachElementNode(template.ast)) { - if (startOffset > templateStartOffset + node.loc.end.offset || endOffset < templateStartOffset + node.loc.start.offset) { - return; - } - for (const prop of node.props) { - if ( - startOffset - templateStartOffset >= prop.loc.start.offset - && endOffset - templateStartOffset <= prop.loc.end.offset - ) { - if (prop.type === 7 satisfies CompilerDOM.NodeTypes.DIRECTIVE && prop.exp) { - - const sourceFile = ts.createSourceFile('/a.ts', prop.exp.loc.source, ts.ScriptTarget.Latest, true); - const firstStatement = sourceFile.statements[0]; - - if (sourceFile.statements.length === 1 && ts.isExpressionStatement(firstStatement) && ts.isStringLiteralLike(firstStatement.expression)) { - const stringNode = sourceFile.statements[0]; - const removeTextRanges: [number, number][] = [ - [prop.loc.start.offset, prop.loc.start.offset + 1], - // Work correctly with trivias for cases like - [prop.exp.loc.start.offset, prop.exp.loc.start.offset + stringNode.pos + stringNode.getLeadingTriviaWidth() + 1], - [prop.exp.loc.start.offset + stringNode.end - 1, prop.exp.loc.end.offset], - ]; - result.push({ - title: 'Remove v-bind from attribute', - kind: 'refactor.rewrite.removeVBind', - edit: { - changes: { - [document.uri]: removeTextRanges.map(range => ({ - newText: '', - range: { - start: document.positionAt(templateStartOffset + range[0]), - end: document.positionAt(templateStartOffset + range[1]), - } - })) - }, - }, - }); - } - } - if (prop.type === 6 satisfies CompilerDOM.NodeTypes.ATTRIBUTE) { - - const edits: vscode.TextEdit[] = []; - const addVBindPos = document.positionAt(templateStartOffset + prop.loc.start.offset); - edits.push({ - newText: ':', - range: { - start: addVBindPos, - end: addVBindPos, - }, - }); - - let newPosition: vscode.Position | undefined; - - if (prop.value) { - const valueStart = document.positionAt(templateStartOffset + prop.value.loc.start.offset); - const valueEnd = document.positionAt(templateStartOffset + prop.value.loc.end.offset); - - if (prop.value.loc.end.offset - prop.value.loc.start.offset !== prop.value.content.length) { - valueStart.character++; - valueEnd.character--; - } - - edits.push({ - newText: "'", - range: { - start: valueStart, - end: valueStart, - }, - }); - edits.push({ - newText: "'", - range: { - start: valueEnd, - end: valueEnd, - }, - }); - } - else { - const addValuePos = document.positionAt(templateStartOffset + prop.loc.end.offset); - - newPosition = { - line: addValuePos.line, - character: addValuePos.character + ':'.length + '="'.length, - }; - - edits.push({ - newText: '=""', - range: { - start: addValuePos, - end: addValuePos - }, - }); - } - - result.push({ - title: 'Add v-bind to attribute', - kind: 'refactor.rewrite.addVBind', - edit: { - changes: { [document.uri]: edits }, - }, - command: newPosition ? context?.commands.setSelection.create(newPosition) : undefined, - }); - } - } - } - } - - return result; - }, - - transformCodeAction(item) { - return item; // ignore mapping - }, - }; - }, - }; -} diff --git a/packages/language-service/package.json b/packages/language-service/package.json index d70ac1e240..2f707cefa1 100644 --- a/packages/language-service/package.json +++ b/packages/language-service/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-service", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "data", @@ -16,23 +16,23 @@ "update-html-data": "node ./scripts/update-html-data.js" }, "dependencies": { - "@volar/language-core": "~2.4.0-alpha.15", - "@volar/language-service": "~2.4.0-alpha.15", - "@volar/typescript": "~2.4.0-alpha.15", + "@volar/language-core": "~2.4.0-alpha.18", + "@volar/language-service": "~2.4.0-alpha.18", + "@volar/typescript": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", - "@vue/language-core": "2.0.26", + "@vue/language-core": "2.0.28", "@vue/shared": "^3.4.0", - "@vue/typescript-plugin": "2.0.26", + "@vue/typescript-plugin": "2.0.28", "computeds": "^0.0.1", "path-browserify": "^1.0.1", - "volar-service-css": "volar-2.4", - "volar-service-emmet": "volar-2.4", - "volar-service-html": "volar-2.4", - "volar-service-json": "volar-2.4", - "volar-service-pug": "volar-2.4", - "volar-service-pug-beautify": "volar-2.4", - "volar-service-typescript": "volar-2.4", - "volar-service-typescript-twoslash-queries": "volar-2.4", + "volar-service-css": "0.0.59", + "volar-service-emmet": "0.0.59", + "volar-service-html": "0.0.59", + "volar-service-json": "0.0.59", + "volar-service-pug": "0.0.59", + "volar-service-pug-beautify": "0.0.59", + "volar-service-typescript": "0.0.59", + "volar-service-typescript-twoslash-queries": "0.0.59", "vscode-html-languageservice": "^5.2.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" @@ -40,7 +40,7 @@ "devDependencies": { "@types/node": "latest", "@types/path-browserify": "latest", - "@volar/kit": "~2.4.0-alpha.15", + "@volar/kit": "~2.4.0-alpha.18", "vscode-languageserver-protocol": "^3.17.5" } } diff --git a/packages/language-service/tests/utils/createTester.ts b/packages/language-service/tests/utils/createTester.ts index 5fe69e8487..10f6c7d77d 100644 --- a/packages/language-service/tests/utils/createTester.ts +++ b/packages/language-service/tests/utils/createTester.ts @@ -1,9 +1,9 @@ -import { FileMap, ProjectContext, createLanguage, createLanguageService, createUriMap } from '@volar/language-service'; +import { ProjectContext, createLanguage, createLanguageService, createUriMap } from '@volar/language-service'; import { TypeScriptProjectHost, createLanguageServiceHost, resolveFileLanguageId } from '@volar/typescript'; import * as path from 'path'; import * as ts from 'typescript'; import { URI } from 'vscode-uri'; -import { createParsedCommandLine, createVueLanguagePlugin, getFullLanguageServicePlugins } from '../..'; +import { createParsedCommandLine, createRootFileChecker, createVueLanguagePlugin2, getFullLanguageServicePlugins } from '../..'; import { createMockServiceEnv, fileNameToUri, uriToFileName } from './mockEnv'; export const rootUri = URI.file(path.resolve(__dirname, '../../../../test-workspace/language-service')); @@ -24,17 +24,14 @@ function createTester(rootUri: URI) { getCompilationSettings: () => parsedCommandLine.options, getScriptSnapshot, }; - const vueLanguagePlugin = createVueLanguagePlugin( + const vueLanguagePlugin = createVueLanguagePlugin2( ts, uriToFileName, - () => projectHost.getProjectVersion?.() ?? '', - fileName => { - const fileMap = new FileMap(ts.sys.useCaseSensitiveFileNames); - for (const vueFileName of projectHost.getScriptFileNames()) { - fileMap.set(vueFileName, undefined); - } - return fileMap.has(fileName); - }, + createRootFileChecker( + projectHost.getProjectVersion ? () => projectHost.getProjectVersion!() : undefined, + () => projectHost.getScriptFileNames(), + ts.sys.useCaseSensitiveFileNames + ), parsedCommandLine.options, parsedCommandLine.vueOptions ); diff --git a/packages/language-service/tests/utils/format.ts b/packages/language-service/tests/utils/format.ts index 8b62801b82..05dfb55c58 100644 --- a/packages/language-service/tests/utils/format.ts +++ b/packages/language-service/tests/utils/format.ts @@ -2,13 +2,12 @@ import * as kit from '@volar/kit'; import * as ts from 'typescript'; import { describe, expect, it } from 'vitest'; import type { URI } from 'vscode-uri'; -import { createVueLanguagePlugin, getFullLanguageServicePlugins, resolveVueCompilerOptions } from '../..'; +import { createVueLanguagePlugin2, getFullLanguageServicePlugins, resolveVueCompilerOptions } from '../..'; const resolvedVueOptions = resolveVueCompilerOptions({}); -const vueLanguagePlugin = createVueLanguagePlugin( +const vueLanguagePlugin = createVueLanguagePlugin2( ts, () => '', - () => '', () => false, {}, resolvedVueOptions diff --git a/packages/tsc/index.ts b/packages/tsc/index.ts index 96f216d061..c82cbc4ac5 100644 --- a/packages/tsc/index.ts +++ b/packages/tsc/index.ts @@ -16,11 +16,7 @@ export function run() { const vueOptions = typeof configFilePath === 'string' ? vue.createParsedCommandLine(ts, ts.sys, configFilePath.replace(windowsPathReg, '/')).vueOptions : vue.resolveVueCompilerOptions({}); - const allExtensions = [ - ...vueOptions.extensions, - ...vueOptions.vitePressExtensions, - ...vueOptions.petiteVueExtensions, - ]; + const allExtensions = vue.getAllExtensions(vueOptions); if ( runExtensions.length === allExtensions.length && runExtensions.every(ext => allExtensions.includes(ext)) @@ -29,17 +25,14 @@ export function run() { options.host!.writeFile = (fileName, contents, ...args) => { return writeFile(fileName, removeEmitGlobalTypes(contents), ...args); }; - const vueLanguagePlugin = vue.createVueLanguagePlugin( + const vueLanguagePlugin = vue.createVueLanguagePlugin2( ts, id => id, - () => '', - fileName => { - const fileMap = new vue.FileMap(options.host?.useCaseSensitiveFileNames?.() ?? false); - for (const vueFileName of options.rootNames.map(rootName => rootName.replace(windowsPathReg, '/'))) { - fileMap.set(vueFileName, undefined); - } - return fileMap.has(fileName); - }, + vue.createRootFileChecker( + undefined, + () => options.rootNames.map(rootName => rootName.replace(windowsPathReg, '/')), + options.host?.useCaseSensitiveFileNames?.() ?? false + ), options.options, vueOptions ); @@ -58,7 +51,7 @@ export function run() { if (err === extensionsChangedException) { main(); } else { - console.error(err); + throw err; } } } diff --git a/packages/tsc/package.json b/packages/tsc/package.json index d541dade7e..7ede11d22d 100644 --- a/packages/tsc/package.json +++ b/packages/tsc/package.json @@ -1,6 +1,6 @@ { "name": "vue-tsc", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "bin", @@ -16,8 +16,8 @@ "vue-tsc": "./bin/vue-tsc.js" }, "dependencies": { - "@volar/typescript": "~2.4.0-alpha.15", - "@vue/language-core": "2.0.26", + "@volar/typescript": "~2.4.0-alpha.18", + "@vue/language-core": "2.0.28", "semver": "^7.5.4" }, "peerDependencies": { diff --git a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap index 778346d1f1..cb65071221 100644 --- a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap +++ b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap @@ -1,5 +1,35 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`vue-tsc-dts > Input: #4577/main.vue, Output: #4577/main.vue.d.ts 1`] = ` +"export type BaseRow = { + value: string; +}; +declare const _default: (__VLS_props: NonNullable>["props"], __VLS_ctx?: __VLS_Prettify>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ + props: __VLS_Prettify & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & Readonly>, never>, never> & { + nonGeneric: string; + rows: Row[]; + }> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps); + expose(exposed: import("vue").ShallowUnwrapRef<{}>): void; + attrs: any; + slots: ReturnType<() => { + default?(_: { + row: Row; + }): any; + }>; + emit: {}; +}>) => import("vue").VNode & { + __ctx?: Awaited; +}; +export default _default; + +type __VLS_Prettify = { + [K in keyof T]: T[K]; +} & {}; +" +`; + exports[`vue-tsc-dts > Input: class-slots/component.vue, Output: class-slots/component.vue.d.ts 1`] = ` "import { VNode } from 'vue'; declare const _default: new () => { @@ -39,12 +69,12 @@ export default _default; `; exports[`vue-tsc-dts > Input: events/component-generic.vue, Output: events/component-generic.vue.d.ts 1`] = ` -"declare const _default: (__VLS_props: Awaited["props"], __VLS_ctx?: __VLS_Prettify, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ +"declare const _default: (__VLS_props: NonNullable>["props"], __VLS_ctx?: __VLS_Prettify>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ props: __VLS_Prettify & Omit<{ onFoo?: (value: string) => any; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & Readonly> & { onFoo?: (value: string) => any; - }, never>, "onFoo"> & {}> & __VLS_BuiltInPublicProps; + }, never>, "onFoo"> & {}> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps); expose(exposed: import("vue").ShallowUnwrapRef<{}>): void; attrs: any; slots: ReturnType<() => {}>; @@ -62,7 +92,7 @@ type __VLS_Prettify = { `; exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.vue.d.ts 1`] = ` -"declare const _default: (__VLS_props: Awaited["props"], __VLS_ctx?: __VLS_Prettify, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ +"declare const _default: (__VLS_props: NonNullable>["props"], __VLS_ctx?: __VLS_Prettify>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ props: __VLS_Prettify & Omit<{ "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; @@ -73,7 +103,7 @@ exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.v title?: string; } & { foo: number; - })> & __VLS_BuiltInPublicProps; + })> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps); expose(exposed: import("vue").ShallowUnwrapRef<{ baz: number; }>): void; @@ -101,7 +131,7 @@ type __VLS_Prettify = { `; exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: generic/custom-extension-component.cext.d.ts 1`] = ` -"declare const _default: (__VLS_props: Awaited["props"], __VLS_ctx?: __VLS_Prettify, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ +"declare const _default: (__VLS_props: NonNullable>["props"], __VLS_ctx?: __VLS_Prettify>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{ props: __VLS_Prettify & Omit<{ "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; @@ -112,7 +142,7 @@ exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: g title?: string; } & { foo: number; - })> & __VLS_BuiltInPublicProps; + })> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps); expose(exposed: import("vue").ShallowUnwrapRef<{ baz: number; }>): void; diff --git a/packages/tsc/tests/dts.spec.ts b/packages/tsc/tests/dts.spec.ts index efb4fb6f30..c3a2bc21e1 100644 --- a/packages/tsc/tests/dts.spec.ts +++ b/packages/tsc/tests/dts.spec.ts @@ -31,17 +31,14 @@ describe('vue-tsc-dts', () => { vueOptions = typeof configFilePath === 'string' ? vue.createParsedCommandLine(ts, ts.sys, configFilePath.replace(windowsPathReg, '/')).vueOptions : vue.resolveVueCompilerOptions({ extensions: ['.vue', '.cext'] }); - const vueLanguagePlugin = vue.createVueLanguagePlugin( + const vueLanguagePlugin = vue.createVueLanguagePlugin2( ts, id => id, - () => '', - fileName => { - const fileMap = new vue.FileMap(options.host?.useCaseSensitiveFileNames?.() ?? false); - for (const vueFileName of options.rootNames.map(rootName => rootName.replace(windowsPathReg, '/'))) { - fileMap.set(vueFileName, undefined); - } - return fileMap.has(fileName); - }, + vue.createRootFileChecker( + undefined, + () => options.rootNames.map(rootName => rootName.replace(windowsPathReg, '/')), + options.host?.useCaseSensitiveFileNames?.() ?? false + ), options.options, vueOptions ); diff --git a/packages/tsc/tests/index.spec.ts b/packages/tsc/tests/index.spec.ts index c6d1c8b594..7d39072d75 100644 --- a/packages/tsc/tests/index.spec.ts +++ b/packages/tsc/tests/index.spec.ts @@ -9,6 +9,7 @@ const shouldErrorDirs = [ 'should-error', 'should-error-2', 'should-error-3', + 'should-error-#4569', ]; function prettyPath(path: string, isRoot: boolean) { @@ -52,7 +53,7 @@ function runVueTsc(cwd: string) { return new Promise((resolve, reject) => { const cp = fork( binPath, - ['--noEmit'], + [], { silent: true, cwd diff --git a/packages/typescript-plugin/index.ts b/packages/typescript-plugin/index.ts index 7269ab7f5e..baa5b8a4db 100644 --- a/packages/typescript-plugin/index.ts +++ b/packages/typescript-plugin/index.ts @@ -1,26 +1,23 @@ import { createLanguageServicePlugin, externalFiles } from '@volar/typescript/lib/quickstart/createLanguageServicePlugin'; import * as vue from '@vue/language-core'; import { proxyLanguageServiceForVue } from './lib/common'; -import { projects, startNamedPipeServer } from './lib/server'; +import { startNamedPipeServer } from './lib/server'; const windowsPathReg = /\\/g; const plugin = createLanguageServicePlugin( (ts, info) => { const vueOptions = getVueCompilerOptions(); - const languagePlugin = vue.createVueLanguagePlugin( + const languagePlugin = vue.createVueLanguagePlugin2( ts, id => id, - () => info.languageServiceHost.getProjectVersion?.() ?? '', info.project.projectKind === ts.server.ProjectKind.Inferred ? () => true - : fileName => { - const fileMap = new vue.FileMap(info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false); - for (const vueFileName of externalFiles.get(info.project) ?? []) { - fileMap.set(vueFileName, undefined); - } - return fileMap.has(fileName); - }, + : vue.createRootFileChecker( + info.languageServiceHost.getProjectVersion ? () => info.languageServiceHost.getProjectVersion!() : undefined, + () => externalFiles.get(info.project) ?? [], + info.languageServiceHost.useCaseSensitiveFileNames?.() ?? false + ), info.languageServiceHost.getCompilationSettings(), vueOptions ); @@ -28,10 +25,13 @@ const plugin = createLanguageServicePlugin( return { languagePlugins: [languagePlugin], setup: language => { - projects.set(info.project, { info, language, vueOptions }); - info.languageService = proxyLanguageServiceForVue(ts, language, info.languageService, vueOptions, fileName => fileName); - startNamedPipeServer(ts, info.project.projectKind, info.project.getCurrentDirectory()); + if ( + info.project.projectKind === ts.server.ProjectKind.Configured + || info.project.projectKind === ts.server.ProjectKind.Inferred + ) { + startNamedPipeServer(ts, info, language, info.project.projectKind); + } // #3963 const timer = setInterval(() => { diff --git a/packages/typescript-plugin/lib/client.ts b/packages/typescript-plugin/lib/client.ts index 0647aed563..ce8d82db99 100644 --- a/packages/typescript-plugin/lib/client.ts +++ b/packages/typescript-plugin/lib/client.ts @@ -1,5 +1,5 @@ import type { Request } from './server'; -import { connect, searchNamedPipeServerForFile, sendRequestWorker } from './utils'; +import { searchNamedPipeServerForFile, sendRequestWorker } from './utils'; export function collectExtractProps( ...args: Parameters @@ -85,15 +85,12 @@ export function getElementAttrs( } async function sendRequest(request: Request) { - const server = (await searchNamedPipeServerForFile(request.args[0]))?.server; + const server = (await searchNamedPipeServerForFile(request.args[0])); if (!server) { console.warn('[Vue Named Pipe Client] No server found for', request.args[0]); return; } - const client = await connect(server.path); - if (!client) { - console.warn('[Vue Named Pipe Client] Failed to connect to', server.path); - return; - } - return await sendRequestWorker(request, client); + const res = await sendRequestWorker(request, server.socket); + server.socket.end(); + return res; } diff --git a/packages/typescript-plugin/lib/server.ts b/packages/typescript-plugin/lib/server.ts index 389fe87ca4..ec3d9d1e94 100644 --- a/packages/typescript-plugin/lib/server.ts +++ b/packages/typescript-plugin/lib/server.ts @@ -1,4 +1,4 @@ -import type { Language, VueCompilerOptions } from '@vue/language-core'; +import type { Language } from '@vue/language-core'; import * as fs from 'fs'; import * as net from 'net'; import type * as ts from 'typescript'; @@ -8,10 +8,11 @@ import { getImportPathForFile } from './requests/getImportPathForFile'; import { getPropertiesAtLocation } from './requests/getPropertiesAtLocation'; import { getQuickInfoAtPosition } from './requests/getQuickInfoAtPosition'; import type { RequestContext } from './requests/types'; -import { NamedPipeServer, connect, readPipeTable, updatePipeTable } from './utils'; +import { connect, getNamedPipePath } from './utils'; export interface Request { - type: 'projectInfoForFile' + type: 'containsFile' + | 'projectInfo' | 'collectExtractProps' | 'getImportPathForFile' | 'getPropertiesAtLocation' @@ -25,139 +26,130 @@ export interface Request { args: [fileName: string, ...rest: any]; } -let started = false; +export interface ProjectInfo { + name: string; + kind: ts.server.ProjectKind; + currentDirectory: string; +} -export function startNamedPipeServer( +export async function startNamedPipeServer( ts: typeof import('typescript'), - serverKind: ts.server.ProjectKind, - currentDirectory: string + info: ts.server.PluginCreateInfo, + language: Language, + projectKind: ts.server.ProjectKind.Inferred | ts.server.ProjectKind.Configured ) { - if (started) { - return; - } - started = true; - - const pipeFile = process.platform === 'win32' - ? `\\\\.\\pipe\\vue-tsp-${process.pid}` - : `/tmp/vue-tsp-${process.pid}`; const server = net.createServer(connection => { connection.on('data', data => { const text = data.toString(); + if (text === 'ping') { + connection.write('pong'); + return; + } const request: Request = JSON.parse(text); const fileName = request.args[0]; - const project = getProject(ts.server.toNormalizedPath(fileName)); - if (request.type === 'projectInfoForFile') { - connection.write( - JSON.stringify( - project - ? { - name: project.info.project.getProjectName(), - kind: project.info.project.projectKind, - } - : null - ) + if (request.type === 'containsFile') { + sendResponse( + info.project.containsFile(ts.server.toNormalizedPath(fileName)) ); } - else if (project) { - const requestContext: RequestContext = { - typescript: ts, - languageService: project.info.languageService, - languageServiceHost: project.info.languageServiceHost, - language: project.language, - isTsPlugin: true, - getFileId: (fileName: string) => fileName, - }; - if (request.type === 'collectExtractProps') { - const result = collectExtractProps.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getImportPathForFile') { - const result = getImportPathForFile.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getPropertiesAtLocation') { - const result = getPropertiesAtLocation.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getQuickInfoAtPosition') { - const result = getQuickInfoAtPosition.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - // Component Infos - else if (request.type === 'getComponentProps') { - const result = getComponentProps.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getComponentEvents') { - const result = getComponentEvents.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getTemplateContextProps') { - const result = getTemplateContextProps.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getComponentNames') { - const result = getComponentNames.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else if (request.type === 'getElementAttrs') { - const result = getElementAttrs.apply(requestContext, request.args as any); - connection.write(JSON.stringify(result ?? null)); - } - else { - console.warn('[Vue Named Pipe Server] Unknown request type:', request.type); - } + if (request.type === 'projectInfo') { + sendResponse({ + name: info.project.getProjectName(), + kind: info.project.projectKind, + currentDirectory: info.project.getCurrentDirectory(), + } satisfies ProjectInfo); + } + const requestContext: RequestContext = { + typescript: ts, + languageService: info.languageService, + languageServiceHost: info.languageServiceHost, + language: language, + isTsPlugin: true, + getFileId: (fileName: string) => fileName, + }; + if (request.type === 'collectExtractProps') { + const result = collectExtractProps.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getImportPathForFile') { + const result = getImportPathForFile.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getPropertiesAtLocation') { + const result = getPropertiesAtLocation.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getQuickInfoAtPosition') { + const result = getQuickInfoAtPosition.apply(requestContext, request.args as any); + sendResponse(result); + } + // Component Infos + else if (request.type === 'getComponentProps') { + const result = getComponentProps.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getComponentEvents') { + const result = getComponentEvents.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getTemplateContextProps') { + const result = getTemplateContextProps.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getComponentNames') { + const result = getComponentNames.apply(requestContext, request.args as any); + sendResponse(result); + } + else if (request.type === 'getElementAttrs') { + const result = getElementAttrs.apply(requestContext, request.args as any); + sendResponse(result); } else { - console.warn('[Vue Named Pipe Server] No project found for:', fileName); + console.warn('[Vue Named Pipe Server] Unknown request type:', request.type); } - connection.end(); }); connection.on('error', err => console.error('[Vue Named Pipe Server]', err.message)); - }); - cleanupPipeTable(); - - const table = readPipeTable(); - table.push({ - path: pipeFile, - serverKind, - currentDirectory, + function sendResponse(data: any | undefined) { + connection.write(JSON.stringify(data ?? null) + '\n\n'); + } }); - updatePipeTable(table); - try { - fs.unlinkSync(pipeFile); - } catch { } - - server.listen(pipeFile); -} - -function cleanupPipeTable() { - for (const server of readPipeTable()) { - connect(server.path).then(client => { - if (client) { - client.end(); - } - else { - let table: NamedPipeServer[] = readPipeTable(); - table = table.filter(item => item.path !== server.path); - updatePipeTable(table); - } - }); + for (let i = 0; i < 20; i++) { + const path = getNamedPipePath(projectKind, i); + const socket = await connect(path, 100); + if (typeof socket === 'object') { + socket.end(); + } + const namedPipeOccupied = typeof socket === 'object' || socket === 'timeout'; + if (namedPipeOccupied) { + continue; + } + const success = await tryListen(server, path); + if (success) { + break; + } } } -export const projects = new Map; - vueOptions: VueCompilerOptions; -}>(); - -function getProject(filename: ts.server.NormalizedPath) { - for (const [project, data] of projects) { - if (project.containsFile(filename)) { - return data; - } - } +function tryListen(server: net.Server, namedPipePath: string) { + return new Promise(resolve => { + const onSuccess = () => { + server.off('error', onError); + resolve(true); + }; + const onError = (err: any) => { + if ((err as any).code === 'ECONNREFUSED') { + try { + console.log('[Vue Named Pipe Client] Deleting:', namedPipePath); + fs.promises.unlink(namedPipePath); + } catch { } + } + server.off('error', onError); + server.close(); + resolve(false); + }; + server.listen(namedPipePath, onSuccess); + server.on('error', onError); + }); } diff --git a/packages/typescript-plugin/lib/utils.ts b/packages/typescript-plugin/lib/utils.ts index f6152cf0bf..f0e845f43e 100644 --- a/packages/typescript-plugin/lib/utils.ts +++ b/packages/typescript-plugin/lib/utils.ts @@ -1,89 +1,207 @@ -import * as os from 'os'; +import * as fs from 'fs'; import * as net from 'net'; +import * as os from 'os'; import * as path from 'path'; import type * as ts from 'typescript'; -import * as fs from 'fs'; -import type { Request } from './server'; +import type { ProjectInfo, Request } from './server'; export { TypeScriptProjectHost } from '@volar/typescript'; -export interface NamedPipeServer { - path: string; - serverKind: ts.server.ProjectKind; - currentDirectory: string; -} - const { version } = require('../package.json'); - -const pipeTableFile = path.join(os.tmpdir(), `vue-tsp-table-${version}.json`); - -export function readPipeTable() { - if (!fs.existsSync(pipeTableFile)) { - return []; +const platform = os.platform(); +const pipeDir = platform === 'win32' + ? `\\\\.\\pipe` + : `/tmp`; +const toFullPath = (file: string) => { + if (platform === 'win32') { + return pipeDir + '\\' + file; } - try { - const servers: NamedPipeServer[] = JSON.parse(fs.readFileSync(pipeTableFile, 'utf8')); - return servers; - } catch { - fs.unlinkSync(pipeTableFile); - return []; + else { + return pipeDir + '/' + file; } +}; +const configuredNamedPipePathPrefix = toFullPath(`vue-named-pipe-${version}-configured-`); +const inferredNamedPipePathPrefix = toFullPath(`vue-named-pipe-${version}-inferred-`); +const pipes = new Map(); + +export const onSomePipeReadyCallbacks: (() => void)[] = []; + +function watchNamedPipeReady(namedPipePath: string) { + const socket = net.connect(namedPipePath); + const start = Date.now(); + socket.on('connect', () => { + console.log('[Vue Named Pipe Client] Connected:', namedPipePath, 'in', (Date.now() - start) + 'ms'); + socket.write('ping'); + }); + socket.on('data', () => { + console.log('[Vue Named Pipe Client] Ready:', namedPipePath, 'in', (Date.now() - start) + 'ms'); + pipes.set(namedPipePath, 'ready'); + socket.end(); + onSomePipeReadyCallbacks.forEach(cb => cb()); + }); + socket.on('error', err => { + if ((err as any).code === 'ECONNREFUSED') { + try { + console.log('[Vue Named Pipe Client] Deleting:', namedPipePath); + fs.promises.unlink(namedPipePath); + } catch { } + } + pipes.delete(namedPipePath); + socket.end(); + }); } -export function updatePipeTable(servers: NamedPipeServer[]) { - if (servers.length === 0) { - fs.unlinkSync(pipeTableFile); - } - else { - fs.writeFileSync(pipeTableFile, JSON.stringify(servers, undefined, 2)); +export function getNamedPipePath(projectKind: ts.server.ProjectKind.Configured | ts.server.ProjectKind.Inferred, key: number) { + return projectKind === 1 satisfies ts.server.ProjectKind.Configured + ? `${configuredNamedPipePathPrefix}${key}` + : `${inferredNamedPipePathPrefix}${key}`; +} + +export function getReadyNamedPipePaths() { + const configuredPipes: string[] = []; + const inferredPipes: string[] = []; + for (let i = 0; i < 20; i++) { + const configuredPipe = getNamedPipePath(1 satisfies ts.server.ProjectKind.Configured, i); + const inferredPipe = getNamedPipePath(0 satisfies ts.server.ProjectKind.Inferred, i); + if (pipes.get(configuredPipe) === 'ready') { + configuredPipes.push(configuredPipe); + } + else if (!pipes.has(configuredPipe)) { + pipes.set(configuredPipe, 'unknown'); + watchNamedPipeReady(configuredPipe); + } + if (pipes.get(inferredPipe) === 'ready') { + inferredPipes.push(inferredPipe); + } + else if (!pipes.has(inferredPipe)) { + pipes.set(inferredPipe, 'unknown'); + watchNamedPipeReady(inferredPipe); + } } + return { + configured: configuredPipes, + inferred: inferredPipes, + }; } -export function connect(path: string) { - return new Promise(resolve => { - const client = net.connect(path); - client.setTimeout(1000); - client.on('connect', () => { - resolve(client); - }); - client.on('error', () => { - return resolve(undefined); - }); - client.on('timeout', () => { - return resolve(undefined); - }); +export function connect(namedPipePath: string, timeout?: number) { + return new Promise(resolve => { + const socket = net.connect(namedPipePath); + if (timeout) { + socket.setTimeout(timeout); + } + const onConnect = () => { + cleanup(); + resolve(socket); + }; + const onError = (err: any) => { + if ((err as any).code === 'ECONNREFUSED') { + try { + console.log('[Vue Named Pipe Client] Deleting:', namedPipePath); + fs.promises.unlink(namedPipePath); + } catch { } + } + pipes.delete(namedPipePath); + cleanup(); + resolve('error'); + }; + const onTimeout = () => { + cleanup(); + resolve('timeout'); + } + const cleanup = () => { + socket.off('connect', onConnect); + socket.off('error', onError); + socket.off('timeout', onTimeout); + }; + socket.on('connect', onConnect); + socket.on('error', onError); + socket.on('timeout', onTimeout); }); } export async function searchNamedPipeServerForFile(fileName: string) { - const servers = readPipeTable(); - const configuredServers = servers - .filter(item => item.serverKind === 1 satisfies ts.server.ProjectKind.Configured); - const inferredServers = servers - .filter(item => item.serverKind === 0 satisfies ts.server.ProjectKind.Inferred) - .sort((a, b) => b.currentDirectory.length - a.currentDirectory.length); - for (const server of configuredServers.sort((a, b) => sortTSConfigs(fileName, a.currentDirectory, b.currentDirectory))) { - const client = await connect(server.path); - if (client) { - const projectInfo = await sendRequestWorker<{ name: string; kind: ts.server.ProjectKind; }>({ type: 'projectInfoForFile', args: [fileName] }, client); - if (projectInfo) { - return { - server, - projectInfo, - }; + const paths = await getReadyNamedPipePaths(); + + const configuredServers = (await Promise.all( + paths.configured.map(async path => { + // Find existing servers + const socket = await connect(path); + if (typeof socket !== 'object') { + return; + } + + // Find servers containing the current file + const containsFile = await sendRequestWorker({ type: 'containsFile' satisfies Request['type'], args: [fileName] }, socket); + if (!containsFile) { + socket.end(); + return; } + + // Get project info for each server + const projectInfo = await sendRequestWorker({ type: 'projectInfo' satisfies Request['type'], args: [fileName] }, socket); + if (!projectInfo) { + socket.end(); + return; + } + + return { + socket, + projectInfo, + }; + }) + )).filter(server => !!server); + + // Sort servers by tsconfig + configuredServers.sort((a, b) => sortTSConfigs(fileName, a.projectInfo.name, b.projectInfo.name)); + + if (configuredServers.length) { + // Close all but the first server + for (let i = 1; i < configuredServers.length; i++) { + configuredServers[i].socket.end(); } + // Return the first server + return configuredServers[0]; } - for (const server of inferredServers) { - if (!path.relative(server.currentDirectory, fileName).startsWith('..')) { - const client = await connect(server.path); - if (client) { + + const inferredServers = (await Promise.all( + paths.inferred.map(async namedPipePath => { + // Find existing servers + const socket = await connect(namedPipePath); + if (typeof socket !== 'object') { + return; + } + + // Get project info for each server + const projectInfo = await sendRequestWorker({ type: 'projectInfo' satisfies Request['type'], args: [fileName] }, socket); + if (!projectInfo) { + socket.end(); + return; + } + + // Check if the file is in the project's directory + if (!path.relative(projectInfo.currentDirectory, fileName).startsWith('..')) { return { - server, - projectInfo: undefined, + socket, + projectInfo, }; } + }) + )).filter(server => !!server); + + // Sort servers by directory + inferredServers.sort((a, b) => + b.projectInfo.currentDirectory.replace(/\\/g, '/').split('/').length + - a.projectInfo.currentDirectory.replace(/\\/g, '/').split('/').length + ); + + if (inferredServers.length) { + // Close all but the first server + for (let i = 1; i < inferredServers.length; i++) { + inferredServers[i].socket.end(); } + // Return the first server + return inferredServers[0]; } } @@ -109,39 +227,35 @@ function isFileInDir(fileName: string, dir: string) { return !!relative && !relative.startsWith('..') && !path.isAbsolute(relative); } -export function sendRequestWorker(request: Request, client: net.Socket) { +export function sendRequestWorker(request: Request, socket: net.Socket) { return new Promise(resolve => { let dataChunks: Buffer[] = []; - client.setTimeout(5000); - client.on('data', chunk => { + const onData = (chunk: Buffer) => { dataChunks.push(chunk); - }); - client.on('end', () => { - if (!dataChunks.length) { - console.warn('[Vue Named Pipe Client] No response from server for request:', request.type); - resolve(undefined); - return; - } const data = Buffer.concat(dataChunks); const text = data.toString(); - let json = null; - try { - json = JSON.parse(text); - } catch (e) { - console.error('[Vue Named Pipe Client] Failed to parse response:', text); - resolve(undefined); - return; + if (text.endsWith('\n\n')) { + let json = null; + try { + json = JSON.parse(text); + } catch (e) { + console.error('[Vue Named Pipe Client] Failed to parse response:', text); + } + cleanup(); + resolve(json); } - resolve(json); - }); - client.on('error', err => { + }; + const onError = (err: any) => { console.error('[Vue Named Pipe Client] Error:', err.message); + cleanup(); resolve(undefined); - }); - client.on('timeout', () => { - console.error('[Vue Named Pipe Client] Timeout'); - resolve(undefined); - }); - client.write(JSON.stringify(request)); + }; + const cleanup = () => { + socket.off('data', onData); + socket.off('error', onError); + }; + socket.on('data', onData); + socket.on('error', onError); + socket.write(JSON.stringify(request)); }); } diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json index 3c24e22b10..47712f9507 100644 --- a/packages/typescript-plugin/package.json +++ b/packages/typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vue/typescript-plugin", - "version": "2.0.26", + "version": "2.0.28", "license": "MIT", "files": [ "**/*.js", @@ -12,8 +12,8 @@ "directory": "packages/typescript-plugin" }, "dependencies": { - "@volar/typescript": "~2.4.0-alpha.15", - "@vue/language-core": "2.0.26", + "@volar/typescript": "~2.4.0-alpha.18", + "@vue/language-core": "2.0.28", "@vue/shared": "^3.4.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1923644fe..0b5a6e0b44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,28 +13,28 @@ importers: devDependencies: '@lerna-lite/cli': specifier: latest - version: 3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(@lerna-lite/version@3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3) + version: 3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(@lerna-lite/version@3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3) '@lerna-lite/publish': specifier: latest - version: 3.6.0(typescript@5.5.3) + version: 3.7.1(typescript@5.5.3) '@tsslint/cli': specifier: latest - version: 1.0.13(typescript@5.5.3) + version: 1.0.14(typescript@5.5.3) '@tsslint/config': specifier: latest - version: 1.0.13 + version: 1.0.14 '@volar/language-service': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 typescript: specifier: latest version: 5.5.3 vite: specifier: latest - version: 5.3.3(@types/node@20.14.9) + version: 5.3.4(@types/node@20.14.11) vitest: specifier: latest - version: 1.6.0(@types/node@20.14.9) + version: 2.0.3(@types/node@20.14.11) extensions/vscode: devDependencies: @@ -45,16 +45,16 @@ importers: specifier: ^1.82.0 version: 1.91.0 '@volar/vscode': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../../packages/language-core '@vue/language-server': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../../packages/language-server '@vue/typescript-plugin': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../../packages/typescript-plugin esbuild: specifier: ~0.21.0 @@ -75,10 +75,10 @@ importers: packages/component-meta: dependencies: '@volar/typescript': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-core path-browserify: specifier: ^1.0.1 @@ -87,12 +87,12 @@ importers: specifier: '*' version: 5.5.3 vue-component-type-helpers: - specifier: 2.0.26 + specifier: 2.0.28 version: link:../component-type-helpers devDependencies: '@types/node': specifier: latest - version: 20.14.9 + version: 20.14.11 '@types/path-browserify': specifier: latest version: 1.0.2 @@ -102,8 +102,8 @@ importers: packages/language-core: dependencies: '@volar/language-core': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/compiler-dom': specifier: ^3.4.0 version: 3.4.31 @@ -134,13 +134,13 @@ importers: version: 5.1.2 '@types/node': specifier: latest - version: 20.14.9 + version: 20.14.11 '@types/path-browserify': specifier: ^1.0.1 version: 1.0.2 '@volar/typescript': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/compiler-sfc': specifier: ^3.4.0 version: 3.4.31 @@ -148,35 +148,35 @@ importers: packages/language-plugin-pug: dependencies: '@volar/source-map': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 volar-service-pug: - specifier: volar-2.4 + specifier: 0.0.59 version: 0.0.59 devDependencies: '@types/node': specifier: latest - version: 20.14.9 + version: 20.14.11 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-core packages/language-server: dependencies: '@volar/language-core': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@volar/language-server': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-core '@vue/language-service': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-service '@vue/typescript-plugin': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../typescript-plugin vscode-languageserver-protocol: specifier: ^3.17.5 @@ -188,25 +188,25 @@ importers: packages/language-service: dependencies: '@volar/language-core': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@volar/language-service': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@volar/typescript': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/compiler-dom': specifier: ^3.4.0 version: 3.4.31 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-core '@vue/shared': specifier: ^3.4.0 version: 3.4.31 '@vue/typescript-plugin': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../typescript-plugin computeds: specifier: ^0.0.1 @@ -215,29 +215,29 @@ importers: specifier: ^1.0.1 version: 1.0.1 volar-service-css: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) volar-service-emmet: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) volar-service-html: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) volar-service-json: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) volar-service-pug: - specifier: volar-2.4 + specifier: 0.0.59 version: 0.0.59 volar-service-pug-beautify: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) volar-service-typescript: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) volar-service-typescript-twoslash-queries: - specifier: volar-2.4 - version: 0.0.59(@volar/language-service@2.4.0-alpha.15) + specifier: 0.0.59 + version: 0.0.59(@volar/language-service@2.4.0-alpha.18) vscode-html-languageservice: specifier: ^5.2.0 version: 5.3.0 @@ -250,13 +250,13 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.14.9 + version: 20.14.11 '@types/path-browserify': specifier: latest version: 1.0.2 '@volar/kit': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15(typescript@5.5.3) + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18(typescript@5.5.3) vscode-languageserver-protocol: specifier: ^3.17.5 version: 3.17.5 @@ -264,10 +264,10 @@ importers: packages/tsc: dependencies: '@volar/typescript': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-core semver: specifier: ^7.5.4 @@ -278,15 +278,15 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.14.9 + version: 20.14.11 packages/typescript-plugin: dependencies: '@volar/typescript': - specifier: ~2.4.0-alpha.15 - version: 2.4.0-alpha.15 + specifier: ~2.4.0-alpha.18 + version: 2.4.0-alpha.18 '@vue/language-core': - specifier: 2.0.26 + specifier: 2.0.28 version: link:../language-core '@vue/shared': specifier: ^3.4.0 @@ -294,7 +294,7 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.14.9 + version: 20.14.11 test-workspace: devDependencies: @@ -302,7 +302,7 @@ importers: specifier: ^3.4.0 version: 3.4.31(typescript@5.5.3) vue-component-type-helpers: - specifier: 2.0.26 + specifier: 2.0.28 version: link:../packages/component-type-helpers vue2: specifier: npm:vue@2.7.16 @@ -311,11 +311,15 @@ importers: specifier: npm:vue@3.3.13 version: vue@3.3.13(typescript@5.5.3) vue3.5: - specifier: npm:vue@alpha - version: vue@3.5.0-alpha.2(typescript@5.5.3) + specifier: npm:vue@3.5.0-alpha.3 + version: vue@3.5.0-alpha.3(typescript@5.5.3) packages: + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -376,138 +380,282 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.0': + resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.0': + resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.0': + resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.0': + resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.0': + resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.0': + resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.0': + resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.0': + resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.0': + resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.0': + resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.0': + resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.0': + resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.0': + resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.0': + resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.0': + resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.0': + resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.0': + resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.0': + resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.0': + resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.0': + resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.0': + resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.0': + resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.0': + resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.0': + resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@hutson/parse-repository-url@5.0.0': resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} engines: {node: '>=10.13.0'} @@ -520,18 +668,32 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@isaacs/string-locale-compare@1.1.0': + resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} '@johnsoncodehk/pug-beautify@0.2.2': resolution: {integrity: sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA==} + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@lerna-lite/cli@3.6.0': - resolution: {integrity: sha512-X6N39fKArqZ0rS+8DqDToGen9OA+CM0x9edF+r1O/IZR1SO7cNbaLSXl9YDRW/lz5aJGIWsguMoGMjVbv1vCRQ==} + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@lerna-lite/cli@3.7.1': + resolution: {integrity: sha512-aaOjRJv/DWyBXw9gFdt0M7k1oSBPnMo3Vt4adg7MMgJkWjGOwKY3Q83d286beN9+wn1YBEmrf/4W4oThsojnSQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -555,24 +717,24 @@ packages: '@lerna-lite/watch': optional: true - '@lerna-lite/core@3.6.0': - resolution: {integrity: sha512-nyRJARtEUnmD+y3C9gCqJZiz12RAkAseVMDRmIFzMw4ZQvczur69AK62OCsjDYwqlXO3slqNmGz9YG0Yi1RO2Q==} + '@lerna-lite/core@3.7.1': + resolution: {integrity: sha512-GvGc6W7hq4GU6JbqLSHusFIMnvJ4l51BVefGwMiKmXerX4B2JLQVnzeB18N4v0N+T04S+rxktU6yMnmmqsWZhQ==} engines: {node: ^18.0.0 || >=20.0.0} - '@lerna-lite/init@3.6.0': - resolution: {integrity: sha512-COTQZB/8QBklGf4hVilHSx7P54dbJubI+RaMLIe4/JD5ffhu1bOG4jsWwsYusP/mk3t1k1U0mxmiYaWsuO8oqQ==} + '@lerna-lite/init@3.7.1': + resolution: {integrity: sha512-bcQwhz2muCerlKyECui19a6Z0oAQ9g5jfgza3X/ctnIh3C9SXZcpKmgQzOmbDYqFLcGhHE283LZTAVWqG0sNFg==} engines: {node: ^18.0.0 || >=20.0.0} - '@lerna-lite/npmlog@3.6.0': - resolution: {integrity: sha512-sx/dqt+5BRgPPuE0KMW524noVzs1PKuKb+DryMx+J0ZAvveGSwxtddbUADl0XEiAyLwRUXKtsTqcQd0dmCrBaQ==} + '@lerna-lite/npmlog@3.7.0': + resolution: {integrity: sha512-zISrLUGPeS1LFpjiuats4t8lrpbcVrNSSpGGG/yUdXtR28vKZKw/UATT+lIKUNsnGAyWpNrDgUW8p/syP7CkVg==} engines: {node: ^18.0.0 || >=20.0.0} - '@lerna-lite/publish@3.6.0': - resolution: {integrity: sha512-OIkY4D0AEpxP5fNpxo3vkchgcjZUk6W168iLBwnkhXp8iiTKGXgvGWWBXINx+sHp3QIOCx/pFDau0vfIQjPA8g==} + '@lerna-lite/publish@3.7.1': + resolution: {integrity: sha512-/1MGMm4snqCzq5k/wRUiTL8NbMS41uqqRSPdFes/3yNUu3HUSNA1RuLFje0jZXMrfVg1Hh1x5SzhDrpYzhNh6Q==} engines: {node: ^18.0.0 || >=20.0.0} - '@lerna-lite/version@3.6.0': - resolution: {integrity: sha512-ahv+RcVtURDem8yjB8zc4cNdh2EqUevaH358HJ5uv+9IEtxGByGb00xpmCl7YNMHztACS07G3U8hLqDeRM1ZZw==} + '@lerna-lite/version@3.7.1': + resolution: {integrity: sha512-C4CycUp4rgdTGtWYGoa+Ci8EZUsO7b0sAl8Vsdwzjk3g2FRD8d62tpD5Q6drthUQrWRKWpg62rY3q+H+7CGSPg==} engines: {node: ^18.0.0 || >=20.0.0} '@ljharb/through@2.3.13': @@ -595,6 +757,11 @@ packages: resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/arborist@7.5.4': + resolution: {integrity: sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + '@npmcli/fs@3.1.1': resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -608,6 +775,18 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true + '@npmcli/map-workspaces@3.0.6': + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/metavuln-calculator@7.1.1': + resolution: {integrity: sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/name-from-folder@2.0.0': + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/node-gyp@3.0.0': resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -620,6 +799,10 @@ packages: resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} engines: {node: ^16.14.0 || >=18.0.0} + '@npmcli/query@3.1.0': + resolution: {integrity: sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/redact@2.0.1': resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==} engines: {node: ^16.14.0 || >=18.0.0} @@ -794,27 +977,24 @@ packages: resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==} engines: {node: ^16.14.0 || >=18.0.0} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@tsslint/cli@1.0.13': - resolution: {integrity: sha512-rVGoTWrqqBFJF1MqCIzB72ONtnFkEPCLk0wNZAV4KTdqKyuxAzXWN5JhfptX7qDooIvudSQHbb5UlGc9nm/THA==} + '@tsslint/cli@1.0.14': + resolution: {integrity: sha512-2f/nKBbr5v1hY5bBhNPNK0auymaf7KQFdF4ehjy9KeZ9AVhYD5yiwzKkO1MllseQO3ZChBI/bLTrr3F8QuZWNQ==} hasBin: true peerDependencies: typescript: '*' - '@tsslint/config@1.0.13': - resolution: {integrity: sha512-82XKwV0yD5u7OjSbkhRmMtY3KIB1+cbALwGZ4xPv7bDTnKnr0dhzM4R3K+kD5eNnU0k40vtMTpdmFpA2vudNQA==} + '@tsslint/config@1.0.14': + resolution: {integrity: sha512-tcIVQ0kom6CtWo2S1R4bfYby3kPllPjybRDs7EWdQ9fnxWrBmNc3i9sZl7O4Vp5VkLLzUDCuoC4IQXtkJynB9Q==} - '@tsslint/core@1.0.13': - resolution: {integrity: sha512-MqFDTnQ8D49gaFwcWWH57KhHjSob36vWK9eLG4mxpeLSbrCV4MkZBbwlCxCotNWiNtUCFtdXoylfSRSwwB/9yw==} + '@tsslint/core@1.0.14': + resolution: {integrity: sha512-IywX5iAfze3PwAlllvQY9TDpXPhEPfseTL/pfZZiOY9TNsRAZaXcsdIHXbNWky6FSmQNrvX/GW1ACZzTiR/Baw==} - '@tsslint/types@1.0.13': - resolution: {integrity: sha512-KrwYAfPoQwjk1JnboW3lhwC6/IzHIb9mVDwfm8fApBiiS/DdnseZCPYYEqWEGdIzqLK2g58qX9qwWJ1GLukUEA==} + '@tsslint/types@1.0.14': + resolution: {integrity: sha512-5/A/R0IAoi8/b3afYGBRlIZdhpxwDwiJflt93byReQc3fwMZGUSUVlL2TeFA7d8G3fya7Ftdq9CiBCuHEHW05g==} '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} @@ -830,8 +1010,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@20.14.9': - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + '@types/node@20.14.11': + resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -845,46 +1025,49 @@ packages: '@types/vscode@1.91.0': resolution: {integrity: sha512-PgPr+bUODjG3y+ozWUCyzttqR9EHny9sPAfJagddQjDwdtf66y2sDKJMnFZRuzBA2YtBGASqJGPil8VDUPvO6A==} - '@vitest/expect@1.6.0': - resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + '@vitest/expect@2.0.3': + resolution: {integrity: sha512-X6AepoOYePM0lDNUPsGXTxgXZAl3EXd0GYe/MZyVE4HzkUqyUVC6S3PrY5mClDJ6/7/7vALLMV3+xD/Ko60Hqg==} + + '@vitest/pretty-format@2.0.3': + resolution: {integrity: sha512-URM4GLsB2xD37nnTyvf6kfObFafxmycCL8un3OC9gaCs5cti2u+5rJdIflZ2fUJUen4NbvF6jCufwViAFLvz1g==} - '@vitest/runner@1.6.0': - resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + '@vitest/runner@2.0.3': + resolution: {integrity: sha512-EmSP4mcjYhAcuBWwqgpjR3FYVeiA4ROzRunqKltWjBfLNs1tnMLtF+qtgd5ClTwkDP6/DGlKJTNa6WxNK0bNYQ==} - '@vitest/snapshot@1.6.0': - resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + '@vitest/snapshot@2.0.3': + resolution: {integrity: sha512-6OyA6v65Oe3tTzoSuRPcU6kh9m+mPL1vQ2jDlPdn9IQoUxl8rXhBnfICNOC+vwxWY684Vt5UPgtcA2aPFBb6wg==} - '@vitest/spy@1.6.0': - resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + '@vitest/spy@2.0.3': + resolution: {integrity: sha512-sfqyAw/ypOXlaj4S+w8689qKM1OyPOqnonqOc9T91DsoHbfN5mU7FdifWWv3MtQFf0lEUstEwR9L/q/M390C+A==} - '@vitest/utils@1.6.0': - resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + '@vitest/utils@2.0.3': + resolution: {integrity: sha512-c/UdELMuHitQbbc/EVctlBaxoYAwQPQdSNwv7z/vHyBKy2edYZaFgptE27BRueZB7eW8po+cllotMNTDpL3HWg==} - '@volar/kit@2.4.0-alpha.15': - resolution: {integrity: sha512-ZCBErTebCVdzpSo/0wBlrjnZfqQfVIaHUJa3kOQe3TbVR/8Ny/3mij9gSkBTUcSyVtlUFpJpJo/B8aQp0xt/mQ==} + '@volar/kit@2.4.0-alpha.18': + resolution: {integrity: sha512-dZMSNhesh23lhd61ax2l04IgIcYofAjm8M+5BKAmX47ROweyc8RrrslszCFUJynlmXx6JS1PoHqvo8+E0aAYQQ==} peerDependencies: typescript: '*' - '@volar/language-core@2.4.0-alpha.15': - resolution: {integrity: sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==} + '@volar/language-core@2.4.0-alpha.18': + resolution: {integrity: sha512-JAYeJvYQQROmVRtSBIczaPjP3DX4QW1fOqW1Ebs0d3Y3EwSNRglz03dSv0Dm61dzd0Yx3WgTW3hndDnTQqgmyg==} - '@volar/language-server@2.4.0-alpha.15': - resolution: {integrity: sha512-epaF7Rllb29nr25F8hX5bq7ivgStNZzXGkhuPlHCUM+Ij/aQnsBeYQsfm7EttPqqO3abCctpRWyd+icklFEBoQ==} + '@volar/language-server@2.4.0-alpha.18': + resolution: {integrity: sha512-dciHEE/R5kzI0bY71QfkoCVQ3cQI6g9MHfA4oIP6UhnJy0CdleUalWSygOXoD3Nq7Yk6wn2BRrb1PP5MsadY/Q==} - '@volar/language-service@2.4.0-alpha.15': - resolution: {integrity: sha512-H5T5JvvqvWhG0PvvKPTM0nczTbTKQ+U87a8r0eahlH/ySi2HvIHO/7PiNKLxKqLNsiT8SX4U3QcGC8ZaNcC07g==} + '@volar/language-service@2.4.0-alpha.18': + resolution: {integrity: sha512-EuetrtbEtudi9buinWAG5U3Jam5dY27zXd/7GYnx542kBwanWOBM8i4DAQd0z7M11fOxXgybxPA933uaSyaOog==} - '@volar/snapshot-document@2.4.0-alpha.15': - resolution: {integrity: sha512-8lnX0eZ7/lM+hakO5kspWABi4nijppxTy9XU0f9ns2lZ/JCE0t9EurNNiOaw4MWFO9USr0H72Ut0LCB9o4rpqA==} + '@volar/snapshot-document@2.4.0-alpha.18': + resolution: {integrity: sha512-JAeclEly/wnILhR4Pu9MpgBLInZJH49O1zoy8fU+pk5I+zpv7JIEby5z2UFAS60+sIDnxBdAGd7rZ5VibE70vg==} - '@volar/source-map@2.4.0-alpha.15': - resolution: {integrity: sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==} + '@volar/source-map@2.4.0-alpha.18': + resolution: {integrity: sha512-MTeCV9MUwwsH0sNFiZwKtFrrVZUK6p8ioZs3xFzHc2cvDXHWlYN3bChdQtwKX+FY2HG6H3CfAu1pKijolzIQ8g==} - '@volar/typescript@2.4.0-alpha.15': - resolution: {integrity: sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==} + '@volar/typescript@2.4.0-alpha.18': + resolution: {integrity: sha512-sXh5Y8sqGUkgxpMWUGvRXggxYHAVxg0Pa1C42lQZuPDrW6vHJPR0VCK8Sr7WJsAW530HuNQT/ZIskmXtxjybMQ==} - '@volar/vscode@2.4.0-alpha.15': - resolution: {integrity: sha512-apzZqZrCKO9tDWRzsy4EWUgywMzlVhIqDWP3HrXIjDuRKCFG7x8tgfqoDHOSs5M8aIo2BHk1akzCinobLkpFbw==} + '@volar/vscode@2.4.0-alpha.18': + resolution: {integrity: sha512-sI/YHtpPlV20GAq4IyokSmhLP0smSZp04Y4R2EsAp52UR5kJZv9itU4cQAz/z58LjQdOsweDBPPE55WLLpSYEQ==} '@vscode/emmet-helper@2.9.3': resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} @@ -898,8 +1081,8 @@ packages: '@vue/compiler-core@3.4.31': resolution: {integrity: sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==} - '@vue/compiler-core@3.5.0-alpha.2': - resolution: {integrity: sha512-BWyn6mNsYytzNUJQdDXP4ftK/AjvD4+5bE7o08xQwsvbYnFwRF80Zi3G8LSe/0AiC68PLqz2iBqZQhdMfSGyww==} + '@vue/compiler-core@3.5.0-alpha.3': + resolution: {integrity: sha512-du7iRe9SE5HJ8XGaVtN4OnVsBuslCOINZUiRYykJjDvJERdjDcJglJ4YTfi0gmG80p6TmzQSXxPuBVT/JlqpuQ==} '@vue/compiler-dom@3.3.13': resolution: {integrity: sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==} @@ -907,8 +1090,8 @@ packages: '@vue/compiler-dom@3.4.31': resolution: {integrity: sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==} - '@vue/compiler-dom@3.5.0-alpha.2': - resolution: {integrity: sha512-2CoonkvK32tvz9n988sE3oXPoBKYtCO0jrjno9C4gemJ7g5q8D0VJyE5AzGYFKM8ZS7bjgp2T67PAmaOOgsu0Q==} + '@vue/compiler-dom@3.5.0-alpha.3': + resolution: {integrity: sha512-SL/lSqZ/LgiFEyix1Z3SqvRvd1hfZqQ0RfaH0wRDLv/2lkqswl4qxnqFBEChoWS0BpMBIMkAmrAha7xIhELKug==} '@vue/compiler-sfc@2.7.16': resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==} @@ -919,8 +1102,8 @@ packages: '@vue/compiler-sfc@3.4.31': resolution: {integrity: sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==} - '@vue/compiler-sfc@3.5.0-alpha.2': - resolution: {integrity: sha512-tdTA3AseuL2PcT9xSEBr/3mRFiGEb8BMNydcNWgGwjQHUnVS/iJDkD3ob+QDTc4gdXENu0khQbrSb2cSvNXvTA==} + '@vue/compiler-sfc@3.5.0-alpha.3': + resolution: {integrity: sha512-UVs18nFL365hea2P9iOHvQDBB8eZxymhGmEol6YMbwB3DjhOcGyzscVixRin/kNHyPr5dEKjRUKcfxwZ03a+9A==} '@vue/compiler-ssr@3.3.13': resolution: {integrity: sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==} @@ -928,8 +1111,8 @@ packages: '@vue/compiler-ssr@3.4.31': resolution: {integrity: sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==} - '@vue/compiler-ssr@3.5.0-alpha.2': - resolution: {integrity: sha512-wyjfDj3jHQI8Ad9cUWPml6dpO8cm3bsEdXOfiIsBSpDOKAlbdvBQIOpb9CQE09JLPK3j8hFtAEGPtq1COcL2kw==} + '@vue/compiler-ssr@3.5.0-alpha.3': + resolution: {integrity: sha512-cATOOLUjg9W86ZMT87DPsi3W4BZUZIIrIGZEUrRcC91lWs00PTtXiWxhQF4QGpxKpGLPr9GK3E2z5SeQWlk5Zw==} '@vue/reactivity-transform@3.3.13': resolution: {integrity: sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q==} @@ -940,8 +1123,8 @@ packages: '@vue/reactivity@3.4.31': resolution: {integrity: sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==} - '@vue/reactivity@3.5.0-alpha.2': - resolution: {integrity: sha512-4UG565XKudWMqijfrIY296XTJLBh3m/nZa+mLhsK5uMq0xBDFsJsrVskAmFlLNTlOd6c5FiktZufB9AB7m6VKw==} + '@vue/reactivity@3.5.0-alpha.3': + resolution: {integrity: sha512-Ju0okU4JHdBsxxu7RR3qOMssg4G11KX5vhmlyOwpH3bssp1fYZWQ9qyz+iadtOVsomc+b3WG0Jdx1KFgrGMHcg==} '@vue/runtime-core@3.3.13': resolution: {integrity: sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA==} @@ -949,8 +1132,8 @@ packages: '@vue/runtime-core@3.4.31': resolution: {integrity: sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==} - '@vue/runtime-core@3.5.0-alpha.2': - resolution: {integrity: sha512-59R12UzEhqEOlItt6yKOoTyQ+Hx2hqFPKmdYPT9VAYmLH+ABngjrvw9KuJT9OsR+f4q/NwmCAAvjXV4gC56/cg==} + '@vue/runtime-core@3.5.0-alpha.3': + resolution: {integrity: sha512-RWo7KGycr0IIj1hjJ6xe5gsTeEMkhsW9wWc+lU4r8t7Tbg90F/wjBOcIXzFKhqI5+o9dExgozRhTYwrchbx/6g==} '@vue/runtime-dom@3.3.13': resolution: {integrity: sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ==} @@ -958,8 +1141,8 @@ packages: '@vue/runtime-dom@3.4.31': resolution: {integrity: sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==} - '@vue/runtime-dom@3.5.0-alpha.2': - resolution: {integrity: sha512-3ShrCHo22tPMblLl0K6VXTv6MB95D9dBZH/YyJO+aLcOdEQXrLtVp8sXG6oPIwapBVlNkOZX7lUQbnzpdZgosQ==} + '@vue/runtime-dom@3.5.0-alpha.3': + resolution: {integrity: sha512-IOM5wRRnEPYU2USpLtG1VbTyMkyj9Dk2xGnHKnqtjy/4Wdnp1pXifCTfa37rnFPZFAbKeXRJT74dLMdRIyH9Kw==} '@vue/server-renderer@3.3.13': resolution: {integrity: sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg==} @@ -971,10 +1154,10 @@ packages: peerDependencies: vue: 3.4.31 - '@vue/server-renderer@3.5.0-alpha.2': - resolution: {integrity: sha512-I9Mq56+B3XUhcKSEr0T9xTqOy04ORTrFANazPR871ITXAHO5viQXrdqOgh2nvBrz6L5c8vpDZgKDhKn+H7G9jg==} + '@vue/server-renderer@3.5.0-alpha.3': + resolution: {integrity: sha512-w2ZOu7Q64BSotuyKReFEq5p/G0U1txTVgOsKq6+bTo3kPcUBYZV9yVCaePVf9kcU5tqjZoje5UBzNExe5DzZ3A==} peerDependencies: - vue: 3.5.0-alpha.2 + vue: 3.5.0-alpha.3 '@vue/shared@3.3.13': resolution: {integrity: sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==} @@ -982,8 +1165,8 @@ packages: '@vue/shared@3.4.31': resolution: {integrity: sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==} - '@vue/shared@3.5.0-alpha.2': - resolution: {integrity: sha512-PMOD/qZfwNGE1xpz92Q7YtcGzz2JtvULSb4HIvv3N0idMAlIKmnzkIvsB0EhosPnJWe5O+xDe+DKmr6fIKu7HQ==} + '@vue/shared@3.5.0-alpha.3': + resolution: {integrity: sha512-TOd0zMchrmWoSWNddkx30wHTVRBkzemhgmbXMBUURv6HuyuddlVyqCMLDmYiklEurers3ILRp+e3b5QN838+kg==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -993,20 +1176,11 @@ packages: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} - acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} @@ -1038,10 +1212,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1063,8 +1233,9 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} azure-devops-node-api@11.2.0: resolution: {integrity: sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==} @@ -1078,6 +1249,10 @@ packages: before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + bin-links@4.0.4: + resolution: {integrity: sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -1127,9 +1302,9 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - chai@4.4.1: - resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} - engines: {node: '>=4'} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1149,8 +1324,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - check-error@1.0.3: - resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -1206,6 +1382,10 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + cmd-shim@6.0.3: + resolution: {integrity: sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1231,6 +1411,9 @@ packages: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} + common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -1240,9 +1423,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.7: - resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} - config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -1300,6 +1480,11 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -1335,8 +1520,8 @@ packages: babel-plugin-macros: optional: true - deep-eql@4.1.4: - resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} deep-extend@0.6.0: @@ -1366,10 +1551,6 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1462,6 +1643,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.0: + resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -1613,15 +1799,14 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1712,10 +1897,6 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore-walk@5.0.1: - resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ignore-walk@6.0.5: resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1865,9 +2046,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1882,6 +2060,9 @@ packages: resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-stringify-nice@1.1.4: + resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -1903,6 +2084,12 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + just-diff-apply@5.5.0: + resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} + + just-diff@6.0.2: + resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==} + keytar@7.9.0: resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} @@ -1936,10 +2123,6 @@ packages: resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} - engines: {node: '>=14'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -1955,8 +2138,8 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - loupe@2.3.7: - resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} lru-cache@10.3.0: resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} @@ -2016,6 +2199,10 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2074,9 +2261,6 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.1: - resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -2142,10 +2326,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-bundled@2.0.1: - resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - npm-bundled@3.0.1: resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2154,10 +2334,6 @@ packages: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - npm-normalize-package-bin@2.0.0: - resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - npm-normalize-package-bin@3.0.1: resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2166,11 +2342,6 @@ packages: resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==} engines: {node: ^16.14.0 || >=18.0.0} - npm-packlist@5.1.3: - resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - npm-packlist@8.0.2: resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2229,8 +2400,8 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + p-limit@6.1.0: + resolution: {integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==} engines: {node: '>=18'} p-locate@4.1.0: @@ -2281,6 +2452,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-conflict-json@3.0.1: + resolution: {integrity: sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2346,8 +2521,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -2367,8 +2543,9 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - pkg-types@1.1.3: - resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} + engines: {node: '>=4'} postcss@8.4.39: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} @@ -2384,10 +2561,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - proc-log@3.0.0: resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2396,6 +2569,16 @@ packages: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + proggy@2.0.0: + resolution: {integrity: sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + promise-all-reject-late@1.0.1: + resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} + + promise-call-limit@3.0.1: + resolution: {integrity: sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==} + promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -2437,8 +2620,13 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + read-cmd-shim@4.0.0: + resolution: {integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} read-pkg-up@10.1.0: resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} @@ -2672,9 +2860,6 @@ packages: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - strip-literal@2.1.0: - resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} - strong-log-transformer@2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} engines: {node: '>=4'} @@ -2713,12 +2898,16 @@ packages: tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} - tinypool@0.8.4: - resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + tinypool@1.0.0: + resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyspy@2.2.1: - resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + tinyspy@3.0.0: + resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} engines: {node: '>=14.0.0'} tmp@0.0.33: @@ -2740,6 +2929,10 @@ packages: token-stream@1.0.0: resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + treeverse@3.0.0: + resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -2754,10 +2947,6 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -2794,9 +2983,6 @@ packages: uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - uglify-js@3.18.0: resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} @@ -2844,13 +3030,13 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vite-node@1.6.0: - resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + vite-node@2.0.3: + resolution: {integrity: sha512-14jzwMx7XTcMB+9BhGQyoEAmSl0eOr3nrnn+Z12WNERtOvLN+d2scbRUvyni05rT3997Bg+rZb47NyP4IQPKXg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.3.3: - resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} + vite@5.3.4: + resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2877,15 +3063,15 @@ packages: terser: optional: true - vitest@1.6.0: - resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} + vitest@2.0.3: + resolution: {integrity: sha512-o3HRvU93q6qZK4rI2JrhKyZMMuxg/JRt30E6qeQs6ueaiz5hr1cPj+Sk2kATgQzMMqsa2DiNI0TIK++1ULx8Jw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.6.0 - '@vitest/ui': 1.6.0 + '@vitest/browser': 2.0.3 + '@vitest/ui': 2.0.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -3029,14 +3215,17 @@ packages: typescript: optional: true - vue@3.5.0-alpha.2: - resolution: {integrity: sha512-dyhWA95ko++OlThqFNptBXiVFihKPfZ2487FKSYiB1X7LK1DX6AOjEfxbJdzupoNSOuHDVJIzOvcrBeyChX4vA==} + vue@3.5.0-alpha.3: + resolution: {integrity: sha512-VrCHKUgxsiGMO1SCSrS9yHLwJYAwRrbKqrHdd32ruAWnMC5GVnbrjcrcMuvw5RnrfUc+9y7pBXpVbiO6+WsyMQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -3130,6 +3319,11 @@ packages: snapshots: + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -3193,72 +3387,144 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.23.0': + optional: true + '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.23.0': + optional: true + '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.23.0': + optional: true + '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.23.0': + optional: true + '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.23.0': + optional: true + '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.23.0': + optional: true + '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.23.0': + optional: true + '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.23.0': + optional: true + '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.23.0': + optional: true + '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.23.0': + optional: true + '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.23.0': + optional: true + '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.23.0': + optional: true + '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.23.0': + optional: true + '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.23.0': + optional: true + '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.23.0': + optional: true + '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.23.0': + optional: true + '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.23.0': + optional: true + '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.23.0': + optional: true + + '@esbuild/openbsd-arm64@0.23.0': + optional: true + '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.23.0': + optional: true + '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.23.0': + optional: true + '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.23.0': + optional: true + '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.23.0': + optional: true + '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.23.0': + optional: true + '@hutson/parse-repository-url@5.0.0': {} '@inquirer/figures@1.0.3': {} @@ -3272,36 +3538,49 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 + '@isaacs/string-locale-compare@1.1.0': {} '@johnsoncodehk/pug-beautify@0.2.2': {} + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + '@jridgewell/sourcemap-codec@1.4.15': {} - '@lerna-lite/cli@3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(@lerna-lite/version@3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3)': + '@jridgewell/trace-mapping@0.3.25': dependencies: - '@lerna-lite/core': 3.6.0(typescript@5.5.3) - '@lerna-lite/init': 3.6.0(typescript@5.5.3) - '@lerna-lite/npmlog': 3.6.0 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@lerna-lite/cli@3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(@lerna-lite/version@3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3)': + dependencies: + '@lerna-lite/core': 3.7.1(typescript@5.5.3) + '@lerna-lite/init': 3.7.1(typescript@5.5.3) + '@lerna-lite/npmlog': 3.7.0 dedent: 1.5.3 dotenv: 16.4.5 import-local: 3.1.0 load-json-file: 7.0.1 yargs: 17.7.2 optionalDependencies: - '@lerna-lite/publish': 3.6.0(typescript@5.5.3) - '@lerna-lite/version': 3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3) + '@lerna-lite/publish': 3.7.1(typescript@5.5.3) + '@lerna-lite/version': 3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3) transitivePeerDependencies: - babel-plugin-macros - bluebird - supports-color - typescript - '@lerna-lite/core@3.6.0(typescript@5.5.3)': + '@lerna-lite/core@3.7.1(typescript@5.5.3)': dependencies: - '@lerna-lite/npmlog': 3.6.0 + '@lerna-lite/npmlog': 3.7.0 '@npmcli/run-script': 8.1.0 chalk: 5.3.0 clone-deep: 4.0.1 @@ -3333,9 +3612,9 @@ snapshots: - supports-color - typescript - '@lerna-lite/init@3.6.0(typescript@5.5.3)': + '@lerna-lite/init@3.7.1(typescript@5.5.3)': dependencies: - '@lerna-lite/core': 3.6.0(typescript@5.5.3) + '@lerna-lite/core': 3.7.1(typescript@5.5.3) fs-extra: 11.2.0 p-map: 7.0.2 write-json-file: 5.0.0 @@ -3345,7 +3624,7 @@ snapshots: - supports-color - typescript - '@lerna-lite/npmlog@3.6.0': + '@lerna-lite/npmlog@3.7.0': dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -3357,24 +3636,25 @@ snapshots: strip-ansi: 7.1.0 wide-align: 1.1.5 - '@lerna-lite/publish@3.6.0(typescript@5.5.3)': + '@lerna-lite/publish@3.7.1(typescript@5.5.3)': dependencies: - '@lerna-lite/cli': 3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(@lerna-lite/version@3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3) - '@lerna-lite/core': 3.6.0(typescript@5.5.3) - '@lerna-lite/npmlog': 3.6.0 - '@lerna-lite/version': 3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3) + '@lerna-lite/cli': 3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(@lerna-lite/version@3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3) + '@lerna-lite/core': 3.7.1(typescript@5.5.3) + '@lerna-lite/npmlog': 3.7.0 + '@lerna-lite/version': 3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3) + '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 byte-size: 8.1.1 chalk: 5.3.0 columnify: 1.6.0 fs-extra: 11.2.0 - glob: 10.4.2 + glob: 10.4.5 has-unicode: 2.0.1 libnpmaccess: 8.0.6 libnpmpublish: 9.0.9 normalize-path: 3.0.0 npm-package-arg: 11.0.2 - npm-packlist: 5.1.3 + npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 p-map: 7.0.2 p-pipe: 4.0.0 @@ -3393,11 +3673,11 @@ snapshots: - supports-color - typescript - '@lerna-lite/version@3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3)': + '@lerna-lite/version@3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3)': dependencies: - '@lerna-lite/cli': 3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(@lerna-lite/version@3.6.0(@lerna-lite/publish@3.6.0(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3) - '@lerna-lite/core': 3.6.0(typescript@5.5.3) - '@lerna-lite/npmlog': 3.6.0 + '@lerna-lite/cli': 3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(@lerna-lite/version@3.7.1(@lerna-lite/publish@3.7.1(typescript@5.5.3))(typescript@5.5.3))(typescript@5.5.3) + '@lerna-lite/core': 3.7.1(typescript@5.5.3) + '@lerna-lite/npmlog': 3.7.0 '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 21.0.0 chalk: 5.3.0 @@ -3418,7 +3698,7 @@ snapshots: new-github-release-url: 2.0.0 node-fetch: 3.3.2 npm-package-arg: 11.0.2 - p-limit: 5.0.0 + p-limit: 6.1.0 p-map: 7.0.2 p-pipe: 4.0.0 p-reduce: 3.0.0 @@ -3465,6 +3745,47 @@ snapshots: transitivePeerDependencies: - supports-color + '@npmcli/arborist@7.5.4': + dependencies: + '@isaacs/string-locale-compare': 1.1.0 + '@npmcli/fs': 3.1.1 + '@npmcli/installed-package-contents': 2.1.0 + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/metavuln-calculator': 7.1.1 + '@npmcli/name-from-folder': 2.0.0 + '@npmcli/node-gyp': 3.0.0 + '@npmcli/package-json': 5.2.0 + '@npmcli/query': 3.1.0 + '@npmcli/redact': 2.0.1 + '@npmcli/run-script': 8.1.0 + bin-links: 4.0.4 + cacache: 18.0.3 + common-ancestor-path: 1.0.1 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + json-stringify-nice: 1.1.4 + lru-cache: 10.3.0 + minimatch: 9.0.5 + nopt: 7.2.1 + npm-install-checks: 6.3.0 + npm-package-arg: 11.0.2 + npm-pick-manifest: 9.0.1 + npm-registry-fetch: 17.1.0 + pacote: 18.0.6 + parse-conflict-json: 3.0.1 + proc-log: 4.2.0 + proggy: 2.0.0 + promise-all-reject-late: 1.0.1 + promise-call-limit: 3.0.1 + read-package-json-fast: 3.0.2 + semver: 7.6.2 + ssri: 10.0.6 + treeverse: 3.0.0 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + '@npmcli/fs@3.1.1': dependencies: semver: 7.6.2 @@ -3487,12 +3808,32 @@ snapshots: npm-bundled: 3.0.1 npm-normalize-package-bin: 3.0.1 + '@npmcli/map-workspaces@3.0.6': + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.5 + read-package-json-fast: 3.0.2 + + '@npmcli/metavuln-calculator@7.1.1': + dependencies: + cacache: 18.0.3 + json-parse-even-better-errors: 3.0.2 + pacote: 18.0.6 + proc-log: 4.2.0 + semver: 7.6.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@npmcli/name-from-folder@2.0.0': {} + '@npmcli/node-gyp@3.0.0': {} '@npmcli/package-json@5.2.0': dependencies: '@npmcli/git': 5.0.7 - glob: 10.4.2 + glob: 10.4.5 hosted-git-info: 7.0.2 json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.2 @@ -3505,6 +3846,10 @@ snapshots: dependencies: which: 4.0.0 + '@npmcli/query@3.1.0': + dependencies: + postcss-selector-parser: 6.1.1 + '@npmcli/redact@2.0.1': {} '@npmcli/run-script@8.1.0': @@ -3667,30 +4012,28 @@ snapshots: '@sigstore/core': 1.1.0 '@sigstore/protobuf-specs': 0.3.2 - '@sinclair/typebox@0.27.8': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@tsslint/cli@1.0.13(typescript@5.5.3)': + '@tsslint/cli@1.0.14(typescript@5.5.3)': dependencies: '@clack/prompts': 0.7.0 - '@tsslint/config': 1.0.13 - '@tsslint/core': 1.0.13 + '@tsslint/config': 1.0.14 + '@tsslint/core': 1.0.14 glob: 10.4.2 typescript: 5.5.3 - '@tsslint/config@1.0.13': + '@tsslint/config@1.0.14': dependencies: - '@tsslint/types': 1.0.13 - esbuild: 0.21.5 + '@tsslint/types': 1.0.14 + esbuild: 0.23.0 - '@tsslint/core@1.0.13': + '@tsslint/core@1.0.14': dependencies: error-stack-parser: 2.1.4 - minimatch: 9.0.5 + minimatch: 10.0.1 source-map-support: 0.5.21 - '@tsslint/types@1.0.13': {} + '@tsslint/types@1.0.14': {} '@tufjs/canonical-json@2.0.0': {} @@ -3703,7 +4046,7 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@20.14.9': + '@types/node@20.14.11': dependencies: undici-types: 5.26.5 @@ -3715,54 +4058,58 @@ snapshots: '@types/vscode@1.91.0': {} - '@vitest/expect@1.6.0': + '@vitest/expect@2.0.3': dependencies: - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - chai: 4.4.1 + '@vitest/spy': 2.0.3 + '@vitest/utils': 2.0.3 + chai: 5.1.1 + tinyrainbow: 1.2.0 - '@vitest/runner@1.6.0': + '@vitest/pretty-format@2.0.3': dependencies: - '@vitest/utils': 1.6.0 - p-limit: 5.0.0 + tinyrainbow: 1.2.0 + + '@vitest/runner@2.0.3': + dependencies: + '@vitest/utils': 2.0.3 pathe: 1.1.2 - '@vitest/snapshot@1.6.0': + '@vitest/snapshot@2.0.3': dependencies: + '@vitest/pretty-format': 2.0.3 magic-string: 0.30.10 pathe: 1.1.2 - pretty-format: 29.7.0 - '@vitest/spy@1.6.0': + '@vitest/spy@2.0.3': dependencies: - tinyspy: 2.2.1 + tinyspy: 3.0.0 - '@vitest/utils@1.6.0': + '@vitest/utils@2.0.3': dependencies: - diff-sequences: 29.6.3 + '@vitest/pretty-format': 2.0.3 estree-walker: 3.0.3 - loupe: 2.3.7 - pretty-format: 29.7.0 + loupe: 3.1.1 + tinyrainbow: 1.2.0 - '@volar/kit@2.4.0-alpha.15(typescript@5.5.3)': + '@volar/kit@2.4.0-alpha.18(typescript@5.5.3)': dependencies: - '@volar/language-service': 2.4.0-alpha.15 - '@volar/typescript': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 + '@volar/typescript': 2.4.0-alpha.18 typesafe-path: 0.2.2 typescript: 5.5.3 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-core@2.4.0-alpha.15': + '@volar/language-core@2.4.0-alpha.18': dependencies: - '@volar/source-map': 2.4.0-alpha.15 + '@volar/source-map': 2.4.0-alpha.18 - '@volar/language-server@2.4.0-alpha.15': + '@volar/language-server@2.4.0-alpha.18': dependencies: - '@volar/language-core': 2.4.0-alpha.15 - '@volar/language-service': 2.4.0-alpha.15 - '@volar/snapshot-document': 2.4.0-alpha.15 - '@volar/typescript': 2.4.0-alpha.15 + '@volar/language-core': 2.4.0-alpha.18 + '@volar/language-service': 2.4.0-alpha.18 + '@volar/snapshot-document': 2.4.0-alpha.18 + '@volar/typescript': 2.4.0-alpha.18 path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 @@ -3770,29 +4117,29 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-service@2.4.0-alpha.15': + '@volar/language-service@2.4.0-alpha.18': dependencies: - '@volar/language-core': 2.4.0-alpha.15 + '@volar/language-core': 2.4.0-alpha.18 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/snapshot-document@2.4.0-alpha.15': + '@volar/snapshot-document@2.4.0-alpha.18': dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - '@volar/source-map@2.4.0-alpha.15': {} + '@volar/source-map@2.4.0-alpha.18': {} - '@volar/typescript@2.4.0-alpha.15': + '@volar/typescript@2.4.0-alpha.18': dependencies: - '@volar/language-core': 2.4.0-alpha.15 + '@volar/language-core': 2.4.0-alpha.18 path-browserify: 1.0.1 vscode-uri: 3.0.8 - '@volar/vscode@2.4.0-alpha.15': + '@volar/vscode@2.4.0-alpha.18': dependencies: - '@volar/language-server': 2.4.0-alpha.15 + '@volar/language-server': 2.4.0-alpha.18 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 @@ -3822,10 +4169,10 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.0 - '@vue/compiler-core@3.5.0-alpha.2': + '@vue/compiler-core@3.5.0-alpha.3': dependencies: '@babel/parser': 7.24.7 - '@vue/shared': 3.5.0-alpha.2 + '@vue/shared': 3.5.0-alpha.3 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 @@ -3840,10 +4187,10 @@ snapshots: '@vue/compiler-core': 3.4.31 '@vue/shared': 3.4.31 - '@vue/compiler-dom@3.5.0-alpha.2': + '@vue/compiler-dom@3.5.0-alpha.3': dependencies: - '@vue/compiler-core': 3.5.0-alpha.2 - '@vue/shared': 3.5.0-alpha.2 + '@vue/compiler-core': 3.5.0-alpha.3 + '@vue/shared': 3.5.0-alpha.3 '@vue/compiler-sfc@2.7.16': dependencies: @@ -3878,13 +4225,13 @@ snapshots: postcss: 8.4.39 source-map-js: 1.2.0 - '@vue/compiler-sfc@3.5.0-alpha.2': + '@vue/compiler-sfc@3.5.0-alpha.3': dependencies: '@babel/parser': 7.24.7 - '@vue/compiler-core': 3.5.0-alpha.2 - '@vue/compiler-dom': 3.5.0-alpha.2 - '@vue/compiler-ssr': 3.5.0-alpha.2 - '@vue/shared': 3.5.0-alpha.2 + '@vue/compiler-core': 3.5.0-alpha.3 + '@vue/compiler-dom': 3.5.0-alpha.3 + '@vue/compiler-ssr': 3.5.0-alpha.3 + '@vue/shared': 3.5.0-alpha.3 estree-walker: 2.0.2 magic-string: 0.30.10 postcss: 8.4.39 @@ -3900,10 +4247,10 @@ snapshots: '@vue/compiler-dom': 3.4.31 '@vue/shared': 3.4.31 - '@vue/compiler-ssr@3.5.0-alpha.2': + '@vue/compiler-ssr@3.5.0-alpha.3': dependencies: - '@vue/compiler-dom': 3.5.0-alpha.2 - '@vue/shared': 3.5.0-alpha.2 + '@vue/compiler-dom': 3.5.0-alpha.3 + '@vue/shared': 3.5.0-alpha.3 '@vue/reactivity-transform@3.3.13': dependencies: @@ -3921,9 +4268,9 @@ snapshots: dependencies: '@vue/shared': 3.4.31 - '@vue/reactivity@3.5.0-alpha.2': + '@vue/reactivity@3.5.0-alpha.3': dependencies: - '@vue/shared': 3.5.0-alpha.2 + '@vue/shared': 3.5.0-alpha.3 '@vue/runtime-core@3.3.13': dependencies: @@ -3935,10 +4282,10 @@ snapshots: '@vue/reactivity': 3.4.31 '@vue/shared': 3.4.31 - '@vue/runtime-core@3.5.0-alpha.2': + '@vue/runtime-core@3.5.0-alpha.3': dependencies: - '@vue/reactivity': 3.5.0-alpha.2 - '@vue/shared': 3.5.0-alpha.2 + '@vue/reactivity': 3.5.0-alpha.3 + '@vue/shared': 3.5.0-alpha.3 '@vue/runtime-dom@3.3.13': dependencies: @@ -3953,10 +4300,11 @@ snapshots: '@vue/shared': 3.4.31 csstype: 3.1.3 - '@vue/runtime-dom@3.5.0-alpha.2': + '@vue/runtime-dom@3.5.0-alpha.3': dependencies: - '@vue/runtime-core': 3.5.0-alpha.2 - '@vue/shared': 3.5.0-alpha.2 + '@vue/reactivity': 3.5.0-alpha.3 + '@vue/runtime-core': 3.5.0-alpha.3 + '@vue/shared': 3.5.0-alpha.3 csstype: 3.1.3 '@vue/server-renderer@3.3.13(vue@3.4.31(typescript@5.5.3))': @@ -3971,17 +4319,17 @@ snapshots: '@vue/shared': 3.4.31 vue: 3.4.31(typescript@5.5.3) - '@vue/server-renderer@3.5.0-alpha.2(vue@3.4.31(typescript@5.5.3))': + '@vue/server-renderer@3.5.0-alpha.3(vue@3.4.31(typescript@5.5.3))': dependencies: - '@vue/compiler-ssr': 3.5.0-alpha.2 - '@vue/shared': 3.5.0-alpha.2 + '@vue/compiler-ssr': 3.5.0-alpha.3 + '@vue/shared': 3.5.0-alpha.3 vue: 3.4.31(typescript@5.5.3) '@vue/shared@3.3.13': {} '@vue/shared@3.4.31': {} - '@vue/shared@3.5.0-alpha.2': {} + '@vue/shared@3.5.0-alpha.3': {} JSONStream@1.3.5: dependencies: @@ -3990,14 +4338,8 @@ snapshots: abbrev@2.0.0: {} - acorn-walk@8.3.3: - dependencies: - acorn: 8.12.1 - acorn@7.4.1: {} - acorn@8.12.1: {} - add-stream@1.0.0: {} agent-base@7.1.1: @@ -4027,8 +4369,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} anymatch@3.1.3: @@ -4044,7 +4384,7 @@ snapshots: array-union@2.1.0: {} - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} azure-devops-node-api@11.2.0: dependencies: @@ -4057,6 +4397,13 @@ snapshots: before-after-hook@3.0.2: {} + bin-links@4.0.4: + dependencies: + cmd-shim: 6.0.3 + npm-normalize-package-bin: 3.0.1 + read-cmd-shim: 4.0.0 + write-file-atomic: 5.0.1 + binary-extensions@2.3.0: {} bl@4.1.0: @@ -4097,7 +4444,7 @@ snapshots: dependencies: '@npmcli/fs': 3.1.1 fs-minipass: 3.0.3 - glob: 10.4.2 + glob: 10.4.5 lru-cache: 10.3.0 minipass: 7.1.2 minipass-collect: 2.0.1 @@ -4118,15 +4465,13 @@ snapshots: callsites@3.1.0: {} - chai@4.4.1: + chai@5.1.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.4 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 chalk@2.4.2: dependencies: @@ -4147,9 +4492,7 @@ snapshots: chardet@0.7.0: {} - check-error@1.0.3: - dependencies: - get-func-name: 2.0.2 + check-error@2.1.1: {} cheerio-select@2.1.0: dependencies: @@ -4214,6 +4557,8 @@ snapshots: clone@1.0.4: {} + cmd-shim@6.0.3: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -4235,6 +4580,8 @@ snapshots: commander@6.2.1: {} + common-ancestor-path@1.0.1: {} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -4244,8 +4591,6 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.7: {} - config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -4324,6 +4669,8 @@ snapshots: css-what@6.1.0: {} + cssesc@3.0.0: {} + csstype@3.1.3: {} dargs@8.1.0: {} @@ -4342,9 +4689,7 @@ snapshots: dedent@1.5.3: {} - deep-eql@4.1.4: - dependencies: - type-detect: 4.0.8 + deep-eql@5.0.2: {} deep-extend@0.6.0: {} @@ -4366,8 +4711,6 @@ snapshots: detect-libc@2.0.3: {} - diff-sequences@29.6.3: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -4482,6 +4825,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.0 + '@esbuild/android-arm': 0.23.0 + '@esbuild/android-arm64': 0.23.0 + '@esbuild/android-x64': 0.23.0 + '@esbuild/darwin-arm64': 0.23.0 + '@esbuild/darwin-x64': 0.23.0 + '@esbuild/freebsd-arm64': 0.23.0 + '@esbuild/freebsd-x64': 0.23.0 + '@esbuild/linux-arm': 0.23.0 + '@esbuild/linux-arm64': 0.23.0 + '@esbuild/linux-ia32': 0.23.0 + '@esbuild/linux-loong64': 0.23.0 + '@esbuild/linux-mips64el': 0.23.0 + '@esbuild/linux-ppc64': 0.23.0 + '@esbuild/linux-riscv64': 0.23.0 + '@esbuild/linux-s390x': 0.23.0 + '@esbuild/linux-x64': 0.23.0 + '@esbuild/netbsd-x64': 0.23.0 + '@esbuild/openbsd-arm64': 0.23.0 + '@esbuild/openbsd-x64': 0.23.0 + '@esbuild/sunos-x64': 0.23.0 + '@esbuild/win32-arm64': 0.23.0 + '@esbuild/win32-ia32': 0.23.0 + '@esbuild/win32-x64': 0.23.0 + escalade@3.1.2: {} escape-string-regexp@1.0.5: {} @@ -4649,6 +5019,15 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 + glob@10.4.5: + dependencies: + foreground-child: 3.2.1 + jackspeak: 3.4.0 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -4658,14 +5037,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -4767,10 +5138,6 @@ snapshots: ieee754@1.2.1: {} - ignore-walk@5.0.1: - dependencies: - minimatch: 5.1.6 - ignore-walk@6.0.5: dependencies: minimatch: 9.0.5 @@ -4903,8 +5270,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.0: {} - js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -4915,6 +5280,8 @@ snapshots: json-parse-even-better-errors@3.0.2: {} + json-stringify-nice@1.1.4: {} + json-stringify-safe@5.0.1: {} json5@2.2.3: {} @@ -4931,6 +5298,10 @@ snapshots: jsonparse@1.3.1: {} + just-diff-apply@5.5.0: {} + + just-diff@6.0.2: {} + keytar@7.9.0: dependencies: node-addon-api: 4.3.0 @@ -4970,11 +5341,6 @@ snapshots: load-json-file@7.0.1: {} - local-pkg@0.5.0: - dependencies: - mlly: 1.7.1 - pkg-types: 1.1.3 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -4990,7 +5356,7 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 - loupe@2.3.7: + loupe@3.1.1: dependencies: get-func-name: 2.0.2 @@ -5052,6 +5418,10 @@ snapshots: mimic-response@3.1.0: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5107,13 +5477,6 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.7.1: - dependencies: - acorn: 8.12.1 - pathe: 1.1.2 - pkg-types: 1.1.3 - ufo: 1.5.3 - ms@2.1.2: {} muggle-string@0.4.1: {} @@ -5175,10 +5538,6 @@ snapshots: normalize-path@3.0.0: {} - npm-bundled@2.0.1: - dependencies: - npm-normalize-package-bin: 2.0.0 - npm-bundled@3.0.1: dependencies: npm-normalize-package-bin: 3.0.1 @@ -5187,8 +5546,6 @@ snapshots: dependencies: semver: 7.6.2 - npm-normalize-package-bin@2.0.0: {} - npm-normalize-package-bin@3.0.1: {} npm-package-arg@11.0.2: @@ -5198,13 +5555,6 @@ snapshots: semver: 7.6.2 validate-npm-package-name: 5.0.1 - npm-packlist@5.1.3: - dependencies: - glob: 8.1.0 - ignore-walk: 5.0.1 - npm-bundled: 2.0.1 - npm-normalize-package-bin: 2.0.0 - npm-packlist@8.0.2: dependencies: ignore-walk: 6.0.5 @@ -5281,7 +5631,7 @@ snapshots: dependencies: yocto-queue: 1.1.1 - p-limit@5.0.0: + p-limit@6.1.0: dependencies: yocto-queue: 1.1.1 @@ -5341,6 +5691,12 @@ snapshots: dependencies: callsites: 3.1.0 + parse-conflict-json@3.0.1: + dependencies: + json-parse-even-better-errors: 3.0.2 + just-diff: 6.0.2 + just-diff-apply: 5.5.0 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.7 @@ -5406,7 +5762,7 @@ snapshots: pathe@1.1.2: {} - pathval@1.1.1: {} + pathval@2.0.0: {} pend@1.2.0: {} @@ -5420,11 +5776,10 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-types@1.1.3: + postcss-selector-parser@6.1.1: dependencies: - confbox: 0.1.7 - mlly: 1.7.1 - pathe: 1.1.2 + cssesc: 3.0.0 + util-deprecate: 1.0.2 postcss@8.4.39: dependencies: @@ -5450,16 +5805,16 @@ snapshots: prettier@2.8.8: optional: true - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - proc-log@3.0.0: {} proc-log@4.2.0: {} + proggy@2.0.0: {} + + promise-all-reject-late@1.0.1: {} + + promise-call-limit@3.0.1: {} + promise-inflight@1.0.1: {} promise-retry@2.0.1: @@ -5502,7 +5857,12 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-is@18.3.1: {} + read-cmd-shim@4.0.0: {} + + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 read-pkg-up@10.1.0: dependencies: @@ -5751,10 +6111,6 @@ snapshots: strip-json-comments@2.0.1: {} - strip-literal@2.1.0: - dependencies: - js-tokens: 9.0.0 - strong-log-transformer@2.1.0: dependencies: duplexer: 0.1.2 @@ -5801,9 +6157,11 @@ snapshots: tinybench@2.8.0: {} - tinypool@0.8.4: {} + tinypool@1.0.0: {} + + tinyrainbow@1.2.0: {} - tinyspy@2.2.1: {} + tinyspy@3.0.0: {} tmp@0.0.33: dependencies: @@ -5819,6 +6177,8 @@ snapshots: token-stream@1.0.0: {} + treeverse@3.0.0: {} + tslib@2.6.3: {} tuf-js@2.2.1: @@ -5835,8 +6195,6 @@ snapshots: tunnel@0.0.6: {} - type-detect@4.0.8: {} - type-fest@0.21.3: {} type-fest@2.19.0: {} @@ -5865,8 +6223,6 @@ snapshots: uc.micro@1.0.6: {} - ufo@1.5.3: {} - uglify-js@3.18.0: optional: true @@ -5901,13 +6257,13 @@ snapshots: validate-npm-package-name@5.0.1: {} - vite-node@1.6.0(@types/node@20.14.9): + vite-node@2.0.3(@types/node@20.14.11): dependencies: cac: 6.7.14 debug: 4.3.5 pathe: 1.1.2 - picocolors: 1.0.1 - vite: 5.3.3(@types/node@20.14.9) + tinyrainbow: 1.2.0 + vite: 5.3.4(@types/node@20.14.11) transitivePeerDependencies: - '@types/node' - less @@ -5918,39 +6274,38 @@ snapshots: - supports-color - terser - vite@5.3.3(@types/node@20.14.9): + vite@5.3.4(@types/node@20.14.11): dependencies: esbuild: 0.21.5 postcss: 8.4.39 rollup: 4.18.0 optionalDependencies: - '@types/node': 20.14.9 + '@types/node': 20.14.11 fsevents: 2.3.3 - vitest@1.6.0(@types/node@20.14.9): + vitest@2.0.3(@types/node@20.14.11): dependencies: - '@vitest/expect': 1.6.0 - '@vitest/runner': 1.6.0 - '@vitest/snapshot': 1.6.0 - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - acorn-walk: 8.3.3 - chai: 4.4.1 + '@ampproject/remapping': 2.3.0 + '@vitest/expect': 2.0.3 + '@vitest/pretty-format': 2.0.3 + '@vitest/runner': 2.0.3 + '@vitest/snapshot': 2.0.3 + '@vitest/spy': 2.0.3 + '@vitest/utils': 2.0.3 + chai: 5.1.1 debug: 4.3.5 execa: 8.0.1 - local-pkg: 0.5.0 magic-string: 0.30.10 pathe: 1.1.2 - picocolors: 1.0.1 std-env: 3.7.0 - strip-literal: 2.1.0 tinybench: 2.8.0 - tinypool: 0.8.4 - vite: 5.3.3(@types/node@20.14.9) - vite-node: 1.6.0(@types/node@20.14.9) + tinypool: 1.0.0 + tinyrainbow: 1.2.0 + vite: 5.3.4(@types/node@20.14.11) + vite-node: 2.0.3(@types/node@20.14.11) why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 20.14.9 + '@types/node': 20.14.11 transitivePeerDependencies: - less - lightningcss @@ -5960,61 +6315,61 @@ snapshots: - supports-color - terser - volar-service-css@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-css@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: vscode-css-languageservice: 6.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 - volar-service-emmet@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-emmet@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: '@emmetio/css-parser': 0.4.0 '@emmetio/html-matcher': 1.3.0 '@vscode/emmet-helper': 2.9.3 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 - volar-service-html@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-html@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: vscode-html-languageservice: 5.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 - volar-service-json@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-json@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: vscode-json-languageservice: 5.4.0 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 - volar-service-pug-beautify@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-pug-beautify@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: '@johnsoncodehk/pug-beautify': 0.2.2 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 volar-service-pug@0.0.59: dependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 muggle-string: 0.4.1 pug-lexer: 5.0.1 pug-parser: 6.0.0 - volar-service-html: 0.0.59(@volar/language-service@2.4.0-alpha.15) + volar-service-html: 0.0.59(@volar/language-service@2.4.0-alpha.18) vscode-html-languageservice: 5.3.0 vscode-languageserver-textdocument: 1.0.11 - volar-service-typescript-twoslash-queries@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-typescript-twoslash-queries@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 - volar-service-typescript@0.0.59(@volar/language-service@2.4.0-alpha.15): + volar-service-typescript@0.0.59(@volar/language-service@2.4.0-alpha.18): dependencies: path-browserify: 1.0.1 semver: 7.6.2 @@ -6023,7 +6378,7 @@ snapshots: vscode-nls: 5.2.0 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.18 vsce@2.15.0: dependencies: @@ -6127,16 +6482,18 @@ snapshots: optionalDependencies: typescript: 5.5.3 - vue@3.5.0-alpha.2(typescript@5.5.3): + vue@3.5.0-alpha.3(typescript@5.5.3): dependencies: - '@vue/compiler-dom': 3.5.0-alpha.2 - '@vue/compiler-sfc': 3.5.0-alpha.2 - '@vue/runtime-dom': 3.5.0-alpha.2 - '@vue/server-renderer': 3.5.0-alpha.2(vue@3.4.31(typescript@5.5.3)) - '@vue/shared': 3.5.0-alpha.2 + '@vue/compiler-dom': 3.5.0-alpha.3 + '@vue/compiler-sfc': 3.5.0-alpha.3 + '@vue/runtime-dom': 3.5.0-alpha.3 + '@vue/server-renderer': 3.5.0-alpha.3(vue@3.4.31(typescript@5.5.3)) + '@vue/shared': 3.5.0-alpha.3 optionalDependencies: typescript: 5.5.3 + walk-up-path@3.0.1: {} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 diff --git a/test-workspace/component-meta/#4577/main.vue b/test-workspace/component-meta/#4577/main.vue new file mode 100644 index 0000000000..20fc35bbd0 --- /dev/null +++ b/test-workspace/component-meta/#4577/main.vue @@ -0,0 +1,17 @@ + + + diff --git a/test-workspace/package.json b/test-workspace/package.json index 3ac1eb906a..6837f18018 100644 --- a/test-workspace/package.json +++ b/test-workspace/package.json @@ -1,11 +1,11 @@ { "private": true, - "version": "2.0.26", + "version": "2.0.28", "devDependencies": { "vue": "^3.4.0", - "vue-component-type-helpers": "2.0.26", + "vue-component-type-helpers": "2.0.28", "vue2": "npm:vue@2.7.16", "vue3.3": "npm:vue@3.3.13", - "vue3.5": "npm:vue@alpha" + "vue3.5": "npm:vue@3.5.0-alpha.3" } } diff --git a/test-workspace/tsc/#3819/component.vue b/test-workspace/tsc/#3819/component.vue new file mode 100644 index 0000000000..3d4d99df8e --- /dev/null +++ b/test-workspace/tsc/#3819/component.vue @@ -0,0 +1,8 @@ + diff --git a/test-workspace/tsc/#3819/main.vue b/test-workspace/tsc/#3819/main.vue new file mode 100644 index 0000000000..9ff9781ce2 --- /dev/null +++ b/test-workspace/tsc/#3819/main.vue @@ -0,0 +1,21 @@ + + + diff --git a/test-workspace/tsc/#3819/tsconfig.json b/test-workspace/tsc/#3819/tsconfig.json new file mode 100644 index 0000000000..e3b88d8ef2 --- /dev/null +++ b/test-workspace/tsc/#3819/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": [ "**/*" ], + "compilerOptions": { + "strict": false, + "checkJs": true, + }, +} \ No newline at end of file diff --git a/test-workspace/tsc/#4503/globalcomp.vue b/test-workspace/tsc/#4503/globalcomp.vue new file mode 100644 index 0000000000..bd45f2ea96 --- /dev/null +++ b/test-workspace/tsc/#4503/globalcomp.vue @@ -0,0 +1,9 @@ + + + diff --git a/test-workspace/tsc/#4503/globals.d.ts b/test-workspace/tsc/#4503/globals.d.ts new file mode 100644 index 0000000000..5e5942a9a6 --- /dev/null +++ b/test-workspace/tsc/#4503/globals.d.ts @@ -0,0 +1,9 @@ +import type globalcomp from './globalcomp.vue'; + +declare module 'vue' { + export interface GlobalComponents { + globalcomp: typeof globalcomp + } +} + +export { }; diff --git a/test-workspace/tsc/#4503/main.vue b/test-workspace/tsc/#4503/main.vue new file mode 100644 index 0000000000..d3fd5948e9 --- /dev/null +++ b/test-workspace/tsc/#4503/main.vue @@ -0,0 +1,6 @@ + + + diff --git a/test-workspace/tsc/#4503/tsconfig.json b/test-workspace/tsc/#4503/tsconfig.json new file mode 100644 index 0000000000..a4a2260e2a --- /dev/null +++ b/test-workspace/tsc/#4503/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": [ "**/*" ], + "compilerOptions": { + "checkJs": true, + "strict": true, + }, +} \ No newline at end of file diff --git a/test-workspace/tsc/should-error-#4569/main.vue b/test-workspace/tsc/should-error-#4569/main.vue new file mode 100644 index 0000000000..731e84c675 --- /dev/null +++ b/test-workspace/tsc/should-error-#4569/main.vue @@ -0,0 +1,7 @@ + diff --git a/test-workspace/tsc/should-error-#4569/tsconfig.json b/test-workspace/tsc/should-error-#4569/tsconfig.json new file mode 100644 index 0000000000..f2538ef6cf --- /dev/null +++ b/test-workspace/tsc/should-error-#4569/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "include": [ "**/*" ], + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true, + "declaration": true, + } +} diff --git a/test-workspace/tsc/vue2/tsconfig.json b/test-workspace/tsc/vue2/tsconfig.json index ae36414d8e..9aaa7ba292 100644 --- a/test-workspace/tsc/vue2/tsconfig.json +++ b/test-workspace/tsc/vue2/tsconfig.json @@ -19,6 +19,8 @@ "../vue3/#3672", "../vue3/#3782", "../vue3/#4327", + "../vue3/#4512", + "../vue3/#4540", "../vue3/components", "../vue3/defineEmits", "../vue3/defineModel", diff --git a/test-workspace/tsc/vue3.5/components/main.vue b/test-workspace/tsc/vue3.5/components/main.vue index ab5fdd188e..4bc49803d7 100644 --- a/test-workspace/tsc/vue3.5/components/main.vue +++ b/test-workspace/tsc/vue3.5/components/main.vue @@ -35,11 +35,11 @@ const ScriptSetupExposeExact = defineComponent({ const ScriptSetupTypeOnlyExact = defineComponent({ __typeProps: {} as { foo: string, - bar?: number + bar?: number; }, __typeEmits: {} as { - (e: 'change', id: number): void - (e: 'update', value: string): void + (e: 'change', id: number): void; + (e: 'update', value: string): void; }, setup() { return {}; @@ -48,8 +48,16 @@ const ScriptSetupTypeOnlyExact = defineComponent({ // https://vuejs.org/api/sfc-script-setup.html#default-props-values-when-using-type-declaration const ScriptSetupDefaultPropsExact = defineComponent({ __typeProps: {} as { - msg?: string - labels?: string[] + msg?: string; + labels?: string[]; + }, + props: { + msg: { + default: 'hello' + }, + labels: { + default: () => ['one', 'two'] + } }, setup() { return {}; diff --git a/test-workspace/tsc/vue3/#4512/main.vue b/test-workspace/tsc/vue3/#4512/main.vue new file mode 100644 index 0000000000..2f2c895d74 --- /dev/null +++ b/test-workspace/tsc/vue3/#4512/main.vue @@ -0,0 +1,27 @@ + + + diff --git a/test-workspace/tsc/vue3/#4512/test1.vue b/test-workspace/tsc/vue3/#4512/test1.vue new file mode 100644 index 0000000000..e3290ecfe7 --- /dev/null +++ b/test-workspace/tsc/vue3/#4512/test1.vue @@ -0,0 +1,9 @@ + + + diff --git a/test-workspace/tsc/vue3/#4512/test2.vue b/test-workspace/tsc/vue3/#4512/test2.vue new file mode 100644 index 0000000000..b1abfb552e --- /dev/null +++ b/test-workspace/tsc/vue3/#4512/test2.vue @@ -0,0 +1,10 @@ + + + diff --git a/test-workspace/tsc/vue3/#4512/test3.vue b/test-workspace/tsc/vue3/#4512/test3.vue new file mode 100644 index 0000000000..31dd91e2a3 --- /dev/null +++ b/test-workspace/tsc/vue3/#4512/test3.vue @@ -0,0 +1,16 @@ + + + diff --git a/test-workspace/tsc/vue3/#4540/component.vue b/test-workspace/tsc/vue3/#4540/component.vue new file mode 100644 index 0000000000..ecb17553ea --- /dev/null +++ b/test-workspace/tsc/vue3/#4540/component.vue @@ -0,0 +1,5 @@ + diff --git a/test-workspace/tsc/vue3/#4540/main.vue b/test-workspace/tsc/vue3/#4540/main.vue new file mode 100644 index 0000000000..eb2fbb9d39 --- /dev/null +++ b/test-workspace/tsc/vue3/#4540/main.vue @@ -0,0 +1,13 @@ + + + diff --git a/test-workspace/tsc/vue3/#4600/main.vue b/test-workspace/tsc/vue3/#4600/main.vue new file mode 100644 index 0000000000..efc8501ab7 --- /dev/null +++ b/test-workspace/tsc/vue3/#4600/main.vue @@ -0,0 +1,15 @@ + + + diff --git a/test-workspace/tsc/vue3/withDefaults/main.vue b/test-workspace/tsc/vue3/withDefaults/main.vue new file mode 100644 index 0000000000..35c5183537 --- /dev/null +++ b/test-workspace/tsc/vue3/withDefaults/main.vue @@ -0,0 +1,18 @@ + + + diff --git a/test-workspace/tsconfig.json b/test-workspace/tsconfig.json index 25bab02c23..c71fa33679 100644 --- a/test-workspace/tsconfig.json +++ b/test-workspace/tsconfig.json @@ -10,6 +10,7 @@ "noUnusedParameters": true, "skipLibCheck": true, "allowJs": true, + "noEmit": true, "jsx": "preserve", "baseUrl": ".", },