)[] = [];
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 @@
+
+
+
+ Row #{{ index }}
+
+
+
+
+
+
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 @@
+
+ {{ asdf }}
+
+
+
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 @@
+
+ {{ opened }}
+
+
+
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 @@
+
+ {{ opened }}
+
+
+
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 @@
+
+ {{ opened }}
+
+
+
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 @@
+
+
+
+
+ {{ exactType(actionText, {} as string) }}
+ {{ exactType($props.actionText, {} as string | undefined) }}
+
+
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": ".",
},