Skip to content

Commit 7c9fb5e

Browse files
committed
feat: WIP refactored variable names and moved getRequiredParameters to the plugin
1 parent 7c06de2 commit 7c9fb5e

File tree

8 files changed

+62
-64
lines changed

8 files changed

+62
-64
lines changed

src/orchestrators/destroy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export class DestroyOrchestrator {
4848
uninstallProject.resolveDependenciesAndCalculateEvalOrder(dependencyMap);
4949

5050
const plan = await ctx.subprocess(ProcessName.PLAN, () =>
51-
pluginManager.getPlan(uninstallProject)
51+
pluginManager.plan(uninstallProject)
5252
)
5353
reporter.displayPlan(plan);
5454

src/orchestrators/import.ts

Lines changed: 11 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@ export interface ImportArgs {
1919
}
2020

2121
export interface RequiredParameter {
22-
parameterName: string;
23-
parameterType: string;
24-
plugin: string;
22+
/**
23+
* The name of the parameter.
24+
*/
25+
name: string;
26+
27+
/**
28+
* The type (string, number, boolean) of the parameter. Un-related to type ids
29+
*/
30+
type: string;
2531
}
2632

2733
export class ImportOrchestrator {
@@ -42,56 +48,15 @@ export class ImportOrchestrator {
4248
);
4349
await ImportOrchestrator.validate(typeIds, project, pluginManager, dependencyMap)
4450

45-
const requiredParameters = await ImportOrchestrator.getRequiredParameters(typeIds, pluginManager);
46-
51+
const requiredParameters = await pluginManager.getRequiredParameters(typeIds);
4752
const userSuppliedParameters = await reporter.askRequiredParametersForImport(requiredParameters);
53+
4854
const importResult = await ImportOrchestrator.getImportedConfigs(pluginManager, typeIds, userSuppliedParameters)
4955

5056
ctx.processFinished(ProcessName.IMPORT)
5157
reporter.displayImportResult(importResult);
5258
}
5359

54-
static async getRequiredParameters(
55-
typeIds: string[],
56-
pluginManager: PluginManager
57-
): Promise<RequiredParameters> {
58-
ctx.subprocessStarted(SubProcessName.GET_REQUIRED_PARAMETERS);
59-
60-
const allRequiredParameters = new Map<string, RequiredParameter[]>();
61-
for (const type of typeIds) {
62-
const resourceInfo = await pluginManager.getResourceInfo(type);
63-
64-
const { schema } = resourceInfo;
65-
if (!schema) {
66-
continue;
67-
}
68-
69-
const requiredParameterNames = resourceInfo.import?.requiredParameters;
70-
if (!requiredParameterNames || requiredParameterNames.length === 0) {
71-
continue;
72-
}
73-
74-
requiredParameterNames
75-
.forEach((name) => {
76-
if (!allRequiredParameters.has(type)) {
77-
allRequiredParameters.set(type, []);
78-
}
79-
80-
const schemaInfo = (schema.properties as any)[name];
81-
82-
allRequiredParameters.get(type)!.push({
83-
parameterName: name,
84-
parameterType: schemaInfo.type ?? null,
85-
plugin: resourceInfo.plugin
86-
})
87-
});
88-
}
89-
90-
ctx.subprocessFinished(SubProcessName.GET_REQUIRED_PARAMETERS);
91-
92-
return allRequiredParameters;
93-
}
94-
9560
static async getImportedConfigs(
9661
pluginManager: PluginManager,
9762
typeIds: string[],

src/orchestrators/plan.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class PlanOrchestrator {
5858

5959
private static async plan(project: Project, pluginManager: PluginManager): Promise<Plan> {
6060
ctx.subprocessStarted(SubProcessName.GENERATE_PLAN)
61-
const plan = await pluginManager.getPlan(project);
61+
const plan = await pluginManager.plan(project);
6262
ctx.subprocessFinished(SubProcessName.GENERATE_PLAN)
6363

6464
return plan;

src/plugins/plugin-manager.ts

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import {
88
import { InternalError } from '../common/errors.js';
99
import { Plan, ResourcePlan } from '../entities/plan.js';
1010
import { Project } from '../entities/project.js';
11-
import { ResourceConfig } from '../entities/resource-config.js';
1211
import { SubProcessName, ctx } from '../events/context.js';
12+
import { RequiredParameter, RequiredParameters } from '../orchestrators/import.js';
1313
import { groupBy } from '../utils/index.js';
1414
import { Plugin } from './plugin.js';
1515
import { PluginResolver } from './resolver.js';
@@ -66,7 +66,7 @@ export class PluginManager {
6666

6767
return plugin.getResourceInfo(type);
6868
}
69-
69+
7070
async importResource(config: ResourceJson): Promise<ImportResponseData> {
7171
const pluginName = this.resourceToPluginMapping.get(config.core.type);
7272
if (!pluginName) {
@@ -81,7 +81,7 @@ export class PluginManager {
8181
return plugin.import(config);
8282
}
8383

84-
async getPlan(project: Project): Promise<Plan> {
84+
async plan(project: Project): Promise<Plan> {
8585
const result = new Array<ResourcePlan>();
8686
await Promise.all(
8787
project.evaluationOrder!.map(async (id) => {
@@ -122,6 +122,41 @@ export class PluginManager {
122122
}
123123
}
124124

125+
async getRequiredParameters(
126+
typeIds: string[],
127+
): Promise<RequiredParameters> {
128+
const allRequiredParameters = new Map<string, RequiredParameter[]>();
129+
for (const type of typeIds) {
130+
const resourceInfo = await this.getResourceInfo(type);
131+
132+
const { schema } = resourceInfo;
133+
if (!schema) {
134+
continue;
135+
}
136+
137+
const requiredParameterNames = resourceInfo.import?.requiredParameters;
138+
if (!requiredParameterNames || requiredParameterNames.length === 0) {
139+
continue;
140+
}
141+
142+
requiredParameterNames
143+
.forEach((name) => {
144+
if (!allRequiredParameters.has(type)) {
145+
allRequiredParameters.set(type, []);
146+
}
147+
148+
const schemaInfo = (schema.properties as any)[name];
149+
150+
allRequiredParameters.get(type)!.push({
151+
name,
152+
type: schemaInfo.type ?? null
153+
})
154+
});
155+
}
156+
157+
return allRequiredParameters;
158+
}
159+
125160
private async resolvePlugins(project: Project | null): Promise<Plugin[]> {
126161
const pluginDefinitions: Record<string, string> = {
127162
...DEFAULT_PLUGINS,

src/ui/components/import/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ export function ImportParametersForm(
1515
title: `${resourceName}`,
1616
description: `Specify the following parameters for '${resourceName}'`,
1717
fields: v.map((resourceParameters) => ({
18-
type: resourceParameters.parameterType,
19-
name: `${resourceName}.${resourceParameters.parameterName}`,
20-
label: `'${resourceParameters.parameterName}' parameter value`,
18+
type: resourceParameters.type,
19+
name: `${resourceName}.${resourceParameters.name}`,
20+
label: `'${resourceParameters.name}' parameter value`,
2121
required: true,
2222
})),
2323
})),

src/ui/reporters/debug-reporter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ export class DebugReporter implements Reporter {
4343

4444
for (const parameter of requiredParameter) {
4545
const response = await new Promise((resolve) => {
46-
this.rl.question(`${parameter.parameterName} [${parameter.parameterType}]: `, (answer) => resolve(answer));
46+
this.rl.question(`${parameter.name} [${parameter.type}]: `, (answer) => resolve(answer));
4747
});
4848

4949
if (!parameterInput.has(type)) {
5050
parameterInput.set(type, {});
5151
}
5252

53-
parameterInput.get(type)![parameter.parameterName] = response;
53+
parameterInput.get(type)![parameter.name] = response;
5454
}
5555
}
5656

src/ui/reporters/plain-reporter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ export class PlainReporter implements Reporter {
3838

3939
for (const parameter of requiredParameter) {
4040
const response = await new Promise((resolve) => {
41-
this.rl.question(`${parameter.parameterName} [${parameter.parameterType}]: `, (answer) => resolve(answer));
41+
this.rl.question(`${parameter.name} [${parameter.type}]: `, (answer) => resolve(answer));
4242
});
4343

4444
if (!parameterInput.has(type)) {
4545
parameterInput.set(type, {});
4646
}
4747

48-
parameterInput.get(type)![parameter.parameterName] = response;
48+
parameterInput.get(type)![parameter.name] = response;
4949
}
5050
}
5151

test/orchestrator/import/import.test.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,12 @@ describe('Import orchestrator tests', () => {
4848
expect(requiredParameters.get('mock')?.length).to.eq(2);
4949
expect(requiredParameters.get('mock')).toEqual(expect.arrayContaining([
5050
expect.objectContaining({
51-
parameterName: 'propA',
52-
parameterType: 'string',
53-
plugin: 'default'
51+
parameter: 'propA',
52+
type: 'string',
5453
}),
5554
expect.objectContaining({
56-
parameterName: 'propB',
57-
parameterType: 'number',
58-
plugin: 'default'
55+
parameter: 'propB',
56+
type: 'number',
5957
})
6058
]))
6159

0 commit comments

Comments
 (0)