Skip to content

Commit 7ddc155

Browse files
LeoYuanliujuping
authored andcommitted
feat: add a hook for customizing project builder options
1 parent c4bfeaa commit 7ddc155

4 files changed

Lines changed: 28 additions & 10 deletions

File tree

modules/code-generator/src/generator/ProjectBuilder.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ export interface ProjectBuilderInitOptions {
4040
inStrictMode?: boolean;
4141
/** 一些额外的上下文数据 */
4242
extraContextData?: Record<string, unknown>;
43+
/**
44+
* Hook which is used to customize original options, we can reorder/add/remove plugins/processors
45+
* of the existing solution.
46+
*/
47+
customizeBuilderOptions?(originalOptions: ProjectBuilderInitOptions): ProjectBuilderInitOptions;
4348
}
4449

4550
export class ProjectBuilder implements IProjectBuilder {
@@ -67,16 +72,21 @@ export class ProjectBuilder implements IProjectBuilder {
6772
/** 一些额外的上下文数据 */
6873
readonly extraContextData: IContextData;
6974

70-
constructor({
71-
template,
72-
plugins,
73-
postProcessors,
74-
schemaParser = new SchemaParser(),
75-
projectPreProcessors = [],
76-
projectPostProcessors = [],
77-
inStrictMode = false,
78-
extraContextData = {},
79-
}: ProjectBuilderInitOptions) {
75+
constructor(builderOptions: ProjectBuilderInitOptions) {
76+
let customBuilderOptions = builderOptions;
77+
if (typeof builderOptions.customizeBuilderOptions === 'function') {
78+
customBuilderOptions = builderOptions.customizeBuilderOptions(builderOptions);
79+
}
80+
const {
81+
template,
82+
plugins,
83+
postProcessors,
84+
schemaParser = new SchemaParser(),
85+
projectPreProcessors = [],
86+
projectPostProcessors = [],
87+
inStrictMode = false,
88+
extraContextData = {},
89+
} = customBuilderOptions;
8090
this.template = template;
8191
this.plugins = plugins;
8292
this.postProcessors = postProcessors;

modules/code-generator/src/solutions/icejs.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export default function createIceJsProjectBuilder(
9191
packageJSON: [icejs.plugins.packageJSON()],
9292
},
9393
postProcessors: [prettier()],
94+
customizeBuilderOptions: options?.customizeBuilderOptions,
9495
});
9596
}
9697

modules/code-generator/src/solutions/rax-app.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export default function createRaxProjectBuilder(
7171
packageJSON: [raxApp.plugins.packageJSON(options)],
7272
},
7373
postProcessors: [prettier()],
74+
customizeBuilderOptions: options?.customizeBuilderOptions,
7475
});
7576
}
7677

modules/code-generator/src/types/core.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414

1515
import { IParseResult } from './intermediate';
1616
import { IScopeBindings } from '../utils/ScopeBindings';
17+
import type { ProjectBuilderInitOptions } from '../generator/ProjectBuilder';
1718

1819
export enum FileType {
1920
CSS = 'css',
@@ -167,6 +168,11 @@ export interface IProjectBuilderOptions {
167168
* - expr: 求值的表达式
168169
*/
169170
evalErrorsHandler?: string;
171+
/**
172+
* Hook which is used to customize original options, we can reorder/add/remove plugins/processors
173+
* of the existing solution.
174+
*/
175+
customizeBuilderOptions?(originalOptions: ProjectBuilderInitOptions): ProjectBuilderInitOptions;
170176
}
171177

172178
export interface IProjectBuilder {

0 commit comments

Comments
 (0)