From 51d79d56669b90906551bd1254e833c8d0c906e9 Mon Sep 17 00:00:00 2001 From: Min Kim Date: Thu, 19 Dec 2024 17:00:21 -0500 Subject: [PATCH] More renaming and reorganizing Signed-off-by: Min Kim --- packages/cli/src/commands/new/new.ts | 10 +- ...mplate.test.ts => executeTemplate.test.ts} | 2 +- ...nPackageTemplate.ts => executeTemplate.ts} | 0 packages/cli/src/lib/new/templateSelector.ts | 96 ++++++++++++++++ packages/cli/src/lib/new/util.ts | 39 ------- .../lib/new/{util.test.ts => utils.test.ts} | 2 +- packages/cli/src/lib/new/utils.ts | 105 +++++------------- 7 files changed, 129 insertions(+), 125 deletions(-) rename packages/cli/src/lib/new/{executePluginPackageTemplate.test.ts => executeTemplate.test.ts} (97%) rename packages/cli/src/lib/new/{executePluginPackageTemplate.ts => executeTemplate.ts} (100%) create mode 100644 packages/cli/src/lib/new/templateSelector.ts delete mode 100644 packages/cli/src/lib/new/util.ts rename packages/cli/src/lib/new/{util.test.ts => utils.test.ts} (97%) diff --git a/packages/cli/src/commands/new/new.ts b/packages/cli/src/commands/new/new.ts index 321c643b45..9760a0ff84 100644 --- a/packages/cli/src/commands/new/new.ts +++ b/packages/cli/src/commands/new/new.ts @@ -28,18 +28,20 @@ import { addCodeownersEntry, getCodeownersFilePath, } from '../../lib/codeowners'; -import { resolvePackageName } from '../../lib/new/util'; -import { promptOptions } from '../../lib/new/prompts'; -import { runAdditionalActions } from '../../lib/new/additionalActions'; -import { executePluginPackageTemplate } from '../../lib/new/executePluginPackageTemplate'; import { readCliConfig, templateSelector, verifyTemplate, +} from '../../lib/new/templateSelector'; +import { promptOptions } from '../../lib/new/prompts'; +import { populateOptions, createDirName, + resolvePackageName, } from '../../lib/new/utils'; +import { runAdditionalActions } from '../../lib/new/additionalActions'; +import { executePluginPackageTemplate } from '../../lib/new/executeTemplate'; export default async () => { const pkgJson = await fs.readJson(paths.resolveTargetRoot('package.json')); diff --git a/packages/cli/src/lib/new/executePluginPackageTemplate.test.ts b/packages/cli/src/lib/new/executeTemplate.test.ts similarity index 97% rename from packages/cli/src/lib/new/executePluginPackageTemplate.test.ts rename to packages/cli/src/lib/new/executeTemplate.test.ts index f43601450a..f1affc5b24 100644 --- a/packages/cli/src/lib/new/executePluginPackageTemplate.test.ts +++ b/packages/cli/src/lib/new/executeTemplate.test.ts @@ -22,7 +22,7 @@ import { mockPaths, } from './testUtils'; import { CreateContext } from './types'; -import { executePluginPackageTemplate } from './executePluginPackageTemplate'; +import { executePluginPackageTemplate } from './executeTemplate'; import { createMockDirectory } from '@backstage/backend-test-utils'; const mockDir = createMockDirectory(); diff --git a/packages/cli/src/lib/new/executePluginPackageTemplate.ts b/packages/cli/src/lib/new/executeTemplate.ts similarity index 100% rename from packages/cli/src/lib/new/executePluginPackageTemplate.ts rename to packages/cli/src/lib/new/executeTemplate.ts diff --git a/packages/cli/src/lib/new/templateSelector.ts b/packages/cli/src/lib/new/templateSelector.ts new file mode 100644 index 0000000000..7fd80655f7 --- /dev/null +++ b/packages/cli/src/lib/new/templateSelector.ts @@ -0,0 +1,96 @@ +/* + * Copyright 2024 The Backstage 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 inquirer from 'inquirer'; +import { dirname } from 'path'; +import { parse } from 'yaml'; +import fs from 'fs-extra'; + +import { paths } from '../paths'; +import { Template, TemplateLocation } from './types'; + +import defaultTemplates from '../../../templates/all-default-templates'; + +export async function readCliConfig( + cliConfig: + | { + defaults?: boolean; + templates?: TemplateLocation[]; + globals?: Record; + } + | undefined, +) { + let templates: TemplateLocation[] = []; + + if (!cliConfig || cliConfig?.defaults) { + templates = defaultTemplates; + } + + const cliTemplates = cliConfig?.templates; + if (cliTemplates?.length) { + cliTemplates.forEach((template: TemplateLocation) => { + templates.push({ + id: template.id, + target: template.target, + }); + }); + } + return { + templates, + globals: { ...cliConfig?.globals }, + }; +} + +export async function templateSelector( + templates: TemplateLocation[], +): Promise { + const answer = await inquirer.prompt<{ name: TemplateLocation }>([ + { + type: 'list', + name: 'name', + message: 'What do you want to create?', + choices: templates.map(template => { + return { + name: template.id, + value: template, + }; + }), + }, + ]); + return answer.name; +} + +export async function verifyTemplate({ + id, + target, +}: TemplateLocation): Promise