mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-05 16:11:33 +08:00
Merge pull request #19602 from storybookjs/future/CSF3-vue3
Vue3: Improve CSF3 types
This commit is contained in:
commit
7bcf944bbd
@ -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: [
|
||||
|
@ -339,6 +339,9 @@
|
||||
"window-size": "^1.1.1",
|
||||
"zx": "^7.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"expect-type": "^0.14.2"
|
||||
},
|
||||
"dependenciesMeta": {
|
||||
"@compodoc/compodoc": {
|
||||
"built": false
|
||||
|
@ -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": "*",
|
||||
|
16
code/renderers/vue3/src/__tests__/Button.vue
Normal file
16
code/renderers/vue3/src/__tests__/Button.vue
Normal 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>
|
8
code/renderers/vue3/src/__tests__/Decorator.vue
Normal file
8
code/renderers/vue3/src/__tests__/Decorator.vue
Normal file
@ -0,0 +1,8 @@
|
||||
<script setup lang="ts">
|
||||
defineProps<{ decoratorArg: string }>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
Decorator: {decoratorArg}
|
||||
<slot></slot>
|
||||
</template>
|
8
code/renderers/vue3/src/__tests__/Decorator2.vue
Normal file
8
code/renderers/vue3/src/__tests__/Decorator2.vue
Normal file
@ -0,0 +1,8 @@
|
||||
<script setup lang="ts">
|
||||
defineProps<{ decoratorArg2: string }>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
Decorator: {decoratorArg2}
|
||||
<slot></slot>
|
||||
</template>
|
@ -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) });
|
||||
|
192
code/renderers/vue3/src/public-types.test.ts
Normal file
192
code/renderers/vue3/src/public-types.test.ts
Normal 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>();
|
||||
});
|
||||
});
|
@ -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>;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["src/**/*.test.*"]
|
||||
"include": ["src/**/*", "src/**/*.vue"],
|
||||
"exclude": []
|
||||
}
|
||||
|
220
code/yarn.lock
220
code/yarn.lock
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user