? K extends { __ctx?: { props?: infer P } } ? NonNullable : never
: T extends (props: infer P, ...args: any) => any ? P :
@@ -68,7 +86,7 @@ export function generateGlobalTypes(lib: string, target: number, strictTemplates
: __VLS_IsFunction extends true
? { [K in onEvent]?: Events[CamelizedEvent] }
: Props
- )${strictTemplates ? '' : ' & Record'};
+ )${checkUnknownEvents ? '' : ' & Record'};
// fix https://github.com/vuejs/language-tools/issues/926
type __VLS_UnionToIntersection = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never;
type __VLS_OverloadUnionInner = U & T extends (...args: infer A) => infer R
@@ -99,23 +117,20 @@ export function generateGlobalTypes(lib: string, target: number, strictTemplates
>>;
type __VLS_UseTemplateRef = Readonly>;
- function __VLS_getVForSourceType(source: number): [number, number, number][];
- function __VLS_getVForSourceType(source: string): [string, number, number][];
+ function __VLS_getVForSourceType(source: number): [number, number][];
+ function __VLS_getVForSourceType(source: string): [string, number][];
function __VLS_getVForSourceType(source: T): [
item: T[number],
- key: number,
index: number,
][];
function __VLS_getVForSourceType }>(source: T): [
item: T extends { [Symbol.iterator](): Iterator } ? T1 : never,
- key: number,
- index: undefined,
+ index: number,
][];
// #3845
function __VLS_getVForSourceType }>(source: T): [
item: number | (Exclude extends { [Symbol.iterator](): Iterator } ? T1 : never),
- key: number,
- index: undefined,
+ index: number,
][];
function __VLS_getVForSourceType(source: T): [
item: T[keyof T],
@@ -142,8 +157,8 @@ export function generateGlobalTypes(lib: string, target: number, strictTemplates
} & { props?: ${fnPropsType}; expose?(exposed: K): void; } }
: T extends () => any ? (props: {}, ctx?: any) => ReturnType
: T extends (...args: any) => any ? T
- : (_: {}${strictTemplates ? '' : ' & Record'}, ctx?: any) => { __ctx?: { attrs?: any, expose?: any, slots?: any, emit?: any, props?: {}${strictTemplates ? '' : ' & Record'} } };
- function __VLS_elementAsFunction(tag: T, endTag?: T): (_: T${strictTemplates ? '' : ' & Record'}) => void;
+ : (_: {}${checkUnknownProps ? '' : ' & Record'}, ctx?: any) => { __ctx?: { attrs?: any, expose?: any, slots?: any, emit?: any, props?: {}${checkUnknownProps ? '' : ' & Record'} } };
+ function __VLS_asFunctionalElement(tag: T, endTag?: T): (_: T${checkUnknownComponents ? '' : ' & Record'}) => void;
function __VLS_functionalComponentArgsRest any>(t: T): 2 extends Parameters['length'] ? [any] : [];
function __VLS_normalizeSlot(s: S): S extends () => infer R ? (props: {}) => R : S;
function __VLS_tryAsConstant(t: T): T;
diff --git a/packages/language-core/lib/codegen/script/component.ts b/packages/language-core/lib/codegen/script/component.ts
index 04707b9967..d4552a8466 100644
--- a/packages/language-core/lib/codegen/script/component.ts
+++ b/packages/language-core/lib/codegen/script/component.ts
@@ -41,10 +41,10 @@ export function* generateComponent(
yield generateSfcBlockSection(options.sfc.script, args.start + 1, args.end - 1, codeFeatures.all);
}
if (options.vueCompilerOptions.target >= 3.5 && options.templateCodegen?.templateRefs.size) {
- yield `__typeRefs: {} as __VLS_TemplateResult['refs'],${newLine}`;
+ yield `__typeRefs: {} as __VLS_TemplateRefs,${newLine}`;
}
if (options.vueCompilerOptions.target >= 3.5 && options.templateCodegen?.singleRootElType) {
- yield `__typeEl: {} as __VLS_TemplateResult['rootEl'],${newLine}`;
+ yield `__typeEl: {} as __VLS_TemplateEl,${newLine}`;
}
yield `})`;
}
@@ -154,7 +154,7 @@ export function* generatePropsOption(
});
}
if (inheritAttrs && options.templateCodegen?.inheritedAttrVars.size) {
- let attrsType = `__VLS_TemplateResult['attrs']`;
+ let attrsType = `__VLS_TemplateAttrs`;
if (hasEmitsOption) {
attrsType = `Omit<${attrsType}, \`on\${string}\`>`;
}
diff --git a/packages/language-core/lib/codegen/script/index.ts b/packages/language-core/lib/codegen/script/index.ts
index 9c975f325d..e9e8187e65 100644
--- a/packages/language-core/lib/codegen/script/index.ts
+++ b/packages/language-core/lib/codegen/script/index.ts
@@ -4,7 +4,7 @@ import type * as ts from 'typescript';
import type { ScriptRanges } from '../../parsers/scriptRanges';
import type { ScriptSetupRanges } from '../../parsers/scriptSetupRanges';
import type { Code, Sfc, VueCodeInformation, VueCompilerOptions } from '../../types';
-import { generateGlobalTypes } from '../globalTypes';
+import { generateGlobalTypes, getGlobalTypesFileName } from '../globalTypes';
import type { TemplateCodegenContext } from '../template/context';
import { endOfLine, generateSfcBlockSection, newLine } from '../utils';
import { generateComponentSelf } from './componentSelf';
@@ -68,7 +68,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator
${newLine}`;
}
else {
- yield `/// ${newLine}`;
+ yield `/// ${newLine}`;
}
}
else {
@@ -151,9 +151,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator & __VLS_BuiltInPublicProps,${newLine}`
+ + ` props: ${ctx.localTypes.PrettifyLocal}<__VLS_OwnProps & __VLS_PublicProps & __VLS_TemplateAttrs> & __VLS_BuiltInPublicProps,${newLine}`
+ ` expose(exposed: import('${options.vueCompilerOptions.lib}').ShallowUnwrapRef<${scriptSetupRanges.defineExpose ? 'typeof __VLS_exposed' : '{}'}>): void,${newLine}`
+ ` attrs: any,${newLine}`
- + ` slots: __VLS_TemplateResult['slots'],${newLine}`
+ + ` slots: __VLS_TemplateSlots,${newLine}`
+ ` emit: ${emitTypes.length ? emitTypes.join(' & ') : `{}`},${newLine}`
+ `}${endOfLine}`;
yield `})(),${newLine}`; // __VLS_setup = (async () => {
@@ -170,18 +170,17 @@ function* generateSetupFunction(
]);
}
}
- // TODO: circular reference
- // for (const { callExp } of scriptSetupRanges.useAttrs) {
- // setupCodeModifies.push([
- // [`(`],
- // callExp.start,
- // callExp.start
- // ], [
- // [` as __VLS_TemplateResult['attrs'] & Record)`],
- // callExp.end,
- // callExp.end
- // ]);
- // }
+ for (const { callExp } of scriptSetupRanges.useAttrs) {
+ setupCodeModifies.push([
+ [`(`],
+ callExp.start,
+ callExp.start
+ ], [
+ [` as typeof __VLS_special.$attrs)`],
+ callExp.end,
+ callExp.end
+ ]);
+ }
for (const { callExp, exp, arg } of scriptSetupRanges.useCssModule) {
setupCodeModifies.push([
[`(`],
@@ -216,7 +215,7 @@ function* generateSetupFunction(
callExp.start,
callExp.start
], [
- [` as __VLS_TemplateResult['slots'])`],
+ [` as typeof __VLS_special.$slots)`],
callExp.end,
callExp.end
]);
@@ -225,7 +224,7 @@ function* generateSetupFunction(
for (const { callExp, exp, arg } of scriptSetupRanges.useTemplateRef) {
const templateRefType = arg
? [
- `__VLS_TemplateResult['refs'][`,
+ `__VLS_TemplateRefs[`,
generateSfcBlockSection(scriptSetup, arg.start, arg.end, codeFeatures.all),
`]`
]
@@ -294,11 +293,8 @@ function* generateSetupFunction(
yield* generateComponentProps(options, ctx, scriptSetup, scriptSetupRanges);
yield* generateModelEmit(scriptSetup, scriptSetupRanges);
- yield `function __VLS_template() {${newLine}`;
const templateCodegenCtx = yield* generateTemplate(options, ctx);
- yield `}${endOfLine}`;
yield* generateComponentSelf(options, ctx, templateCodegenCtx);
- yield `type __VLS_TemplateResult = ReturnType${endOfLine}`;
if (syntax) {
if (!options.vueCompilerOptions.skipTemplateCodegen && (options.templateCodegen?.hasSlot || scriptSetupRanges.defineSlots)) {
@@ -306,7 +302,7 @@ function* generateSetupFunction(
yield* generateComponent(options, ctx, scriptSetup, scriptSetupRanges);
yield endOfLine;
yield `${syntax} `;
- yield `{} as ${ctx.localTypes.WithTemplateSlots}${endOfLine}`;
+ yield `{} as ${ctx.localTypes.WithTemplateSlots}${endOfLine}`;
}
else {
yield `${syntax} `;
diff --git a/packages/language-core/lib/codegen/script/template.ts b/packages/language-core/lib/codegen/script/template.ts
index 37ae7e1b07..69c3d01bc7 100644
--- a/packages/language-core/lib/codegen/script/template.ts
+++ b/packages/language-core/lib/codegen/script/template.ts
@@ -1,6 +1,5 @@
-import * as path from 'path-browserify';
import type { Code } from '../../types';
-import { getSlotsPropertyName, hyphenateTag } from '../../utils/shared';
+import { hyphenateTag } from '../../utils/shared';
import { TemplateCodegenContext, createTemplateCodegenContext } from '../template/context';
import { generateInterpolation } from '../template/interpolation';
import { generateStyleScopedClassReferences } from '../template/styleScopedClasses';
@@ -58,7 +57,7 @@ function* generateTemplateComponents(options: ScriptCodegenOptions): Generator { `
- + getSlotsPropertyName(options.vueCompilerOptions.target)
- + `: typeof ${options.scriptSetupRanges?.defineSlots?.name ?? `__VLS_slots`} }) }`
- );
- }
-
types.push(`typeof __VLS_ctx`);
yield `type __VLS_LocalComponents =`;
@@ -145,16 +127,14 @@ function* generateTemplateBody(
yield `const __VLS_slots = {}${endOfLine}`;
}
yield `const __VLS_inheritedAttrs = {}${endOfLine}`;
- yield `const $refs = {}${endOfLine}`;
- yield `const $el = {} as any${endOfLine}`;
+ yield `const __VLS_refs = {}${endOfLine}`;
+ yield `const __VLS_rootEl = {} as any${endOfLine}`;
}
- yield `return {${newLine}`;
- yield ` attrs: {} as Partial,${newLine}`;
- yield ` slots: ${options.scriptSetupRanges?.defineSlots?.name ?? '__VLS_slots'},${newLine}`;
- yield ` refs: $refs,${newLine}`;
- yield ` rootEl: $el,${newLine}`;
- yield `}${endOfLine}`;
+ yield `type __VLS_TemplateAttrs = Partial${endOfLine}`;
+ yield `type __VLS_TemplateSlots = typeof ${options.scriptSetupRanges?.defineSlots?.name ?? '__VLS_slots'}${endOfLine}`;
+ yield `type __VLS_TemplateRefs = typeof __VLS_refs${endOfLine}`;
+ yield `type __VLS_TemplateEl = typeof __VLS_rootEl${endOfLine}`;
}
function* generateStyleScopedClasses(
diff --git a/packages/language-core/lib/codegen/template/context.ts b/packages/language-core/lib/codegen/template/context.ts
index 662ee6cff2..c435b70f44 100644
--- a/packages/language-core/lib/codegen/template/context.ts
+++ b/packages/language-core/lib/codegen/template/context.ts
@@ -103,6 +103,7 @@ export function createTemplateCodegenContext(options: Pick();
+ const specialVars = new Set();
const accessExternalVariables = new Map>();
const slots: {
name: string;
@@ -115,7 +116,6 @@ export function createTemplateCodegenContext(options: Pick();;
const blockConditions: string[] = [];
const scopedClasses: {
source: string;
@@ -132,9 +132,9 @@ export function createTemplateCodegenContext(options: Pick { `
+ + getSlotsPropertyName(options.vueCompilerOptions.target)
+ + `: typeof ${options.slotsAssignName ?? `__VLS_slots`} }), `;
+ }
+ else {
+ yield `void, `;
+ }
yield getPossibleOriginalComponentNames(node.tag, false)
.map(name => `'${name}'`)
.join(`, `);
@@ -207,7 +213,14 @@ export function* generateComponent(
yield `// @ts-ignore${newLine}`;
yield `const ${var_functionalComponent} = __VLS_asFunctionalComponent(${var_originalComponent}, new ${var_originalComponent}({${newLine}`;
- yield* generateElementProps(options, ctx, node, props, options.vueCompilerOptions.strictTemplates, false);
+ yield* generateElementProps(
+ options,
+ ctx,
+ node,
+ props,
+ options.vueCompilerOptions.checkUnknownProps,
+ false
+ );
yield `}))${endOfLine}`;
yield `const `;
@@ -231,7 +244,15 @@ export function* generateComponent(
tagOffsets[0] + node.tag.length,
ctx.codeFeatures.verification,
`{${newLine}`,
- ...generateElementProps(options, ctx, node, props, options.vueCompilerOptions.strictTemplates, true, failedPropExps),
+ ...generateElementProps(
+ options,
+ ctx,
+ node,
+ props,
+ options.vueCompilerOptions.checkUnknownProps,
+ true,
+ failedPropExps
+ ),
`}`
);
yield `, ...__VLS_functionalComponentArgsRest(${var_functionalComponent}))${endOfLine}`;
@@ -269,24 +290,18 @@ export function* generateComponent(
yield `let ${var_componentEvents}!: __VLS_NormalizeEmits${endOfLine}`;
}
- if (
- options.vueCompilerOptions.fallthroughAttributes
- && (
- node.props.some(prop => prop.type === CompilerDOM.NodeTypes.DIRECTIVE && prop.name === 'bind' && prop.exp?.loc.source === '$attrs')
- || node === ctx.singleRootNode
- )
- ) {
- const varAttrs = ctx.getInternalVariable();
- ctx.inheritedAttrVars.add(varAttrs);
- yield `var ${varAttrs}!: Parameters[0];\n`;
+ if (hasVBindAttrs(options, ctx, node)) {
+ const attrsVar = ctx.getInternalVariable();
+ ctx.inheritedAttrVars.add(attrsVar);
+ yield `let ${attrsVar}!: Parameters[0];\n`;
}
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);
+ yield* generateVSlot(options, ctx, node, slotDir);
}
else {
- yield* generateElementChildren(options, ctx, node);
+ yield* generateElementChildren(options, ctx, node, true);
}
if (ctx.currentComponent.used) {
@@ -306,7 +321,7 @@ export function* generateElement(
: undefined;
const failedPropExps: FailedPropExpression[] = [];
- yield `__VLS_elementAsFunction(__VLS_intrinsicElements`;
+ yield `__VLS_asFunctionalElement(__VLS_intrinsicElements`;
yield* generatePropertyAccess(
options,
ctx,
@@ -330,7 +345,15 @@ export function* generateElement(
startTagOffset + node.tag.length,
ctx.codeFeatures.verification,
`{${newLine}`,
- ...generateElementProps(options, ctx, node, node.props, options.vueCompilerOptions.strictTemplates, true, failedPropExps),
+ ...generateElementProps(
+ options,
+ ctx,
+ node,
+ node.props,
+ options.vueCompilerOptions.checkUnknownProps,
+ true,
+ failedPropExps
+ ),
`}`
);
yield `)${endOfLine}`;
@@ -349,23 +372,11 @@ export function* generateElement(
ctx.singleRootElType = `typeof __VLS_nativeElements['${node.tag}']`;
}
- const slotDir = node.props.find(p => p.type === CompilerDOM.NodeTypes.DIRECTIVE && p.name === 'slot') as CompilerDOM.DirectiveNode;
- if (slotDir && ctx.currentComponent) {
- yield* generateComponentSlot(options, ctx, node, slotDir);
- }
- else {
- yield* generateElementChildren(options, ctx, node);
- }
-
- if (
- options.vueCompilerOptions.fallthroughAttributes
- && (
- node.props.some(prop => prop.type === CompilerDOM.NodeTypes.DIRECTIVE && prop.name === 'bind' && prop.exp?.loc.source === '$attrs')
- || node === ctx.singleRootNode
- )
- ) {
+ if (hasVBindAttrs(options, ctx, node)) {
ctx.inheritedAttrVars.add(`__VLS_intrinsicElements.${node.tag}`);
}
+
+ yield* generateElementChildren(options, ctx, node);
}
function* generateFailedPropExps(
@@ -483,105 +494,6 @@ function* generateComponentGeneric(
ctx.lastGenericComment = undefined;
}
-function* generateComponentSlot(
- options: TemplateCodegenOptions,
- ctx: TemplateCodegenContext,
- node: CompilerDOM.ElementNode,
- slotDir: CompilerDOM.DirectiveNode
-): Generator {
- yield `{${newLine}`;
- if (ctx.currentComponent) {
- ctx.currentComponent.used = true;
- ctx.hasSlotElements.add(ctx.currentComponent.node);
- }
- const slotBlockVars: string[] = [];
- 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,
- false,
- true
- );
- }
- else {
- yield* wrapWith(
- slotDir.loc.start.offset,
- slotDir.loc.start.offset + (slotDir.rawName?.length ?? 0),
- ctx.codeFeatures.withoutHighlightAndCompletion,
- `default`
- );
- }
- yield `: __VLS_thisSlot } = ${ctx.currentComponent!.ctxVar}.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);
- if (!slotDir.exp.content.includes(':')) {
- yield `const [`;
- yield [
- slotDir.exp.content,
- 'template',
- slotDir.exp.loc.start.offset,
- ctx.codeFeatures.all,
- ];
- yield `] = __VLS_getSlotParams(__VLS_thisSlot)${endOfLine}`;
- }
- else {
- yield `const `;
- yield [
- slotDir.exp.content,
- 'template',
- slotDir.exp.loc.start.offset,
- ctx.codeFeatures.all,
- ];
- yield ` = __VLS_getSlotParam(__VLS_thisSlot)${endOfLine}`;
- }
- }
-
- for (const varName of slotBlockVars) {
- ctx.addLocalVariable(varName);
- }
-
- yield* ctx.resetDirectiveComments('end of slot children start');
-
- let prev: CompilerDOM.TemplateChildNode | undefined;
- for (const childNode of node.children) {
- yield* generateTemplateChild(options, ctx, childNode, prev);
- prev = childNode;
- }
-
- for (const varName of slotBlockVars) {
- ctx.removeLocalVariable(varName);
- }
- let isStatic = true;
- if (slotDir?.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
- isStatic = slotDir.arg.isStatic;
- }
- if (isStatic && slotDir && !slotDir.arg) {
- yield `${ctx.currentComponent!.ctxVar}.slots!['`;
- yield [
- '',
- 'template',
- slotDir.loc.start.offset + (
- slotDir.loc.source.startsWith('#')
- ? '#'.length : slotDir.loc.source.startsWith('v-slot:')
- ? 'v-slot:'.length
- : 0
- ),
- ctx.codeFeatures.completion,
- ];
- yield `'/* empty slot name completion */]${newLine}`;
- }
-
- yield* ctx.generateAutoImportCompletion();
- yield `}${newLine}`;
-}
-
function* generateReferencesForElements(
options: TemplateCodegenOptions,
ctx: TemplateCodegenContext,
@@ -617,6 +529,21 @@ function* generateReferencesForElements(
return [];
}
+function hasVBindAttrs(
+ options: TemplateCodegenOptions,
+ ctx: TemplateCodegenContext,
+ node: CompilerDOM.ElementNode
+) {
+ return options.vueCompilerOptions.fallthroughAttributes && (
+ node === ctx.singleRootNode ||
+ node.props.some(prop =>
+ prop.type === CompilerDOM.NodeTypes.DIRECTIVE
+ && prop.name === 'bind'
+ && prop.exp?.loc.source === '$attrs'
+ )
+ );
+}
+
function camelizeComponentName(newName: string) {
return camelize('-' + newName);
}
diff --git a/packages/language-core/lib/codegen/template/elementChildren.ts b/packages/language-core/lib/codegen/template/elementChildren.ts
index 410df8ffae..f49265e5c7 100644
--- a/packages/language-core/lib/codegen/template/elementChildren.ts
+++ b/packages/language-core/lib/codegen/template/elementChildren.ts
@@ -8,7 +8,8 @@ import { generateTemplateChild } from './templateChild';
export function* generateElementChildren(
options: TemplateCodegenOptions,
ctx: TemplateCodegenContext,
- node: CompilerDOM.ElementNode
+ node: CompilerDOM.ElementNode,
+ isDefaultSlot: boolean = false
): Generator {
yield* ctx.resetDirectiveComments('end of element children start');
let prev: CompilerDOM.TemplateChildNode | undefined;
@@ -21,10 +22,9 @@ export function* generateElementChildren(
// fix https://github.com/vuejs/language-tools/issues/932
if (
ctx.currentComponent
- && !ctx.hasSlotElements.has(node)
+ && isDefaultSlot
&& node.children.length
- && node.tagType !== CompilerDOM.ElementTypes.ELEMENT
- && node.tagType !== CompilerDOM.ElementTypes.TEMPLATE
+ && node.tagType === CompilerDOM.ElementTypes.COMPONENT
) {
ctx.currentComponent.used = true;
yield `${ctx.currentComponent.ctxVar}.slots!.`;
diff --git a/packages/language-core/lib/codegen/template/elementProps.ts b/packages/language-core/lib/codegen/template/elementProps.ts
index c55084e82b..fa536bbfc9 100644
--- a/packages/language-core/lib/codegen/template/elementProps.ts
+++ b/packages/language-core/lib/codegen/template/elementProps.ts
@@ -145,7 +145,6 @@ export function* generateElementProps(
prop,
prop.exp,
ctx.codeFeatures.all,
- prop.arg?.loc.start.offset === prop.exp?.loc.start.offset,
enableCodeFeatures
),
`)`
@@ -161,7 +160,7 @@ export function* generateElementProps(
}
yield `,${newLine}`;
- if (prop.name === 'model' && prop.modifiers.length) {
+ if (isComponent && prop.name === 'model' && prop.modifiers.length) {
const propertyName = prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION
? !prop.arg.isStatic
? `[__VLS_tryAsConstant(\`$\{${prop.arg.content}\}Modifiers\`)]`
@@ -257,7 +256,6 @@ export function* generateElementProps(
prop,
prop.exp,
ctx.codeFeatures.all,
- false,
enableCodeFeatures
)
);
@@ -279,9 +277,10 @@ function* generatePropExp(
prop: CompilerDOM.DirectiveNode,
exp: CompilerDOM.SimpleExpressionNode | undefined,
features: VueCodeInformation,
- isShorthand: boolean,
enableCodeFeatures: boolean
): Generator {
+ const isShorthand = prop.arg?.loc.start.offset === prop.exp?.loc.start.offset;
+
if (isShorthand && features.completion) {
features = {
...features,
diff --git a/packages/language-core/lib/codegen/template/index.ts b/packages/language-core/lib/codegen/template/index.ts
index 63bcdfa5d6..c1432c80d2 100644
--- a/packages/language-core/lib/codegen/template/index.ts
+++ b/packages/language-core/lib/codegen/template/index.ts
@@ -23,6 +23,7 @@ export interface TemplateCodegenOptions {
slotsAssignName?: string;
propsAssignName?: string;
inheritAttrs: boolean;
+ selfComponentName?: string;
}
export function* generateTemplate(options: TemplateCodegenOptions): Generator {
@@ -34,26 +35,38 @@ export function* generateTemplate(options: TemplateCodegenOptions): Generator {
+function* generateSlots(
+ options: TemplateCodegenOptions,
+ ctx: TemplateCodegenContext
+): Generator {
if (!options.hasDefineSlots) {
yield `var __VLS_slots!: `;
for (const { expVar, varName } of ctx.dynamicSlots) {
@@ -85,21 +98,23 @@ function* generateSlots(options: TemplateCodegenOptions, ctx: TemplateCodegenCon
}
yield `}${endOfLine}`;
}
- const name = getSlotsPropertyName(options.vueCompilerOptions.target);
- yield `var ${name}!: typeof ${options.slotsAssignName ?? '__VLS_slots'}${endOfLine}`;
+ return `typeof ${options.slotsAssignName ?? `__VLS_slots`}`;
}
-function* generateInheritedAttrs(ctx: TemplateCodegenContext): Generator {
+function* generateInheritedAttrs(
+ options: TemplateCodegenOptions,
+ ctx: TemplateCodegenContext
+): Generator {
yield 'let __VLS_inheritedAttrs!: {}';
for (const varName of ctx.inheritedAttrVars) {
yield ` & typeof ${varName}`;
}
yield endOfLine;
- yield `var $attrs!: Partial & Record${endOfLine}`;
if (ctx.bindingAttrLocs.length) {
yield `[`;
for (const loc of ctx.bindingAttrLocs) {
+ yield `__VLS_special.`;
yield [
loc.source,
'template',
@@ -110,9 +125,12 @@ function* generateInheritedAttrs(ctx: TemplateCodegenContext): Generator {
}
yield `]${endOfLine}`;
}
+ return `import('${options.vueCompilerOptions.lib}').ComponentPublicInstance['$attrs'] & Partial`;
}
-function* generateRefs(ctx: TemplateCodegenContext): Generator {
+function* generateRefs(
+ ctx: TemplateCodegenContext
+): Generator {
yield `const __VLS_refs = {${newLine}`;
for (const [name, [varName, offset]] of ctx.templateRefs) {
yield* generateStringLiteralKey(
@@ -123,16 +141,16 @@ function* generateRefs(ctx: TemplateCodegenContext): Generator {
yield `: ${varName},${newLine}`;
}
yield `}${endOfLine}`;
- yield `var $refs!: typeof __VLS_refs${endOfLine}`;
+ return `typeof __VLS_refs`;
}
-function* generateRootEl(ctx: TemplateCodegenContext): Generator {
- if (ctx.singleRootElType) {
- yield `var $el!: ${ctx.singleRootElType}${endOfLine}`;
- }
- else {
- yield `var $el!: any${endOfLine}`;
- }
+function* generateRootEl(
+ ctx: TemplateCodegenContext
+): Generator {
+ yield `let __VLS_rootEl!: `;
+ yield ctx.singleRootElType ?? `any`;
+ yield endOfLine;
+ return `typeof __VLS_rootEl`;
}
export function* forEachElementNode(node: CompilerDOM.RootNode | CompilerDOM.TemplateChildNode): Generator {
diff --git a/packages/language-core/lib/codegen/template/interpolation.ts b/packages/language-core/lib/codegen/template/interpolation.ts
index f66fb18eea..859fe63e47 100644
--- a/packages/language-core/lib/codegen/template/interpolation.ts
+++ b/packages/language-core/lib/codegen/template/interpolation.ts
@@ -9,7 +9,7 @@ export function* generateInterpolation(
options: {
ts: typeof ts,
destructuredPropNames: Set | undefined,
- templateRefNames: Set | undefined
+ templateRefNames: Set | undefined;
},
ctx: TemplateCodegenContext,
source: string,
@@ -71,6 +71,12 @@ export function* generateInterpolation(
}
}
+interface CtxVar {
+ text: string;
+ isShorthand: boolean;
+ offset: number;
+};
+
function* forEachInterpolationSegment(
ts: typeof import('typescript'),
destructuredPropNames: Set | undefined,
@@ -80,20 +86,16 @@ function* forEachInterpolationSegment(
offset: number | undefined,
ast: ts.SourceFile
): Generator<[fragment: string, offset: number | undefined, type?: 'errorMappingOnly' | 'startText' | 'endText']> {
- let ctxVars: {
- text: string,
- isShorthand: boolean,
- offset: number,
- }[] = [];
+ let ctxVars: CtxVar[] = [];
const varCb = (id: ts.Identifier, isShorthand: boolean) => {
const text = getNodeText(ts, id, ast);
if (
- ctx.hasLocalVariable(text) ||
+ ctx.hasLocalVariable(text)
// https://github.com/vuejs/core/blob/245230e135152900189f13a4281302de45fdcfaa/packages/compiler-core/src/transforms/transformExpression.ts#L342-L352
- isGloballyAllowed(text) ||
- text === 'require' ||
- text.startsWith('__VLS_')
+ || isGloballyAllowed(text)
+ || text === 'require'
+ || text.startsWith('__VLS_')
) {
// localVarOffsets.push(localVar.getStart(ast));
}
@@ -132,7 +134,7 @@ function* forEachInterpolationSegment(
const curVar = ctxVars[i];
const nextVar = ctxVars[i + 1];
- yield* generateVar(code, destructuredPropNames, templateRefNames, curVar, nextVar);
+ yield* generateVar(code, ctx.specialVars, destructuredPropNames, templateRefNames, curVar, nextVar);
if (nextVar.isShorthand) {
yield [code.slice(curVar.offset + curVar.text.length, nextVar.offset + nextVar.text.length), curVar.offset + curVar.text.length];
@@ -144,7 +146,7 @@ function* forEachInterpolationSegment(
}
const lastVar = ctxVars.at(-1)!;
- yield* generateVar(code, destructuredPropNames, templateRefNames, lastVar);
+ yield* generateVar(code, ctx.specialVars, destructuredPropNames, templateRefNames, lastVar);
if (lastVar.offset + lastVar.text.length < code.length) {
yield [code.slice(lastVar.offset + lastVar.text.length), lastVar.offset + lastVar.text.length, 'endText'];
}
@@ -156,18 +158,11 @@ function* forEachInterpolationSegment(
function* generateVar(
code: string,
+ specialVars: Set,
destructuredPropNames: Set | undefined,
templateRefNames: Set | undefined,
- curVar: {
- text: string,
- isShorthand: boolean,
- offset: number,
- },
- nextVar: {
- text: string,
- isShorthand: boolean,
- offset: number,
- } = curVar
+ curVar: CtxVar,
+ nextVar: CtxVar = curVar
): Generator<[fragment: string, offset: number | undefined, type?: 'errorMappingOnly']> {
// fix https://github.com/vuejs/language-tools/issues/1205
// fix https://github.com/vuejs/language-tools/issues/1264
@@ -181,7 +176,10 @@ function* generateVar(
yield [`)`, undefined];
}
else {
- if (!isDestructuredProp) {
+ if (specialVars.has(curVar.text)) {
+ yield [`__VLS_special.`, undefined];
+ }
+ else if (!isDestructuredProp) {
yield [`__VLS_ctx.`, undefined];
}
yield [code.slice(curVar.offset, curVar.offset + curVar.text.length), curVar.offset];
diff --git a/packages/language-core/lib/codegen/template/slotOutlet.ts b/packages/language-core/lib/codegen/template/slotOutlet.ts
index a8b07fb40c..332e433f67 100644
--- a/packages/language-core/lib/codegen/template/slotOutlet.ts
+++ b/packages/language-core/lib/codegen/template/slotOutlet.ts
@@ -53,14 +53,28 @@ export function* generateSlotOutlet(
startTagOffset + node.tag.length,
ctx.codeFeatures.verification,
`{${newLine}`,
- ...generateElementProps(options, ctx, node, node.props.filter(prop => prop !== nameProp), true, true),
+ ...generateElementProps(
+ options,
+ ctx,
+ node,
+ node.props.filter(prop => prop !== nameProp),
+ true,
+ true
+ ),
`}`
);
yield `)${endOfLine}`;
}
else {
yield `var ${varSlot} = {${newLine}`;
- yield* generateElementProps(options, ctx, node, node.props.filter(prop => prop !== nameProp), options.vueCompilerOptions.strictTemplates, true);
+ yield* generateElementProps(
+ options,
+ ctx,
+ node,
+ node.props.filter(prop => prop !== nameProp),
+ options.vueCompilerOptions.checkUnknownProps,
+ true
+ );
yield `}${endOfLine}`;
if (
diff --git a/packages/language-core/lib/codegen/template/templateChild.ts b/packages/language-core/lib/codegen/template/templateChild.ts
index 90b810dee9..922c33e6cc 100644
--- a/packages/language-core/lib/codegen/template/templateChild.ts
+++ b/packages/language-core/lib/codegen/template/templateChild.ts
@@ -8,6 +8,7 @@ import { generateInterpolation } from './interpolation';
import { generateSlotOutlet } from './slotOutlet';
import { generateVFor } from './vFor';
import { generateVIf } from './vIf';
+import { generateVSlot } from './vSlot';
// @ts-ignore
const transformContext: CompilerDOM.TransformContext = {
@@ -83,9 +84,17 @@ export function* generateTemplateChild(
else if (vIfNode) {
yield* generateVIf(options, ctx, vIfNode);
}
+ else if (node.tagType === CompilerDOM.ElementTypes.SLOT) {
+ yield* generateSlotOutlet(options, ctx, node);
+ }
else {
- if (node.tagType === CompilerDOM.ElementTypes.SLOT) {
- yield* generateSlotOutlet(options, ctx, node);
+ const slotDir = node.props.find(p => p.type === CompilerDOM.NodeTypes.DIRECTIVE && p.name === 'slot') as CompilerDOM.DirectiveNode;
+ if (
+ node.tagType === CompilerDOM.ElementTypes.TEMPLATE
+ && ctx.currentComponent
+ && slotDir
+ ) {
+ yield* generateVSlot(options, ctx, node, slotDir);
}
else if (
node.tagType === CompilerDOM.ElementTypes.ELEMENT
diff --git a/packages/language-core/lib/codegen/template/vSlot.ts b/packages/language-core/lib/codegen/template/vSlot.ts
new file mode 100644
index 0000000000..8be7bb9c66
--- /dev/null
+++ b/packages/language-core/lib/codegen/template/vSlot.ts
@@ -0,0 +1,109 @@
+import * as CompilerDOM from '@vue/compiler-dom';
+import type { Code } from '../../types';
+import { collectVars, createTsAst, endOfLine, newLine, wrapWith } from '../utils';
+import type { TemplateCodegenContext } from './context';
+import type { TemplateCodegenOptions } from './index';
+import { generateObjectProperty } from './objectProperty';
+import { generateTemplateChild } from './templateChild';
+
+export function* generateVSlot(
+ options: TemplateCodegenOptions,
+ ctx: TemplateCodegenContext,
+ node: CompilerDOM.ElementNode,
+ slotDir: CompilerDOM.DirectiveNode
+): Generator {
+ if (!ctx.currentComponent) {
+ return;
+ }
+ ctx.currentComponent.used = true;
+ const slotBlockVars: string[] = [];
+ yield `{${newLine}`;
+
+ 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,
+ false,
+ true
+ );
+ }
+ else {
+ yield* wrapWith(
+ slotDir.loc.start.offset,
+ slotDir.loc.start.offset + (slotDir.rawName?.length ?? 0),
+ ctx.codeFeatures.withoutHighlightAndCompletion,
+ `default`
+ );
+ }
+ yield `: __VLS_thisSlot } = ${ctx.currentComponent.ctxVar}.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);
+ if (!slotDir.exp.content.includes(':')) {
+ yield `const [`;
+ yield [
+ slotDir.exp.content,
+ 'template',
+ slotDir.exp.loc.start.offset,
+ ctx.codeFeatures.all,
+ ];
+ yield `] = __VLS_getSlotParams(__VLS_thisSlot)${endOfLine}`;
+ }
+ else {
+ yield `const `;
+ yield [
+ slotDir.exp.content,
+ 'template',
+ slotDir.exp.loc.start.offset,
+ ctx.codeFeatures.all,
+ ];
+ yield ` = __VLS_getSlotParam(__VLS_thisSlot)${endOfLine}`;
+ }
+ }
+
+ for (const varName of slotBlockVars) {
+ ctx.addLocalVariable(varName);
+ }
+
+ yield* ctx.resetDirectiveComments('end of slot children start');
+
+ let prev: CompilerDOM.TemplateChildNode | undefined;
+ for (const childNode of node.children) {
+ yield* generateTemplateChild(options, ctx, childNode, prev);
+ prev = childNode;
+ }
+
+ for (const varName of slotBlockVars) {
+ ctx.removeLocalVariable(varName);
+ }
+
+ let isStatic = true;
+ if (slotDir.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
+ isStatic = slotDir.arg.isStatic;
+ }
+ if (isStatic && !slotDir.arg) {
+ yield `${ctx.currentComponent.ctxVar}.slots!['`;
+ yield [
+ '',
+ 'template',
+ slotDir.loc.start.offset + (
+ slotDir.loc.source.startsWith('#')
+ ? '#'.length
+ : slotDir.loc.source.startsWith('v-slot:')
+ ? 'v-slot:'.length
+ : 0
+ ),
+ ctx.codeFeatures.completion,
+ ];
+ yield `'/* empty slot name completion */]${endOfLine}`;
+ }
+
+ yield* ctx.generateAutoImportCompletion();
+ yield `}${newLine}`;
+}
diff --git a/packages/language-core/lib/codegen/utils/index.ts b/packages/language-core/lib/codegen/utils/index.ts
index a39915e108..bdd2c02fdb 100644
--- a/packages/language-core/lib/codegen/utils/index.ts
+++ b/packages/language-core/lib/codegen/utils/index.ts
@@ -32,7 +32,7 @@ export function collectVars(
results: string[] = []
) {
const identifiers = collectIdentifiers(ts, node, []);
- for (const [id] of identifiers) {
+ for (const { id } of identifiers) {
results.push(getNodeText(ts, id, ast));
}
return results;
@@ -41,15 +41,16 @@ export function collectVars(
export function collectIdentifiers(
ts: typeof import('typescript'),
node: ts.Node,
- results: [id: ts.Identifier, isRest: boolean][] = [],
- isRest = false
+ results: Array<{ id: ts.Identifier, isRest: boolean, initializer: ts.Expression | undefined; }> = [],
+ isRest = false,
+ initializer: ts.Expression | undefined = undefined
) {
if (ts.isIdentifier(node)) {
- results.push([node, isRest]);
+ results.push({ id: node, isRest, initializer });
}
else if (ts.isObjectBindingPattern(node)) {
for (const el of node.elements) {
- collectIdentifiers(ts, el.name, results, !!el.dotDotDotToken);
+ collectIdentifiers(ts, el.name, results, !!el.dotDotDotToken, el.initializer);
}
}
else if (ts.isArrayBindingPattern(node)) {
diff --git a/packages/language-core/lib/parsers/scriptSetupRanges.ts b/packages/language-core/lib/parsers/scriptSetupRanges.ts
index 0eebc5071e..5ed7b21a7b 100644
--- a/packages/language-core/lib/parsers/scriptSetupRanges.ts
+++ b/packages/language-core/lib/parsers/scriptSetupRanges.ts
@@ -20,14 +20,14 @@ type DefineProp = {
defaultValue?: TextRange;
required?: boolean;
isModel?: boolean;
-}
+};
type DefineProps = CallExpressionRange & {
name?: string;
- destructured?: Set;
+ destructured?: Map;
destructuredRest?: string;
statement: TextRange;
-}
+};
type WithDefaults = Pick;
@@ -35,20 +35,20 @@ type DefineEmits = CallExpressionRange & {
name?: string;
hasUnionTypeArg?: boolean;
statement: TextRange;
-}
+};
type DefineSlots = CallExpressionRange & {
name?: string;
isObjectBindingPattern?: boolean;
statement: TextRange;
-}
+};
type DefineExpose = CallExpressionRange;
type DefineOptions = {
name?: string;
inheritAttrs?: string;
-}
+};
type UseAttrs = CallExpressionRange;
@@ -58,7 +58,7 @@ type UseSlots = CallExpressionRange;
type UseTemplateRef = CallExpressionRange & {
name?: string;
-}
+};
export interface ScriptSetupRanges extends ReturnType { }
@@ -285,15 +285,15 @@ export function parseScriptSetupRanges(
};
if (ts.isVariableDeclaration(parent)) {
if (ts.isObjectBindingPattern(parent.name)) {
- defineProps.destructured = new Set();
+ defineProps.destructured = new Map();
const identifiers = collectIdentifiers(ts, parent.name, []);
- for (const [id, isRest] of identifiers) {
+ for (const { id, isRest, initializer } of identifiers) {
const name = _getNodeText(id);
if (isRest) {
defineProps.destructuredRest = name;
}
else {
- defineProps.destructured.add(name);
+ defineProps.destructured.set(name, initializer);
}
}
}
diff --git a/packages/language-core/lib/parsers/vueCompilerOptions.ts b/packages/language-core/lib/parsers/vueCompilerOptions.ts
index 89450c89bd..33747b84e6 100644
--- a/packages/language-core/lib/parsers/vueCompilerOptions.ts
+++ b/packages/language-core/lib/parsers/vueCompilerOptions.ts
@@ -1,8 +1,8 @@
-import type { VueCompilerOptions } from '../types';
+import type { RawVueCompilerOptions } from '../types';
const syntaxReg = /^\s*@(?.+?)\s+(?.+?)\s*$/m;
-export function parseVueCompilerOptions(comments: string[]): Partial | undefined {
+export function parseVueCompilerOptions(comments: string[]): RawVueCompilerOptions | undefined {
const entries = comments
.map(text => {
try {
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 be9a869356..3a1e427259 100644
--- a/packages/language-core/lib/plugins/vue-template-inline-ts.ts
+++ b/packages/language-core/lib/plugins/vue-template-inline-ts.ts
@@ -94,7 +94,7 @@ const plugin: VueLanguagePlugin = ctx => {
}
if (prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && !prop.arg.isStatic) {
addFormatCodes(
- prop.arg.content,
+ prop.arg.loc.source,
prop.arg.loc.start.offset,
formatBrackets.normal
);
@@ -105,17 +105,51 @@ const plugin: VueLanguagePlugin = ctx => {
) {
if (prop.name === 'on' && prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
const ast = createTsAst(ctx.modules.typescript, prop.exp, prop.exp.content);
+ if (isCompoundExpression(ctx.modules.typescript, ast)) {
+ addFormatCodes(
+ prop.exp.loc.source,
+ prop.exp.loc.start.offset,
+ formatBrackets.event
+ );
+ }
+ else {
+ const lines = prop.exp.content.split('\n');
+ const firstLineEmpty = lines[0].trim() === '';
+ const lastLineEmpty = lines[lines.length - 1].trim() === '';
+ if (lines.length <= 1 || (!firstLineEmpty && !lastLineEmpty)) {
+ addFormatCodes(
+ prop.exp.loc.source,
+ prop.exp.loc.start.offset,
+ formatBrackets.normal
+ );
+ }
+ else {
+ addFormatCodes(
+ prop.exp.loc.source,
+ prop.exp.loc.start.offset,
+ ['(', ');']
+ );
+ }
+ }
+ }
+ else if (prop.name === 'slot') {
+ addFormatCodes(
+ prop.exp.loc.source,
+ prop.exp.loc.start.offset,
+ formatBrackets.params
+ );
+ }
+ else if (prop.rawName === 'v-for') {
+ // #2586
addFormatCodes(
- prop.exp.content,
+ prop.exp.loc.source,
prop.exp.loc.start.offset,
- isCompoundExpression(ctx.modules.typescript, ast)
- ? formatBrackets.event
- : formatBrackets.normal
+ formatBrackets.for
);
}
else {
addFormatCodes(
- prop.exp.content,
+ prop.exp.loc.source,
prop.exp.loc.start.offset,
formatBrackets.normal
);
@@ -131,7 +165,7 @@ const plugin: VueLanguagePlugin = ctx => {
const branch = node.branches[i];
if (branch.condition?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
addFormatCodes(
- branch.condition.content,
+ branch.condition.loc.source,
branch.condition.loc.start.offset,
formatBrackets.if
);
@@ -146,8 +180,14 @@ const plugin: VueLanguagePlugin = ctx => {
const { leftExpressionRange, leftExpressionText } = parseVForNode(node);
const { source } = node.parseResult;
if (leftExpressionRange && leftExpressionText && source.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
- const start = leftExpressionRange.start;
- const end = source.loc.start.offset + source.content.length;
+ let start = leftExpressionRange.start;
+ let end = source.loc.start.offset + source.content.length;
+ while (templateContent[start - 1] === ' ' || templateContent[start - 1] === '(') {
+ start--;
+ }
+ while (templateContent[end] === ' ' || templateContent[end] === ')') {
+ end++;
+ }
addFormatCodes(
templateContent.slice(start, end),
start,
@@ -174,14 +214,44 @@ const plugin: VueLanguagePlugin = ctx => {
// {{ ... }}
const [content, start] = parseInterpolationNode(node, templateContent);
const lines = content.split('\n');
- addFormatCodes(
- content,
- start,
- lines.length <= 1 ? formatBrackets.curly : [
- lines[0].trim() === '' ? '(' : formatBrackets.curly[0],
- lines[lines.length - 1].trim() === '' ? ');' : formatBrackets.curly[1],
- ]
- );
+ const firstLineEmpty = lines[0].trim() === '';
+ const lastLineEmpty = lines[lines.length - 1].trim() === '';
+
+ if (content.includes('=>')) { // arrow function
+ if (lines.length <= 1 || (!firstLineEmpty && !lastLineEmpty)) {
+ addFormatCodes(
+ content,
+ start,
+ formatBrackets.normal
+ );
+ }
+ else {
+ addFormatCodes(
+ content,
+ start,
+ ['(', ');']
+ );
+ }
+ }
+ else {
+ if (lines.length <= 1 || (!firstLineEmpty && !lastLineEmpty)) {
+ addFormatCodes(
+ content,
+ start,
+ formatBrackets.curly
+ );
+ }
+ else {
+ addFormatCodes(
+ content,
+ start,
+ [
+ firstLineEmpty ? '(' : '(0 +',
+ lastLineEmpty ? ');' : '+ 0);'
+ ]
+ );
+ }
+ }
}
}
diff --git a/packages/language-core/lib/plugins/vue-tsx.ts b/packages/language-core/lib/plugins/vue-tsx.ts
index a378b240e8..ee669a8e5c 100644
--- a/packages/language-core/lib/plugins/vue-tsx.ts
+++ b/packages/language-core/lib/plugins/vue-tsx.ts
@@ -1,12 +1,14 @@
import type { Mapping } from '@volar/language-core';
+import { camelize, capitalize } from '@vue/shared';
import { computed, unstable } from 'alien-signals';
+import * as path from 'path-browserify';
import { generateScript } from '../codegen/script';
import { generateTemplate } from '../codegen/template';
import { parseScriptRanges } from '../parsers/scriptRanges';
import { parseScriptSetupRanges } from '../parsers/scriptSetupRanges';
import { parseVueCompilerOptions } from '../parsers/vueCompilerOptions';
import type { Code, Sfc, VueLanguagePlugin } from '../types';
-import { resolveVueCompilerOptions } from '../utils/ts';
+import { CompilerOptionsResolver } from '../utils/ts';
export const tsCodegen = new WeakMap>();
@@ -81,9 +83,12 @@ function createTsx(
});
const vueCompilerOptions = computed(() => {
const options = parseVueCompilerOptions(_sfc.comments);
- return options
- ? resolveVueCompilerOptions(options, ctx.vueCompilerOptions)
- : ctx.vueCompilerOptions;
+ if (options) {
+ const resolver = new CompilerOptionsResolver();
+ resolver.addConfig(options, path.dirname(fileName));
+ return resolver.build(ctx.vueCompilerOptions);
+ }
+ return ctx.vueCompilerOptions;
});
const scriptRanges = computed(() =>
_sfc.script
@@ -128,7 +133,7 @@ function createTsx(
);
const destructuredPropNames = unstable.computedSet(
computed(() => {
- const newNames = new Set(scriptSetupRanges.get()?.defineProps?.destructured);
+ const newNames = new Set(scriptSetupRanges.get()?.defineProps?.destructured?.keys());
const rest = scriptSetupRanges.get()?.defineProps?.destructuredRest;
if (rest) {
newNames.add(rest);
@@ -153,6 +158,19 @@ function createTsx(
const value = scriptSetupRanges.get()?.defineOptions?.inheritAttrs ?? scriptRanges.get()?.exportDefault?.inheritAttrsOption;
return value !== 'false';
});
+ const selfComponentName = computed(() => {
+ const { exportDefault } = scriptRanges.get() ?? {};
+ if (_sfc.script && exportDefault?.nameOption) {
+ const { nameOption } = exportDefault;
+ return _sfc.script.content.slice(nameOption.start + 1, nameOption.end - 1);
+ }
+ const { defineOptions } = scriptSetupRanges.get() ?? {};
+ if (_sfc.scriptSetup && defineOptions?.name) {
+ return defineOptions.name;
+ }
+ const baseName = path.basename(fileName);
+ return capitalize(camelize(baseName.slice(0, baseName.lastIndexOf('.'))));
+ });
const generatedTemplate = computed(() => {
if (vueCompilerOptions.get().skipTemplateCodegen || !_sfc.template) {
@@ -174,6 +192,7 @@ function createTsx(
slotsAssignName: slotsAssignName.get(),
propsAssignName: propsAssignName.get(),
inheritAttrs: inheritAttrs.get(),
+ selfComponentName: selfComponentName.get(),
});
let current = codegen.next();
@@ -186,7 +205,7 @@ function createTsx(
return {
...current.value,
- codes: codes,
+ codes,
};
});
const generatedScript = computed(() => {
diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts
index 6d1e05cac5..0a9ea03d88 100644
--- a/packages/language-core/lib/types.ts
+++ b/packages/language-core/lib/types.ts
@@ -10,7 +10,8 @@ export type { SFCParseResult } from '@vue/compiler-sfc';
export { VueEmbeddedCode };
export type RawVueCompilerOptions = Partial> & {
- target?: 'auto' | 2 | 2.7 | 3 | 3.3;
+ strictTemplates?: boolean;
+ target?: 'auto' | 2 | 2.7 | 3 | 3.3 | 3.5 | 99 | number;
plugins?: string[];
};
@@ -28,7 +29,9 @@ export interface VueCompilerOptions {
vitePressExtensions: string[];
petiteVueExtensions: string[];
jsxSlots: boolean;
- strictTemplates: boolean;
+ checkUnknownProps: boolean;
+ checkUnknownEvents: boolean;
+ checkUnknownComponents: boolean;
skipTemplateCodegen: boolean;
fallthroughAttributes: boolean;
dataAttributes: string[];
diff --git a/packages/language-core/lib/utils/ts.ts b/packages/language-core/lib/utils/ts.ts
index ff9e3471a1..d8605b0f75 100644
--- a/packages/language-core/lib/utils/ts.ts
+++ b/packages/language-core/lib/utils/ts.ts
@@ -1,7 +1,7 @@
import { camelize } from '@vue/shared';
import { posix as path } from 'path-browserify';
import type * as ts from 'typescript';
-import { generateGlobalTypes } from '../codegen/globalTypes';
+import { generateGlobalTypes, getGlobalTypesFileName } from '../codegen/globalTypes';
import { getAllExtensions } from '../languagePlugin';
import type { RawVueCompilerOptions, VueCompilerOptions, VueLanguagePlugin } from '../types';
@@ -23,18 +23,19 @@ export function createParsedCommandLineByJson(
const proxyHost = proxyParseConfigHostForExtendConfigPaths(parseConfigHost);
ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, configFileName);
- let vueOptions: Partial = {};
+ const resolver = new CompilerOptionsResolver();
for (const extendPath of proxyHost.extendConfigPaths.reverse()) {
try {
- vueOptions = {
- ...vueOptions,
- ...getPartialVueCompilerOptions(ts, ts.readJsonConfigFile(extendPath, proxyHost.host.readFile)),
- };
+ const configFile = ts.readJsonConfigFile(extendPath, proxyHost.host.readFile);
+ const obj = ts.convertToObject(configFile, []);
+ const rawOptions: RawVueCompilerOptions = obj?.vueCompilerOptions ?? {};
+ resolver.addConfig(rawOptions, path.dirname(configFile.fileName));
} catch (err) { }
}
- const resolvedVueOptions = resolveVueCompilerOptions(vueOptions);
+ const resolvedVueOptions = resolver.build();
+
if (skipGlobalTypesSetup) {
resolvedVueOptions.__setupedGlobalTypes = true;
}
@@ -78,18 +79,19 @@ export function createParsedCommandLine(
const config = ts.readJsonConfigFile(tsConfigPath, proxyHost.host.readFile);
ts.parseJsonSourceFileConfigFileContent(config, proxyHost.host, path.dirname(tsConfigPath), {}, tsConfigPath);
- let vueOptions: Partial = {};
+ const resolver = new CompilerOptionsResolver();
for (const extendPath of proxyHost.extendConfigPaths.reverse()) {
try {
- vueOptions = {
- ...vueOptions,
- ...getPartialVueCompilerOptions(ts, ts.readJsonConfigFile(extendPath, proxyHost.host.readFile)),
- };
+ const configFile = ts.readJsonConfigFile(extendPath, proxyHost.host.readFile);
+ const obj = ts.convertToObject(configFile, []);
+ const rawOptions: RawVueCompilerOptions = obj?.vueCompilerOptions ?? {};
+ resolver.addConfig(rawOptions, path.dirname(configFile.fileName));
} catch (err) { }
}
- const resolvedVueOptions = resolveVueCompilerOptions(vueOptions);
+ const resolvedVueOptions = resolver.build();
+
if (skipGlobalTypesSetup) {
resolvedVueOptions.__setupedGlobalTypes = true;
}
@@ -126,7 +128,7 @@ export function createParsedCommandLine(
return {
fileNames: [],
options: {},
- vueOptions: resolveVueCompilerOptions({}),
+ vueOptions: getDefaultCompilerOptions(),
errors: [],
};
}
@@ -153,76 +155,106 @@ function proxyParseConfigHostForExtendConfigPaths(parseConfigHost: ts.ParseConfi
};
}
-function getPartialVueCompilerOptions(
- ts: typeof import('typescript'),
- tsConfigSourceFile: ts.TsConfigSourceFile
-) {
-
- const folder = path.dirname(tsConfigSourceFile.fileName);
- const obj = ts.convertToObject(tsConfigSourceFile, []);
- const rawOptions: RawVueCompilerOptions = obj?.vueCompilerOptions ?? {};
- const result: Partial = {
- ...rawOptions as any,
- };
- const target = rawOptions.target ?? 'auto';
+export class CompilerOptionsResolver {
+ options: Omit = {};
+ fallbackTarget: number | undefined;
+ target: number | undefined;
+ plugins: VueLanguagePlugin[] = [];
- if (target === 'auto') {
- const resolvedPath = resolvePath('vue/package.json');
- if (resolvedPath) {
- const vuePackageJson = require(resolvedPath);
- const versionNumbers = vuePackageJson.version.split('.');
- result.target = Number(versionNumbers[0] + '.' + versionNumbers[1]);
- }
- else {
- // console.warn('Load vue/package.json failed from', folder);
- }
- }
- else {
- result.target = target;
- }
- if (rawOptions.plugins) {
- const plugins = rawOptions.plugins
- .map((pluginPath: string) => {
- try {
- const resolvedPath = resolvePath(pluginPath);
- if (resolvedPath) {
- const plugin = require(resolvedPath);
- plugin.__moduleName = pluginPath;
- return plugin;
+ addConfig(options: RawVueCompilerOptions, rootDir: string) {
+ for (const key in options) {
+ switch (key) {
+ case 'target':
+ const target = options.target!;
+ if (typeof target === 'string') {
+ this.target = findVueVersion(rootDir);
}
else {
- console.warn('[Vue] Load plugin failed:', pluginPath);
+ this.target = target;
}
- }
- catch (error) {
- console.warn('[Vue] Resolve plugin path failed:', pluginPath, error);
- }
- return [];
- });
+ break;
+ case 'plugins':
+ this.plugins = (options.plugins ?? [])
+ .map((pluginPath: string) => {
+ try {
+ const resolvedPath = resolvePath(pluginPath, rootDir);
+ if (resolvedPath) {
+ const plugin = require(resolvedPath);
+ plugin.__moduleName = pluginPath;
+ return plugin;
+ }
+ else {
+ console.warn('[Vue] Load plugin failed:', pluginPath);
+ }
+ }
+ catch (error) {
+ console.warn('[Vue] Resolve plugin path failed:', pluginPath, error);
+ }
+ return [];
+ });
+ break;
+ default:
+ // @ts-expect-error
+ this.options[key] = options[key];
+ break;
+ }
+ }
+ if (this.target === undefined) {
+ this.fallbackTarget = findVueVersion(rootDir);
+ }
+ }
- result.plugins = plugins;
+ build(defaults?: VueCompilerOptions): VueCompilerOptions {
+ const target = this.target ?? this.fallbackTarget;
+ defaults ??= getDefaultCompilerOptions(target, this.options.lib, this.options.strictTemplates);
+ return {
+ ...defaults,
+ ...this.options,
+ plugins: this.plugins,
+ macros: {
+ ...defaults.macros,
+ ...this.options.macros,
+ },
+ composables: {
+ ...defaults.composables,
+ ...this.options.composables,
+ },
+ // https://github.com/vuejs/vue-next/blob/master/packages/compiler-dom/src/transforms/vModel.ts#L49-L51
+ // https://vuejs.org/guide/essentials/forms.html#form-input-bindings
+ experimentalModelPropName: Object.fromEntries(Object.entries(
+ this.options.experimentalModelPropName ?? defaults.experimentalModelPropName
+ ).map(([k, v]) => [camelize(k), v])),
+ };
}
+}
- return result;
+function findVueVersion(rootDir: string) {
+ const resolvedPath = resolvePath('vue/package.json', rootDir);
+ if (resolvedPath) {
+ const vuePackageJson = require(resolvedPath);
+ const versionNumbers = vuePackageJson.version.split('.');
+ return Number(versionNumbers[0] + '.' + versionNumbers[1]);
+ }
+ else {
+ // console.warn('Load vue/package.json failed from', folder);
+ }
+}
- function resolvePath(scriptPath: string) {
- try {
- if (require?.resolve) {
- return require.resolve(scriptPath, { paths: [folder] });
- }
- else {
- // console.warn('failed to resolve path:', scriptPath, 'require.resolve is not supported in web');
- }
+function resolvePath(scriptPath: string, root: string) {
+ try {
+ if (require?.resolve) {
+ return require.resolve(scriptPath, { paths: [root] });
}
- catch (error) {
- // console.warn(error);
+ else {
+ // console.warn('failed to resolve path:', scriptPath, 'require.resolve is not supported in web');
}
}
+ catch (error) {
+ // console.warn(error);
+ }
}
-function getDefaultOptions(options: Partial): VueCompilerOptions {
- const target = options.target ?? 3.3;
- const lib = options.lib ?? 'vue';
+export function getDefaultCompilerOptions(target = 99, lib = 'vue', strictTemplates = false): VueCompilerOptions {
return {
target,
lib,
@@ -230,7 +262,9 @@ function getDefaultOptions(options: Partial): VueCompilerOpt
vitePressExtensions: [],
petiteVueExtensions: [],
jsxSlots: false,
- strictTemplates: false,
+ checkUnknownProps: strictTemplates,
+ checkUnknownEvents: strictTemplates,
+ checkUnknownComponents: strictTemplates,
skipTemplateCodegen: false,
fallthroughAttributes: false,
dataAttributes: [],
@@ -256,40 +290,26 @@ function getDefaultOptions(options: Partial): VueCompilerOpt
plugins: [],
experimentalDefinePropProposal: false,
experimentalResolveStyleCssClasses: 'scoped',
- experimentalModelPropName: null!
+ experimentalModelPropName: {
+ '': {
+ input: true
+ },
+ value: {
+ input: { type: 'text' },
+ textarea: true,
+ select: true
+ }
+ },
};
-};
+}
-export function resolveVueCompilerOptions(
- options: Partial,
- defaults: VueCompilerOptions = getDefaultOptions(options)
-): VueCompilerOptions {
+/**
+ * @deprecated use `getDefaultCompilerOptions` instead
+ */
+export function resolveVueCompilerOptions(options: Partial): VueCompilerOptions {
return {
- ...defaults,
+ ...getDefaultCompilerOptions(options.target, options.lib),
...options,
- macros: {
- ...defaults.macros,
- ...options.macros,
- },
- composables: {
- ...defaults.composables,
- ...options.composables,
- },
-
- // https://github.com/vuejs/vue-next/blob/master/packages/compiler-dom/src/transforms/vModel.ts#L49-L51
- // https://vuejs.org/guide/essentials/forms.html#form-input-bindings
- experimentalModelPropName: Object.fromEntries(Object.entries(
- options.experimentalModelPropName ?? defaults.experimentalModelPropName ?? {
- '': {
- input: true
- },
- value: {
- input: { type: 'text' },
- textarea: true,
- select: true
- }
- }
- ).map(([k, v]) => [camelize(k), v])),
};
}
@@ -309,8 +329,8 @@ export function setupGlobalTypes(rootDir: string, vueOptions: VueCompilerOptions
}
dir = parentDir;
}
- const globalTypesPath = path.join(dir, 'node_modules', '.vue-global-types', `${vueOptions.lib}_${vueOptions.target}_${vueOptions.strictTemplates}.d.ts`);
- const globalTypesContents = `// @ts-nocheck\nexport {};\n` + generateGlobalTypes(vueOptions.lib, vueOptions.target, vueOptions.strictTemplates);
+ const globalTypesPath = path.join(dir, 'node_modules', '.vue-global-types', getGlobalTypesFileName(vueOptions));
+ const globalTypesContents = `// @ts-nocheck\nexport {};\n` + generateGlobalTypes(vueOptions);
host.writeFile(globalTypesPath, globalTypesContents);
return { absolutePath: globalTypesPath };
} catch { }
diff --git a/packages/language-core/schemas/vue-tsconfig.schema.json b/packages/language-core/schemas/vue-tsconfig.schema.json
index 5c6f33426f..d2f8613a01 100644
--- a/packages/language-core/schemas/vue-tsconfig.schema.json
+++ b/packages/language-core/schemas/vue-tsconfig.schema.json
@@ -45,6 +45,21 @@
"default": false,
"markdownDescription": "Strict props, component type-checking in templates."
},
+ "checkUnknownProps": {
+ "type": "boolean",
+ "default": false,
+ "markdownDescription": "Check unknown props. If not set, uses the 'strictTemplates' value."
+ },
+ "checkUnknownEvents": {
+ "type": "boolean",
+ "default": false,
+ "markdownDescription": "Check unknown events. If not set, uses the 'strictTemplates' value."
+ },
+ "checkUnknownComponents": {
+ "type": "boolean",
+ "default": false,
+ "markdownDescription": "Check unknown components. If not set, uses the 'strictTemplates' value."
+ },
"skipTemplateCodegen": {
"type": "boolean",
"default": false,
diff --git a/packages/language-plugin-pug/index.ts b/packages/language-plugin-pug/index.ts
index e445237429..4abb1b1765 100644
--- a/packages/language-plugin-pug/index.ts
+++ b/packages/language-plugin-pug/index.ts
@@ -1,7 +1,9 @@
import { SourceMap } from '@volar/source-map';
-import type { VueLanguagePlugin } from '@vue/language-core';
+import type { CompilerDOM, VueLanguagePlugin } from '@vue/language-core';
import * as pug from 'volar-service-pug/lib/languageService';
+const classRegex = /^class\s*=/;
+
const plugin: VueLanguagePlugin = ({ modules }) => {
return {
@@ -71,6 +73,13 @@ const plugin: VueLanguagePlugin = ({ modules }) => {
options?.onWarn?.(createProxyObject(warning));
},
onError(error) {
+ // #5099
+ if (
+ error.code === 2 satisfies CompilerDOM.ErrorCodes.DUPLICATE_ATTRIBUTE
+ && classRegex.test(pugFile.htmlCode.slice(error.loc?.start.offset))
+ ) {
+ return;
+ }
options?.onError?.(createProxyObject(error));
},
});
diff --git a/packages/language-server/lib/initialize.ts b/packages/language-server/lib/initialize.ts
index 88c5c626f1..776710c6f0 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, generateGlobalTypes, getAllExtensions, resolveVueCompilerOptions, VueCompilerOptions } from '@vue/language-core';
+import { createParsedCommandLine, createVueLanguagePlugin, generateGlobalTypes, getAllExtensions, getDefaultCompilerOptions, getGlobalTypesFileName, VueCompilerOptions } from '@vue/language-core';
import { Disposable, getFullLanguageServicePlugins, InitializeParams } from '@vue/language-service';
import type * as ts from 'typescript';
@@ -35,7 +35,7 @@ export function initialize(
}
else {
compilerOptions = ts.getDefaultCompilerOptions();
- vueCompilerOptions = resolveVueCompilerOptions({});
+ vueCompilerOptions = getDefaultCompilerOptions();
}
vueCompilerOptions.__test = params.initializationOptions.typescript.disableAutoImportCache;
updateFileWatcher(vueCompilerOptions);
@@ -55,8 +55,8 @@ export function initialize(
const directoryExists = project.typescript.languageServiceHost.directoryExists?.bind(project.typescript.languageServiceHost);
const fileExists = project.typescript.languageServiceHost.fileExists.bind(project.typescript.languageServiceHost);
const getScriptSnapshot = project.typescript.languageServiceHost.getScriptSnapshot.bind(project.typescript.languageServiceHost);
- const globalTypesName = `${vueCompilerOptions.lib}_${vueCompilerOptions.target}_${vueCompilerOptions.strictTemplates}.d.ts`;
- const globalTypesContents = `// @ts-nocheck\nexport {};\n` + generateGlobalTypes(vueCompilerOptions.lib, vueCompilerOptions.target, vueCompilerOptions.strictTemplates);
+ const globalTypesName = getGlobalTypesFileName(vueCompilerOptions);
+ const globalTypesContents = `// @ts-nocheck\nexport {};\n` + generateGlobalTypes(vueCompilerOptions);
const globalTypesSnapshot: ts.IScriptSnapshot = {
getText: (start, end) => globalTypesContents.slice(start, end),
getLength: () => globalTypesContents.length,
diff --git a/packages/language-server/node.ts b/packages/language-server/node.ts
index 24c37db0ec..20ced42547 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, createVueLanguagePlugin, getDefaultCompilerOptions } from '@vue/language-core';
import { getHybridModeLanguageServicePlugins } from '@vue/language-service';
import * as namedPipeClient from '@vue/typescript-plugin/lib/client';
import { createHybridModeProject } from './lib/hybridModeProject';
@@ -23,7 +23,7 @@ connection.onInitialize(params => {
const commandLine = configFileName
? createParsedCommandLine(ts, ts.sys, configFileName)
: {
- vueOptions: resolveVueCompilerOptions({}),
+ vueOptions: getDefaultCompilerOptions(),
options: ts.getDefaultCompilerOptions(),
};
commandLine.vueOptions.__test = params.initializationOptions.typescript.disableAutoImportCache;
diff --git a/packages/language-server/tests/completions.spec.ts b/packages/language-server/tests/completions.spec.ts
index dcc67b3a06..1e56bf6307 100644
--- a/packages/language-server/tests/completions.spec.ts
+++ b/packages/language-server/tests/completions.spec.ts
@@ -187,8 +187,8 @@ describe('Completions', async () => {
"component",
"slot",
"template",
- "fixture",
"BaseTransition",
+ "Fixture",
]
`);
});
diff --git a/packages/language-service/data/language-blocks/zh-cn.json b/packages/language-service/data/language-blocks/zh-cn.json
index 8176b91713..a6a2fee6e0 100644
--- a/packages/language-service/data/language-blocks/zh-cn.json
+++ b/packages/language-service/data/language-blocks/zh-cn.json
@@ -8,7 +8,7 @@
"name": "src",
"description": {
"kind": "markdown",
- "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```"
+ "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```\n\n:::warning 注意\n在 `src` 中使用别名时,不要以 `~` 开头,后面的任何内容都会被解释为模块请求。这意味着你可以引用 node 模块中的资源:\n```vue\n\n```\n:::"
},
"references": "api/sfc-spec.html#src-imports"
},
@@ -42,7 +42,7 @@
"name": "src",
"description": {
"kind": "markdown",
- "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```"
+ "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```\n\n:::warning 注意\n在 `src` 中使用别名时,不要以 `~` 开头,后面的任何内容都会被解释为模块请求。这意味着你可以引用 node 模块中的资源:\n```vue\n\n```\n:::"
},
"references": "api/sfc-spec.html#src-imports"
},
@@ -103,7 +103,7 @@
"name": "src",
"description": {
"kind": "markdown",
- "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```"
+ "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```\n\n:::warning 注意\n在 `src` 中使用别名时,不要以 `~` 开头,后面的任何内容都会被解释为模块请求。这意味着你可以引用 node 模块中的资源:\n```vue\n\n```\n:::"
},
"references": "api/sfc-spec.html#src-imports"
},
@@ -149,7 +149,7 @@
"valueSet": "v",
"description": {
"kind": "markdown",
- "value": "一个 `\n```\n\n得出的 class 将被哈希化以避免冲突,实现了同样的将 CSS 仅作用于当前组件的效果。\n\n参考 [CSS Modules spec](https://github.com/css-modules/css-modules) 以查看更多详情,例如 [global exceptions](https://github.com/css-modules/css-modules/blob/master/docs/composition.md#exceptions) 和 [composition](https://github.com/css-modules/css-modules/blob/master/docs/composition.md#composition)。\n\n### 自定义注入名称 \n\n你可以通过给 `module` attribute 一个值来自定义注入 class 对象的属性名:\n\n```vue\n\n red
\n\n\n\n```\n\n### 与组合式 API 一同使用 \n\n可以通过 `useCssModule` API 在 `setup()` 和 `\n\n\n red
\n\n\n\n```"
},
"references": "api/sfc-css-features.html#css-modules"
}
@@ -167,7 +167,7 @@
"name": "src",
"description": {
"kind": "markdown",
- "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```"
+ "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```\n\n:::warning 注意\n在 `src` 中使用别名时,不要以 `~` 开头,后面的任何内容都会被解释为模块请求。这意味着你可以引用 node 模块中的资源:\n```vue\n\n```\n:::"
},
"references": "api/sfc-spec.html#src-imports"
}
@@ -193,7 +193,7 @@
"name": "src",
"description": {
"kind": "markdown",
- "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```"
+ "value": "如果你更喜欢将 `*.vue` 组件分散到多个文件中,可以为一个语块使用 `src` 这个 attribute 来导入一个外部文件:\n\n```vue\n\n\n\n```\n\n请注意 `src` 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:\n\n- 相对路径需要以 `./` 开头\n- 你也可以从 npm 依赖中导入资源\n\n```vue\n\n\n```\n\n`src` 导入对自定义语块也同样适用:\n\n```vue\n\n\n```\n\n:::warning 注意\n在 `src` 中使用别名时,不要以 `~` 开头,后面的任何内容都会被解释为模块请求。这意味着你可以引用 node 模块中的资源:\n```vue\n\n```\n:::"
},
"references": "api/sfc-spec.html#src-imports"
}
diff --git a/packages/language-service/data/model-modifiers/zh-cn.json b/packages/language-service/data/model-modifiers/zh-cn.json
index 32845a7c8d..711da8fce2 100644
--- a/packages/language-service/data/model-modifiers/zh-cn.json
+++ b/packages/language-service/data/model-modifiers/zh-cn.json
@@ -13,7 +13,7 @@
"name": "number",
"description": {
"kind": "markdown",
- "value": "如果你想让用户输入自动转换为数字,你可以在 `v-model` 后添加 `.number` 修饰符来管理输入:\n\n```html\n\n```\n\n如果该值无法被 `parseFloat()` 处理,那么将返回原始值。\n\n`number` 修饰符会在输入框有 `type=\"number\"` 时自动启用。"
+ "value": "如果你想让用户输入自动转换为数字,你可以在 `v-model` 后添加 `.number` 修饰符来管理输入:\n\n```html\n\n```\n\n如果该值无法被 `parseFloat()` 处理,那么将返回原始值。特别是当输入为空时 (例如用户清空输入字段之后),会返回一个空字符串。这种行为与 [DOM 属性 valueAsNumber](https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLInputElement#valueasnumber) 有所不同。\n\n`number` 修饰符会在输入框有 `type=\"number\"` 时自动启用。"
},
"references": "guide/essentials/forms.html#number"
},
diff --git a/packages/language-service/index.ts b/packages/language-service/index.ts
index 237444e3d5..73b086d39d 100644
--- a/packages/language-service/index.ts
+++ b/packages/language-service/index.ts
@@ -31,7 +31,7 @@ import { create as createVueTwoslashQueriesPlugin } from './lib/plugins/vue-twos
import { parse, VueCompilerOptions } from '@vue/language-core';
import { proxyLanguageServiceForVue } from '@vue/typescript-plugin/lib/common';
import { collectExtractProps } from '@vue/typescript-plugin/lib/requests/collectExtractProps';
-import { getComponentEvents, getComponentNames, getComponentProps, getElementAttrs, getTemplateContextProps } from '@vue/typescript-plugin/lib/requests/componentInfos';
+import { getComponentDirectives, getComponentEvents, getComponentNames, getComponentProps, getElementAttrs } from '@vue/typescript-plugin/lib/requests/componentInfos';
import { getImportPathForFile } from '@vue/typescript-plugin/lib/requests/getImportPathForFile';
import { getPropertiesAtLocation } from '@vue/typescript-plugin/lib/requests/getPropertiesAtLocation';
import type { RequestContext } from '@vue/typescript-plugin/lib/requests/types';
@@ -118,6 +118,9 @@ export function getFullLanguageServicePlugins(
async getComponentEvents(...args) {
return await getComponentEvents.apply(requestContext, args);
},
+ async getComponentDirectives(...args) {
+ return await getComponentDirectives.apply(requestContext, args);
+ },
async getComponentNames(...args) {
return await getComponentNames.apply(requestContext, args);
},
@@ -127,9 +130,6 @@ export function getFullLanguageServicePlugins(
async getElementAttrs(...args) {
return await getElementAttrs.apply(requestContext, args);
},
- async getTemplateContextProps(...args) {
- return await getTemplateContextProps.apply(requestContext, args);
- },
async getQuickInfoAtPosition(fileName, position) {
const languageService = context.getLanguageService();
const uri = context.project.typescript!.uriConverter.asUri(fileName);
diff --git a/packages/language-service/lib/plugins/utils.ts b/packages/language-service/lib/plugins/utils.ts
new file mode 100644
index 0000000000..9ff1d2b83f
--- /dev/null
+++ b/packages/language-service/lib/plugins/utils.ts
@@ -0,0 +1,12 @@
+import type { TextDocument } from 'vscode-languageserver-textdocument';
+
+export function sleep(ms: number) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+export function isTsDocument(document: TextDocument) {
+ return document.languageId === 'javascript' ||
+ document.languageId === 'typescript' ||
+ document.languageId === 'javascriptreact' ||
+ document.languageId === 'typescriptreact';
+}
\ No newline at end of file
diff --git a/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts b/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts
index 6d0265545c..eb08119bd5 100644
--- a/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts
+++ b/packages/language-service/lib/plugins/vue-autoinsert-dotvalue.ts
@@ -1,19 +1,9 @@
import type { LanguageServiceContext, LanguageServicePlugin } from '@volar/language-service';
-import { hyphenateAttr } from '@vue/language-core';
+import { hyphenateAttr, VueVirtualCode } from '@vue/language-core';
import type * as ts from 'typescript';
import type { TextDocument } from 'vscode-languageserver-textdocument';
import { URI } from 'vscode-uri';
-
-const asts = new WeakMap();
-
-function getAst(ts: typeof import('typescript'), fileName: string, snapshot: ts.IScriptSnapshot, scriptKind?: ts.ScriptKind) {
- let ast = asts.get(snapshot);
- if (!ast) {
- ast = ts.createSourceFile(fileName, snapshot.getText(0, snapshot.getLength()), ts.ScriptTarget.Latest, undefined, scriptKind);
- asts.set(snapshot, ast);
- }
- return ast;
-}
+import { isTsDocument, sleep } from './utils';
export function create(
ts: typeof import('typescript'),
@@ -61,46 +51,49 @@ export function create(
const decoded = context.decodeEmbeddedDocumentUri(uri);
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
- if (!sourceScript) {
+ if (!sourceScript?.generated || !virtualCode) {
return;
}
- let ast: ts.SourceFile | undefined;
- let sourceCodeOffset = document.offsetAt(selection);
+ const root = sourceScript.generated.root;
+ if (!(root instanceof VueVirtualCode)) {
+ return;
+ }
- const fileName = context.project.typescript?.uriConverter.asFileName(sourceScript.id)
- ?? sourceScript.id.fsPath.replace(/\\/g, '/');
+ const blocks = [
+ root._sfc.script,
+ root._sfc.scriptSetup,
+ ].filter(block => !!block);
+ if (!blocks.length) {
+ return;
+ }
- if (sourceScript.generated) {
- const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
- if (!serviceScript || serviceScript?.code !== virtualCode) {
- return;
- }
- ast = getAst(ts, fileName, virtualCode.snapshot, serviceScript.scriptKind);
- let mapped = false;
- for (const [_sourceScript, map] of context.language.maps.forEach(virtualCode)) {
- for (const [sourceOffset] of map.toSourceLocation(document.offsetAt(selection))) {
- sourceCodeOffset = sourceOffset;
- mapped = true;
- break;
- }
- if (mapped) {
- break;
- }
+ let sourceCodeOffset = document.offsetAt(selection);
+ let mapped = false;
+ for (const [, map] of context.language.maps.forEach(virtualCode)) {
+ for (const [sourceOffset] of map.toSourceLocation(sourceCodeOffset)) {
+ sourceCodeOffset = sourceOffset;
+ mapped = true;
+ break;
}
- if (!mapped) {
- return;
+ if (mapped) {
+ break;
}
}
- else {
- ast = getAst(ts, fileName, sourceScript.snapshot);
+ if (!mapped) {
+ return;
}
- if (isBlacklistNode(ts, ast, document.offsetAt(selection), false)) {
- return;
+ for (const { ast, startTagEnd, endTagStart } of blocks) {
+ if (sourceCodeOffset < startTagEnd || sourceCodeOffset > endTagStart) {
+ continue;
+ }
+ if (isBlacklistNode(ts, ast, sourceCodeOffset - startTagEnd, false)) {
+ return;
+ }
}
- const props = await tsPluginClient?.getPropertiesAtLocation(fileName, sourceCodeOffset) ?? [];
+ const props = await tsPluginClient?.getPropertiesAtLocation(root.fileName, sourceCodeOffset) ?? [];
if (props.some(prop => prop === 'value')) {
return '${1:.value}';
}
@@ -110,20 +103,9 @@ export function create(
};
}
-function sleep(ms: number) {
- return new Promise(resolve => setTimeout(resolve, ms));
-}
-
-export function isTsDocument(document: TextDocument) {
- return document.languageId === 'javascript' ||
- document.languageId === 'typescript' ||
- document.languageId === 'javascriptreact' ||
- document.languageId === 'typescriptreact';
-}
-
const charReg = /\w/;
-export function isCharacterTyping(document: TextDocument, change: { text: string; rangeOffset: number; rangeLength: number; }) {
+function isCharacterTyping(document: TextDocument, change: { text: string; rangeOffset: number; rangeLength: number; }) {
const lastCharacter = change.text[change.text.length - 1];
const nextCharacter = document.getText().slice(
change.rangeOffset + change.text.length,
@@ -138,7 +120,7 @@ export function isCharacterTyping(document: TextDocument, change: { text: string
return charReg.test(lastCharacter) && !charReg.test(nextCharacter);
}
-export function isBlacklistNode(ts: typeof import('typescript'), node: ts.Node, pos: number, allowAccessDotValue: boolean) {
+function isBlacklistNode(ts: typeof import('typescript'), node: ts.Node, pos: number, allowAccessDotValue: boolean) {
if (ts.isVariableDeclaration(node) && pos >= node.name.getFullStart() && pos <= node.name.getEnd()) {
return true;
}
diff --git a/packages/language-service/lib/plugins/vue-complete-define-assignment.ts b/packages/language-service/lib/plugins/vue-complete-define-assignment.ts
index 8e2e98129d..d62d38806f 100644
--- a/packages/language-service/lib/plugins/vue-complete-define-assignment.ts
+++ b/packages/language-service/lib/plugins/vue-complete-define-assignment.ts
@@ -2,7 +2,7 @@ import type { LanguageServicePlugin } from '@volar/language-service';
import { TextRange, tsCodegen, VueVirtualCode } from '@vue/language-core';
import type * as vscode from 'vscode-languageserver-protocol';
import { URI } from 'vscode-uri';
-import { isTsDocument } from './vue-autoinsert-dotvalue';
+import { isTsDocument } from './utils';
export function create(): LanguageServicePlugin {
return {
diff --git a/packages/language-service/lib/plugins/vue-document-drop.ts b/packages/language-service/lib/plugins/vue-document-drop.ts
index 79fbb2d67b..9233e91859 100644
--- a/packages/language-service/lib/plugins/vue-document-drop.ts
+++ b/packages/language-service/lib/plugins/vue-document-drop.ts
@@ -111,7 +111,7 @@ export function create(
});
if (sfc.script) {
- const edit = createAddComponentToOptionEdit(ts, sfc.script.ast, newName);
+ const edit = createAddComponentToOptionEdit(ts, sfc, sfc.script.ast, newName);
if (edit) {
additionalEdit.changes[embeddedDocumentUriStr].push({
range: {
diff --git a/packages/language-service/lib/plugins/vue-extract-file.ts b/packages/language-service/lib/plugins/vue-extract-file.ts
index c580096e58..ad077336b3 100644
--- a/packages/language-service/lib/plugins/vue-extract-file.ts
+++ b/packages/language-service/lib/plugins/vue-extract-file.ts
@@ -1,6 +1,6 @@
import type { CreateFile, LanguageServiceContext, LanguageServicePlugin, TextDocumentEdit, TextEdit } from '@volar/language-service';
import type { ExpressionNode, TemplateChildNode } from '@vue/compiler-dom';
-import { Sfc, VueVirtualCode, scriptRanges } from '@vue/language-core';
+import { Sfc, VueVirtualCode, tsCodegen } from '@vue/language-core';
import type * as ts from 'typescript';
import type * as vscode from 'vscode-languageserver-protocol';
import { URI } from 'vscode-uri';
@@ -21,13 +21,18 @@ export function create(
name: 'vue-extract-file',
capabilities: {
codeActionProvider: {
+ codeActionKinds: ['refactor'],
resolveProvider: true,
},
},
create(context) {
const tsPluginClient = getTsPluginClient?.(context);
return {
- provideCodeActions(document, range, _context) {
+ provideCodeActions(document, range, ctx) {
+
+ if (ctx.only && !ctx.only.includes('refactor')) {
+ return;
+ }
const startOffset = document.offsetAt(range.start);
const endOffset = document.offsetAt(range.end);
@@ -153,7 +158,7 @@ export function create(
];
if (sfc.script) {
- const edit = createAddComponentToOptionEdit(ts, sfc.script.ast, newName);
+ const edit = createAddComponentToOptionEdit(ts, sfc, sfc.script.ast, newName);
if (edit) {
sfcEdits.push({
range: {
@@ -299,12 +304,13 @@ export function getLastImportNode(ts: typeof import('typescript'), sourceFile: t
return lastImportNode;
}
-export function createAddComponentToOptionEdit(ts: typeof import('typescript'), ast: ts.SourceFile, componentName: string) {
+export function createAddComponentToOptionEdit(ts: typeof import('typescript'), sfc: Sfc, ast: ts.SourceFile, componentName: string) {
- const exportDefault = scriptRanges.parseScriptRanges(ts, ast, false, true).exportDefault;
- if (!exportDefault) {
+ const scriptRanges = tsCodegen.get(sfc)?.scriptRanges.get();
+ if (!scriptRanges?.exportDefault) {
return;
}
+ const { exportDefault } = scriptRanges;
// https://github.com/microsoft/TypeScript/issues/36174
const printer = ts.createPrinter();
diff --git a/packages/language-service/lib/plugins/vue-inlayhints.ts b/packages/language-service/lib/plugins/vue-inlayhints.ts
index 3cee77fb07..8b61f117a4 100644
--- a/packages/language-service/lib/plugins/vue-inlayhints.ts
+++ b/packages/language-service/lib/plugins/vue-inlayhints.ts
@@ -45,7 +45,7 @@ export function create(ts: typeof import('typescript')): LanguageServicePlugin {
for (const [prop, isShorthand] of findDestructuredProps(
ts,
virtualCode._sfc.scriptSetup.ast,
- scriptSetupRanges.defineProps.destructured
+ scriptSetupRanges.defineProps.destructured.keys()
)) {
const name = prop.text;
const end = prop.getEnd();
@@ -117,7 +117,7 @@ type Scope = Record;
export function findDestructuredProps(
ts: typeof import('typescript'),
ast: ts.SourceFile,
- props: Set
+ props: MapIterator
) {
const rootScope: Scope = Object.create(null);
const scopeStack: Scope[] = [rootScope];
@@ -192,7 +192,7 @@ export function findDestructuredProps(
&& ts.isCallExpression(initializer)
&& initializer.expression.getText(ast) === 'defineProps';
- for (const [id] of collectIdentifiers(ts, name)) {
+ for (const { id } of collectIdentifiers(ts, name)) {
if (isDefineProps) {
excludedIds.add(id);
} else {
@@ -208,7 +208,7 @@ export function findDestructuredProps(
}
for (const p of parameters) {
- for (const [id] of collectIdentifiers(ts, p)) {
+ for (const { id } of collectIdentifiers(ts, p)) {
registerLocalBinding(id);
}
}
diff --git a/packages/language-service/lib/plugins/vue-template.ts b/packages/language-service/lib/plugins/vue-template.ts
index f9dab9e8aa..68f3d644c9 100644
--- a/packages/language-service/lib/plugins/vue-template.ts
+++ b/packages/language-service/lib/plugins/vue-template.ts
@@ -1,7 +1,8 @@
import type { Disposable, LanguageServiceContext, LanguageServicePluginInstance } from '@volar/language-service';
-import { VueCompilerOptions, VueVirtualCode, hyphenateAttr, hyphenateTag, parseScriptSetupRanges, tsCodegen } from '@vue/language-core';
+import { VueVirtualCode, hyphenateAttr, hyphenateTag, tsCodegen } from '@vue/language-core';
import { camelize, capitalize } from '@vue/shared';
import { getComponentSpans } from '@vue/typescript-plugin/lib/common';
+import type { ComponentPropInfo } from '@vue/typescript-plugin/lib/requests/componentInfos';
import { create as createHtmlService } from 'volar-service-html';
import { create as createPugService } from 'volar-service-pug';
import * as html from 'vscode-html-languageservice';
@@ -44,7 +45,7 @@ export function create(
let extraCustomData: html.IHTMLDataProvider[] = [];
let lastCompletionComponentNames = new Set();
- const tsDocumentations = new Map();
+ const cachedPropInfos = new Map();
const onDidChangeCustomDataListeners = new Set<() => void>();
const onDidChangeCustomData = (listener: () => void): Disposable => {
onDidChangeCustomDataListeners.add(listener);
@@ -157,7 +158,6 @@ export function create(
if (!context.project.vue) {
return;
}
- const vueCompilerOptions = context.project.vue.compilerOptions;
let sync: (() => Promise) | undefined;
let currentVersion: number | undefined;
@@ -172,7 +172,7 @@ export function create(
// #4298: Precompute HTMLDocument before provideHtmlData to avoid parseHTMLDocument requesting component names from tsserver
baseServiceInstance.provideCompletionItems?.(document, position, completionContext, token);
- sync = (await provideHtmlData(vueCompilerOptions, sourceScript!.id, root)).sync;
+ sync = (await provideHtmlData(sourceScript!.id, root)).sync;
currentVersion = await sync();
}
@@ -462,7 +462,7 @@ export function create(
},
};
- async function provideHtmlData(vueCompilerOptions: VueCompilerOptions, sourceDocumentUri: URI, vueCode: VueVirtualCode) {
+ async function provideHtmlData(sourceDocumentUri: URI, vueCode: VueVirtualCode) {
await (initializing ??= initialize());
@@ -489,15 +489,15 @@ export function create(
const promises: Promise[] = [];
const tagInfos = new Map();
let version = 0;
let components: string[] | undefined;
- let templateContextProps: string[] | undefined;
- tsDocumentations.clear();
+ cachedPropInfos.clear();
updateExtraCustomData([
html.newHTMLDataProvider('vue-template-built-in', builtInData),
@@ -520,9 +520,7 @@ export function create(
})());
return [];
}
- const scriptSetupRanges = vueCode._sfc.scriptSetup
- ? parseScriptSetupRanges(ts, vueCode._sfc.scriptSetup.ast, vueCompilerOptions)
- : undefined;
+ const scriptSetupRanges = tsCodegen.get(vueCode._sfc)?.scriptSetupRanges.get();
const names = new Set();
const tags: html.ITagData[] = [];
@@ -560,56 +558,29 @@ export function create(
if (!tagInfo) {
promises.push((async () => {
const attrs = await tsPluginClient?.getElementAttrs(vueCode.fileName, tag) ?? [];
- const propsInfo = await tsPluginClient?.getComponentProps(vueCode.fileName, tag) ?? [];
+ const propInfos = await tsPluginClient?.getComponentProps(vueCode.fileName, tag) ?? [];
const events = await tsPluginClient?.getComponentEvents(vueCode.fileName, tag) ?? [];
+ const directives = await tsPluginClient?.getComponentDirectives(vueCode.fileName) ?? [];
tagInfos.set(tag, {
attrs,
- propsInfo: propsInfo.filter(prop =>
+ propInfos: propInfos.filter(prop =>
!prop.name.startsWith('ref_')
),
events,
+ directives,
});
version++;
})());
return [];
}
- const { attrs, propsInfo, events } = tagInfo;
- const props = propsInfo.map(prop =>
+ const { attrs, propInfos, events, directives } = tagInfo;
+ const props = propInfos.map(prop =>
hyphenateTag(prop.name).startsWith('on-vnode-')
? 'onVue:' + prop.name.slice('onVnode'.length)
: prop.name
);
const attributes: html.IAttributeData[] = [];
- const _tsCodegen = tsCodegen.get(vueCode._sfc);
-
- if (_tsCodegen) {
- if (!templateContextProps) {
- promises.push((async () => {
- templateContextProps = await tsPluginClient?.getTemplateContextProps(vueCode.fileName) ?? [];
- version++;
- })());
- return [];
- }
- let ctxVars = [
- ..._tsCodegen.scriptRanges.get()?.bindings.map(
- ({ range }) => vueCode._sfc.script!.content.slice(range.start, range.end)
- ) ?? [],
- ..._tsCodegen.scriptSetupRanges.get()?.bindings.map(
- ({ range }) => vueCode._sfc.scriptSetup!.content.slice(range.start, range.end)
- ) ?? [],
- ...templateContextProps,
- ];
- ctxVars = [...new Set(ctxVars)];
- const dirs = ctxVars.map(hyphenateAttr).filter(v => v.startsWith('v-'));
- for (const dir of dirs) {
- attributes.push(
- {
- name: dir,
- }
- );
- }
- }
const propsSet = new Set(props);
@@ -641,14 +612,14 @@ export function create(
else {
const propName = name;
- const propKey = generateItemKey('componentProp', isGlobal ? '*' : tag, propName);
- const propDescription = propsInfo.find(prop => {
+ const propInfo = propInfos.find(prop => {
const name = casing.attr === AttrNameCasing.Camel ? prop.name : hyphenateAttr(prop.name);
return name === propName;
- })?.commentMarkdown;
+ });
+ const propKey = generateItemKey('componentProp', isGlobal ? '*' : tag, propName, propInfo?.deprecated);
- if (propDescription) {
- tsDocumentations.set(propName, propDescription);
+ if (propInfo) {
+ cachedPropInfos.set(propName, propInfo);
}
attributes.push(
@@ -685,6 +656,13 @@ export function create(
);
}
+ for (const directive of directives) {
+ const name = hyphenateAttr(directive);
+ attributes.push({
+ name
+ });
+ }
+
const models: [boolean, string][] = [];
for (const prop of [...props, ...attrs]) {
@@ -815,7 +793,7 @@ export function create(
for (const item of completionList.items) {
const documentation = typeof item.documentation === 'string' ? item.documentation : item.documentation?.value;
- if (documentation && !isItemKey(documentation) && item.documentation) {
+ if (documentation && !isItemKey(documentation)) {
htmlDocumentations.set(item.label, documentation);
}
}
@@ -842,11 +820,14 @@ export function create(
const itemKeyStr = typeof item.documentation === 'string' ? item.documentation : item.documentation?.value;
let parsedItemKey = itemKeyStr ? parseItemKey(itemKeyStr) : undefined;
+ let propInfo: ComponentPropInfo | undefined;
+
if (parsedItemKey) {
const documentations: string[] = [];
- if (tsDocumentations.has(parsedItemKey.prop)) {
- documentations.push(tsDocumentations.get(parsedItemKey.prop)!);
+ propInfo = cachedPropInfos.get(parsedItemKey.prop);
+ if (propInfo?.commentMarkdown) {
+ documentations.push(propInfo.commentMarkdown);
}
let { isEvent, propName } = getPropName(parsedItemKey);
@@ -884,22 +865,28 @@ export function create(
type: 'componentProp',
tag: '^',
prop: propName,
+ deprecated: false,
leadingSlash: false
};
}
- if (tsDocumentations.has(propName)) {
+ propInfo = cachedPropInfos.get(propName);
+ if (propInfo?.commentMarkdown) {
const originalDocumentation = typeof item.documentation === 'string' ? item.documentation : item.documentation?.value;
item.documentation = {
kind: 'markdown',
value: [
- tsDocumentations.get(propName)!,
+ propInfo.commentMarkdown,
originalDocumentation,
].filter(str => !!str).join('\n\n'),
};
}
}
+ if (propInfo?.deprecated) {
+ item.tags = [1 satisfies typeof vscode.CompletionItemTag.Deprecated];
+ }
+
const tokens: string[] = [];
if (
@@ -1042,8 +1029,8 @@ function parseLabel(label: string) {
};
}
-function generateItemKey(type: InternalItemId, tag: string, prop: string) {
- return '__VLS_data=' + type + ',' + tag + ',' + prop;
+function generateItemKey(type: InternalItemId, tag: string, prop: string, deprecated?: boolean) {
+ return `__VLS_data=${type},${tag},${prop},${Number(deprecated)}`;
}
function isItemKey(key: string) {
@@ -1058,6 +1045,7 @@ function parseItemKey(key: string) {
type: strs[0] as InternalItemId,
tag: strs[1],
prop: strs[2],
+ deprecated: strs[3] === '1',
leadingSlash
};
}
diff --git a/packages/language-service/tests/utils/format.ts b/packages/language-service/tests/utils/format.ts
index 5f6eb36a72..754b4ce463 100644
--- a/packages/language-service/tests/utils/format.ts
+++ b/packages/language-service/tests/utils/format.ts
@@ -2,9 +2,9 @@ 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 { createVueLanguagePlugin, getDefaultCompilerOptions, getFullLanguageServicePlugins } from '../..';
-const resolvedVueOptions = resolveVueCompilerOptions({});
+const resolvedVueOptions = getDefaultCompilerOptions();
const vueLanguagePlugin = createVueLanguagePlugin(
ts,
{},
diff --git a/packages/tsc/index.ts b/packages/tsc/index.ts
index 1ba58bdf9a..21dc1ae028 100644
--- a/packages/tsc/index.ts
+++ b/packages/tsc/index.ts
@@ -15,7 +15,7 @@ export function run(tscPath = require.resolve('typescript/lib/tsc')) {
const { configFilePath } = options.options;
const vueOptions = typeof configFilePath === 'string'
? vue.createParsedCommandLine(ts, ts.sys, configFilePath.replace(windowsPathReg, '/')).vueOptions
- : vue.resolveVueCompilerOptions({});
+ : vue.getDefaultCompilerOptions();
const allExtensions = vue.getAllExtensions(vueOptions);
if (
runExtensions.length === allExtensions.length
diff --git a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap
index 6959c4430d..8d42786314 100644
--- a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap
+++ b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap
@@ -8,7 +8,7 @@ declare const _default: (__VLS_props: NonNullable & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, never> & {
nonGeneric: string;
rows: Row[];
- } & Partial<{}>> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps);
+ } & Partial<{}>> & import("vue").PublicProps;
expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
attrs: any;
slots: {
@@ -56,8 +56,8 @@ export default _default;
`;
exports[`vue-tsc-dts > Input: events/component-class.vue, Output: events/component-class.vue.d.ts 1`] = `
-"declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
- foo: (value: string) => void;
+"declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
+ foo: (value: string) => any;
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
onFoo?: (value: string) => any;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -69,7 +69,7 @@ exports[`vue-tsc-dts > Input: events/component-generic.vue, Output: events/compo
"declare const _default: (__VLS_props: NonNullable>["props"], __VLS_ctx?: __VLS_PrettifyLocal>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable>["expose"], __VLS_setup?: Promise<{
props: __VLS_PrettifyLocal & Omit<{
readonly onFoo?: (value: string) => any;
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onFoo"> & {} & Partial<{}>> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps);
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onFoo"> & {} & Partial<{}>> & import("vue").PublicProps;
expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
attrs: any;
slots: {};
@@ -93,7 +93,7 @@ exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.v
title?: string;
} & {
foo: number;
- }) & Partial<{}>> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps);
+ }) & Partial<{}>> & import("vue").PublicProps;
expose(exposed: import("vue").ShallowUnwrapRef<{
baz: number;
}>): void;
@@ -127,7 +127,7 @@ exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: g
title?: string;
} & {
foo: number;
- }) & Partial<{}>> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps);
+ }) & Partial<{}>> & import("vue").PublicProps;
expose(exposed: import("vue").ShallowUnwrapRef<{
baz: number;
}>): void;
@@ -252,15 +252,15 @@ export default _default;
`;
exports[`vue-tsc-dts > Input: reference-type-events/component.vue, Output: reference-type-events/component.vue.d.ts 1`] = `
-"declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
+"declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
foo: (data?: {
foo: string;
- }) => void;
+ }) => any;
bar: (value: {
arg1: number;
arg2?: any;
- }) => void;
- baz: () => void;
+ }) => any;
+ baz: () => any;
}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
onFoo?: (data?: {
foo: string;
@@ -312,58 +312,35 @@ exports[`vue-tsc-dts > Input: reference-type-model/component.vue, Output: refere
"qux"?: string;
'quxModifiers'?: Partial>;
};
-declare const _default: import("vue").DefineComponent>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
- "update:foo": (value: number) => void;
- "update:bar": (value: string[]) => void;
- "update:qux": (value: string) => void;
-}, string, import("vue").PublicProps, Readonly>> & Readonly<{
+declare const _default: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
+ "update:foo": (value: number) => any;
+ "update:bar": (value: string[]) => any;
+ "update:qux": (value: string) => any;
+}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
"onUpdate:foo"?: (value: number) => any;
"onUpdate:bar"?: (value: string[]) => any;
"onUpdate:qux"?: (value: string) => any;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
export default _default;
-type __VLS_NonUndefinedable = T extends undefined ? never : T;
-type __VLS_TypePropsToOption = {
- [K in keyof T]-?: {} extends Pick ? {
- type: import('vue').PropType<__VLS_NonUndefinedable>;
- } : {
- type: import('vue').PropType;
- required: true;
- };
-};
"
`;
exports[`vue-tsc-dts > Input: reference-type-props/component.vue, Output: reference-type-props/component.vue.d.ts 1`] = `
"import { MyProps } from './my-props';
-declare const _default: import("vue").DefineComponent, {
- bar: number;
- baz: () => string[];
-}>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly, {
- bar: number;
- baz: () => string[];
-}>>> & Readonly<{}>, {
+declare const _default: import("vue").DefineComponent & Readonly<{}>, {
bar: number;
baz: string[];
-}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
+}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
export default _default;
-type __VLS_WithDefaults = {
- [K in keyof Pick
]: K extends keyof D ? __VLS_PrettifyLocal
: P[K];
-};
-type __VLS_NonUndefinedable = T extends undefined ? never : T;
-type __VLS_TypePropsToOption = {
- [K in keyof T]-?: {} extends Pick ? {
- type: import('vue').PropType<__VLS_NonUndefinedable>;
- } : {
- type: import('vue').PropType;
- required: true;
- };
+"
+`;
+
+exports[`vue-tsc-dts > Input: reference-type-props/component-destructure.vue, Output: reference-type-props/component-destructure.vue.d.ts 1`] = `
+"type __VLS_Props = {
+ text: string;
};
-type __VLS_PrettifyLocal = {
- [K in keyof T]: T[K];
-} & {};
+declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, HTMLDivElement>;
+export default _default;
"
`;
@@ -617,27 +594,26 @@ export {};
`;
exports[`vue-tsc-dts > Input: template-slots/component.vue, Output: template-slots/component.vue.d.ts 1`] = `
-"declare function __VLS_template(): {
- attrs: Partial<{}>;
- slots: {
- 'no-bind'?(_: {}): any;
- default?(_: {
- num: number;
- }): any;
- 'named-slot'?(_: {
- str: string;
- }): any;
- vbind?(_: {
- num: number;
- str: string;
- }): any;
- };
- refs: {};
- rootEl: any;
+"declare var __VLS_0: {};
+declare var __VLS_1: {
+ num: number;
+};
+declare var __VLS_2: {
+ str: string;
+};
+declare var __VLS_3: {
+ num: number;
+ str: string;
};
-type __VLS_TemplateResult = ReturnType;
+declare var __VLS_slots: {
+ 'no-bind'?(_: typeof __VLS_0): any;
+ default?(_: typeof __VLS_1): any;
+ 'named-slot'?(_: typeof __VLS_2): any;
+ vbind?(_: typeof __VLS_3): any;
+};
+type __VLS_TemplateSlots = typeof __VLS_slots;
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
-declare const _default: __VLS_WithTemplateSlots;
+declare const _default: __VLS_WithTemplateSlots;
export default _default;
type __VLS_WithTemplateSlots = T & {
new (): {
@@ -649,39 +625,34 @@ type __VLS_WithTemplateSlots = T & {
exports[`vue-tsc-dts > Input: template-slots/component-define-slots.vue, Output: template-slots/component-define-slots.vue.d.ts 1`] = `
"import { VNode } from 'vue';
-declare function __VLS_template(): {
- attrs: Partial<{}>;
- slots: Readonly<{
- default: (props: {
- num: number;
- }) => VNode[];
- 'named-slot': (props: {
- str: string;
- }) => VNode[];
- vbind: (props: {
- num: number;
- str: string;
- }) => VNode[];
- 'no-bind': () => VNode[];
- }> & {
- default: (props: {
- num: number;
- }) => VNode[];
- 'named-slot': (props: {
- str: string;
- }) => VNode[];
- vbind: (props: {
- num: number;
- str: string;
- }) => VNode[];
- 'no-bind': () => VNode[];
- };
- refs: {};
- rootEl: any;
+declare const __VLS_slots: Readonly<{
+ default: (props: {
+ num: number;
+ }) => VNode[];
+ 'named-slot': (props: {
+ str: string;
+ }) => VNode[];
+ vbind: (props: {
+ num: number;
+ str: string;
+ }) => VNode[];
+ 'no-bind': () => VNode[];
+}> & {
+ default: (props: {
+ num: number;
+ }) => VNode[];
+ 'named-slot': (props: {
+ str: string;
+ }) => VNode[];
+ vbind: (props: {
+ num: number;
+ str: string;
+ }) => VNode[];
+ 'no-bind': () => VNode[];
};
-type __VLS_TemplateResult = ReturnType;
+type __VLS_TemplateSlots = typeof __VLS_slots;
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
-declare const _default: __VLS_WithTemplateSlots;
+declare const _default: __VLS_WithTemplateSlots;
export default _default;
type __VLS_WithTemplateSlots = T & {
new (): {
@@ -692,23 +663,18 @@ type __VLS_WithTemplateSlots = T & {
`;
exports[`vue-tsc-dts > Input: template-slots/component-destructuring.vue, Output: template-slots/component-destructuring.vue.d.ts 1`] = `
-"declare function __VLS_template(): {
- attrs: Partial<{}>;
- slots: Readonly<{
- bottom: (props: {
- num: number;
- }) => any[];
- }> & {
- bottom: (props: {
- num: number;
- }) => any[];
- };
- refs: {};
- rootEl: any;
+"declare const __VLS_slots: Readonly<{
+ bottom: (props: {
+ num: number;
+ }) => any[];
+}> & {
+ bottom: (props: {
+ num: number;
+ }) => any[];
};
-type __VLS_TemplateResult = ReturnType;
+type __VLS_TemplateSlots = typeof __VLS_slots;
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
-declare const _default: __VLS_WithTemplateSlots;
+declare const _default: __VLS_WithTemplateSlots;
export default _default;
type __VLS_WithTemplateSlots = T & {
new (): {
@@ -719,27 +685,26 @@ type __VLS_WithTemplateSlots = T & {
`;
exports[`vue-tsc-dts > Input: template-slots/component-no-script.vue, Output: template-slots/component-no-script.vue.d.ts 1`] = `
-"declare function __VLS_template(): {
- attrs: Partial<{}>;
- slots: {
- 'no-bind'?(_: {}): any;
- default?(_: {
- num: number;
- }): any;
- 'named-slot'?(_: {
- str: string;
- }): any;
- vbind?(_: {
- num: number;
- str: string;
- }): any;
- };
- refs: {};
- rootEl: any;
+"declare var __VLS_0: {};
+declare var __VLS_1: {
+ num: number;
+};
+declare var __VLS_2: {
+ str: string;
+};
+declare var __VLS_3: {
+ num: number;
+ str: string;
+};
+declare var __VLS_slots: {
+ 'no-bind'?(_: typeof __VLS_0): any;
+ default?(_: typeof __VLS_1): any;
+ 'named-slot'?(_: typeof __VLS_2): any;
+ vbind?(_: typeof __VLS_3): any;
};
-type __VLS_TemplateResult = ReturnType;
+type __VLS_TemplateSlots = typeof __VLS_slots;
declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
-declare const _default: __VLS_WithTemplateSlots;
+declare const _default: __VLS_WithTemplateSlots;
export default _default;
type __VLS_WithTemplateSlots = T & {
new (): {
diff --git a/packages/tsc/tests/dts.spec.ts b/packages/tsc/tests/dts.spec.ts
index 50e65e887a..8d1d400bfd 100644
--- a/packages/tsc/tests/dts.spec.ts
+++ b/packages/tsc/tests/dts.spec.ts
@@ -32,7 +32,8 @@ describe('vue-tsc-dts', () => {
vueOptions = vue.createParsedCommandLine(ts, ts.sys, configFilePath.replace(windowsPathReg, '/')).vueOptions;
}
else {
- vueOptions = vue.resolveVueCompilerOptions({ extensions: ['.vue', '.cext'] });
+ vueOptions = vue.getDefaultCompilerOptions();
+ vueOptions.extensions = ['.vue', '.cext'];
vueOptions.__setupedGlobalTypes = vue.setupGlobalTypes(workspace.replace(windowsPathReg, '/'), vueOptions, ts.sys);
}
const vueLanguagePlugin = vue.createVueLanguagePlugin(
diff --git a/packages/typescript-plugin/lib/client.ts b/packages/typescript-plugin/lib/client.ts
index fea8bef22d..4aab0b6ef4 100644
--- a/packages/typescript-plugin/lib/client.ts
+++ b/packages/typescript-plugin/lib/client.ts
@@ -1,41 +1,21 @@
import type { RequestData } from './server';
import { getBestServer } from './utils';
-export function collectExtractProps(
- ...args: Parameters
-) {
- return sendRequest>(
- 'collectExtractProps',
- ...args
- );
-}
+export const collectExtractProps = createRequest<
+ typeof import('./requests/collectExtractProps.js')['collectExtractProps']
+>('collectExtractProps');
-export async function getImportPathForFile(
- ...args: Parameters
-) {
- return await sendRequest>(
- 'getImportPathForFile',
- ...args
- );
-}
+export const getImportPathForFile = createRequest<
+ typeof import('./requests/getImportPathForFile.js')['getImportPathForFile']
+>('getImportPathForFile');
-export async function getPropertiesAtLocation(
- ...args: Parameters
-) {
- return await sendRequest>(
- 'getPropertiesAtLocation',
- ...args
- );
-}
+export const getPropertiesAtLocation = createRequest<
+ typeof import('./requests/getPropertiesAtLocation.js')['getPropertiesAtLocation']
+>('getPropertiesAtLocation');
-export function getQuickInfoAtPosition(
- ...args: Parameters
-) {
- return sendRequest>(
- 'getQuickInfoAtPosition',
- ...args
- );
-}
+export const getQuickInfoAtPosition = createRequest<
+ typeof import('./requests/getQuickInfoAtPosition.js')['getQuickInfoAtPosition']
+>('getQuickInfoAtPosition');
// Component Infos
@@ -47,23 +27,13 @@ export async function getComponentProps(fileName: string, componentName: string)
return await server.getComponentProps(fileName, componentName);
}
-export function getComponentEvents(
- ...args: Parameters
-) {
- return sendRequest>(
- 'getComponentEvents',
- ...args
- );
-}
+export const getComponentEvents = createRequest<
+ typeof import('./requests/componentInfos.js')['getComponentEvents']
+>('getComponentEvents');
-export function getTemplateContextProps(
- ...args: Parameters
-) {
- return sendRequest>(
- 'getTemplateContextProps',
- ...args
- );
-}
+export const getComponentDirectives = createRequest<
+ typeof import('./requests/componentInfos.js')['getComponentDirectives']
+>('getComponentDirectives');
export async function getComponentNames(fileName: string) {
const server = await getBestServer(fileName);
@@ -77,19 +47,16 @@ export async function getComponentNames(fileName: string) {
return Object.keys(componentAndProps);
}
-export function getElementAttrs(
- ...args: Parameters
-) {
- return sendRequest>(
- 'getElementAttrs',
- ...args
- );
-}
+export const getElementAttrs = createRequest<
+ typeof import('./requests/componentInfos.js')['getElementAttrs']
+>('getElementAttrs');
-async function sendRequest(requestType: RequestData[1], fileName: string, ...rest: any[]) {
- const server = await getBestServer(fileName);
- if (!server) {
- return;
- }
- return server.sendRequest(requestType, fileName, ...rest);
+function createRequest any>(requestType: RequestData[1]) {
+ return async function (...[fileName, ...rest]: Parameters) {
+ const server = await getBestServer(fileName);
+ if (!server) {
+ return;
+ }
+ return server.sendRequest>(requestType, fileName, ...rest);
+ };
}
diff --git a/packages/typescript-plugin/lib/requests/componentInfos.ts b/packages/typescript-plugin/lib/requests/componentInfos.ts
index 764f6029eb..1d082b5cee 100644
--- a/packages/typescript-plugin/lib/requests/componentInfos.ts
+++ b/packages/typescript-plugin/lib/requests/componentInfos.ts
@@ -1,8 +1,16 @@
import * as vue from '@vue/language-core';
import { camelize, capitalize } from '@vue/shared';
+import * as path from 'node:path';
import type * as ts from 'typescript';
import type { RequestContext } from './types';
+export interface ComponentPropInfo {
+ name: string;
+ required?: boolean;
+ deprecated?: boolean;
+ commentMarkdown?: string;
+}
+
export function getComponentProps(
this: RequestContext,
fileName: string,
@@ -21,33 +29,12 @@ export function getComponentProps(
return [];
}
- const name = tag.split('.');
-
- let componentSymbol = components.type.getProperty(name[0])
- ?? components.type.getProperty(camelize(name[0]))
- ?? components.type.getProperty(capitalize(camelize(name[0])));
-
- if (!componentSymbol) {
+ const componentType = getComponentType(ts, languageService, vueCode, components, fileName, tag);
+ if (!componentType) {
return [];
}
- let componentType = checker.getTypeOfSymbolAtLocation(componentSymbol, components.node);
-
- for (let i = 1; i < name.length; i++) {
- componentSymbol = componentType.getProperty(name[i]);
- if (componentSymbol) {
- componentType = checker.getTypeOfSymbolAtLocation(componentSymbol, components.node);
- }
- else {
- return [];
- }
- }
-
- const result = new Map();
+ const result = new Map();
for (const sig of componentType.getCallSignatures()) {
const propParam = sig.parameters[0];
@@ -57,9 +44,17 @@ export function getComponentProps(
for (const prop of props) {
const name = prop.name;
const required = !(prop.flags & ts.SymbolFlags.Optional) || undefined;
- const commentMarkdown = generateCommentMarkdown(prop.getDocumentationComment(checker), prop.getJsDocTags()) || undefined;
-
- result.set(name, { name, required, commentMarkdown });
+ const {
+ content: commentMarkdown,
+ deprecated
+ } = generateCommentMarkdown(prop.getDocumentationComment(checker), prop.getJsDocTags());
+
+ result.set(name, {
+ name,
+ required,
+ deprecated,
+ commentMarkdown
+ });
}
}
}
@@ -76,9 +71,17 @@ export function getComponentProps(
}
const name = prop.name;
const required = !(prop.flags & ts.SymbolFlags.Optional) || undefined;
- const commentMarkdown = generateCommentMarkdown(prop.getDocumentationComment(checker), prop.getJsDocTags()) || undefined;
-
- result.set(name, { name, required, commentMarkdown });
+ const {
+ content: commentMarkdown,
+ deprecated
+ } = generateCommentMarkdown(prop.getDocumentationComment(checker), prop.getJsDocTags());
+
+ result.set(name, {
+ name,
+ required,
+ deprecated,
+ commentMarkdown
+ });
}
}
}
@@ -104,31 +107,11 @@ export function getComponentEvents(
return [];
}
- const name = tag.split('.');
-
- let componentSymbol = components.type.getProperty(name[0]);
-
- if (!componentSymbol) {
- componentSymbol = components.type.getProperty(camelize(name[0]))
- ?? components.type.getProperty(capitalize(camelize(name[0])));
- }
-
- if (!componentSymbol) {
+ const componentType = getComponentType(ts, languageService, vueCode, components, fileName, tag);
+ if (!componentType) {
return [];
}
- let componentType = checker.getTypeOfSymbolAtLocation(componentSymbol, components.node);
-
- for (let i = 1; i < name.length; i++) {
- componentSymbol = componentType.getProperty(name[i]);
- if (componentSymbol) {
- componentType = checker.getTypeOfSymbolAtLocation(componentSymbol, components.node);
- }
- else {
- return [];
- }
- }
-
const result = new Set();
// for (const sig of componentType.getCallSignatures()) {
@@ -158,7 +141,7 @@ export function getComponentEvents(
return [...result];
}
-export function getTemplateContextProps(
+export function getComponentDirectives(
this: RequestContext,
fileName: string
) {
@@ -168,11 +151,15 @@ export function getTemplateContextProps(
return;
}
const vueCode = volarFile.generated.root;
+ const directives = getVariableType(ts, languageService, vueCode, '__VLS_directives');
+ if (!directives) {
+ return [];
+ }
- return getVariableType(ts, languageService, vueCode, '__VLS_ctx')
- ?.type
- ?.getProperties()
- .map(c => c.name);
+ return directives.type.getProperties()
+ .map(({ name }) => name)
+ .filter(name => name.startsWith('v') && name.length >= 2 && name[1] === name[1].toUpperCase())
+ .filter(name => !['vBind', 'vIf', 'vOn', 'VOnce', 'vShow', 'VSlot'].includes(name));
}
export function getComponentNames(
@@ -185,13 +172,7 @@ export function getComponentNames(
return;
}
const vueCode = volarFile.generated.root;
-
- return getVariableType(ts, languageService, vueCode, '__VLS_components')
- ?.type
- ?.getProperties()
- .map(c => c.name)
- .filter(entry => !entry.includes('$') && !entry.startsWith('_'))
- ?? [];
+ return _getComponentNames(ts, languageService, vueCode);
}
export function _getComponentNames(
@@ -199,12 +180,15 @@ export function _getComponentNames(
tsLs: ts.LanguageService,
vueCode: vue.VueVirtualCode
) {
- return getVariableType(ts, tsLs, vueCode, '__VLS_components')
+ const names = getVariableType(ts, tsLs, vueCode, '__VLS_components')
?.type
?.getProperties()
.map(c => c.name)
.filter(entry => !entry.includes('$') && !entry.startsWith('_'))
?? [];
+
+ names.push(getSelfComponentName(vueCode.fileName));
+ return names;
}
export function getElementAttrs(
@@ -223,7 +207,9 @@ export function getElementAttrs(
if (tsSourceFile = program.getSourceFile(fileName)) {
- const typeNode = tsSourceFile.statements.find((node): node is ts.TypeAliasDeclaration => ts.isTypeAliasDeclaration(node) && node.name.getText() === '__VLS_IntrinsicElementsCompletion');
+ const typeNode = tsSourceFile.statements
+ .filter(ts.isTypeAliasDeclaration)
+ .find(node => node.name.getText() === '__VLS_IntrinsicElementsCompletion');
const checker = program.getTypeChecker();
if (checker && typeNode) {
@@ -242,6 +228,42 @@ export function getElementAttrs(
return [];
}
+function getComponentType(
+ ts: typeof import('typescript'),
+ languageService: ts.LanguageService,
+ vueCode: vue.VueVirtualCode,
+ components: NonNullable>,
+ fileName: string,
+ tag: string
+) {
+ const program = languageService.getProgram()!;
+ const checker = program.getTypeChecker();
+ const name = tag.split('.');
+
+ let componentSymbol = components.type.getProperty(name[0])
+ ?? components.type.getProperty(camelize(name[0]))
+ ?? components.type.getProperty(capitalize(camelize(name[0])));
+ let componentType: ts.Type | undefined;
+
+ if (!componentSymbol) {
+ const name = getSelfComponentName(fileName);
+ if (name === capitalize(camelize(tag))) {
+ componentType = getVariableType(ts, languageService, vueCode, '__VLS_self')?.type;
+ }
+ }
+ else {
+ componentType = checker.getTypeOfSymbolAtLocation(componentSymbol, components.node);
+ for (let i = 1; i < name.length; i++) {
+ componentSymbol = componentType.getProperty(name[i]);
+ if (componentSymbol) {
+ componentType = checker.getTypeOfSymbolAtLocation(componentSymbol, components.node);
+ }
+ }
+ }
+
+ return componentType;
+}
+
function getVariableType(
ts: typeof import('typescript'),
languageService: ts.LanguageService,
@@ -266,6 +288,11 @@ function getVariableType(
}
}
+function getSelfComponentName(fileName: string) {
+ const baseName = path.basename(fileName);
+ return capitalize(camelize(baseName.slice(0, baseName.lastIndexOf('.'))));
+}
+
function searchVariableDeclarationNode(
ts: typeof import('typescript'),
sourceFile: ts.SourceFile,
@@ -294,11 +321,14 @@ function searchVariableDeclarationNode(
function generateCommentMarkdown(parts: ts.SymbolDisplayPart[], jsDocTags: ts.JSDocTagInfo[]) {
const parsedComment = _symbolDisplayPartsToMarkdown(parts);
const parsedJsDoc = _jsDocTagInfoToMarkdown(jsDocTags);
- let result = [parsedComment, parsedJsDoc].filter(str => !!str).join('\n\n');
- return result;
+ const content = [parsedComment, parsedJsDoc].filter(str => !!str).join('\n\n');
+ const deprecated = jsDocTags.some(tag => tag.name === 'deprecated');
+ return {
+ content,
+ deprecated
+ };
}
-
function _symbolDisplayPartsToMarkdown(parts: ts.SymbolDisplayPart[]) {
return parts.map(part => {
switch (part.kind) {
@@ -312,7 +342,6 @@ function _symbolDisplayPartsToMarkdown(parts: ts.SymbolDisplayPart[]) {
}).join('');
}
-
function _jsDocTagInfoToMarkdown(jsDocTags: ts.JSDocTagInfo[]) {
return jsDocTags.map(tag => {
const tagName = `*@${tag.name}*`;
diff --git a/packages/typescript-plugin/lib/server.ts b/packages/typescript-plugin/lib/server.ts
index 752cca0b0f..33a6e19c4c 100644
--- a/packages/typescript-plugin/lib/server.ts
+++ b/packages/typescript-plugin/lib/server.ts
@@ -3,7 +3,7 @@ import * as fs from 'node:fs';
import * as net from 'node:net';
import type * as ts from 'typescript';
import { collectExtractProps } from './requests/collectExtractProps';
-import { getComponentEvents, getComponentNames, getComponentProps, getElementAttrs, getTemplateContextProps } from './requests/componentInfos';
+import { type ComponentPropInfo, getComponentDirectives, getComponentEvents, getComponentNames, getComponentProps, getElementAttrs } from './requests/componentInfos';
import { getImportPathForFile } from './requests/getImportPathForFile';
import { getPropertiesAtLocation } from './requests/getPropertiesAtLocation';
import { getQuickInfoAtPosition } from './requests/getQuickInfoAtPosition';
@@ -20,7 +20,7 @@ export type RequestType =
// Component Infos
| 'subscribeComponentProps'
| 'getComponentEvents'
- | 'getTemplateContextProps'
+ | 'getComponentDirectives'
| 'getElementAttrs';
export type NotificationType =
@@ -70,11 +70,7 @@ export async function startNamedPipeServer(
const dataChunks: Buffer[] = [];
const currentData = new FileMap<[
componentNames: string[],
- Record,
+ Record,
]>(false);
const allConnections = new Set();
const pendingRequests = new Set();
@@ -252,8 +248,8 @@ export async function startNamedPipeServer(
else if (requestType === 'getComponentEvents') {
return getComponentEvents.apply(requestContext, args as any);
}
- else if (requestType === 'getTemplateContextProps') {
- return getTemplateContextProps.apply(requestContext, args as any);
+ else if (requestType === 'getComponentDirectives') {
+ return getComponentDirectives.apply(requestContext, args as any);
}
else if (requestType === 'getElementAttrs') {
return getElementAttrs.apply(requestContext, args as any);
diff --git a/packages/typescript-plugin/lib/utils.ts b/packages/typescript-plugin/lib/utils.ts
index 7081a7eb50..009f1330bb 100644
--- a/packages/typescript-plugin/lib/utils.ts
+++ b/packages/typescript-plugin/lib/utils.ts
@@ -5,6 +5,7 @@ import * as net from 'node:net';
import * as os from 'node:os';
import * as path from 'node:path';
import type * as ts from 'typescript';
+import type { ComponentPropInfo } from './requests/componentInfos';
import type { NotificationData, ProjectInfo, RequestData, ResponseData } from './server';
export { TypeScriptProjectHost } from '@volar/typescript';
@@ -29,11 +30,7 @@ class NamedPipeServer {
projectInfo?: ProjectInfo;
containsFileCache = new Map>();
componentNamesAndProps = new FileMap<
- Record
+ Record
>(false);
constructor(kind: ts.server.ProjectKind, id: number) {
@@ -170,11 +167,7 @@ class NamedPipeServer {
const components = this.componentNamesAndProps.get(fileName) ?? {};
const [name, props]: [
name: string,
- props: {
- name: string;
- required?: true;
- commentMarkdown?: string;
- }[],
+ props: ComponentPropInfo[],
] = data;
components[name] = props;
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0f95b82701..8383c0d0ab 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,22 +10,31 @@ importers:
devDependencies:
'@lerna-lite/cli':
specifier: latest
- version: 3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@lerna-lite/version@3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)
+ version: 3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@lerna-lite/version@3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)
'@lerna-lite/publish':
specifier: latest
- version: 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
+ version: 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
'@tsslint/cli':
specifier: latest
- version: 1.4.6(typescript@5.7.2)
+ version: 1.5.0(typescript@5.7.2)
'@tsslint/config':
specifier: latest
- version: 1.4.6(typescript@5.7.2)
+ version: 1.5.0(typescript@5.7.2)
+ '@tsslint/eslint':
+ specifier: latest
+ version: 1.5.0(typescript@5.7.2)
+ '@typescript-eslint/eslint-plugin':
+ specifier: latest
+ version: 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)
+ '@vue/language-core':
+ specifier: 2.2.0
+ version: link:packages/language-core
typescript:
specifier: latest
version: 5.7.2
vitest:
specifier: latest
- version: 2.1.8(@types/node@22.10.2)
+ version: 2.1.8(@types/node@22.10.4)
extensions/vscode:
devDependencies:
@@ -55,7 +64,7 @@ importers:
version: 0.24.2
esbuild-visualizer:
specifier: latest
- version: 0.6.0
+ version: 0.7.0
reactive-vscode:
specifier: ^0.2.9
version: 0.2.9(@types/vscode@1.96.0)
@@ -64,7 +73,7 @@ importers:
version: 7.6.3
vscode-ext-gen:
specifier: ^0.5.0
- version: 0.5.3
+ version: 0.5.5
vscode-tmlanguage-snapshot:
specifier: latest
version: 0.1.3
@@ -89,7 +98,7 @@ importers:
devDependencies:
'@types/node':
specifier: latest
- version: 22.10.2
+ version: 22.10.4
'@types/path-browserify':
specifier: latest
version: 1.0.3
@@ -112,7 +121,7 @@ importers:
version: 3.5.13
alien-signals:
specifier: ^0.4.9
- version: 0.4.9
+ version: 0.4.12
minimatch:
specifier: ^9.0.3
version: 9.0.5
@@ -131,7 +140,7 @@ importers:
version: 5.1.2
'@types/node':
specifier: latest
- version: 22.10.2
+ version: 22.10.4
'@types/path-browserify':
specifier: ^1.0.1
version: 1.0.3
@@ -153,7 +162,7 @@ importers:
devDependencies:
'@types/node':
specifier: latest
- version: 22.10.2
+ version: 22.10.4
'@vue/language-core':
specifier: 2.2.0
version: link:../language-core
@@ -210,7 +219,7 @@ importers:
version: link:../typescript-plugin
alien-signals:
specifier: ^0.4.9
- version: 0.4.9
+ version: 0.4.12
path-browserify:
specifier: ^1.0.1
version: 1.0.1
@@ -253,7 +262,7 @@ importers:
devDependencies:
'@types/node':
specifier: latest
- version: 22.10.2
+ version: 22.10.4
'@types/path-browserify':
specifier: latest
version: 1.0.3
@@ -278,7 +287,7 @@ importers:
devDependencies:
'@types/node':
specifier: latest
- version: 22.10.2
+ version: 22.10.4
packages/typescript-plugin:
dependencies:
@@ -294,7 +303,7 @@ importers:
devDependencies:
'@types/node':
specifier: latest
- version: 22.10.2
+ version: 22.10.4
test-workspace:
devDependencies:
@@ -699,38 +708,92 @@ packages:
cpu: [x64]
os: [win32]
+ '@eslint-community/eslint-utils@4.4.1':
+ resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.19.1':
+ resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.9.1':
+ resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.2.0':
+ resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.17.0':
+ resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.5':
+ resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.2.4':
+ resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.6':
+ resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.1':
+ resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
+ engines: {node: '>=18.18'}
+
'@hutson/parse-repository-url@5.0.0':
resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==}
engines: {node: '>=10.13.0'}
- '@inquirer/core@10.1.1':
- resolution: {integrity: sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==}
+ '@inquirer/core@10.1.2':
+ resolution: {integrity: sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==}
engines: {node: '>=18'}
- '@inquirer/expand@4.0.3':
- resolution: {integrity: sha512-MDszqW4HYBpVMmAoy/FA9laLrgo899UAga0itEjsYrBthKieDZNc0e16gdn7N3cQ0DSf/6zsTBZMuDYDQU4ktg==}
+ '@inquirer/expand@4.0.4':
+ resolution: {integrity: sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
- '@inquirer/figures@1.0.8':
- resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==}
+ '@inquirer/figures@1.0.9':
+ resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==}
engines: {node: '>=18'}
- '@inquirer/input@4.1.0':
- resolution: {integrity: sha512-16B8A9hY741yGXzd8UJ9R8su/fuuyO2e+idd7oVLYjP23wKJ6ILRIIHcnXe8/6AoYgwRS2zp4PNsW/u/iZ24yg==}
+ '@inquirer/input@4.1.1':
+ resolution: {integrity: sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
- '@inquirer/select@4.0.3':
- resolution: {integrity: sha512-OZfKDtDE8+J54JYAFTUGZwvKNfC7W/gFCjDkcsO7HnTH/wljsZo9y/FJquOxMy++DY0+9l9o/MOZ8s5s1j5wmw==}
+ '@inquirer/select@4.0.4':
+ resolution: {integrity: sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
- '@inquirer/type@3.0.1':
- resolution: {integrity: sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==}
+ '@inquirer/type@3.0.2':
+ resolution: {integrity: sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -748,8 +811,8 @@ packages:
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
- '@lerna-lite/cli@3.10.1':
- resolution: {integrity: sha512-T7wFyKpH8YaXADadqYMyIl5n3ZNSGNXxCiy+KodHqLmeUlMzUGb57zL3QvZ2k/yqotJGIhc7m9FGhdwh0kfDgA==}
+ '@lerna-lite/cli@3.11.0':
+ resolution: {integrity: sha512-aSCsqqMB+ITVH0iFrhI4aCBkxj7PhL4DRxiUDeBS8to0pl77Lp8jlEVWeBkzXGnMeoHae61kiAqSSWAG8ZJ6mg==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -773,26 +836,38 @@ packages:
'@lerna-lite/watch':
optional: true
- '@lerna-lite/core@3.10.1':
- resolution: {integrity: sha512-eT9JgikaPrv+EPdSTWTLVOdZt8BeYZODJDi+HAgRxni1t5zHnXAVm4e1KmPsLQ0OBJzYOvPp0oXoI9XRCdr7cQ==}
+ '@lerna-lite/core@3.11.0':
+ resolution: {integrity: sha512-LI9rCqztF/ydox2VWm3MhSwV6mExB3DoEcYEuQfZ9FXoeXX39DaubSL7WaRM0MQZv7EuzQYFgpXzsfQCF0hFLA==}
engines: {node: ^18.0.0 || >=20.0.0}
- '@lerna-lite/init@3.10.1':
- resolution: {integrity: sha512-zK6TRUGFSuNO36berXaauVPH/FHjus6zRFZvO+9WMzmtTOw3MNwtONnp6ONLTbvtK/Of3F98nJ68cEasdaRs+g==}
+ '@lerna-lite/init@3.11.0':
+ resolution: {integrity: sha512-t8MVrJqCO2pz2iTKEViYYj9MmQFHktCHlq6KZjp925U18XWiVPlm84T2lDDps/+BYOoZ08uZtDNON/L3GKRLIA==}
engines: {node: ^18.0.0 || >=20.0.0}
- '@lerna-lite/npmlog@3.10.1':
- resolution: {integrity: sha512-pQl0gwWtPbog3M1pcuJUz29Rv0GCMykZuU1VSNkp3GXuSJpqdDksGEKNEyhzNNH4yNMh52L2y4yfm+jOLQT19Q==}
+ '@lerna-lite/npmlog@3.11.0':
+ resolution: {integrity: sha512-XXHsLIciXE5h30lQgxajHB5iZZx7W1s7igNfLJNO9AMoPgE2xK8apQUwvNybTgY5Dr9wBYJtPVygJwaiNhI9LQ==}
engines: {node: ^18.0.0 || >=20.0.0}
- '@lerna-lite/publish@3.10.1':
- resolution: {integrity: sha512-1wLj6gboT4g6qUoTap36GRrhjJdVY+ir4ofbFlfi/0vf3MS2QfwDhBAU3myJdSRTXpDyXkQ1i7xgmkfqOoD4RA==}
+ '@lerna-lite/publish@3.11.0':
+ resolution: {integrity: sha512-nmLSM6IBqNXuJ5kDHUJ7AWdWKT3N600rZMoSYS8Pd3+WlTkxitE0nf4CAdeJRg9JvSj+ejocnrFZBEvwzBZicQ==}
engines: {node: ^18.0.0 || >=20.0.0}
- '@lerna-lite/version@3.10.1':
- resolution: {integrity: sha512-2a+xLesTQhpglMwxi3xemoMvHV45ZyMYocmkCvivSTv9GAsRuVxRdK6aE1WLbo8NKErztZcfs9kxnr6U+/RrQg==}
+ '@lerna-lite/version@3.11.0':
+ resolution: {integrity: sha512-8GsivndWmYsJRU/bAFGRPLVCwo2uVCFDT3zBelNkZM6YGwFXwuGC4anm94JO7IfCxqddY57L8W7CYSdfbezfjQ==}
engines: {node: ^18.0.0 || >=20.0.0}
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
'@npmcli/agent@2.2.2':
resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -859,12 +934,12 @@ packages:
resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==}
engines: {node: '>= 18'}
- '@octokit/endpoint@10.1.1':
- resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==}
+ '@octokit/endpoint@10.1.2':
+ resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==}
engines: {node: '>= 18'}
- '@octokit/graphql@8.1.1':
- resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==}
+ '@octokit/graphql@8.1.2':
+ resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==}
engines: {node: '>= 18'}
'@octokit/openapi-types@22.2.0':
@@ -891,12 +966,12 @@ packages:
peerDependencies:
'@octokit/core': '>=6'
- '@octokit/request-error@6.1.5':
- resolution: {integrity: sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==}
+ '@octokit/request-error@6.1.6':
+ resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==}
engines: {node: '>= 18'}
- '@octokit/request@9.1.3':
- resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==}
+ '@octokit/request@9.1.4':
+ resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==}
engines: {node: '>= 18'}
'@octokit/rest@21.0.2':
@@ -913,108 +988,108 @@ packages:
'@reactive-vscode/reactivity@0.2.9':
resolution: {integrity: sha512-+6vJwnteCkCC3Ul68pxz3UoEB/M1RRcKUzyBLqNinPX+FOIbh029A+LYwgHzSBI3QQyq3ZXEoKmmlo85unGVNA==}
- '@rollup/rollup-android-arm-eabi@4.28.1':
- resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==}
+ '@rollup/rollup-android-arm-eabi@4.29.1':
+ resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.28.1':
- resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==}
+ '@rollup/rollup-android-arm64@4.29.1':
+ resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.28.1':
- resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==}
+ '@rollup/rollup-darwin-arm64@4.29.1':
+ resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.28.1':
- resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==}
+ '@rollup/rollup-darwin-x64@4.29.1':
+ resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.28.1':
- resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==}
+ '@rollup/rollup-freebsd-arm64@4.29.1':
+ resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.28.1':
- resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==}
+ '@rollup/rollup-freebsd-x64@4.29.1':
+ resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.28.1':
- resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
+ resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.28.1':
- resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==}
+ '@rollup/rollup-linux-arm-musleabihf@4.29.1':
+ resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.28.1':
- resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==}
+ '@rollup/rollup-linux-arm64-gnu@4.29.1':
+ resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.28.1':
- resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==}
+ '@rollup/rollup-linux-arm64-musl@4.29.1':
+ resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loongarch64-gnu@4.28.1':
- resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==}
+ '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
+ resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-powerpc64le-gnu@4.28.1':
- resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
+ resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-gnu@4.28.1':
- resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==}
+ '@rollup/rollup-linux-riscv64-gnu@4.29.1':
+ resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-s390x-gnu@4.28.1':
- resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==}
+ '@rollup/rollup-linux-s390x-gnu@4.29.1':
+ resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.28.1':
- resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==}
+ '@rollup/rollup-linux-x64-gnu@4.29.1':
+ resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.28.1':
- resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==}
+ '@rollup/rollup-linux-x64-musl@4.29.1':
+ resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-win32-arm64-msvc@4.28.1':
- resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==}
+ '@rollup/rollup-win32-arm64-msvc@4.29.1':
+ resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.28.1':
- resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==}
+ '@rollup/rollup-win32-ia32-msvc@4.29.1':
+ resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.28.1':
- resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==}
+ '@rollup/rollup-win32-x64-msvc@4.29.1':
+ resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==}
cpu: [x64]
os: [win32]
@@ -1045,20 +1120,23 @@ packages:
resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==}
engines: {node: ^16.14.0 || >=18.0.0}
- '@tsslint/cli@1.4.6':
- resolution: {integrity: sha512-UIBHL+5ZFiPeLBO3k8g/GhEO+1E134v6pRioS/NuXUc1Lr1jQ9Qs9UwllNI4aT5Hol4KF0Hu1kj+PoJGk8+8vQ==}
+ '@tsslint/cli@1.5.0':
+ resolution: {integrity: sha512-xoglDZRFLiK709b9CawI3zyAzdbQx5D9brglnQdZ0lFNWcfw5196N/DQunAYCJnV5mywgGuPK3wV2bomk0kcCw==}
hasBin: true
peerDependencies:
typescript: '*'
- '@tsslint/config@1.4.6':
- resolution: {integrity: sha512-viB0/KhCnALQFDbYguvIlLgUdo0TH6LoUsafrA0sC/mXuccaNj3Xji/MjzAD83iWODCysB7+gPME0r3NF4CijQ==}
+ '@tsslint/config@1.5.0':
+ resolution: {integrity: sha512-oqHLxOI1lmDxuG3zJuUzmooshD193QzhZiWSMkaTA0bbxkZlUDhoE5E+BRqigUacHqeP2jhQ2jNuYVhF8tEazA==}
- '@tsslint/core@1.4.6':
- resolution: {integrity: sha512-GNB4MEQaAFBA/9wefdqqSqwROM1+UqSB1JlmdAsel3+z10S0jZRDLWzKQRI2jZNE8xPG4sqR+nk9wVir7VE/mQ==}
+ '@tsslint/core@1.5.0':
+ resolution: {integrity: sha512-Lq/DoQKTBS58R7KXhGTBMpd1JdLdBGSf8NkWVr5rDdYAaAfTMCqJElW21c+QjR/FpX9DhaDWA+sPyjDtFkKgtA==}
- '@tsslint/types@1.4.6':
- resolution: {integrity: sha512-l7EwsIl1kaVBjtPQRzeQYfmdHJPxCWCN4i9Y/XKM788xRrIaPdVN1uezZjEPilySrl2OgTv98jwDYgGk2utg3w==}
+ '@tsslint/eslint@1.5.0':
+ resolution: {integrity: sha512-Cu6yyTsEfCgBHq9Q8EkfqEtpK+bXZLaGtOOdbvXO1Ny7itZT6+IWMj1h+SWsBPLUVXNRHWoPcst8iIU4Tc806w==}
+
+ '@tsslint/types@1.5.0':
+ resolution: {integrity: sha512-bPrSXb/mhfm8ApMx7OgxofUGP1CvicmvaxHwJRLVufKVJhN9PaGxxIFLkMPz/MoVhJ+2MS0ZalvF4WRMAVU0vA==}
'@tufjs/canonical-json@2.0.0':
resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
@@ -1071,11 +1149,14 @@ packages:
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
'@types/minimatch@5.1.2':
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
- '@types/node@22.10.2':
- resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==}
+ '@types/node@22.10.4':
+ resolution: {integrity: sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -1092,6 +1173,53 @@ packages:
'@types/vscode@1.96.0':
resolution: {integrity: sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==}
+ '@typescript-eslint/eslint-plugin@8.19.0':
+ resolution: {integrity: sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.8.0'
+
+ '@typescript-eslint/parser@8.19.0':
+ resolution: {integrity: sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.8.0'
+
+ '@typescript-eslint/scope-manager@8.19.0':
+ resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/type-utils@8.19.0':
+ resolution: {integrity: sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.8.0'
+
+ '@typescript-eslint/types@8.19.0':
+ resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.19.0':
+ resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <5.8.0'
+
+ '@typescript-eslint/utils@8.19.0':
+ resolution: {integrity: sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.8.0'
+
+ '@typescript-eslint/visitor-keys@8.19.0':
+ resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@vitest/expect@2.1.8':
resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==}
@@ -1278,11 +1406,21 @@ packages:
resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
acorn@7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
hasBin: true
+ acorn@8.14.0:
+ resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
add-stream@1.0.0:
resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
@@ -1294,8 +1432,11 @@ packages:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
- alien-signals@0.4.9:
- resolution: {integrity: sha512-piRGlMgQ65uRiY06mGU7I432AwPwAGf64TK1RXtM1Px4pPfLMTGI9TmsHTfioW1GukZRsNzkVQ/uHjhhd231Ow==}
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ alien-signals@0.4.12:
+ resolution: {integrity: sha512-Og0PgAihxlp1R22bsoBsyhhMG4+qhU+fkkLPoGBQkYVc3qt9rYnrwYTf+M6kqUqUZpf3rXDnpL90iKa0QcSVVg==}
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
@@ -1373,6 +1514,10 @@ packages:
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
@@ -1419,6 +1564,10 @@ packages:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
character-parser@2.2.0:
resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
@@ -1440,10 +1589,6 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
- ci-info@3.9.0:
- resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
- engines: {node: '>=8'}
-
ci-info@4.1.0:
resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==}
engines: {node: '>=8'}
@@ -1619,6 +1764,9 @@ packages:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
deepmerge-ts@7.1.3:
resolution: {integrity: sha512-qCSH6I0INPxd9Y1VtAiLpnYvz5O//6rCfJXKk0z66Up9/VOSr+1yS8XSKA5IWRxjocFGlzPyaZYe+jxq7OOLtQ==}
engines: {node: '>=16.0.0'}
@@ -1652,8 +1800,8 @@ packages:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
- domutils@3.1.0:
- resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+ domutils@3.2.1:
+ resolution: {integrity: sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw==}
dot-prop@5.3.0:
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
@@ -1722,15 +1870,15 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-module-lexer@1.5.4:
- resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+ es-module-lexer@1.6.0:
+ resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
es-object-atoms@1.0.0:
resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
engines: {node: '>= 0.4'}
- esbuild-visualizer@0.6.0:
- resolution: {integrity: sha512-oNK3JAhC7+re93VTtUdWJKTDVnA2qXPAjCAoaw9OxEFUXztszw3kcaK46u1U790T8FdUBAWv6F9Xt59P8nJCVA==}
+ esbuild-visualizer@0.7.0:
+ resolution: {integrity: sha512-Vz22k+G2WT7GuCo7rbhaQwGbZ26lEhwzsctkEdQlu2SVrshoM4hzQeRpu/3DP596a9+9K2JyYsinuC6AC896Og==}
engines: {node: '>=18'}
hasBin: true
@@ -1752,12 +1900,58 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ eslint-scope@8.2.0:
+ resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.0:
+ resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.17.0:
+ resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.3.0:
+ resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
@@ -1780,6 +1974,25 @@ packages:
exponential-backoff@3.1.1:
resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+ fast-content-type-parse@2.0.0:
+ resolution: {integrity: sha512-fCqg/6Sps8tqk8p+kqyKqYfOF0VjPNYrqpLiqNl0RBKmD80B080AJWVV6EkSkscjToNExcXg1+Mfzftrx6+iSA==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fastq@1.18.0:
+ resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
+
fd-slicer@1.1.0:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
@@ -1795,14 +2008,33 @@ packages:
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
engines: {node: ^12.20 || >= 14.13}
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
find-up@6.3.0:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.2:
+ resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
+
foreground-child@3.3.0:
resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
engines: {node: '>=14'}
@@ -1846,8 +2078,12 @@ packages:
resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
engines: {node: '>=18'}
- get-intrinsic@1.2.6:
- resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
+ get-intrinsic@1.2.7:
+ resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
get-stream@8.0.1:
@@ -1877,6 +2113,10 @@ packages:
github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
@@ -1890,6 +2130,10 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -1897,6 +2141,9 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
handlebars@4.7.8:
resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
engines: {node: '>=0.4.7'}
@@ -1906,6 +2153,10 @@ packages:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
@@ -1962,6 +2213,10 @@ packages:
resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@@ -2000,8 +2255,8 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- is-ci@3.0.1:
- resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ is-ci@4.1.0:
+ resolution: {integrity: sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==}
hasBin: true
is-docker@2.2.1:
@@ -2027,6 +2282,10 @@ packages:
is-lambda@1.0.1:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
is-obj@2.0.0:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
@@ -2090,6 +2349,9 @@ packages:
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
@@ -2097,6 +2359,12 @@ packages:
resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
json-stringify-nice@1.1.4:
resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==}
@@ -2146,6 +2414,9 @@ packages:
keytar@7.9.0:
resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==}
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
@@ -2154,6 +2425,10 @@ packages:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
libnpmaccess@8.0.6:
resolution: {integrity: sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -2180,6 +2455,10 @@ packages:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
locate-path@7.2.0:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2202,6 +2481,9 @@ packages:
lodash.isstring@4.0.1:
resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
lodash.once@4.1.1:
resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
@@ -2234,8 +2516,8 @@ packages:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
- math-intrinsics@1.0.0:
- resolution: {integrity: sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==}
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
mdurl@2.0.0:
@@ -2248,6 +2530,14 @@ packages:
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@@ -2356,6 +2646,9 @@ packages:
napi-build-utils@1.0.2:
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
negotiator@0.6.4:
resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
engines: {node: '>= 0.6'}
@@ -2454,22 +2747,34 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- p-limit@6.1.0:
- resolution: {integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==}
+ p-limit@6.2.0:
+ resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==}
engines: {node: '>=18'}
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
p-locate@6.0.0:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2494,8 +2799,8 @@ packages:
resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==}
engines: {node: '>=12'}
- p-timeout@6.1.3:
- resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==}
+ p-timeout@6.1.4:
+ resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==}
engines: {node: '>=14.16'}
p-try@2.2.0:
@@ -2618,6 +2923,10 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
prettier@2.8.8:
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
engines: {node: '>=10.13.0'}
@@ -2671,10 +2980,17 @@ packages:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
qs@6.13.1:
resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==}
engines: {node: '>=0.6'}
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -2735,11 +3051,18 @@ packages:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
- rollup@4.28.1:
- resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==}
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup@4.29.1:
+ resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
@@ -2911,6 +3234,10 @@ packages:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
strong-log-transformer@2.1.0:
resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==}
engines: {node: '>=4'}
@@ -2920,6 +3247,10 @@ packages:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
tar-fs@2.1.1:
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
@@ -2945,8 +3276,8 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@0.3.1:
- resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
tinyglobby@0.2.10:
resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==}
@@ -2968,6 +3299,10 @@ packages:
resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
engines: {node: '>=14.14'}
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
token-stream@1.0.0:
resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==}
@@ -2975,6 +3310,12 @@ packages:
resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ ts-api-utils@1.4.3:
+ resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+
ts-api-utils@2.0.0:
resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==}
engines: {node: '>=18.12'}
@@ -2995,6 +3336,10 @@ packages:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
@@ -3007,8 +3352,8 @@ packages:
resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
engines: {node: '>=14.16'}
- type-fest@4.30.2:
- resolution: {integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==}
+ type-fest@4.31.0:
+ resolution: {integrity: sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==}
engines: {node: '>=16'}
typed-rest-client@1.8.11:
@@ -3072,6 +3417,9 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
url-join@4.0.1:
resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==}
@@ -3216,8 +3564,8 @@ packages:
vscode-css-languageservice@6.3.2:
resolution: {integrity: sha512-GEpPxrUTAeXWdZWHev1OJU9lz2Q2/PPBxQ2TIRmLGvQiH3WZbqaNoute0n0ewxlgtjzTW3AKZT+NHySk5Rf4Eg==}
- vscode-ext-gen@0.5.3:
- resolution: {integrity: sha512-MNaP3oJe8xsved5gM0QdRT1lXQ9lOhsGUR7Lw9qbd/CwTKQUA6pIIbvTBtMgqzUyZlwAhvHl1n46Ureo4heF3A==}
+ vscode-ext-gen@0.5.5:
+ resolution: {integrity: sha512-wTwcPvGF9xZ0fN7sPgdUPESH+Aw20Tk1vvgbYnKzWT4sFOqRP54qcpxjPUMdDoDGfiVIoXW87TNxn0yKXq3djw==}
hasBin: true
vscode-html-languageservice@5.3.1:
@@ -3318,6 +3666,10 @@ packages:
wide-align@1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
@@ -3363,6 +3715,11 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ yaml@2.7.0:
+ resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
@@ -3377,6 +3734,10 @@ packages:
yazl@2.5.1:
resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==}
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
yocto-queue@1.1.1:
resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
engines: {node: '>=12.20'}
@@ -3663,12 +4024,66 @@ snapshots:
'@esbuild/win32-x64@0.24.2':
optional: true
+ '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)':
+ dependencies:
+ eslint: 9.17.0
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/config-array@0.19.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.5
+ debug: 4.4.0
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/core@0.9.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.2.0':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.0
+ espree: 10.3.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.17.0': {}
+
+ '@eslint/object-schema@2.1.5': {}
+
+ '@eslint/plugin-kit@0.2.4':
+ dependencies:
+ levn: 0.4.1
+
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.6':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.3.1': {}
+
+ '@humanwhocodes/retry@0.4.1': {}
+
'@hutson/parse-repository-url@5.0.0': {}
- '@inquirer/core@10.1.1(@types/node@22.10.2)':
+ '@inquirer/core@10.1.2(@types/node@22.10.4)':
dependencies:
- '@inquirer/figures': 1.0.8
- '@inquirer/type': 3.0.1(@types/node@22.10.2)
+ '@inquirer/figures': 1.0.9
+ '@inquirer/type': 3.0.2(@types/node@22.10.4)
ansi-escapes: 4.3.2
cli-width: 4.1.0
mute-stream: 2.0.0
@@ -3679,33 +4094,33 @@ snapshots:
transitivePeerDependencies:
- '@types/node'
- '@inquirer/expand@4.0.3(@types/node@22.10.2)':
+ '@inquirer/expand@4.0.4(@types/node@22.10.4)':
dependencies:
- '@inquirer/core': 10.1.1(@types/node@22.10.2)
- '@inquirer/type': 3.0.1(@types/node@22.10.2)
- '@types/node': 22.10.2
+ '@inquirer/core': 10.1.2(@types/node@22.10.4)
+ '@inquirer/type': 3.0.2(@types/node@22.10.4)
+ '@types/node': 22.10.4
yoctocolors-cjs: 2.1.2
- '@inquirer/figures@1.0.8': {}
+ '@inquirer/figures@1.0.9': {}
- '@inquirer/input@4.1.0(@types/node@22.10.2)':
+ '@inquirer/input@4.1.1(@types/node@22.10.4)':
dependencies:
- '@inquirer/core': 10.1.1(@types/node@22.10.2)
- '@inquirer/type': 3.0.1(@types/node@22.10.2)
- '@types/node': 22.10.2
+ '@inquirer/core': 10.1.2(@types/node@22.10.4)
+ '@inquirer/type': 3.0.2(@types/node@22.10.4)
+ '@types/node': 22.10.4
- '@inquirer/select@4.0.3(@types/node@22.10.2)':
+ '@inquirer/select@4.0.4(@types/node@22.10.4)':
dependencies:
- '@inquirer/core': 10.1.1(@types/node@22.10.2)
- '@inquirer/figures': 1.0.8
- '@inquirer/type': 3.0.1(@types/node@22.10.2)
- '@types/node': 22.10.2
+ '@inquirer/core': 10.1.2(@types/node@22.10.4)
+ '@inquirer/figures': 1.0.9
+ '@inquirer/type': 3.0.2(@types/node@22.10.4)
+ '@types/node': 22.10.4
ansi-escapes: 4.3.2
yoctocolors-cjs: 2.1.2
- '@inquirer/type@3.0.1(@types/node@22.10.2)':
+ '@inquirer/type@3.0.2(@types/node@22.10.4)':
dependencies:
- '@types/node': 22.10.2
+ '@types/node': 22.10.4
'@isaacs/cliui@8.0.2':
dependencies:
@@ -3722,19 +4137,19 @@ snapshots:
'@jridgewell/sourcemap-codec@1.5.0': {}
- '@lerna-lite/cli@3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@lerna-lite/version@3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)':
+ '@lerna-lite/cli@3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@lerna-lite/version@3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)':
dependencies:
- '@lerna-lite/core': 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/init': 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/npmlog': 3.10.1
+ '@lerna-lite/core': 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/init': 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/npmlog': 3.11.0
dedent: 1.5.3
dotenv: 16.4.7
import-local: 3.2.0
load-json-file: 7.0.1
yargs: 17.7.2
optionalDependencies:
- '@lerna-lite/publish': 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/version': 3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)
+ '@lerna-lite/publish': 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/version': 3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -3742,12 +4157,12 @@ snapshots:
- supports-color
- typescript
- '@lerna-lite/core@3.10.1(@types/node@22.10.2)(typescript@5.7.2)':
+ '@lerna-lite/core@3.11.0(@types/node@22.10.4)(typescript@5.7.2)':
dependencies:
- '@inquirer/expand': 4.0.3(@types/node@22.10.2)
- '@inquirer/input': 4.1.0(@types/node@22.10.2)
- '@inquirer/select': 4.0.3(@types/node@22.10.2)
- '@lerna-lite/npmlog': 3.10.1
+ '@inquirer/expand': 4.0.4(@types/node@22.10.4)
+ '@inquirer/input': 4.1.1(@types/node@22.10.4)
+ '@inquirer/select': 4.0.4(@types/node@22.10.4)
+ '@lerna-lite/npmlog': 3.11.0
'@npmcli/run-script': 8.1.0
clone-deep: 4.0.1
config-chain: 1.1.13
@@ -3756,7 +4171,7 @@ snapshots:
execa: 8.0.1
fs-extra: 11.2.0
glob-parent: 6.0.2
- is-ci: 3.0.1
+ is-ci: 4.1.0
json5: 2.2.3
load-json-file: 7.0.1
minimatch: 9.0.5
@@ -3773,6 +4188,7 @@ snapshots:
write-file-atomic: 5.0.1
write-json-file: 6.0.0
write-package: 7.1.0
+ yaml: 2.7.0
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -3780,9 +4196,9 @@ snapshots:
- supports-color
- typescript
- '@lerna-lite/init@3.10.1(@types/node@22.10.2)(typescript@5.7.2)':
+ '@lerna-lite/init@3.11.0(@types/node@22.10.4)(typescript@5.7.2)':
dependencies:
- '@lerna-lite/core': 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
+ '@lerna-lite/core': 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
fs-extra: 11.2.0
p-map: 7.0.3
write-json-file: 6.0.0
@@ -3793,7 +4209,7 @@ snapshots:
- supports-color
- typescript
- '@lerna-lite/npmlog@3.10.1':
+ '@lerna-lite/npmlog@3.11.0':
dependencies:
aproba: 2.0.0
color-support: 1.1.3
@@ -3804,12 +4220,12 @@ snapshots:
string-width: 7.2.0
wide-align: 1.1.5
- '@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2)':
+ '@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2)':
dependencies:
- '@lerna-lite/cli': 3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@lerna-lite/version@3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/core': 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/npmlog': 3.10.1
- '@lerna-lite/version': 3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)
+ '@lerna-lite/cli': 3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@lerna-lite/version@3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/core': 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/npmlog': 3.11.0
+ '@lerna-lite/version': 3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)
'@npmcli/arborist': 7.5.4
'@npmcli/package-json': 5.2.1
byte-size: 9.0.1
@@ -3843,11 +4259,11 @@ snapshots:
- supports-color
- typescript
- '@lerna-lite/version@3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)':
+ '@lerna-lite/version@3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)':
dependencies:
- '@lerna-lite/cli': 3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@lerna-lite/version@3.10.1(@lerna-lite/publish@3.10.1(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/core': 3.10.1(@types/node@22.10.2)(typescript@5.7.2)
- '@lerna-lite/npmlog': 3.10.1
+ '@lerna-lite/cli': 3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@lerna-lite/version@3.11.0(@lerna-lite/publish@3.11.0(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2))(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/core': 3.11.0(@types/node@22.10.4)(typescript@5.7.2)
+ '@lerna-lite/npmlog': 3.11.0
'@octokit/plugin-enterprise-rest': 6.0.1
'@octokit/rest': 21.0.2
conventional-changelog-angular: 7.0.0
@@ -3867,7 +4283,7 @@ snapshots:
new-github-release-url: 2.0.0
node-fetch: 3.3.2
npm-package-arg: 11.0.3
- p-limit: 6.1.0
+ p-limit: 6.2.0
p-map: 7.0.3
p-pipe: 4.0.0
p-reduce: 3.0.0
@@ -3890,6 +4306,18 @@ snapshots:
- supports-color
- typescript
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.18.0
+
'@npmcli/agent@2.2.2':
dependencies:
agent-base: 7.1.3
@@ -4025,21 +4453,21 @@ snapshots:
'@octokit/core@6.1.2':
dependencies:
'@octokit/auth-token': 5.1.1
- '@octokit/graphql': 8.1.1
- '@octokit/request': 9.1.3
- '@octokit/request-error': 6.1.5
+ '@octokit/graphql': 8.1.2
+ '@octokit/request': 9.1.4
+ '@octokit/request-error': 6.1.6
'@octokit/types': 13.6.2
before-after-hook: 3.0.2
universal-user-agent: 7.0.2
- '@octokit/endpoint@10.1.1':
+ '@octokit/endpoint@10.1.2':
dependencies:
'@octokit/types': 13.6.2
universal-user-agent: 7.0.2
- '@octokit/graphql@8.1.1':
+ '@octokit/graphql@8.1.2':
dependencies:
- '@octokit/request': 9.1.3
+ '@octokit/request': 9.1.4
'@octokit/types': 13.6.2
universal-user-agent: 7.0.2
@@ -4061,15 +4489,16 @@ snapshots:
'@octokit/core': 6.1.2
'@octokit/types': 13.6.2
- '@octokit/request-error@6.1.5':
+ '@octokit/request-error@6.1.6':
dependencies:
'@octokit/types': 13.6.2
- '@octokit/request@9.1.3':
+ '@octokit/request@9.1.4':
dependencies:
- '@octokit/endpoint': 10.1.1
- '@octokit/request-error': 6.1.5
+ '@octokit/endpoint': 10.1.2
+ '@octokit/request-error': 6.1.6
'@octokit/types': 13.6.2
+ fast-content-type-parse: 2.0.0
universal-user-agent: 7.0.2
'@octokit/rest@21.0.2':
@@ -4088,61 +4517,61 @@ snapshots:
'@reactive-vscode/reactivity@0.2.9': {}
- '@rollup/rollup-android-arm-eabi@4.28.1':
+ '@rollup/rollup-android-arm-eabi@4.29.1':
optional: true
- '@rollup/rollup-android-arm64@4.28.1':
+ '@rollup/rollup-android-arm64@4.29.1':
optional: true
- '@rollup/rollup-darwin-arm64@4.28.1':
+ '@rollup/rollup-darwin-arm64@4.29.1':
optional: true
- '@rollup/rollup-darwin-x64@4.28.1':
+ '@rollup/rollup-darwin-x64@4.29.1':
optional: true
- '@rollup/rollup-freebsd-arm64@4.28.1':
+ '@rollup/rollup-freebsd-arm64@4.29.1':
optional: true
- '@rollup/rollup-freebsd-x64@4.28.1':
+ '@rollup/rollup-freebsd-x64@4.29.1':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.28.1':
+ '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.28.1':
+ '@rollup/rollup-linux-arm-musleabihf@4.29.1':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.28.1':
+ '@rollup/rollup-linux-arm64-gnu@4.29.1':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.28.1':
+ '@rollup/rollup-linux-arm64-musl@4.29.1':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.28.1':
+ '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.28.1':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.28.1':
+ '@rollup/rollup-linux-riscv64-gnu@4.29.1':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.28.1':
+ '@rollup/rollup-linux-s390x-gnu@4.29.1':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.28.1':
+ '@rollup/rollup-linux-x64-gnu@4.29.1':
optional: true
- '@rollup/rollup-linux-x64-musl@4.28.1':
+ '@rollup/rollup-linux-x64-musl@4.29.1':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.28.1':
+ '@rollup/rollup-win32-arm64-msvc@4.29.1':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.28.1':
+ '@rollup/rollup-win32-ia32-msvc@4.29.1':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.28.1':
+ '@rollup/rollup-win32-x64-msvc@4.29.1':
optional: true
'@sec-ant/readable-stream@0.4.1': {}
@@ -4179,31 +4608,42 @@ snapshots:
'@sigstore/core': 1.1.0
'@sigstore/protobuf-specs': 0.3.2
- '@tsslint/cli@1.4.6(typescript@5.7.2)':
+ '@tsslint/cli@1.5.0(typescript@5.7.2)':
dependencies:
'@clack/prompts': 0.8.2
- '@tsslint/config': 1.4.6(typescript@5.7.2)
- '@tsslint/core': 1.4.6
+ '@tsslint/config': 1.5.0(typescript@5.7.2)
+ '@tsslint/core': 1.5.0
'@volar/language-core': 2.4.11
'@volar/typescript': 2.4.11
glob: 10.4.5
+ json5: 2.2.3
typescript: 5.7.2
- '@tsslint/config@1.4.6(typescript@5.7.2)':
+ '@tsslint/config@1.5.0(typescript@5.7.2)':
dependencies:
- '@tsslint/types': 1.4.6
+ '@tsslint/types': 1.5.0
ts-api-utils: 2.0.0(typescript@5.7.2)
transitivePeerDependencies:
- typescript
- '@tsslint/core@1.4.6':
+ '@tsslint/core@1.5.0':
dependencies:
- '@tsslint/types': 1.4.6
+ '@tsslint/types': 1.5.0
error-stack-parser: 2.1.4
esbuild: 0.24.2
minimatch: 10.0.1
- '@tsslint/types@1.4.6': {}
+ '@tsslint/eslint@1.5.0(typescript@5.7.2)':
+ dependencies:
+ '@tsslint/config': 1.5.0(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
+ eslint: 9.17.0
+ transitivePeerDependencies:
+ - jiti
+ - supports-color
+ - typescript
+
+ '@tsslint/types@1.5.0': {}
'@tufjs/canonical-json@2.0.0': {}
@@ -4214,9 +4654,11 @@ snapshots:
'@types/estree@1.0.6': {}
+ '@types/json-schema@7.0.15': {}
+
'@types/minimatch@5.1.2': {}
- '@types/node@22.10.2':
+ '@types/node@22.10.4':
dependencies:
undici-types: 6.20.0
@@ -4230,6 +4672,83 @@ snapshots:
'@types/vscode@1.96.0': {}
+ '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
+ '@typescript-eslint/scope-manager': 8.19.0
+ '@typescript-eslint/type-utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
+ '@typescript-eslint/visitor-keys': 8.19.0
+ eslint: 9.17.0
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ ts-api-utils: 1.4.3(typescript@5.7.2)
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.19.0(eslint@9.17.0)(typescript@5.7.2)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.19.0
+ '@typescript-eslint/types': 8.19.0
+ '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
+ '@typescript-eslint/visitor-keys': 8.19.0
+ debug: 4.4.0
+ eslint: 9.17.0
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.19.0':
+ dependencies:
+ '@typescript-eslint/types': 8.19.0
+ '@typescript-eslint/visitor-keys': 8.19.0
+
+ '@typescript-eslint/type-utils@8.19.0(eslint@9.17.0)(typescript@5.7.2)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
+ '@typescript-eslint/utils': 8.19.0(eslint@9.17.0)(typescript@5.7.2)
+ debug: 4.4.0
+ eslint: 9.17.0
+ ts-api-utils: 1.4.3(typescript@5.7.2)
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.19.0': {}
+
+ '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.2)':
+ dependencies:
+ '@typescript-eslint/types': 8.19.0
+ '@typescript-eslint/visitor-keys': 8.19.0
+ debug: 4.4.0
+ fast-glob: 3.3.2
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.6.3
+ ts-api-utils: 1.4.3(typescript@5.7.2)
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.19.0(eslint@9.17.0)(typescript@5.7.2)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0)
+ '@typescript-eslint/scope-manager': 8.19.0
+ '@typescript-eslint/types': 8.19.0
+ '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
+ eslint: 9.17.0
+ typescript: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.19.0':
+ dependencies:
+ '@typescript-eslint/types': 8.19.0
+ eslint-visitor-keys: 4.2.0
+
'@vitest/expect@2.1.8':
dependencies:
'@vitest/spy': 2.1.8
@@ -4237,13 +4756,13 @@ snapshots:
chai: 5.1.2
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.2))':
+ '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.4))':
dependencies:
'@vitest/spy': 2.1.8
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
- vite: 5.4.11(@types/node@22.10.2)
+ vite: 5.4.11(@types/node@22.10.4)
'@vitest/pretty-format@2.1.8':
dependencies:
@@ -4532,8 +5051,14 @@ snapshots:
abbrev@2.0.0: {}
+ acorn-jsx@5.3.2(acorn@8.14.0):
+ dependencies:
+ acorn: 8.14.0
+
acorn@7.4.1: {}
+ acorn@8.14.0: {}
+
add-stream@1.0.0: {}
agent-base@7.1.3: {}
@@ -4543,7 +5068,14 @@ snapshots:
clean-stack: 2.2.0
indent-string: 4.0.0
- alien-signals@0.4.9: {}
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ alien-signals@0.4.12: {}
ansi-escapes@4.3.2:
dependencies:
@@ -4614,6 +5146,10 @@ snapshots:
dependencies:
balanced-match: 1.0.2
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
buffer-crc32@0.2.13: {}
buffer-equal-constant-time@1.0.1: {}
@@ -4651,7 +5187,7 @@ snapshots:
call-bound@1.0.3:
dependencies:
call-bind-apply-helpers: 1.0.1
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
callsites@3.1.0: {}
@@ -4669,6 +5205,11 @@ snapshots:
escape-string-regexp: 1.0.5
supports-color: 5.5.0
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
character-parser@2.2.0:
dependencies:
is-regex: 1.2.1
@@ -4682,14 +5223,14 @@ snapshots:
css-what: 6.1.0
domelementtype: 2.3.0
domhandler: 5.0.3
- domutils: 3.1.0
+ domutils: 3.2.1
cheerio@1.0.0:
dependencies:
cheerio-select: 2.1.0
dom-serializer: 2.0.0
domhandler: 5.0.3
- domutils: 3.1.0
+ domutils: 3.2.1
encoding-sniffer: 0.2.0
htmlparser2: 9.1.0
parse5: 7.2.1
@@ -4703,8 +5244,6 @@ snapshots:
chownr@2.0.0: {}
- ci-info@3.9.0: {}
-
ci-info@4.1.0: {}
clean-stack@2.2.0: {}
@@ -4836,7 +5375,7 @@ snapshots:
boolbase: 1.0.0
css-what: 6.1.0
domhandler: 5.0.3
- domutils: 3.1.0
+ domutils: 3.2.1
nth-check: 2.1.1
css-what@6.1.0: {}
@@ -4867,6 +5406,8 @@ snapshots:
deep-extend@0.6.0:
optional: true
+ deep-is@0.1.4: {}
+
deepmerge-ts@7.1.3: {}
defaults@1.0.4:
@@ -4894,7 +5435,7 @@ snapshots:
dependencies:
domelementtype: 2.3.0
- domutils@3.1.0:
+ domutils@3.2.1:
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
@@ -4964,16 +5505,16 @@ snapshots:
es-errors@1.3.0: {}
- es-module-lexer@1.5.4: {}
+ es-module-lexer@1.6.0: {}
es-object-atoms@1.0.0:
dependencies:
es-errors: 1.3.0
- esbuild-visualizer@0.6.0:
+ esbuild-visualizer@0.7.0:
dependencies:
open: 8.4.2
- picomatch: 2.3.1
+ picomatch: 4.0.2
yargs: 17.7.2
esbuild@0.21.5:
@@ -5034,12 +5575,80 @@ snapshots:
escape-string-regexp@1.0.5: {}
+ escape-string-regexp@4.0.0: {}
+
+ eslint-scope@8.2.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.0: {}
+
+ eslint@9.17.0:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0)
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.19.1
+ '@eslint/core': 0.9.1
+ '@eslint/eslintrc': 3.2.0
+ '@eslint/js': 9.17.0
+ '@eslint/plugin-kit': 0.2.4
+ '@humanfs/node': 0.16.6
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.1
+ '@types/estree': 1.0.6
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.2.0
+ eslint-visitor-keys: 4.2.0
+ espree: 10.3.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.3.0:
+ dependencies:
+ acorn: 8.14.0
+ acorn-jsx: 5.3.2(acorn@8.14.0)
+ eslint-visitor-keys: 4.2.0
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.6
+ esutils@2.0.3: {}
+
eventemitter3@5.0.1: {}
events@3.3.0: {}
@@ -5063,6 +5672,26 @@ snapshots:
exponential-backoff@3.1.1: {}
+ fast-content-type-parse@2.0.0: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fastq@1.18.0:
+ dependencies:
+ reusify: 1.0.4
+
fd-slicer@1.1.0:
dependencies:
pend: 1.2.0
@@ -5076,16 +5705,36 @@ snapshots:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
path-exists: 4.0.0
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
find-up@6.3.0:
dependencies:
locate-path: 7.2.0
path-exists: 5.0.0
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.2
+ keyv: 4.5.4
+
+ flatted@3.3.2: {}
+
foreground-child@3.3.0:
dependencies:
cross-spawn: 7.0.6
@@ -5127,18 +5776,23 @@ snapshots:
get-east-asian-width@1.3.0: {}
- get-intrinsic@1.2.6:
+ get-intrinsic@1.2.7:
dependencies:
call-bind-apply-helpers: 1.0.1
- dunder-proto: 1.0.1
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.0.0
function-bind: 1.1.2
+ get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.2
- math-intrinsics: 1.0.0
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.0.0
get-stream@8.0.1: {}
@@ -5170,6 +5824,10 @@ snapshots:
github-from-package@0.0.0:
optional: true
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
@@ -5192,10 +5850,14 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.0
+ globals@14.0.0: {}
+
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
+ graphemer@1.4.0: {}
+
handlebars@4.7.8:
dependencies:
minimist: 1.2.8
@@ -5207,6 +5869,8 @@ snapshots:
has-flag@3.0.0: {}
+ has-flag@4.0.0: {}
+
has-symbols@1.1.0: {}
has-tostringtag@1.0.2:
@@ -5233,7 +5897,7 @@ snapshots:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
- domutils: 3.1.0
+ domutils: 3.2.1
entities: 4.5.0
http-cache-semantics@4.1.1: {}
@@ -5265,6 +5929,8 @@ snapshots:
dependencies:
minimatch: 9.0.5
+ ignore@5.3.2: {}
+
import-fresh@3.3.0:
dependencies:
parent-module: 1.0.1
@@ -5295,9 +5961,9 @@ snapshots:
is-arrayish@0.2.1: {}
- is-ci@3.0.1:
+ is-ci@4.1.0:
dependencies:
- ci-info: 3.9.0
+ ci-info: 4.1.0
is-docker@2.2.1: {}
@@ -5316,6 +5982,8 @@ snapshots:
is-lambda@1.0.1: {}
+ is-number@7.0.0: {}
+
is-obj@2.0.0: {}
is-plain-obj@4.1.0: {}
@@ -5371,10 +6039,16 @@ snapshots:
jsbn@1.1.0: {}
+ json-buffer@3.0.1: {}
+
json-parse-even-better-errors@2.3.1: {}
json-parse-even-better-errors@3.0.2: {}
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
json-stringify-nice@1.1.4: {}
json-stringify-safe@5.0.1: {}
@@ -5438,10 +6112,19 @@ snapshots:
prebuild-install: 7.1.2
optional: true
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
kind-of@6.0.3: {}
leven@3.1.0: {}
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
libnpmaccess@8.0.6:
dependencies:
npm-package-arg: 11.0.3
@@ -5476,6 +6159,10 @@ snapshots:
dependencies:
p-locate: 4.1.0
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
locate-path@7.2.0:
dependencies:
p-locate: 6.0.0
@@ -5492,6 +6179,8 @@ snapshots:
lodash.isstring@4.0.1: {}
+ lodash.merge@4.6.2: {}
+
lodash.once@4.1.1: {}
loupe@3.1.2: {}
@@ -5536,7 +6225,7 @@ snapshots:
punycode.js: 2.3.1
uc.micro: 2.1.0
- math-intrinsics@1.0.0: {}
+ math-intrinsics@1.1.0: {}
mdurl@2.0.0: {}
@@ -5544,6 +6233,13 @@ snapshots:
merge-stream@2.0.0: {}
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
mime-db@1.52.0: {}
mime-types@2.1.35:
@@ -5636,6 +6332,8 @@ snapshots:
napi-build-utils@1.0.2:
optional: true
+ natural-compare@1.4.0: {}
+
negotiator@0.6.4: {}
neo-async@2.6.2: {}
@@ -5755,15 +6453,28 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
p-limit@4.0.0:
dependencies:
yocto-queue: 1.1.1
- p-limit@6.1.0:
+ p-limit@6.2.0:
dependencies:
yocto-queue: 1.1.1
@@ -5771,6 +6482,10 @@ snapshots:
dependencies:
p-limit: 2.3.0
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
p-locate@6.0.0:
dependencies:
p-limit: 4.0.0
@@ -5786,11 +6501,11 @@ snapshots:
p-queue@8.0.1:
dependencies:
eventemitter3: 5.0.1
- p-timeout: 6.1.3
+ p-timeout: 6.1.4
p-reduce@3.0.0: {}
- p-timeout@6.1.3: {}
+ p-timeout@6.1.4: {}
p-try@2.2.0: {}
@@ -5848,7 +6563,7 @@ snapshots:
dependencies:
'@babel/code-frame': 7.26.2
index-to-position: 0.1.2
- type-fest: 4.30.2
+ type-fest: 4.31.0
parse-path@7.0.0:
dependencies:
@@ -5941,6 +6656,8 @@ snapshots:
tunnel-agent: 0.6.0
optional: true
+ prelude-ls@1.2.1: {}
+
prettier@2.8.8:
optional: true
@@ -5984,10 +6701,14 @@ snapshots:
punycode.js@2.3.1: {}
+ punycode@2.3.1: {}
+
qs@6.13.1:
dependencies:
side-channel: 1.1.0
+ queue-microtask@1.2.3: {}
+
rc@1.2.8:
dependencies:
deep-extend: 0.6.0
@@ -6012,21 +6733,21 @@ snapshots:
dependencies:
find-up: 6.3.0
read-pkg: 8.1.0
- type-fest: 4.30.2
+ type-fest: 4.31.0
read-pkg@8.1.0:
dependencies:
'@types/normalize-package-data': 2.4.4
normalize-package-data: 6.0.2
parse-json: 7.1.1
- type-fest: 4.30.2
+ type-fest: 4.31.0
read-pkg@9.0.1:
dependencies:
'@types/normalize-package-data': 2.4.4
normalize-package-data: 6.0.2
parse-json: 8.1.0
- type-fest: 4.30.2
+ type-fest: 4.31.0
unicorn-magic: 0.1.0
read@1.0.7:
@@ -6054,31 +6775,37 @@ snapshots:
retry@0.12.0: {}
- rollup@4.28.1:
+ reusify@1.0.4: {}
+
+ rollup@4.29.1:
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.28.1
- '@rollup/rollup-android-arm64': 4.28.1
- '@rollup/rollup-darwin-arm64': 4.28.1
- '@rollup/rollup-darwin-x64': 4.28.1
- '@rollup/rollup-freebsd-arm64': 4.28.1
- '@rollup/rollup-freebsd-x64': 4.28.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.28.1
- '@rollup/rollup-linux-arm-musleabihf': 4.28.1
- '@rollup/rollup-linux-arm64-gnu': 4.28.1
- '@rollup/rollup-linux-arm64-musl': 4.28.1
- '@rollup/rollup-linux-loongarch64-gnu': 4.28.1
- '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1
- '@rollup/rollup-linux-riscv64-gnu': 4.28.1
- '@rollup/rollup-linux-s390x-gnu': 4.28.1
- '@rollup/rollup-linux-x64-gnu': 4.28.1
- '@rollup/rollup-linux-x64-musl': 4.28.1
- '@rollup/rollup-win32-arm64-msvc': 4.28.1
- '@rollup/rollup-win32-ia32-msvc': 4.28.1
- '@rollup/rollup-win32-x64-msvc': 4.28.1
+ '@rollup/rollup-android-arm-eabi': 4.29.1
+ '@rollup/rollup-android-arm64': 4.29.1
+ '@rollup/rollup-darwin-arm64': 4.29.1
+ '@rollup/rollup-darwin-x64': 4.29.1
+ '@rollup/rollup-freebsd-arm64': 4.29.1
+ '@rollup/rollup-freebsd-x64': 4.29.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.29.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.29.1
+ '@rollup/rollup-linux-arm64-gnu': 4.29.1
+ '@rollup/rollup-linux-arm64-musl': 4.29.1
+ '@rollup/rollup-linux-loongarch64-gnu': 4.29.1
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.29.1
+ '@rollup/rollup-linux-s390x-gnu': 4.29.1
+ '@rollup/rollup-linux-x64-gnu': 4.29.1
+ '@rollup/rollup-linux-x64-musl': 4.29.1
+ '@rollup/rollup-win32-arm64-msvc': 4.29.1
+ '@rollup/rollup-win32-ia32-msvc': 4.29.1
+ '@rollup/rollup-win32-x64-msvc': 4.29.1
fsevents: 2.3.3
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
safe-buffer@5.2.1: {}
safer-buffer@2.1.2: {}
@@ -6112,14 +6839,14 @@ snapshots:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
object-inspect: 1.13.3
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
object-inspect: 1.13.3
side-channel-map: 1.0.1
@@ -6253,6 +6980,8 @@ snapshots:
strip-json-comments@2.0.1:
optional: true
+ strip-json-comments@3.1.1: {}
+
strong-log-transformer@2.1.0:
dependencies:
duplexer: 0.1.2
@@ -6263,6 +6992,10 @@ snapshots:
dependencies:
has-flag: 3.0.0
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
tar-fs@2.1.1:
dependencies:
chownr: 1.1.4
@@ -6297,7 +7030,7 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@0.3.1: {}
+ tinyexec@0.3.2: {}
tinyglobby@0.2.10:
dependencies:
@@ -6312,10 +7045,18 @@ snapshots:
tmp@0.2.3: {}
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
token-stream@1.0.0: {}
treeverse@3.0.0: {}
+ ts-api-utils@1.4.3(typescript@5.7.2):
+ dependencies:
+ typescript: 5.7.2
+
ts-api-utils@2.0.0(typescript@5.7.2):
dependencies:
typescript: 5.7.2
@@ -6337,13 +7078,17 @@ snapshots:
tunnel@0.0.6: {}
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
type-fest@0.21.3: {}
type-fest@2.19.0: {}
type-fest@3.13.1: {}
- type-fest@4.30.2: {}
+ type-fest@4.31.0: {}
typed-rest-client@1.8.11:
dependencies:
@@ -6388,6 +7133,10 @@ snapshots:
universalify@2.0.1: {}
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
url-join@4.0.1: {}
util-deprecate@1.0.2: {}
@@ -6403,13 +7152,13 @@ snapshots:
validate-npm-package-name@5.0.1: {}
- vite-node@2.1.8(@types/node@22.10.2):
+ vite-node@2.1.8(@types/node@22.10.4):
dependencies:
cac: 6.7.14
debug: 4.4.0
- es-module-lexer: 1.5.4
+ es-module-lexer: 1.6.0
pathe: 1.1.2
- vite: 5.4.11(@types/node@22.10.2)
+ vite: 5.4.11(@types/node@22.10.4)
transitivePeerDependencies:
- '@types/node'
- less
@@ -6421,19 +7170,19 @@ snapshots:
- supports-color
- terser
- vite@5.4.11(@types/node@22.10.2):
+ vite@5.4.11(@types/node@22.10.4):
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
- rollup: 4.28.1
+ rollup: 4.29.1
optionalDependencies:
- '@types/node': 22.10.2
+ '@types/node': 22.10.4
fsevents: 2.3.3
- vitest@2.1.8(@types/node@22.10.2):
+ vitest@2.1.8(@types/node@22.10.4):
dependencies:
'@vitest/expect': 2.1.8
- '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.2))
+ '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.4))
'@vitest/pretty-format': 2.1.8
'@vitest/runner': 2.1.8
'@vitest/snapshot': 2.1.8
@@ -6446,14 +7195,14 @@ snapshots:
pathe: 1.1.2
std-env: 3.8.0
tinybench: 2.9.0
- tinyexec: 0.3.1
+ tinyexec: 0.3.2
tinypool: 1.0.2
tinyrainbow: 1.2.0
- vite: 5.4.11(@types/node@22.10.2)
- vite-node: 2.1.8(@types/node@22.10.2)
+ vite: 5.4.11(@types/node@22.10.4)
+ vite-node: 2.1.8(@types/node@22.10.4)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/node': 22.10.2
+ '@types/node': 22.10.4
transitivePeerDependencies:
- less
- lightningcss
@@ -6537,7 +7286,7 @@ snapshots:
vscode-languageserver-types: 3.17.5
vscode-uri: 3.0.8
- vscode-ext-gen@0.5.3:
+ vscode-ext-gen@0.5.5:
dependencies:
cac: 6.7.14
scule: 1.3.0
@@ -6648,6 +7397,8 @@ snapshots:
dependencies:
string-width: 4.2.3
+ word-wrap@1.2.5: {}
+
wordwrap@1.0.0: {}
wrap-ansi@6.2.0:
@@ -6688,7 +7439,7 @@ snapshots:
deepmerge-ts: 7.1.3
read-pkg: 9.0.1
sort-keys: 5.1.0
- type-fest: 4.30.2
+ type-fest: 4.31.0
write-json-file: 6.0.0
xml2js@0.5.0:
@@ -6702,6 +7453,8 @@ snapshots:
yallist@4.0.0: {}
+ yaml@2.7.0: {}
+
yargs-parser@21.1.1: {}
yargs@17.7.2:
@@ -6723,6 +7476,8 @@ snapshots:
dependencies:
buffer-crc32: 0.2.13
+ yocto-queue@0.1.0: {}
+
yocto-queue@1.1.1: {}
yoctocolors-cjs@2.1.2: {}
diff --git a/test-workspace/component-meta/reference-type-props/component-destructure.vue b/test-workspace/component-meta/reference-type-props/component-destructure.vue
new file mode 100644
index 0000000000..5e73fc9c0e
--- /dev/null
+++ b/test-workspace/component-meta/reference-type-props/component-destructure.vue
@@ -0,0 +1,11 @@
+
+
+
+ {{ text }}
+
diff --git a/test-workspace/tsc/passedFixtures/#3688/tsconfig.json b/test-workspace/tsc/passedFixtures/#3688/tsconfig.json
deleted file mode 100644
index b4f2b10941..0000000000
--- a/test-workspace/tsc/passedFixtures/#3688/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "extends": "../../../tsconfig.base.json",
- "include": [ "**/*" ],
- "vueCompilerOptions": {
- "experimentalResolveStyleCssClasses": "always",
- },
-}
diff --git a/test-workspace/tsc/passedFixtures/#5106/main.vue b/test-workspace/tsc/passedFixtures/#5106/main.vue
new file mode 100644
index 0000000000..e92db26749
--- /dev/null
+++ b/test-workspace/tsc/passedFixtures/#5106/main.vue
@@ -0,0 +1,21 @@
+
+
+
+ {{ exactType($attrs, {} as AttrsExact) }}
+
diff --git a/test-workspace/tsc/passedFixtures/#5106/tsconfig.json b/test-workspace/tsc/passedFixtures/#5106/tsconfig.json
new file mode 100644
index 0000000000..5edd1fb1db
--- /dev/null
+++ b/test-workspace/tsc/passedFixtures/#5106/tsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "include": [ "**/*" ]
+}
\ No newline at end of file
diff --git a/test-workspace/tsc/passedFixtures/#5111/main.vue b/test-workspace/tsc/passedFixtures/#5111/main.vue
new file mode 100644
index 0000000000..edc5f1f287
--- /dev/null
+++ b/test-workspace/tsc/passedFixtures/#5111/main.vue
@@ -0,0 +1,15 @@
+
+
+
+ {{ exactType($attrs.global, {} as string) }}
+
diff --git a/test-workspace/tsc/passedFixtures/#5111/tsconfig.json b/test-workspace/tsc/passedFixtures/#5111/tsconfig.json
new file mode 100644
index 0000000000..5edd1fb1db
--- /dev/null
+++ b/test-workspace/tsc/passedFixtures/#5111/tsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "include": [ "**/*" ]
+}
\ No newline at end of file
diff --git a/test-workspace/tsc/passedFixtures/pug/#5099.vue b/test-workspace/tsc/passedFixtures/pug/#5099.vue
new file mode 100644
index 0000000000..c6ae8233ca
--- /dev/null
+++ b/test-workspace/tsc/passedFixtures/pug/#5099.vue
@@ -0,0 +1,6 @@
+
+div(
+ class="foo"
+ class="bar"
+)
+
diff --git a/test-workspace/tsc/passedFixtures/shared.d.ts b/test-workspace/tsc/passedFixtures/shared.d.ts
index 26abe5a11b..e9865589bf 100644
--- a/test-workspace/tsc/passedFixtures/shared.d.ts
+++ b/test-workspace/tsc/passedFixtures/shared.d.ts
@@ -3,8 +3,3 @@ type IfEquals =
(() => G extends T ? 1 : 2) extends
(() => G extends U ? 1 : 2) ? Y : N;
export declare function exactType(draft: T & IfEquals, expected: U & IfEquals): IfEquals;
-
-// https://stackoverflow.com/a/49928360
-type IfNotAny = 0 extends 1 & T ? never : T;
-type IfNotUndefined = Exclude extends never ? never : T;
-export declare function isNotAnyOrUndefined(value: IfNotAny>): void;
diff --git a/test-workspace/tsc/passedFixtures/#3688/main.vue b/test-workspace/tsc/passedFixtures/vue3/#3688/main.vue
similarity index 65%
rename from test-workspace/tsc/passedFixtures/#3688/main.vue
rename to test-workspace/tsc/passedFixtures/vue3/#3688/main.vue
index 7fbf85ca0a..ebe0fa020a 100644
--- a/test-workspace/tsc/passedFixtures/#3688/main.vue
+++ b/test-workspace/tsc/passedFixtures/vue3/#3688/main.vue
@@ -1,3 +1,5 @@
+
+
{{ () => {
exactType(__VLS_styleScopedClasses, {} as { 'foo'?: boolean });
@@ -5,7 +7,7 @@