Skip to content

Commit

Permalink
feat(preset-umi): tmpFiles generate configTypes (#499)
Browse files Browse the repository at this point in the history
* feat(core): pluginAPI registerPresets plugin type correction

* fix(preset-umi): dev data.changes ConfigChangeType specify error

* feat(preset-umi): tmpFiles exports plugins types.d.ts remove suffix

* feat(preset-umi): tmpFiles generate configTypes

Co-authored-by: xierenhong <[email protected]>
  • Loading branch information
2 people authored and sorrycc committed Jun 23, 2022
1 parent 136d0f0 commit 6c67758
Show file tree
Hide file tree
Showing 10 changed files with 274 additions and 26 deletions.
19 changes: 19 additions & 0 deletions examples/bigfish/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"importHelpers": true,
"jsx": "react-jsx",
"esModuleInterop": true,
"sourceMap": true,
"baseUrl": ".",
"strict": true,
"paths": {
"@/*": ["*"],
"@@/*": ["./.umi/*"]
},
"allowSyntheticDefaultImports": true
},
"include": ["**/*.tsx", "**/*.ts", ".umirc.ts"]
}
22 changes: 22 additions & 0 deletions packages/preset-umi/compiled/joi2types/index.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions packages/preset-umi/compiled/joi2types/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"joi2types","author":"ycjcl868","license":"ISC"}
13 changes: 12 additions & 1 deletion packages/preset-umi/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"@types/multer": "1.4.7",
"body-parser": "1.19.2",
"ini": "2.0.0",
"joi2types": "1.1.0",
"multer": "1.4.4",
"vite": "2.8.6"
},
Expand All @@ -66,7 +67,17 @@
"body-parser",
"multer",
"@manypkg/get-packages",
"ini"
"ini",
"joi2types"
],
"externals": {
"prettier": "@umijs/utils/compiled/prettier",
"lodash": "@umijs/utils/compiled/lodash",
"glob": "@umijs/utils/compiled/glob"
},
"excludeDtsDeps": [
"@manypkg/get-packages",
"joi2types"
]
}
}
49 changes: 49 additions & 0 deletions packages/preset-umi/src/features/tmpFiles/configTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import joi from '@umijs/core/compiled/@hapi/joi';
// @ts-ignore
import joi2Types from '../../../compiled/joi2types';
import { IApi } from '../../types';

export default (api: IApi) => {
api.onGenerateFiles(async () => {
const { service } = api;

const properties = Object.keys(service.configSchemas)
.map((key) => {
const schemaFn = service.configSchemas[key];
if (typeof schemaFn !== 'function') return;

const schema = schemaFn(joi);

if (!joi.isSchema(schema)) {
return;
}

return {
[key]: schema,
};
})
.reduce(
(acc, curr) => ({
...acc,
...curr,
}),
{},
);

const interfaceName = 'IConfigFromPlugins';

const content = await joi2Types(joi.object(properties), {
interfaceName,
bannerComment: '// Created by Umi Plugin',
}).catch((err: Error) => {
api.logger.error('Config types generated error', err);
return Promise.resolve(`export interface ${interfaceName} {}`);
});

api.writeTmpFile({
noPluginDir: true,
path: 'core/pluginConfig.d.ts',
content,
});
});
};
3 changes: 2 additions & 1 deletion packages/preset-umi/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export type { IApi } from './types';
export type { IApi, IConfig, webpack } from './types';
export default () => {
return {
plugins: [
Expand All @@ -17,6 +17,7 @@ export default () => {
require.resolve('./features/polyfill/polyfill'),
require.resolve('./features/polyfill/publicPathPolyfill'),
require.resolve('./features/tmpFiles/tmpFiles'),
require.resolve('./features/tmpFiles/configTypes'),
require.resolve('./features/transform/transform'),
require.resolve('./features/lowImport/lowImport'),
require.resolve('./features/vite/vite'),
Expand Down
4 changes: 3 additions & 1 deletion packages/preset-umi/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// sort-object-keys
import type { RequestHandler, webpack } from '@umijs/bundler-webpack';
import type WebpackChain from '@umijs/bundler-webpack/compiled/webpack-5-chain';
import type { IConfig } from '@umijs/bundler-webpack/dist/types';
import type {
IAdd,
IEvent,
Expand All @@ -14,7 +15,8 @@ import type { CheerioAPI } from '@umijs/utils/compiled/cheerio';
import type { InlineConfig as ViteInlineConfig } from 'vite';

export { UmiApiRequest, UmiApiResponse } from './features/apiRoute';
export { webpack };
export { webpack, IConfig };

export type IScript =
| Partial<{
async: boolean;
Expand Down
1 change: 1 addition & 0 deletions packages/umi/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// @ts-ignore
export * from '@@/exports';
export type { IApi, webpack } from '@umijs/preset-umi';
export type {
Expand Down
8 changes: 7 additions & 1 deletion packages/umi/src/defineConfig.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
export function defineConfig(config: any): any {
// @ts-ignore
import { IConfigFromPlugins } from '@@/core/pluginConfig';
import type { IConfig } from '@umijs/preset-umi';

type ConfigType = IConfigFromPlugins & IConfig;

export function defineConfig(config: ConfigType): ConfigType {
return config;
}
Loading

0 comments on commit 6c67758

Please sign in to comment.