diff --git a/build-meta.js b/build-meta.js index e2c021bea..227fd0a2e 100644 --- a/build-meta.js +++ b/build-meta.js @@ -1,14 +1,17 @@ const fs = require('fs-extra'); const path = require('path'); -fs.readdirSync(path.resolve(__dirname, './src/components/')).forEach(folder => { - fs.readdirSync(path.resolve(__dirname, './src/components/' + folder)).forEach(file => { - if (file ==='package.json' || file.endsWith('d.ts') || file.endsWith('vue')) { - fs.copySync(path.resolve(__dirname, './src/components/' + folder) + '/' + file, 'dist/' + folder + '/' + file); - } - }) -}); +fs.readdirSync(path.resolve(__dirname, './src/components/'), { withFileTypes: true }) + .filter(dir => dir.isDirectory()) + .forEach(({ name: folderName }) => { + fs.readdirSync(path.resolve(__dirname, './src/components/' + folderName)).forEach(file => { + if (file ==='package.json' || file.endsWith('d.ts') || file.endsWith('vue')) { + fs.copySync(path.resolve(__dirname, './src/components/' + folderName) + '/' + file, 'dist/' + folderName + '/' + file); + } + }) + }); +fs.copySync(path.resolve(__dirname, './src/components/ts-helpers.d.ts'), 'dist/ts-helpers.d.ts'); fs.copySync(path.resolve(__dirname, './package-build.json'), 'dist/package.json'); fs.copySync(path.resolve(__dirname, './README.md'), 'dist/README.md'); -fs.copySync(path.resolve(__dirname, './LICENSE.md'), 'dist/LICENSE.md'); \ No newline at end of file +fs.copySync(path.resolve(__dirname, './LICENSE.md'), 'dist/LICENSE.md'); diff --git a/rollup.config.js b/rollup.config.js index b12099507..312658583 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -140,14 +140,16 @@ function addCore() { } function addSFC() { - fs.readdirSync(path.resolve(__dirname, './src/components/')).forEach(folder => { - fs.readdirSync(path.resolve(__dirname, './src/components/' + folder)).forEach(file => { - let name = file.split(/(.vue)$|(.js)$/)[0].toLowerCase(); - if (/\.vue$/.test(file) && (name === folder)) { - addEntry(folder, file, name); - } + fs.readdirSync(path.resolve(__dirname, './src/components/'), { withFileTypes: true }) + .filter(dir => dir.isDirectory()) + .forEach(({ name: folderName }) => { + fs.readdirSync(path.resolve(__dirname, './src/components/' + folderName)).forEach(file => { + let name = file.split(/(.vue)$|(.js)$/)[0].toLowerCase(); + if (/\.vue$/.test(file) && (name === folderName)) { + addEntry(folderName, file, name); + } + }); }); - }); } function addDirectives() { diff --git a/src/components/ts-helpers.d.ts b/src/components/ts-helpers.d.ts new file mode 100644 index 000000000..eff6d9786 --- /dev/null +++ b/src/components/ts-helpers.d.ts @@ -0,0 +1,28 @@ +import { ComponentCustomProps, VNodeProps, EmitsOptions, AllowedComponentProps, ObjectEmitsOptions } from 'vue'; + +declare type PublicProps = VNodeProps & AllowedComponentProps & ComponentCustomProps; + +declare type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; + +declare type EmitFn = Options extends Array ? (event: V, ...args: any[]) => void : {} extends Options ? (event: string, ...args: any[]) => void : UnionToIntersection<{ + [key in Event]: Options[key] extends ((...args: infer Args) => any) ? (event: key, ...args: Args) => void : (event: key, ...args: any[]) => void; +}[Event]>; + +export class ClassComponent { + $props: Props & PublicProps; + $slots: Slots; + $emit: EmitFn; +} + +export type GlobalComponentConstructor = { + new (): T; +} + +/** + * Custom types + */ +export declare type Booleanish = boolean | 'true' | 'false'; + +export declare type Numberish = number | string; + +export declare type Nullable = T | null | undefined;