Merge pull request #19602 from storybookjs/future/CSF3-vue3

Vue3: Improve CSF3 types
This commit is contained in:
Kasper Peulen 2022-10-25 14:40:09 +02:00 committed by GitHub
commit 7bcf944bbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 496 additions and 21 deletions

View File

@ -49,6 +49,7 @@ module.exports = {
'/examples/*/src/*/*/*.*',
// TODO: Can not get svelte-jester to work, but also not necessary for this test, as it is run by tsc/svelte-check.
'/renderers/svelte/src/public-types.test.ts',
'/renderers/vue3/src/public-types.test.ts',
],
collectCoverage: false,
collectCoverageFrom: [

View File

@ -339,6 +339,9 @@
"window-size": "^1.1.1",
"zx": "^7.0.3"
},
"devDependencies": {
"expect-type": "^0.14.2"
},
"dependenciesMeta": {
"@compodoc/compodoc": {
"built": false

View File

@ -46,7 +46,7 @@
"*.d.ts"
],
"scripts": {
"check": "../../../scripts/node_modules/.bin/tsc --noEmit",
"check": "vue-tsc --noEmit",
"prep": "../../../scripts/prepare/bundle.ts"
},
"dependencies": {
@ -58,12 +58,14 @@
"global": "^4.4.0",
"react": "16.14.0",
"react-dom": "16.14.0",
"ts-dedent": "^2.0.0"
"ts-dedent": "^2.0.0",
"type-fest": "2.19.0"
},
"devDependencies": {
"@digitak/esrun": "^3.2.2",
"typescript": "~4.6.3",
"vue": "^3.0.0"
"vue": "^3.2.41",
"vue-tsc": "^1.0.8"
},
"peerDependencies": {
"@babel/core": "*",

View File

@ -0,0 +1,16 @@
<script setup lang="ts">
defineProps<{ disabled: boolean; label: string }>();
const emit = defineEmits<{
(e: 'myChangeEvent', id: number): void;
(e: 'myClickEvent', id: number): void;
}>();
</script>
<template>
<button :disabled="disabled" @change="emit('myChangeEvent', 0)" @click="emit('myClickEvent', 0)">
{{ label }}
</button>
</template>
<style scoped></style>

View File

@ -0,0 +1,8 @@
<script setup lang="ts">
defineProps<{ decoratorArg: string }>();
</script>
<template>
Decorator: {decoratorArg}
<slot></slot>
</template>

View File

@ -0,0 +1,8 @@
<script setup lang="ts">
defineProps<{ decoratorArg2: string }>();
</script>
<template>
Decorator: {decoratorArg2}
<slot></slot>
</template>

View File

@ -46,7 +46,7 @@ export function decorateStory(
): LegacyStoryFn<VueFramework> {
return decorators.reduce(
(decorated: LegacyStoryFn<VueFramework>, decorator) => (context: StoryContext<VueFramework>) => {
let story: VueFramework['storyResult'];
let story: VueFramework['storyResult'] | undefined;
const decoratedStory: VueFramework['storyResult'] = decorator((update) => {
story = decorated({ ...context, ...sanitizeStoryContextUpdate(update) });

View File

@ -0,0 +1,192 @@
import { satisfies } from '@storybook/core-common';
import { ComponentAnnotations, StoryAnnotations } from '@storybook/csf';
import { expectTypeOf } from 'expect-type';
import { SetOptional } from 'type-fest';
import { ComponentOptions, FunctionalComponent, h } from 'vue';
import Button from './__tests__/Button.vue';
import Decorator2TsVue from './__tests__/Decorator2.vue';
import DecoratorTsVue from './__tests__/Decorator.vue';
import { DecoratorFn, Meta, StoryObj } from './public-types';
import { VueFramework } from './types';
describe('Meta', () => {
test('Generic parameter of Meta can be a component', () => {
const meta: Meta<typeof Button> = {
component: Button,
args: { label: 'good', disabled: false },
};
expectTypeOf(meta).toEqualTypeOf<
ComponentAnnotations<
VueFramework,
{
readonly disabled: boolean;
readonly label: string;
onMyChangeEvent?: (id: number) => any;
onMyClickEvent?: (id: number) => any;
}
>
>();
});
test('Generic parameter of Meta can be the props of the component', () => {
const meta: Meta<{ disabled: boolean; label: string }> = {
component: Button,
args: { label: 'good', disabled: false },
};
expectTypeOf(meta).toEqualTypeOf<
ComponentAnnotations<VueFramework, { disabled: boolean; label: string }>
>();
});
test('Events are inferred from component', () => {
const meta: Meta<typeof Button> = {
component: Button,
args: {
label: 'good',
disabled: false,
onMyChangeEvent: (value) => {
expectTypeOf(value).toEqualTypeOf<number>();
},
},
render: (args) => {
return h(Button, {
...args,
onMyChangeEvent: (value) => {
expectTypeOf(value).toEqualTypeOf<number>();
},
});
},
};
});
});
describe('StoryObj', () => {
type ButtonProps = {
readonly disabled: boolean;
readonly label: string;
onMyChangeEvent?: ((id: number) => any) | undefined;
onMyClickEvent?: ((id: number) => any) | undefined;
};
test('✅ Required args may be provided partial in meta and the story', () => {
const meta = satisfies<Meta<typeof Button>>()({
component: Button,
args: { label: 'good' },
});
type Actual = StoryObj<typeof meta>;
type Expected = StoryAnnotations<VueFramework, ButtonProps, SetOptional<ButtonProps, 'label'>>;
expectTypeOf<Actual>().toEqualTypeOf<Expected>();
});
test('❌ The combined shape of meta args and story args must match the required args.', () => {
{
const meta = satisfies<Meta<typeof Button>>()({ component: Button });
type Expected = StoryAnnotations<VueFramework, ButtonProps, ButtonProps>;
expectTypeOf<StoryObj<typeof meta>>().toEqualTypeOf<Expected>();
}
{
const meta = satisfies<Meta<typeof Button>>()({
component: Button,
args: { label: 'good' },
});
// @ts-expect-error disabled not provided ❌
const Basic: StoryObj<typeof meta> = {};
type Expected = StoryAnnotations<
VueFramework,
ButtonProps,
SetOptional<ButtonProps, 'label'>
>;
expectTypeOf(Basic).toEqualTypeOf<Expected>();
}
{
const meta = satisfies<Meta<{ label: string; disabled: boolean }>>()({ component: Button });
const Basic: StoryObj<typeof meta> = {
// @ts-expect-error disabled not provided ❌
args: { label: 'good' },
};
type Expected = StoryAnnotations<VueFramework, ButtonProps, ButtonProps>;
expectTypeOf(Basic).toEqualTypeOf<Expected>();
}
});
test('Component can be used as generic parameter for StoryObj', () => {
expectTypeOf<StoryObj<typeof Button>>().toEqualTypeOf<
StoryAnnotations<VueFramework, ButtonProps>
>();
});
});
type ThemeData = 'light' | 'dark';
type ComponentProps<Component> = Component extends ComponentOptions<infer P>
? P
: Component extends FunctionalComponent<infer P>
? P
: never;
describe('Story args can be inferred', () => {
test('Correct args are inferred when type is widened for render function', () => {
type Props = ComponentProps<typeof Button> & { theme: ThemeData };
const meta = satisfies<Meta<Props>>()({
component: Button,
args: { disabled: false },
render: (args) => {
return h('div', [h('div', `Use the theme ${args.theme}`), h(Button, args)]);
},
});
const Basic: StoryObj<typeof meta> = { args: { theme: 'light', label: 'good' } };
type Expected = StoryAnnotations<VueFramework, Props, SetOptional<Props, 'disabled'>>;
expectTypeOf(Basic).toEqualTypeOf<Expected>();
});
const withDecorator: DecoratorFn<{ decoratorArg: string }> = (
storyFn,
{ args: { decoratorArg } }
) => h(DecoratorTsVue, { decoratorArg }, h(storyFn()));
test('Correct args are inferred when type is widened for decorators', () => {
type Props = ComponentProps<typeof Button> & { decoratorArg: string };
const meta = satisfies<Meta<Props>>()({
component: Button,
args: { disabled: false },
decorators: [withDecorator],
});
const Basic: StoryObj<typeof meta> = { args: { decoratorArg: 'title', label: 'good' } };
type Expected = StoryAnnotations<VueFramework, Props, SetOptional<Props, 'disabled'>>;
expectTypeOf(Basic).toEqualTypeOf<Expected>();
});
test('Correct args are inferred when type is widened for multiple decorators', () => {
type Props = ComponentProps<typeof Button> & { decoratorArg: string; decoratorArg2: string };
const secondDecorator: DecoratorFn<{ decoratorArg2: string }> = (
storyFn,
{ args: { decoratorArg2 } }
) => h(Decorator2TsVue, { decoratorArg2 }, h(storyFn()));
const meta = satisfies<Meta<Props>>()({
component: Button,
args: { disabled: false },
decorators: [withDecorator, secondDecorator],
});
const Basic: StoryObj<typeof meta> = {
args: { decoratorArg: '', decoratorArg2: '', label: 'good' },
};
type Expected = StoryAnnotations<VueFramework, Props, SetOptional<Props, 'disabled'>>;
expectTypeOf(Basic).toEqualTypeOf<Expected>();
});
});

View File

@ -3,7 +3,12 @@ import type {
ComponentAnnotations,
StoryAnnotations,
AnnotatedStoryFn,
ArgsStoryFn,
ArgsFromMeta,
DecoratorFunction,
} from '@storybook/csf';
import { SetOptional, Simplify } from 'type-fest';
import { ComponentOptions, ConcreteComponent, FunctionalComponent } from 'vue';
import { VueFramework } from './types';
export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf';
@ -13,7 +18,9 @@ export type { Args, ArgTypes, Parameters, StoryContext } from '@storybook/csf';
*
* @see [Default export](https://storybook.js.org/docs/formats/component-story-format/#default-export)
*/
export type Meta<TArgs = Args> = ComponentAnnotations<VueFramework, TArgs>;
export type Meta<CmpOrArgs = Args> = CmpOrArgs extends ComponentOptions<infer Props>
? ComponentAnnotations<VueFramework, unknown extends Props ? CmpOrArgs : Props>
: ComponentAnnotations<VueFramework, CmpOrArgs>;
/**
* Story function that represents a CSFv2 component example.
@ -27,11 +34,35 @@ export type StoryFn<TArgs = Args> = AnnotatedStoryFn<VueFramework, TArgs>;
*
* @see [Named Story exports](https://storybook.js.org/docs/formats/component-story-format/#named-story-exports)
*/
export type StoryObj<TArgs = Args> = StoryAnnotations<VueFramework, TArgs>;
export type StoryObj<MetaOrCmpOrArgs = Args> = MetaOrCmpOrArgs extends {
render?: ArgsStoryFn<VueFramework, any>;
component?: infer Component;
args?: infer DefaultArgs;
}
? Simplify<
ComponentProps<Component> & ArgsFromMeta<VueFramework, MetaOrCmpOrArgs>
> extends infer TArgs
? StoryAnnotations<
VueFramework,
TArgs,
SetOptional<TArgs, Extract<keyof TArgs, keyof DefaultArgs>>
>
: never
: MetaOrCmpOrArgs extends ConcreteComponent<any>
? StoryAnnotations<VueFramework, ComponentProps<MetaOrCmpOrArgs>>
: StoryAnnotations<VueFramework, MetaOrCmpOrArgs>;
type ComponentProps<Component> = Component extends ComponentOptions<infer P>
? P
: Component extends FunctionalComponent<infer P>
? P
: unknown;
/**
* @deprecated Use `StoryObj` instead.
* Story function that represents a CSFv3 component example.
*
* @see [Named Story exports](https://storybook.js.org/docs/formats/component-story-format/#named-story-exports)
*/
export type Story<TArgs = Args> = StoryObj<TArgs>;
export type DecoratorFn<TArgs = Args> = DecoratorFunction<VueFramework, TArgs>;

View File

@ -13,8 +13,7 @@ export const render: ArgsStoryFn<VueFramework> = (props, context) => {
);
}
// TODO remove this hack
return h(Component as Parameters<typeof h>[0], props);
return h(Component, props);
};
let setupFunction = (app: any) => {};
@ -40,7 +39,7 @@ export function renderToDOM(
return h(element);
},
});
storybookApp.config.errorHandler = showException;
storybookApp.config.errorHandler = (e: unknown) => showException(e as Error);
element = storyFn();
if (!element) {
@ -56,9 +55,7 @@ export function renderToDOM(
showMain();
if (map.has(domElement)) {
map.get(domElement).unmount();
}
map.get(domElement)?.unmount();
storybookApp.mount(domElement);
}

View File

@ -1,4 +1,4 @@
import type { StoryContext as StoryContextBase } from '@storybook/csf';
import type { AnyFramework, StoryContext as StoryContextBase } from '@storybook/csf';
import type { ConcreteComponent } from 'vue';
export type { RenderContext } from '@storybook/core-client';
@ -12,7 +12,9 @@ export type StoryFnVueReturnType = ConcreteComponent<any>;
export type StoryContext = StoryContextBase<VueFramework>;
export type VueFramework = {
component: ConcreteComponent<any>;
export interface VueFramework extends AnyFramework {
// We are omitting props, as we don't use it internally, and more importantly, it completely changes the assignability of meta.component.
// Try not omitting, and check the type errros in the test file, if you want to learn more.
component: Omit<ConcreteComponent<this['T']>, 'props'>;
storyResult: StoryFnVueReturnType;
};
}

View File

@ -1,9 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"strict": true,
"resolveJsonModule": true,
"skipLibCheck": true
},
"include": ["src/**/*"],
"exclude": ["src/**/*.test.*"]
"include": ["src/**/*", "src/**/*.vue"],
"exclude": []
}

View File

@ -7540,6 +7540,7 @@ __metadata:
eslint-plugin-storybook: ^0.6.4
esm: ^3.2.25
execa: ^5.0.0
expect-type: ^0.14.2
express: ^4.17.1
fs-extra: ^9.0.1
github-release-from-changelog: ^2.1.1
@ -8044,8 +8045,10 @@ __metadata:
react: 16.14.0
react-dom: 16.14.0
ts-dedent: ^2.0.0
type-fest: 2.19.0
typescript: ~4.6.3
vue: ^3.0.0
vue: ^3.2.41
vue-tsc: ^1.0.8
peerDependencies:
"@babel/core": "*"
babel-loader: ^7.0.0 || ^8.0.0
@ -9704,6 +9707,61 @@ __metadata:
languageName: node
linkType: hard
"@volar/language-core@npm:1.0.8":
version: 1.0.8
resolution: "@volar/language-core@npm:1.0.8"
dependencies:
"@volar/source-map": 1.0.8
"@vue/reactivity": ^3.2.40
muggle-string: ^0.1.0
checksum: e190b36e427075ac26f1b93064dc5982f6cd45c5fde2b32604db329c4ec4352f87a45b88a37fff3b2663d3f4ecb6ba63155d69f45374622492e6b99073c6f2a7
languageName: node
linkType: hard
"@volar/source-map@npm:1.0.8":
version: 1.0.8
resolution: "@volar/source-map@npm:1.0.8"
dependencies:
muggle-string: ^0.1.0
checksum: 65c8566c3de6a5e23a80c2df2f63b1c06d2eb1f5af2a6f20cd1c81029626f230c49e514acb7e8907c22e488b788c2da56ff8f44aa7c0b02be01bae5fa1c85ecb
languageName: node
linkType: hard
"@volar/typescript@npm:1.0.8":
version: 1.0.8
resolution: "@volar/typescript@npm:1.0.8"
dependencies:
"@volar/language-core": 1.0.8
checksum: e955d741116a8cac06cff8dd50bac576f8d65df54734cb62dcc422c4de910e3efd189783423c5005d2b609cc5ae519fa816d6b4cf51b9947e3b6cb87522f9a56
languageName: node
linkType: hard
"@volar/vue-language-core@npm:1.0.8":
version: 1.0.8
resolution: "@volar/vue-language-core@npm:1.0.8"
dependencies:
"@volar/language-core": 1.0.8
"@volar/source-map": 1.0.8
"@vue/compiler-dom": ^3.2.40
"@vue/compiler-sfc": ^3.2.40
"@vue/reactivity": ^3.2.40
"@vue/shared": ^3.2.40
minimatch: ^5.1.0
vue-template-compiler: ^2.7.10
checksum: 9d927267ea3de0f96513c4ff4b09e8dfacca676c3e628fac4fe4327ac497a14850a8a1dcab709ea443eb998269faecf18d38c25124d6c2e70fb5d54574959092
languageName: node
linkType: hard
"@volar/vue-typescript@npm:1.0.8":
version: 1.0.8
resolution: "@volar/vue-typescript@npm:1.0.8"
dependencies:
"@volar/typescript": 1.0.8
"@volar/vue-language-core": 1.0.8
checksum: 7d51290ef6e3e9d3adfc9584296e7264921fda6e7ade4a3964f8679a3d4a4038e8ae05a8532d2640a09ff78a8f4158f6cf6a759a28b716fe58adb20a4ef7a548
languageName: node
linkType: hard
"@vue/compiler-core@npm:3.0.0":
version: 3.0.0
resolution: "@vue/compiler-core@npm:3.0.0"
@ -9729,6 +9787,18 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-core@npm:3.2.41":
version: 3.2.41
resolution: "@vue/compiler-core@npm:3.2.41"
dependencies:
"@babel/parser": ^7.16.4
"@vue/shared": 3.2.41
estree-walker: ^2.0.2
source-map: ^0.6.1
checksum: 9f1023c2f0e8834a8056f5d0a4ac5d751b351d901e8cd03163aca10e317b08c599d326ef5de70a3d2ba1c7ee333e7a2289fc72ce4f6ac0496e750b044689f803
languageName: node
linkType: hard
"@vue/compiler-dom@npm:3.0.0":
version: 3.0.0
resolution: "@vue/compiler-dom@npm:3.0.0"
@ -9749,6 +9819,16 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-dom@npm:3.2.41, @vue/compiler-dom@npm:^3.2.40":
version: 3.2.41
resolution: "@vue/compiler-dom@npm:3.2.41"
dependencies:
"@vue/compiler-core": 3.2.41
"@vue/shared": 3.2.41
checksum: 5dbbd925d4603668f5edcb134c8e8718e22738b7890e1cd6f2e8621aabf42a96df2f851f722f1176ca1744345fc74000c941b7cf4dc323dbbcd70da87ccdf378
languageName: node
linkType: hard
"@vue/compiler-sfc@npm:2.7.10":
version: 2.7.10
resolution: "@vue/compiler-sfc@npm:2.7.10"
@ -9804,6 +9884,24 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-sfc@npm:3.2.41, @vue/compiler-sfc@npm:^3.2.40":
version: 3.2.41
resolution: "@vue/compiler-sfc@npm:3.2.41"
dependencies:
"@babel/parser": ^7.16.4
"@vue/compiler-core": 3.2.41
"@vue/compiler-dom": 3.2.41
"@vue/compiler-ssr": 3.2.41
"@vue/reactivity-transform": 3.2.41
"@vue/shared": 3.2.41
estree-walker: ^2.0.2
magic-string: ^0.25.7
postcss: ^8.1.10
source-map: ^0.6.1
checksum: 327fb7acff404ac007c8eabefe485efb4d070e347bffca2c170232f502021fac01fabeda5f4f91a7b0b175b48cef184e053da9a2ef46b7ab188b8383bef188cb
languageName: node
linkType: hard
"@vue/compiler-ssr@npm:3.0.0":
version: 3.0.0
resolution: "@vue/compiler-ssr@npm:3.0.0"
@ -9824,6 +9922,16 @@ __metadata:
languageName: node
linkType: hard
"@vue/compiler-ssr@npm:3.2.41":
version: 3.2.41
resolution: "@vue/compiler-ssr@npm:3.2.41"
dependencies:
"@vue/compiler-dom": 3.2.41
"@vue/shared": 3.2.41
checksum: 508361b2799097d86abd740548eabf7a20f9a6e1af29cda23dad07ed0b7d72569371492619f80ba2283c3e87c66016985a531cf2110742dabafe5566ca22e6eb
languageName: node
linkType: hard
"@vue/component-compiler-utils@npm:^3.1.0":
version: 3.3.0
resolution: "@vue/component-compiler-utils@npm:3.3.0"
@ -9857,6 +9965,19 @@ __metadata:
languageName: node
linkType: hard
"@vue/reactivity-transform@npm:3.2.41":
version: 3.2.41
resolution: "@vue/reactivity-transform@npm:3.2.41"
dependencies:
"@babel/parser": ^7.16.4
"@vue/compiler-core": 3.2.41
"@vue/shared": 3.2.41
estree-walker: ^2.0.2
magic-string: ^0.25.7
checksum: 8f4350efa220ed3ba8f0c4721a54ae4a2c043a8cff2d8d7227525df59f09145bb76a842f30fd3b0684c083b3e776653b464d737c7c53e43ce0739ac3d958a24a
languageName: node
linkType: hard
"@vue/reactivity@npm:3.0.0":
version: 3.0.0
resolution: "@vue/reactivity@npm:3.0.0"
@ -9875,6 +9996,15 @@ __metadata:
languageName: node
linkType: hard
"@vue/reactivity@npm:3.2.41, @vue/reactivity@npm:^3.2.40":
version: 3.2.41
resolution: "@vue/reactivity@npm:3.2.41"
dependencies:
"@vue/shared": 3.2.41
checksum: f76b7e3f12c441ff018ea1cb8c080365d135d87ddc075a10c87ea440a2c95e5d5ac04bb83dda0ce1f498fb390afff5d3d0c06d0a0fb46ca535df70c66dc3be90
languageName: node
linkType: hard
"@vue/runtime-core@npm:3.0.0":
version: 3.0.0
resolution: "@vue/runtime-core@npm:3.0.0"
@ -9895,6 +10025,16 @@ __metadata:
languageName: node
linkType: hard
"@vue/runtime-core@npm:3.2.41":
version: 3.2.41
resolution: "@vue/runtime-core@npm:3.2.41"
dependencies:
"@vue/reactivity": 3.2.41
"@vue/shared": 3.2.41
checksum: 9c21632c5a3330283649a9175ae03cebe27776a7615d10b9e8f2a98e4002951a9913be7b2810623c06d6481cb56b62e2f5e6f9a5d29d79f75d66ec10b528cdc2
languageName: node
linkType: hard
"@vue/runtime-dom@npm:3.0.0":
version: 3.0.0
resolution: "@vue/runtime-dom@npm:3.0.0"
@ -9917,6 +10057,17 @@ __metadata:
languageName: node
linkType: hard
"@vue/runtime-dom@npm:3.2.41":
version: 3.2.41
resolution: "@vue/runtime-dom@npm:3.2.41"
dependencies:
"@vue/runtime-core": 3.2.41
"@vue/shared": 3.2.41
csstype: ^2.6.8
checksum: 744d50eb98b5a00b31ef6c318a04b9d9786f35d9f255689aba7c15e7be927c14f4d4379b704cde97f0ba467b3f36c46efcc7d0b119c9bde3419a966a21081f78
languageName: node
linkType: hard
"@vue/server-renderer@npm:3.2.40":
version: 3.2.40
resolution: "@vue/server-renderer@npm:3.2.40"
@ -9929,6 +10080,18 @@ __metadata:
languageName: node
linkType: hard
"@vue/server-renderer@npm:3.2.41":
version: 3.2.41
resolution: "@vue/server-renderer@npm:3.2.41"
dependencies:
"@vue/compiler-ssr": 3.2.41
"@vue/shared": 3.2.41
peerDependencies:
vue: 3.2.41
checksum: 3aa31b70e46e0171e2c07562aa09bc1e75ccc6c876c146c3d25b4674d9394de46ba9ff338105ae81d7ff679763c9ecfe48e6d7382d52de163319481132cfc55a
languageName: node
linkType: hard
"@vue/shared@npm:3.0.0":
version: 3.0.0
resolution: "@vue/shared@npm:3.0.0"
@ -9943,6 +10106,13 @@ __metadata:
languageName: node
linkType: hard
"@vue/shared@npm:3.2.41, @vue/shared@npm:^3.2.40":
version: 3.2.41
resolution: "@vue/shared@npm:3.2.41"
checksum: bc46bf36e856a10646639561b346a76594e8a1afa992e3394056a6e0b534c6c71b1330e13960ba9788bb36265a5e761ac4c562daad0d168265d496fc3e7d6575
languageName: node
linkType: hard
"@webassemblyjs/ast@npm:1.11.1":
version: 1.11.1
resolution: "@webassemblyjs/ast@npm:1.11.1"
@ -25506,7 +25676,7 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^5.0.1":
"minimatch@npm:^5.0.1, minimatch@npm:^5.1.0":
version: 5.1.0
resolution: "minimatch@npm:5.1.0"
dependencies:
@ -25856,6 +26026,13 @@ __metadata:
languageName: node
linkType: hard
"muggle-string@npm:^0.1.0":
version: 0.1.0
resolution: "muggle-string@npm:0.1.0"
checksum: b0f3ae892ada01af94c2d75bb70e4489f060e395cf561d35ce380c6e206a1104d31861a4e98a7cee76977708b1ab3efe0df869c6bdd98bbada93aff5d120ef76
languageName: node
linkType: hard
"multicast-dns-service-types@npm:^1.1.0":
version: 1.1.0
resolution: "multicast-dns-service-types@npm:1.1.0"
@ -35506,6 +35683,16 @@ __metadata:
languageName: node
linkType: hard
"vue-template-compiler@npm:^2.7.10":
version: 2.7.13
resolution: "vue-template-compiler@npm:2.7.13"
dependencies:
de-indent: ^1.0.2
he: ^1.2.0
checksum: 6f1b54e74cc5b2a97ccda5335123fc2e9d1b63b934efe67552fbe7a4041ac55fc24b802e5715e7509696c6bcf5d1c6e0c69e4cd0ba85b3e32384df66b452ae82
languageName: node
linkType: hard
"vue-template-es2015-compiler@npm:^1.9.0":
version: 1.9.1
resolution: "vue-template-es2015-compiler@npm:1.9.1"
@ -35513,6 +35700,20 @@ __metadata:
languageName: node
linkType: hard
"vue-tsc@npm:^1.0.8":
version: 1.0.8
resolution: "vue-tsc@npm:1.0.8"
dependencies:
"@volar/vue-language-core": 1.0.8
"@volar/vue-typescript": 1.0.8
peerDependencies:
typescript: "*"
bin:
vue-tsc: bin/vue-tsc.js
checksum: e9ea48ef84249f842e910c8d1dab7e6b681af77714f2c4b5c7cc0810e22bb40d02bcd0701c3e30d8e52d5bd71d2a547204efa53f5caa793c96647a3b6bcf7f90
languageName: node
linkType: hard
"vue@npm:3.0.0":
version: 3.0.0
resolution: "vue@npm:3.0.0"
@ -35534,7 +35735,7 @@ __metadata:
languageName: node
linkType: hard
"vue@npm:^3.0.0, vue@npm:^3.2.33":
"vue@npm:^3.2.33":
version: 3.2.40
resolution: "vue@npm:3.2.40"
dependencies:
@ -35547,6 +35748,19 @@ __metadata:
languageName: node
linkType: hard
"vue@npm:^3.2.41":
version: 3.2.41
resolution: "vue@npm:3.2.41"
dependencies:
"@vue/compiler-dom": 3.2.41
"@vue/compiler-sfc": 3.2.41
"@vue/runtime-dom": 3.2.41
"@vue/server-renderer": 3.2.41
"@vue/shared": 3.2.41
checksum: fac4f47b5ecec8b7b7366eccb6b35866712e11887a12df0f04f989134578de27b69364c1ea1377384b38d048a0c4f604fd096500647f30c0b45cc68cff421d8d
languageName: node
linkType: hard
"w3c-hr-time@npm:^1.0.1, w3c-hr-time@npm:^1.0.2":
version: 1.0.2
resolution: "w3c-hr-time@npm:1.0.2"