selectProjectId static method

Future<void> selectProjectId(
  1. CommandLogger logger,
  2. ProjectLaunch projectSetup
)

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);
}