selectProjectId static method
Implementation
static Future<void> selectProjectId(
final CommandLogger logger,
final ProjectLaunch projectSetup,
) async {
const defaultPrefix = 'default: ';
const invalidProjectIdMessage =
'Invalid project ID. Must be 6-32 characters long '
'and contain only lowercase letters, numbers, and hyphens.';
final specifiedProjectId = projectSetup.projectId;
if (specifiedProjectId != null) {
if (isValidProjectIdFormat(specifiedProjectId)) {
projectSetup.projectId = specifiedProjectId;
return;
}
logger.error(invalidProjectIdMessage);
}
final defaultProjectId = _getDefaultProjectId(projectSetup.projectDir);
logger.raw(
r'''
The project id is the unique identifier for the project.
The default API domain will be: <project-id>.api.serverpod.space
''',
style: cli.AnsiStyle.darkGray,
);
do {
final defaultValue =
defaultProjectId != null ? '$defaultPrefix$defaultProjectId' : null;
var projectId = await logger.input(
'Choose project id',
defaultValue: defaultValue,
);
if (projectId.isEmpty) {
logger.error('Project ID is required.');
continue;
}
if (defaultProjectId != null && projectId.startsWith(defaultPrefix)) {
projectId = defaultProjectId;
}
if (isValidProjectIdFormat(projectId)) {
projectSetup.projectId = projectId;
return;
}
logger.error(invalidProjectIdMessage);
} while (true);
}