jsonToScripts function
Future<Directory>
jsonToScripts(
- List<Map> scripts_origin, {
- bool isMethodApi = true,
- required Directory directory,
- String path_package_json_dart = "import \"package:general_lib/general_lib.dart\";",
- int try_loop = 2,
})
Implementation
Future<Directory> jsonToScripts(
List<Map> scripts_origin, {
String? comment,
bool isMethodApi = true,
required Directory directory,
String path_package_json_dart =
"import \"package:general_lib/general_lib.dart\";",
int try_loop = 2,
}) async {
// String base_name = p.basename(directory.path);
// String baseName = base_name.camelCaseClass();
List<Map> scripts = [...scripts_origin];
if (!directory.existsSync()) {
await directory.create(recursive: true);
}
for (var loop_index_first = 0;
loop_index_first < try_loop;
loop_index_first++) {
// print(loop_index_first);
void json_script_update({
required Map newData,
required String keyData,
}) {
if (newData["@type"] is String == false) {
newData["@type"] = keyData;
}
for (var i = 0; i < scripts.length; i++) {
Map data = scripts[i];
if (newData["@type"] == data["@type"]) {
newData.forEach((key, value) {
if (value is Map) {
if (value["@type"] is String == false) {
scripts[i][key] = {
"@type": key,
...value,
};
json_script_update(
newData: scripts[i][key],
keyData: keyData,
);
} else {
json_script_update(
newData: value,
keyData: keyData,
);
}
} else if (value is List) {
void json_list_update({
required List values,
required String key,
}) {
for (var index = 0; index < values.length; index++) {
dynamic value_data = values[index];
if (value_data is Map) {
if (value_data["@type"] is String == false) {
if (scripts[i][key][index] is Map) {
scripts[i][key][index] = {
"@type": key,
...value_data,
};
json_script_update(
newData: scripts[i][key][index],
keyData: keyData,
);
}
} else {
json_script_update(
newData: value_data,
keyData: keyData,
);
}
} else if (value_data is List) {
json_list_update(values: value_data, key: key);
}
}
}
json_list_update(values: value, key: key);
} else {
data[key] = value;
}
});
return;
}
}
if (newData["@type"] is String) {
scripts.add(newData);
json_script_update(
newData: newData,
keyData: keyData,
);
} else {
// print(newData);
}
}
void json_list_update({required List values, required String key}) {
for (var index = 0; index < values.length; index++) {
dynamic value_data = values[index];
if (value_data is Map) {
json_script_update(newData: value_data, keyData: key);
} else if (value_data is List) {
json_list_update(values: value_data, key: key);
}
}
}
for (var i = 0; i < scripts.length; i++) {
Map data = scripts[i];
if (data["@type"] is String == false) {
continue;
}
data.forEach((key, value) {
if (value is Map) {
if (value["@type"] is String == false) {
scripts[i][key] = {"@type": key, ...value};
json_script_update(
newData: scripts[i][key],
keyData: key,
);
} else {
json_script_update(
newData: value.clone(),
keyData: key,
);
}
} else if (value is List) {
json_list_update(
values: value.clone(),
key: key,
);
} else {}
});
}
}
List<String> datas = [];
for (var i = 0; i < scripts.length; i++) {
Map data = scripts[i];
if (data["@type"] is String == false) {
continue;
}
datas.add("export \"${data["@type"].toString().snakeCaseClass()}.dart\";");
var res = jsonToScriptStatic(
data.cast<String, dynamic>(),
directory: directory,
isMethodApi: isMethodApi,
comment: comment,
path_package_json_dart: path_package_json_dart,
);
await File(p.join(directory.path,
"${data["@type"].toString().snakeCaseClass()}.dart"))
.writeAsString(res);
}
// String json_dart = """
// // ignore_for_file: non_constant_identifier_names, unused_import
// import 'dart:convert';
// /// return original data json
// class Json${baseName} {
// /// return original data json
// Map rawData;
// /// return original data json
// Json${baseName}(this.rawData);
// /// return original data json
// static Map get defaultData {
// return {
// "@type": "jsonDart",
// };
// }
// /// return original data json
// static Json${baseName} create({
// String special_type = ${json.encode("Json${baseName}")},
// }) {
// Map jsonCreate = {
// "@type": special_type,
// };
// jsonCreate.forEach((key, value) {
// try {
// if (value == null) {
// jsonCreate.remove(key);
// // jsonCreate[key] = value;
// }
// } catch (e, stack) {
// print("Azka \${e.toString()}, \${stack.toString()}");
// }
// });
// return Json${baseName}(jsonCreate);
// }
// /// operator map data
// operator *(value) {}
// /// operator map data
// operator /(value) {}
// /// operator map data
// Map operator +(Map value) {
// rawData.addAll(value);
// return rawData;
// }
// /// return original data json
// Map operator -(List values) {
// utils_remove_by_keys_void(values);
// return rawData;
// }
// /// operator map data
// operator [](key) {
// return rawData[key];
// }
// /// operator map data
// void operator []=(key, value) {
// rawData[key] = value;
// }
// /// return original data json
// void utils_remove_values_null_void() {
// rawData.forEach((key, value) {
// if (value == null) {
// rawData.remove(key);
// }
// });
// }
// /// return original data json
// Map utils_remove_values_null() {
// utils_remove_values_null_void();
// return rawData;
// }
// /// return original data json
// void utils_remove_by_values_void(List values) {
// rawData.forEach((key, value) {
// for (var element in values) {
// if (value == element) {
// rawData.remove(key);
// }
// }
// });
// }
// /// return original data json
// Map utils_remove_by_values(List values) {
// utils_remove_by_values_void(values);
// return rawData;
// }
// void utils_remove_by_keys_void(List keys) {
// for (var element in keys) {
// rawData.remove(element);
// }
// }
// /// return original data json
// Map utils_remove_by_keys(List keys) {
// utils_remove_by_keys_void(keys);
// return rawData;
// }
// /// return original data json
// Map utils_filter_by_keys(List keys) {
// Map jsonData = {};
// for (var key in keys) {
// jsonData[key] = rawData[key];
// }
// return jsonData;
// }
// /// return original data json
// Map toMap() {
// return rawData;
// }
// /// return original data json
// Map toJson() {
// return rawData;
// }
// /// return string data encode json original data
// String toStringPretty() {
// return JsonEncoder.withIndent(" " * 2).convert(toJson());
// }
// /// return string data encode json original data
// @override
// String toString() {
// return json.encode(rawData);
// }
// }
// extension Json${baseName}Extensions on List<Json${baseName}> {
// List<Map> toJson() {
// return map((e) => e.toJson()).toList().cast<Map>();
// }
// /// return string data encode json original data
// String toStringPretty() {
// return JsonEncoder.withIndent(" " * 2).convert(toJson());
// }
// }
// """;
datas.sort();
// await File(p.join(directory.path, "json_dart.dart")).writeAsString(json_dart);
await File(p.join(directory.path, "${p.basename(directory.path)}.dart"))
.writeAsString(datas.toSet().toList().join("\n"));
return directory;
}