diff --git a/packages/fes-plugin-access/types.d.ts b/packages/fes-plugin-access/types.d.ts index 551f3bb8..d10c5c98 100644 --- a/packages/fes-plugin-access/types.d.ts +++ b/packages/fes-plugin-access/types.d.ts @@ -1,16 +1,29 @@ import { Router, NavigationGuard } from 'vue-router'; +import { Ref } from 'vue'; -declare module "@fesjs/fes" { +declare module '@fesjs/fes' { interface PluginBuildConfig { - access: { - rules: Record; - }; + access?: + | { + rules: Record; + } + | false; } interface PluginRuntimeConfig { - access: { + access?: { noFoundHandler: (param: { router: Router } & NavigationGuard) => void; unAccessHandler: (param: { router: Router } & NavigationGuard) => void; }; } + + export function access(): { + hasAccess(accessId: string | number): Promise; + isDataReady(): boolean; + setRole(roleId: string | Promise): void; + setAccess(accessIds: Array | Promise>): void; + getAccess(): string[]; + }; + + export function useAccess(accessId: Array): Ref; } diff --git a/packages/fes-plugin-enums/types.d.ts b/packages/fes-plugin-enums/types.d.ts index 8e6328e5..d726c0b5 100644 --- a/packages/fes-plugin-enums/types.d.ts +++ b/packages/fes-plugin-enums/types.d.ts @@ -1,3 +1,4 @@ +import '@fesjs/fes'; interface EnumExtend { key: string; @@ -7,20 +8,18 @@ interface EnumExtend { interface EnumApi { get(name: string, key?: string, extend?: EnumExtend): any; - push(name: string, _enum?: [] | object, option?: {keyName: string; valueName: string}): any; + push(name: string, _enum?: [] | object, option?: { keyName: string; valueName: string }): any; remove(name: string): void; - concat(name: string, _enum: [] | object, option?: {keyName: string; valueName: string, before: boolean, extend: EnumExtend}): any; - convert(name: string, _enum?: [] | object, option?: {keyName: string; valueName: string}): any; + concat(name: string, _enum: [] | object, option?: { keyName: string; valueName: string; before: boolean; extend: EnumExtend }): any; + convert(name: string, _enum?: [] | object, option?: { keyName: string; valueName: string }): any; } -declare module "@fesjs/fes" { +declare module '@fesjs/fes' { interface PluginBuildConfig { - enums: { - [key: string]: [string | number, string | number][] - } + enums?: { + [key: string]: [string | number, string | number][]; + } | false; } export const enums: EnumApi; } - - diff --git a/packages/fes-plugin-icon/package.json b/packages/fes-plugin-icon/package.json index 4100e307..27c9a6da 100644 --- a/packages/fes-plugin-icon/package.json +++ b/packages/fes-plugin-icon/package.json @@ -4,7 +4,8 @@ "description": "@fesjs/plugin-icon", "main": "lib/index.js", "files": [ - "lib" + "lib", + "types.d.ts" ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -31,5 +32,6 @@ }, "dependencies": { "svgo": "^2.3.1" - } + }, + "typings": "./types.d.ts" } diff --git a/packages/fes-plugin-icon/types.d.ts b/packages/fes-plugin-icon/types.d.ts new file mode 100644 index 00000000..f911eb0c --- /dev/null +++ b/packages/fes-plugin-icon/types.d.ts @@ -0,0 +1,7 @@ +import '@fesjs/fes'; + +declare module '@fesjs/fes' { + interface PluginBuildConfig { + icon?: {} | false; + } +} diff --git a/packages/fes-plugin-layout/types.d.ts b/packages/fes-plugin-layout/types.d.ts index 3daece73..472d16e9 100644 --- a/packages/fes-plugin-layout/types.d.ts +++ b/packages/fes-plugin-layout/types.d.ts @@ -1,4 +1,4 @@ -import {Component, VNode, Ref } from 'vue'; +import { Component, VNode, Ref } from 'vue'; import { Router, NavigationGuard } from 'vue-router'; interface Menu { @@ -7,31 +7,33 @@ interface Menu { match: string[]; title: string; icon: string | Component; - children?: Menu[] + children?: Menu[]; } -declare module "@fesjs/fes" { +declare module '@fesjs/fes' { interface PluginBuildConfig { - layout: { - footer: string; - theme: 'dark' | 'light'; - navigation: 'side' | 'top' | 'mixin' | 'left-right'; - title: string; - isFixedHeader: boolean; - isFixedSidebar: boolean; - logo: string; - multiTabs: boolean; - sideWidth: number; - menus: Menu[]; - menuProps: { - expandedKeys: string[]; - defaultExpandAll: boolean; - accordion: boolean; - }; - }; + layout?: + | { + footer: string; + theme: 'dark' | 'light'; + navigation: 'side' | 'top' | 'mixin' | 'left-right'; + title: string; + isFixedHeader: boolean; + isFixedSidebar: boolean; + logo: string; + multiTabs: boolean; + sideWidth: number; + menus: Menu[]; + menuProps: { + expandedKeys: string[]; + defaultExpandAll: boolean; + accordion: boolean; + }; + } + | false; } interface PluginRuntimeConfig { - layout: { + layout?: { footer: string; theme: 'dark' | 'light'; navigation: 'side' | 'top' | 'mixin' | 'left-right'; @@ -41,15 +43,17 @@ declare module "@fesjs/fes" { logo: string; multiTabs: boolean; sideWidth: number; - menus: Menu[] | (()=> (Ref | Menu[])); + menus: Menu[] | (() => Ref | Menu[]); menuProps: { expandedKeys: string[]; defaultExpandAll: boolean; accordion: boolean; }; - renderCustom: ()=> VNode[], + renderCustom: () => VNode[]; noFoundHandler: (param: { router: Router } & NavigationGuard) => void; unAccessHandler: (param: { router: Router } & NavigationGuard) => void; }; } + + export const Page: Component; } diff --git a/packages/fes-plugin-locale/types.d.ts b/packages/fes-plugin-locale/types.d.ts index 6221e3ad..e1f44a05 100644 --- a/packages/fes-plugin-locale/types.d.ts +++ b/packages/fes-plugin-locale/types.d.ts @@ -1,10 +1,23 @@ -declare module "@fesjs/fes" { +import '@fesjs/fes'; + +declare module '@fesjs/fes' { interface PluginBuildConfig { - locale: { - locale: string; - fallbackLocale: string; - baseNavigator: boolean; - legacy: boolean; - }; + locale?: + | { + locale: string; + fallbackLocale: string; + baseNavigator: boolean; + legacy: boolean; + } + | false; } + + // export * from 'vue-i18n'; + + export const locale: { + setLocale({ locale }: { locale: string }): void; + addLocale({ locale, messages }: { locale: string; messages: object }): void; + getAllLocales(): string[]; + messages: Record; + }; } diff --git a/packages/fes-plugin-model/package.json b/packages/fes-plugin-model/package.json index 8f58001a..27e4f150 100644 --- a/packages/fes-plugin-model/package.json +++ b/packages/fes-plugin-model/package.json @@ -4,7 +4,8 @@ "description": "@fesjs/plugin-model", "main": "lib/index.js", "files": [ - "lib" + "lib", + "types.d.ts" ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -32,5 +33,6 @@ "peerDependencies": { "@fesjs/fes": "^3.0.0-beta.0", "vue": "^3.0.5" - } + }, + "typings": "./types.d.ts" } diff --git a/packages/fes-plugin-model/src/index.js b/packages/fes-plugin-model/src/index.js index caddf6e8..648768e3 100644 --- a/packages/fes-plugin-model/src/index.js +++ b/packages/fes-plugin-model/src/index.js @@ -1,5 +1,6 @@ import { readFileSync } from 'fs'; import { join } from 'path'; +import { name } from '../package.json'; const namespace = 'plugin-model'; @@ -70,4 +71,8 @@ export default (api) => { source: absCoreFilePath, }, ]); + + api.addConfigType(() => ({ + source: name, + })); }; diff --git a/packages/fes-plugin-model/types.d.ts b/packages/fes-plugin-model/types.d.ts new file mode 100644 index 00000000..6742606e --- /dev/null +++ b/packages/fes-plugin-model/types.d.ts @@ -0,0 +1,10 @@ +import '@fesjs/fes'; + +declare module '@fesjs/fes' { + + interface PluginBuildConfig { + model?: {} | false; + } + + export function useModel(moduleId: string): any; +} diff --git a/packages/fes-plugin-monaco-editor/types.d.ts b/packages/fes-plugin-monaco-editor/types.d.ts index b3dd44a5..077e14d2 100644 --- a/packages/fes-plugin-monaco-editor/types.d.ts +++ b/packages/fes-plugin-monaco-editor/types.d.ts @@ -1,14 +1,17 @@ +import type { Component } from 'vue'; import type { EditorLanguage } from 'monaco-editor-webpack-plugin/out/languages'; import type { EditorFeature } from 'monaco-editor-webpack-plugin/out/features'; -declare module "@fesjs/fes" { +declare module '@fesjs/fes' { interface PluginBuildConfig { - monacoEditor: { + monacoEditor?: { filename: string; publicPath: string; languages: EditorLanguage[]; features: EditorFeature[]; globalAPI: boolean; - }; + } | false; } + + export const MonacoEditor: Component; } diff --git a/packages/fes-plugin-pinia/package.json b/packages/fes-plugin-pinia/package.json index 9906d11b..564fb490 100644 --- a/packages/fes-plugin-pinia/package.json +++ b/packages/fes-plugin-pinia/package.json @@ -4,7 +4,8 @@ "description": "@fesjs/plugin-pinia", "main": "lib/index.js", "files": [ - "lib" + "lib", + "types.d.ts" ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -33,5 +34,6 @@ "@fesjs/fes": "^3.0.0-beta.0", "pinia": "^2.0.11", "vue": "^3.0.5" - } + }, + "typings": "./types.d.ts" } diff --git a/packages/fes-plugin-pinia/types.d.ts b/packages/fes-plugin-pinia/types.d.ts new file mode 100644 index 00000000..2610282a --- /dev/null +++ b/packages/fes-plugin-pinia/types.d.ts @@ -0,0 +1,9 @@ +import type { Pinia } from 'pinia'; + +declare module '@fesjs/fes' { + interface PluginBuildConfig { + pinia?: {} | false; + } + + export const pinia: Pinia; +} diff --git a/packages/fes-plugin-qiankun/types.d.ts b/packages/fes-plugin-qiankun/types.d.ts index bbcf2912..974ae510 100644 --- a/packages/fes-plugin-qiankun/types.d.ts +++ b/packages/fes-plugin-qiankun/types.d.ts @@ -1,3 +1,4 @@ +import { Component } from 'vue'; import { FrameworkLifeCycles, MicroApp } from 'qiankun'; interface AppOption { @@ -6,16 +7,20 @@ interface AppOption { props: Record; } - -declare module "@fesjs/fes" { +declare module '@fesjs/fes' { interface PluginBuildConfig { - qiankun: { - main: { - apps: AppOption[]; - lifeCycles?: FrameworkLifeCycles; - [key: string]: any; - }; - micro: {} - }; + qiankun?: + | { + main?: { + apps: AppOption[]; + lifeCycles?: FrameworkLifeCycles; + [key: string]: any; + }; + micro?: {}; + } + | false; } + + export const MicroApp: Component; + export const MicroAppWithMemoHistory: Component; } diff --git a/packages/fes-plugin-request/types.d.ts b/packages/fes-plugin-request/types.d.ts index 2e03955a..923153ff 100644 --- a/packages/fes-plugin-request/types.d.ts +++ b/packages/fes-plugin-request/types.d.ts @@ -15,7 +15,7 @@ interface RequestPluginOption { declare module "@fesjs/fes" { interface PluginRuntimeConfig { - request: { + request?: { dataHandler?(data: any, response: AxiosResponse): any; errorHandler?(error: AxiosError | {type: string, msg: string, [key: string]: string}): void; requestInterceptors?: RequestInterceptor[]; diff --git a/packages/fes-plugin-sass/package.json b/packages/fes-plugin-sass/package.json index 191476df..004d6359 100644 --- a/packages/fes-plugin-sass/package.json +++ b/packages/fes-plugin-sass/package.json @@ -4,7 +4,8 @@ "description": "@fesjs/plugin-sass", "main": "lib/index.js", "files": [ - "lib" + "lib", + "types.d.ts" ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -32,5 +33,6 @@ }, "peerDependencies": { "@fesjs/fes": "^3.0.0-beta.0" - } + }, + "typings": "./types.d.ts" } diff --git a/packages/fes-plugin-sass/types.d.ts b/packages/fes-plugin-sass/types.d.ts new file mode 100644 index 00000000..b8f33615 --- /dev/null +++ b/packages/fes-plugin-sass/types.d.ts @@ -0,0 +1,14 @@ +import '@fesjs/fes'; + +declare module '@fesjs/fes' { + interface PluginBuildConfig { + sass?: + | { + implementation: any; + sassOptions: object; + sourceMap: boolean; + webpackImporter: boolean; + } + | false; + } +} diff --git a/packages/fes-plugin-vuex/types.d.ts b/packages/fes-plugin-vuex/types.d.ts index 6ece6132..b7023867 100644 --- a/packages/fes-plugin-vuex/types.d.ts +++ b/packages/fes-plugin-vuex/types.d.ts @@ -1,12 +1,19 @@ - - -declare module "@fesjs/fes" { +import '@fesjs/fes'; +declare module '@fesjs/fes' { interface PluginBuildConfig { - vuex: { - strict: boolean; - devtools: boolean; - } + vuex?: + | { + strict: boolean; + devtools: boolean; + } + | false; } -} + export const MUTATION_TYPES: object; + export const ACTION_TYPES: object; + + export const GETTER_TYPES: object; + + export const store: object; +} \ No newline at end of file diff --git a/packages/fes-plugin-watermark/package.json b/packages/fes-plugin-watermark/package.json index acbcd218..fb0995b0 100644 --- a/packages/fes-plugin-watermark/package.json +++ b/packages/fes-plugin-watermark/package.json @@ -4,7 +4,8 @@ "description": "@fesjs/plugin-watermark", "main": "lib/index.js", "files": [ - "lib" + "lib", + "types.d.ts" ], "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -33,5 +34,6 @@ "peerDependencies": { "@fesjs/fes": "^3.0.0-beta.0", "vue": "^3.0.5" - } + }, + "typings": "./types.d.ts" } diff --git a/packages/fes-plugin-watermark/src/index.js b/packages/fes-plugin-watermark/src/index.js index 02847be7..ce86a4a7 100644 --- a/packages/fes-plugin-watermark/src/index.js +++ b/packages/fes-plugin-watermark/src/index.js @@ -1,4 +1,5 @@ import { join } from 'path'; +import { name } from '../package.json'; const namespace = 'plugin-watermark'; @@ -8,11 +9,11 @@ export default (api) => { config: { schema(joi) { return joi.object({ - disabled: joi.boolean() + disabled: joi.boolean(), }); }, - default: {} - } + default: {}, + }, }); const absoluteFilePath = join(namespace, 'core.js'); @@ -23,23 +24,26 @@ export default (api) => { defineConfig.WATERMARK_DISABLED = memo.watermark.disabled ?? false; return { ...memo, - define: defineConfig + define: defineConfig, }; }); - api.onGenerateFiles(() => { api.copyTmpFiles({ namespace, path: join(__dirname, 'runtime'), - ignore: ['.tpl'] + ignore: ['.tpl'], }); }); api.addPluginExports(() => [ { specifiers: ['createWatermark', 'destroyWatermark'], - source: absoluteFilePath - } + source: absoluteFilePath, + }, ]); + + api.addConfigType(() => ({ + source: name, + })); }; diff --git a/packages/fes-plugin-watermark/types.d.ts b/packages/fes-plugin-watermark/types.d.ts new file mode 100644 index 00000000..50757827 --- /dev/null +++ b/packages/fes-plugin-watermark/types.d.ts @@ -0,0 +1,27 @@ +import '@fesjs/fes'; + +interface WatermarkParam { + content: string; + container: HTMLElement; + width: number; + height: number; + textAlign: 'left' | 'right' | 'center' | 'start' | 'end'; + textBaseline: 'top' | 'hanging' | 'middle' | 'alphabetic' | 'ideographic' | 'bottom'; + fontSize: string; + fontFamily: string; + fillStyle: string; + rotate: number; + zIndex: number; + timestamp: string; +} + +declare module '@fesjs/fes' { + interface PluginBuildConfig { + watermark?: { + disable: boolean; + } | false; + } + + export function createWatermark(param: WatermarkParam): void; + export function destroyWatermark(): void; +} diff --git a/packages/fes-plugin-windicss/types.d.ts b/packages/fes-plugin-windicss/types.d.ts index 12ae8e4b..39a5560a 100644 --- a/packages/fes-plugin-windicss/types.d.ts +++ b/packages/fes-plugin-windicss/types.d.ts @@ -1,9 +1,11 @@ import type { Config } from 'windicss/types/interfaces'; -declare module "@fesjs/fes" { +declare module '@fesjs/fes' { interface PluginBuildConfig { - windicss: { - config: Config - } + windicss?: + | { + config: Config; + } + | false; } } diff --git a/packages/fes-template/.fes.js b/packages/fes-template/.fes.js index 16c808f3..ffb773b6 100644 --- a/packages/fes-template/.fes.js +++ b/packages/fes-template/.fes.js @@ -1,6 +1,5 @@ -// .fes.js 只负责管理编译时配置,只能使用plain Object - -export default { +import { defineBuildConfig } from '@fesjs/fes' +export default defineBuildConfig({ // exportStatic: {}, define: { __DEV__: false @@ -98,4 +97,4 @@ export default { presets: [ require.resolve('../fes-builder-webpack/lib'), ] -}; +}); diff --git a/packages/fes-template/tsconfig.json b/packages/fes-template/tsconfig.json index b7fce5b7..f8e8cc7a 100644 --- a/packages/fes-template/tsconfig.json +++ b/packages/fes-template/tsconfig.json @@ -3,7 +3,10 @@ "outDir": "build/dist", "module": "esnext", "target": "esnext", - "lib": ["esnext", "dom"], + "lib": [ + "esnext", + "dom" + ], "sourceMap": true, "baseUrl": ".", "jsx": "preserve", @@ -14,25 +17,31 @@ "suppressImplicitAnyIndexErrors": true, "noUnusedLocals": true, "allowJs": true, - "skipLibCheck": true, "experimentalDecorators": true, "strict": true, "paths": { - "@/*": ["./src/*"], - "@@/*": ["./src/.fes/*"] + "@/*": [ + "./src/*" + ], + "@@/*": [ + "./src/.fes/*" + ] } }, "include": [ + "*.js", + ".fes.js", "src/**/*", - "tests/**/*", - "test/**/*", - "__test__/**/*", "typings/**/*", "config/**/*", - ".eslintrc.js", - ".stylelintrc.js", - ".prettierrc.js", "src/.fes/configType.d.ts" ], - "exclude": ["node_modules", "build", "dist", "scripts", "src/.fes/*", "webpack", "jest"] -} + "exclude": [ + "build", + "dist", + "scripts", + "webpack", + "jest", + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/fes/types.d.ts b/packages/fes/types.d.ts index 37d1b4d3..214915a5 100644 --- a/packages/fes/types.d.ts +++ b/packages/fes/types.d.ts @@ -15,7 +15,7 @@ export interface PluginBuildConfig {} export declare function defineRouteMeta(routeMeta: RouteMeta): RouteMeta; -export function defineBuildConfig(config: PluginBuildConfig ): PluginBuildConfig; +export declare function defineBuildConfig(config: PluginBuildConfig ): PluginBuildConfig; -export function defineRuntimeConfig(config: PluginRuntimeConfig): PluginRuntimeConfig; +export declare function defineRuntimeConfig(config: PluginRuntimeConfig): PluginRuntimeConfig;