59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
/*
|
|
* Copyright 2025 coze-dev Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import type {
|
|
IPlugin,
|
|
IHooks,
|
|
IPromptsHookParams,
|
|
} from 'rush-init-project-plugin';
|
|
import { readFileSync } from 'fs';
|
|
import path from 'path';
|
|
import JSON5 from '../../autoinstallers/plugins/node_modules/json5';
|
|
|
|
const rushJson = JSON5.parse(
|
|
readFileSync(path.resolve(__dirname, '../../../rush.json')).toString('utf-8'),
|
|
);
|
|
|
|
export default class SelectTeamPlugin implements IPlugin {
|
|
apply(hooks: IHooks): void {
|
|
hooks.prompts.tap('SelectTeamPlugin', (prompts: IPromptsHookParams) => {
|
|
// Leave only the prefix team-
|
|
const teamNamePrefix = /^team-/;
|
|
const choices = rushJson.allowedProjectTags
|
|
.filter(teamName => teamNamePrefix.test(teamName))
|
|
.map(teamName => teamName.replace(teamNamePrefix, ''));
|
|
|
|
// Unshift an issue, causing the user to display the issue after selecting a template.
|
|
prompts.promptQueue.unshift({
|
|
type: 'list',
|
|
name: 'team',
|
|
message: 'Select your team',
|
|
choices,
|
|
default: 0, // Default choices [0]
|
|
});
|
|
|
|
const projectFolderPrompt = prompts.promptQueue.find(
|
|
item => item.name === 'projectFolder',
|
|
);
|
|
projectFolderPrompt.default = answers => {
|
|
// Remove the scope from the folder name, such as @code-arch/foo - > foo
|
|
const folderDir = answers.packageName.split('/').slice(-1)[0];
|
|
return `frontend/packages/${answers.team}/${folderDir}`;
|
|
};
|
|
});
|
|
}
|
|
}
|