supadartRun function

List<GeneratedFile> supadartRun(
  1. DatabaseSwagger swagger,
  2. Storage storageList,
  3. bool isDart,
  4. bool isSeparated,
  5. YamlMap? mappings,
  6. List<String> exclude,
  7. bool isPostGIS,
  8. bool jsonbToDynamic, {
  9. Map<String, JsonbModelConfig>? jsonbModels,
})

Implementation

List<GeneratedFile> supadartRun(
    DatabaseSwagger swagger,
    Storage storageList,
    bool isDart,
    bool isSeparated,
    YamlMap? mappings,
    List<String> exclude,
    bool isPostGIS,
    bool jsonbToDynamic,
    {Map<String, JsonbModelConfig>? jsonbModels}) {
  _checkNameClashes(swagger, mappings);

  // Collect unique JSONB model imports
  Set<String> jsonbImports = {};
  if (jsonbModels != null) {
    for (var config in jsonbModels.values) {
      jsonbImports.add(config.importPath);
    }
  }

  final dartClasses =
      generateDartClasses(swagger, mappings, exclude, jsonbToDynamic);

  final clientExtension = generateClientExtension(swagger);
  final storageClientExtension = generateStorageClientExtension(storageList);
  final modelExports = generateExports(swagger, mappings);
  final enums = generateEnums({
    for (final e in swagger.enums.entries)
      swagger.schemas.localNameOf(e.key): e.value
  });

  bool needsIntl = false;
  bool needsDartConvert = false;
  bool needsDurationFromString = false;
  bool needsGeometryFromJson = false;
  for (var dartClass in dartClasses) {
    final classCode = dartClass.classCode;
    if (classCode.contains("DateFormat")) {
      needsIntl = true;
    }
    if (classCode.contains("json.") ||
        classCode.contains("jsonDecode") ||
        classCode.contains("jsonEncode")) {
      needsDartConvert = true;
    }
    if (classCode.contains("Duration")) {
      needsDurationFromString = true;
    }
    if (classCode.contains("GeometryFromJson")) {
      needsGeometryFromJson = true;
      needsDartConvert = true;
    }
    // Exit early if all conditions are met
    if (needsIntl &&
        needsDartConvert &&
        needsDurationFromString &&
        needsGeometryFromJson) {
      break;
    }
  }

  final supadartGenerator = SupadartGenerator(
    clientExtension: clientExtension,
    storageClientExtension: storageClientExtension,
    dartClasses: dartClasses,
    modelExports: modelExports,
    enums: enums,
    isDart: isDart,
    needsIntl: needsIntl,
    needsDartConvert: needsDartConvert,
    needsDurationFromString: needsDurationFromString,
    needsGeometryFromJson: needsGeometryFromJson,
    mappings: mappings,
    isPostGIS: isPostGIS,
    jsonbImports: jsonbImports,
  );
  return isSeparated
      ? supadartGenerator.generateDartModelFilesSeparated()
      : supadartGenerator.generateClassesSingleFile();
}