diff --git a/packages/cli/src/Core.ts b/packages/cli/src/Core.ts index 00e2a62f..27ee792a 100644 --- a/packages/cli/src/Core.ts +++ b/packages/cli/src/Core.ts @@ -2,7 +2,7 @@ import path from 'path'; import fs from 'fs-extra'; -import { UserConfig } from './types'; +import { ModuleMainFilePath, UserConfig } from './types'; import { prepareEntryFile, resolveAppPackages } from './utils'; export default class Core { @@ -10,7 +10,7 @@ export default class Core { public options: UserConfig; - public moduleMainFilePath = { + public moduleMainFilePath: ModuleMainFilePath = { componentMap: {}, pluginMap: {}, configMap: {}, @@ -32,9 +32,16 @@ export default class Core { public async init() { this.moduleMainFilePath = resolveAppPackages(this); + if (typeof this.options.onInit === 'function') { + this.moduleMainFilePath = await this.options.onInit(this); + } } public async prepare() { await prepareEntryFile(this); + + if (typeof this.options.onPrepare === 'function') { + this.options.onPrepare(this); + } } } diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index 69df67d0..d989ea29 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -1,3 +1,5 @@ +import type Core from './Core'; + export enum EntryType { CONFIG = 'config', VALUE = 'value', @@ -36,6 +38,14 @@ export interface NpmConfig { client?: 'npm' | 'yarn' | 'pnpm'; } +export interface ModuleMainFilePath { + componentMap: Record; + pluginMap: Record; + configMap: Record; + valueMap: Record; + eventMap: Record; +} + export interface UserConfig { source: string; temp: string; @@ -43,4 +53,6 @@ export interface UserConfig { componentFileAffix: string; cleanTemp: boolean; npmConfig?: NpmConfig; + onInit?: (app: Core) => ModuleMainFilePath | Promise; + onPrepare?: (app: Core) => void; } diff --git a/packages/cli/src/utils/resolveAppPackages.ts b/packages/cli/src/utils/resolveAppPackages.ts index 8347288b..c5996e3f 100644 --- a/packages/cli/src/utils/resolveAppPackages.ts +++ b/packages/cli/src/utils/resolveAppPackages.ts @@ -7,7 +7,7 @@ import fs from 'fs-extra'; import * as recast from 'recast'; import type App from '../Core'; -import { Entry, EntryType, NpmConfig, PackageType } from '../types'; +import { Entry, EntryType, ModuleMainFilePath, NpmConfig, PackageType } from '../types'; interface TypeAssertion { type: string; @@ -20,7 +20,7 @@ interface ParseEntryOption { indexPath: string; } -export const resolveAppPackages = (app: App) => { +export const resolveAppPackages = (app: App): ModuleMainFilePath => { const componentMap: Record = {}; const configMap: Record = {}; const eventMap: Record = {};