package cz.habarta.typescript.generator.ext; import cz.habarta.typescript.generator.Settings; import cz.habarta.typescript.generator.emitter.Emitter; import cz.habarta.typescript.generator.emitter.EmitterExtension; import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures; import cz.habarta.typescript.generator.emitter.TsBeanModel; import cz.habarta.typescript.generator.emitter.TsModel; import cz.habarta.typescript.generator.util.Utils; import java.util.*; public class AxiosClientExtension extends EmitterExtension { @Override public EmitterExtensionFeatures getFeatures() { final EmitterExtensionFeatures features = new EmitterExtensionFeatures(); features.generatesRuntimeCode = true; features.generatesModuleCode = true; features.worksWithPackagesMappedToNamespaces = true; features.generatesJaxrsApplicationClient = true; features.restResponseType = "Promise<Axios.GenericAxiosResponse<R>>"; features.restOptionsType = "<O>"; features.npmPackageDependencies = Collections.singletonMap("axios", "0.16.0"); return features; } @Override public void emitElements(Writer writer, Settings settings, boolean exportKeyword, TsModel model) { emitSharedPart(writer, settings); for (TsBeanModel bean : model.getBeans()) { if (bean.isJaxrsApplicationClientBean()) { final String clientName = bean.getName().getSimpleName(); emitClient(writer, settings, exportKeyword, clientName); } } } private void emitSharedPart(Writer writer, Settings settings) { final List<String> template = Utils.readLines(getClass().getResourceAsStream("AxiosClientExtension-shared.template.ts")); Emitter.writeTemplate(writer, settings, template, null); } private void emitClient(Writer writer, Settings settings, boolean exportKeyword, String clientName) { final List<String> template = Utils.readLines(getClass().getResourceAsStream("AxiosClientExtension-client.template.ts")); final Map<String, String> replacements = new LinkedHashMap<>(); replacements.put("\"", settings.quotes); replacements.put("/*export*/ ", exportKeyword ? "export " : ""); replacements.put("$$RestApplicationClient$$", clientName); replacements.put("$$AxiosRestApplicationClient$$", "Axios" + clientName); Emitter.writeTemplate(writer, settings, template, replacements); } }