feat(devkit): improve project name and root format prompt (#18591)
This commit is contained in:
parent
df7dc03eda
commit
ccd6e04d3f
@ -247,29 +247,22 @@ describe('determineProjectNameAndRootOptions', () => {
|
|||||||
directory: 'shared',
|
directory: 'shared',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(promptSpy).toHaveBeenCalledWith(
|
expect(promptSpy).toHaveBeenCalled();
|
||||||
expect.objectContaining({
|
const promptCallOptions = promptSpy.mock.calls[0][0] as any;
|
||||||
type: 'select',
|
expect(promptCallOptions.choices).toStrictEqual([
|
||||||
name: 'format',
|
{
|
||||||
message:
|
message: `As provided:
|
||||||
'What should be the project name and where should it be generated?',
|
|
||||||
choices: [
|
|
||||||
{
|
|
||||||
message: `Recommended:
|
|
||||||
Name: lib-name
|
Name: lib-name
|
||||||
Root: shared`,
|
Root: shared`,
|
||||||
name: 'as-provided',
|
name: 'lib-name @ shared',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
message: `Legacy:
|
message: `Derived:
|
||||||
Name: shared-lib-name
|
Name: shared-lib-name
|
||||||
Root: shared/lib-name`,
|
Root: shared/lib-name`,
|
||||||
name: 'derived',
|
name: 'shared-lib-name @ shared/lib-name (This was derived from the folder structure. Please provide the exact name and directory in the future)',
|
||||||
},
|
},
|
||||||
],
|
]);
|
||||||
initial: 'as-provided',
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
// restore original interactive mode
|
// restore original interactive mode
|
||||||
restoreOriginalInteractiveMode();
|
restoreOriginalInteractiveMode();
|
||||||
@ -523,29 +516,22 @@ describe('determineProjectNameAndRootOptions', () => {
|
|||||||
directory: 'shared',
|
directory: 'shared',
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(promptSpy).toHaveBeenCalledWith(
|
expect(promptSpy).toHaveBeenCalled();
|
||||||
expect.objectContaining({
|
const promptCallOptions = promptSpy.mock.calls[0][0] as any;
|
||||||
type: 'select',
|
expect(promptCallOptions.choices).toStrictEqual([
|
||||||
name: 'format',
|
{
|
||||||
message:
|
message: `As provided:
|
||||||
'What should be the project name and where should it be generated?',
|
|
||||||
choices: [
|
|
||||||
{
|
|
||||||
message: `Recommended:
|
|
||||||
Name: lib-name
|
Name: lib-name
|
||||||
Root: shared`,
|
Root: shared`,
|
||||||
name: 'as-provided',
|
name: 'lib-name @ shared',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
message: `Legacy:
|
message: `Derived:
|
||||||
Name: shared-lib-name
|
Name: shared-lib-name
|
||||||
Root: libs/shared/lib-name`,
|
Root: libs/shared/lib-name`,
|
||||||
name: 'derived',
|
name: 'shared-lib-name @ libs/shared/lib-name (This was derived from the folder structure. Please provide the exact name and directory in the future)',
|
||||||
},
|
},
|
||||||
],
|
]);
|
||||||
initial: 'as-provided',
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
// restore original interactive mode
|
// restore original interactive mode
|
||||||
restoreOriginalInteractiveMode();
|
restoreOriginalInteractiveMode();
|
||||||
|
|||||||
@ -50,14 +50,8 @@ export type ProjectNameAndRootOptions = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type ProjectNameAndRootFormats = {
|
type ProjectNameAndRootFormats = {
|
||||||
'as-provided': {
|
'as-provided': ProjectNameAndRootOptions;
|
||||||
description: string;
|
derived?: ProjectNameAndRootOptions;
|
||||||
options: ProjectNameAndRootOptions;
|
|
||||||
};
|
|
||||||
derived?: {
|
|
||||||
description: string;
|
|
||||||
options: ProjectNameAndRootOptions;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function determineProjectNameAndRootOptions(
|
export async function determineProjectNameAndRootOptions(
|
||||||
@ -69,7 +63,7 @@ export async function determineProjectNameAndRootOptions(
|
|||||||
const format =
|
const format =
|
||||||
options.projectNameAndRootFormat ?? (await determineFormat(formats));
|
options.projectNameAndRootFormat ?? (await determineFormat(formats));
|
||||||
|
|
||||||
return formats[format].options;
|
return formats[format];
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateName(
|
function validateName(
|
||||||
@ -113,6 +107,15 @@ async function determineFormat(
|
|||||||
return 'derived';
|
return 'derived';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const asProvidedDescription = `As provided:
|
||||||
|
Name: ${formats['as-provided'].projectName}
|
||||||
|
Root: ${formats['as-provided'].projectRoot}`;
|
||||||
|
const asProvidedSelectedValue = `${formats['as-provided'].projectName} @ ${formats['as-provided'].projectRoot}`;
|
||||||
|
const derivedDescription = `Derived:
|
||||||
|
Name: ${formats['derived'].projectName}
|
||||||
|
Root: ${formats['derived'].projectRoot}`;
|
||||||
|
const derivedSelectedValue = `${formats['derived'].projectName} @ ${formats['derived'].projectRoot} (This was derived from the folder structure. Please provide the exact name and directory in the future)`;
|
||||||
|
|
||||||
return await prompt<{ format: ProjectNameAndRootFormat }>({
|
return await prompt<{ format: ProjectNameAndRootFormat }>({
|
||||||
type: 'select',
|
type: 'select',
|
||||||
name: 'format',
|
name: 'format',
|
||||||
@ -120,16 +123,18 @@ async function determineFormat(
|
|||||||
'What should be the project name and where should it be generated?',
|
'What should be the project name and where should it be generated?',
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
message: formats['as-provided'].description,
|
message: asProvidedDescription,
|
||||||
name: 'as-provided',
|
name: asProvidedSelectedValue,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
message: formats['derived'].description,
|
message: derivedDescription,
|
||||||
name: 'derived',
|
name: derivedSelectedValue,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
initial: 'as-provided' as any,
|
initial: 'as-provided' as any,
|
||||||
}).then(({ format }) => format);
|
}).then(({ format }) =>
|
||||||
|
format === asProvidedSelectedValue ? 'as-provided' : 'derived'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getProjectNameAndRootFormats(
|
function getProjectNameAndRootFormats(
|
||||||
@ -150,18 +155,13 @@ function getProjectNameAndRootFormats(
|
|||||||
const nameWithoutScope = asProvidedProjectName.split('/')[1];
|
const nameWithoutScope = asProvidedProjectName.split('/')[1];
|
||||||
return {
|
return {
|
||||||
'as-provided': {
|
'as-provided': {
|
||||||
description: `Recommended:
|
projectName: asProvidedProjectName,
|
||||||
Name: ${asProvidedProjectName}
|
names: {
|
||||||
Root: ${asProvidedProjectDirectory}`,
|
projectSimpleName: nameWithoutScope,
|
||||||
options: {
|
projectFileName: nameWithoutScope,
|
||||||
projectName: asProvidedProjectName,
|
|
||||||
names: {
|
|
||||||
projectSimpleName: nameWithoutScope,
|
|
||||||
projectFileName: nameWithoutScope,
|
|
||||||
},
|
|
||||||
importPath: options.importPath ?? asProvidedProjectName,
|
|
||||||
projectRoot: asProvidedProjectDirectory,
|
|
||||||
},
|
},
|
||||||
|
importPath: options.importPath ?? asProvidedProjectName,
|
||||||
|
projectRoot: asProvidedProjectDirectory,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -219,32 +219,22 @@ function getProjectNameAndRootFormats(
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
'as-provided': {
|
'as-provided': {
|
||||||
description: `Recommended:
|
projectName: asProvidedProjectName,
|
||||||
Name: ${asProvidedProjectName}
|
names: {
|
||||||
Root: ${asProvidedProjectDirectory}`,
|
projectSimpleName: asProvidedProjectName,
|
||||||
options: {
|
projectFileName: asProvidedProjectName,
|
||||||
projectName: asProvidedProjectName,
|
|
||||||
names: {
|
|
||||||
projectSimpleName: asProvidedProjectName,
|
|
||||||
projectFileName: asProvidedProjectName,
|
|
||||||
},
|
|
||||||
importPath: asProvidedImportPath,
|
|
||||||
projectRoot: asProvidedProjectDirectory,
|
|
||||||
},
|
},
|
||||||
|
importPath: asProvidedImportPath,
|
||||||
|
projectRoot: asProvidedProjectDirectory,
|
||||||
},
|
},
|
||||||
derived: {
|
derived: {
|
||||||
description: `Legacy:
|
projectName: derivedProjectName,
|
||||||
Name: ${derivedProjectName}
|
names: {
|
||||||
Root: ${derivedProjectDirectory}`,
|
projectSimpleName: derivedSimpleProjectName,
|
||||||
options: {
|
projectFileName: derivedProjectName,
|
||||||
projectName: derivedProjectName,
|
|
||||||
names: {
|
|
||||||
projectSimpleName: derivedSimpleProjectName,
|
|
||||||
projectFileName: derivedProjectName,
|
|
||||||
},
|
|
||||||
importPath: derivedImportPath,
|
|
||||||
projectRoot: derivedProjectDirectory,
|
|
||||||
},
|
},
|
||||||
|
importPath: derivedImportPath,
|
||||||
|
projectRoot: derivedProjectDirectory,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user