swaxios
Version:
Swagger API client generator based on axios and TypeScript.
97 lines • 4.18 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.APIClientGenerator = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const util_1 = require("util");
const StringUtil = __importStar(require("../util/StringUtil"));
const TemplateGenerator_1 = require("./TemplateGenerator");
class APIClientGenerator extends TemplateGenerator_1.TemplateGenerator {
fileIndex;
outputDirectory;
description;
name;
templateFile;
constructor(fileIndex, outputDirectory, spec) {
super();
this.name = 'APIClient';
this.outputDirectory = outputDirectory;
this.fileIndex = fileIndex;
this.templateFile = `${this.name}.hbs`;
this.description = StringUtil.addStarsToNewline(spec.info.description);
}
async generateAPI(fileIndex) {
const api = {};
for (const { alternativeName, name } of Object.values(fileIndex.files)) {
const fileName = alternativeName || name;
const objectName = `${name.charAt(0).toLowerCase()}${name.slice(1)}`;
api[objectName] = `new ${fileName}(this.httpClient)`;
}
for (let [directoryName, directory] of Object.entries(fileIndex.directories)) {
directoryName = StringUtil.camelize(directoryName);
api[directoryName] = await this.generateAPI(directory);
}
return api;
}
generateImports(fileIndex) {
const bundledImports = this.bundleImports(fileIndex);
return Object.entries(bundledImports).map(([dir, files]) => ({ dir, files }));
}
bundleImports(fileIndex) {
let bundledImports = {};
for (const file of Object.values(fileIndex.files)) {
const relativePath = path_1.default.dirname(path_1.default.relative(this.outputDirectory, file.fullPath)).replace(/\\/g, '/');
bundledImports[relativePath] = bundledImports[relativePath] || [];
bundledImports[relativePath]?.push(file);
}
for (const directory of Object.values(fileIndex.directories)) {
bundledImports = {
...bundledImports,
...this.bundleImports(directory),
};
}
return bundledImports;
}
async write() {
const renderedClient = await this.toString();
return fs_extra_1.default.outputFile(path_1.default.join(this.outputDirectory, this.filePath), renderedClient, 'utf-8');
}
async getContext() {
const API = await this.generateAPI(this.fileIndex.directories.rest);
const apiString = (0, util_1.inspect)(API, { breakLength: Infinity, depth: Infinity }).replace(/'/gm, '');
const imports = this.generateImports(this.fileIndex);
return {
API: apiString,
description: this.description,
imports,
};
}
}
exports.APIClientGenerator = APIClientGenerator;
//# sourceMappingURL=APIClientGenerator.js.map