makeScloudRootPubspecContent static method

String makeScloudRootPubspecContent(
  1. String rootPubspecContent,
  2. Iterable<String> includedPackagePaths
)

Creates the scloud root pubspec content based on the source root pubspec content.

Implementation

static String makeScloudRootPubspecContent(
  final String rootPubspecContent,
  final Iterable<String> includedPackagePaths,
) {
  final rootPubspecYaml = yamlDecode(rootPubspecContent);
  if (rootPubspecYaml is! Map) {
    WorkspaceProject._throwWorkspaceException(
      message: 'Invalid workspace root pubspec.yaml, '
          'type: ${rootPubspecYaml.runtimeType}',
    );
  }

  final originalWorkspacePaths = rootPubspecYaml['workspace'];
  if (originalWorkspacePaths is! List) {
    WorkspaceProject._throwWorkspaceException(
      message: 'Invalid `workspace` element in workspace root pubspec.yaml, '
          'type: ${originalWorkspacePaths.runtimeType}',
    );
  }

  final scloudRootPubspec = Map.from(rootPubspecYaml);
  scloudRootPubspec['workspace'] = includedPackagePaths;
  scloudRootPubspec.remove('dependencies');
  scloudRootPubspec.remove('dev_dependencies');
  final environment = scloudRootPubspec['environment'];
  if (environment is Map) {
    final newEnvironment = Map.from(environment);
    newEnvironment.remove('flutter');
    scloudRootPubspec['environment'] = newEnvironment;
  }

  return yamlEncode(scloudRootPubspec);
}