import 'package:apidash_core/apidash_core.dart'; import 'package:apidash/consts.dart'; String getEnvironmentTitle(String? name) { if (name == null || name.trim() == "") { return kUntitled; } return name; } List getEnvironmentVariables( EnvironmentModel? environment, {bool removeEmptyModels = false}) { if (environment == null) { return []; } return environment.values .where((element) => element.type == EnvironmentVariableType.variable && (removeEmptyModels ? element != kEnvironmentVariableEmptyModel : true)) .toList(); } List getEnvironmentSecrets( EnvironmentModel? environment, {bool removeEmptyModels = false}) { if (environment == null) { return []; } return environment.values .where((element) => element.type == EnvironmentVariableType.secret && (removeEmptyModels ? element != kEnvironmentSecretEmptyModel : true)) .toList(); } String? substituteVariables( String? input, Map envVarMap, ) { if (input == null) return null; if (envVarMap.keys.isEmpty) { return input; } final regex = RegExp("{{(${envVarMap.keys.join('|')})}}"); String result = input.replaceAllMapped(regex, (match) { final key = match.group(1)?.trim() ?? ''; return envVarMap[key] ?? '{{$key}}'; }); return result; } HttpRequestModel substituteHttpRequestModel( HttpRequestModel httpRequestModel, Map> envMap, String? activeEnvironmentId, ) { final Map combinedEnvVarMap = {}; final activeEnv = envMap[activeEnvironmentId] ?? []; final globalEnv = envMap[kGlobalEnvironmentId] ?? []; for (var variable in globalEnv) { combinedEnvVarMap[variable.key] = variable.value; } for (var variable in activeEnv) { combinedEnvVarMap[variable.key] = variable.value; } var newRequestModel = httpRequestModel.copyWith( url: substituteVariables(httpRequestModel.url, combinedEnvVarMap)!, headers: httpRequestModel.headers?.map((header) { return header.copyWith( name: substituteVariables(header.name, combinedEnvVarMap) ?? "", value: substituteVariables(header.value, combinedEnvVarMap), ); }).toList(), params: httpRequestModel.params?.map((param) { return param.copyWith( name: substituteVariables(param.name, combinedEnvVarMap) ?? "", value: substituteVariables(param.value, combinedEnvVarMap), ); }).toList(), formData: httpRequestModel.formData?.map((formData) { return formData.copyWith( name: substituteVariables(formData.name, combinedEnvVarMap) ?? "", value: substituteVariables(formData.value, combinedEnvVarMap) ?? "", ); }).toList(), body: substituteVariables(httpRequestModel.body, combinedEnvVarMap), ); return newRequestModel; } List? getEnvironmentTriggerSuggestions( String query, Map> envMap, String? activeEnvironmentId) { final suggestions = []; final Set addedVariableKeys = {}; if (activeEnvironmentId != null && envMap[activeEnvironmentId] != null) { for (final variable in envMap[activeEnvironmentId]!) { if ((query.isEmpty || variable.key.contains(query)) && !addedVariableKeys.contains(variable.key)) { suggestions.add(EnvironmentVariableSuggestion( environmentId: activeEnvironmentId, variable: variable)); addedVariableKeys.add(variable.key); } } } envMap[kGlobalEnvironmentId]?.forEach((variable) { if ((query.isEmpty || variable.key.contains(query)) && !addedVariableKeys.contains(variable.key)) { suggestions.add(EnvironmentVariableSuggestion( environmentId: kGlobalEnvironmentId, variable: variable)); addedVariableKeys.add(variable.key); } }); return suggestions; } EnvironmentVariableSuggestion getVariableStatus( String key, Map> envMap, String? activeEnvironmentId) { if (activeEnvironmentId != null) { final variable = envMap[activeEnvironmentId]!.firstWhereOrNull((v) => v.key == key); if (variable != null) { return EnvironmentVariableSuggestion( environmentId: activeEnvironmentId, variable: variable, isUnknown: false, ); } } final globalVariable = envMap[kGlobalEnvironmentId]?.firstWhereOrNull((v) => v.key == key); if (globalVariable != null) { return EnvironmentVariableSuggestion( environmentId: kGlobalEnvironmentId, variable: globalVariable, isUnknown: false, ); } return EnvironmentVariableSuggestion( isUnknown: true, environmentId: "unknown", variable: EnvironmentVariableModel( key: key, type: EnvironmentVariableType.variable, value: "unknown")); }