openapi-client-sdk-loader
Version:
An Open API loader for webpack. Compiles yaml to client sdk.
96 lines (71 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.defaultOptions = void 0;
var _lodash = require("lodash");
var _generator = require("json-schema-to-typescript/dist/src/generator");
var _normalizer = require("json-schema-to-typescript/dist/src/normalizer");
var _optimizer = require("json-schema-to-typescript/dist/src/optimizer");
var _parser = require("json-schema-to-typescript/dist/src/parser");
var _resolver = require("json-schema-to-typescript/dist/src/resolver");
var _validator = require("json-schema-to-typescript/dist/src/validator");
var _utils = require("json-schema-to-typescript/dist/src/utils");
var _jsonSchemaToTypescript = require("json-schema-to-typescript");
var _format = _interopRequireDefault(require("../format"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const defaultOptions = {
$refOptions: {},
bannerComment: '',
cwd: process.cwd(),
declareExternallyReferenced: true,
enableConstEnums: true,
strictIndexSignatures: false,
style: {
bracketSpacing: false,
printWidth: 120,
semi: true,
singleQuote: false,
tabWidth: 2,
trailingComma: 'none',
useTabs: false
},
unreachableDefinitions: false
};
/* eslint-disable no-param-reassign */
exports.defaultOptions = defaultOptions;
function hasType(schema, type) {
return schema.type === type || Array.isArray(schema.type) && schema.type.includes(type);
}
function isObjectType(schema) {
return typeof schema.properties !== 'undefined' || hasType(schema, 'object');
}
function rule(schema) {
if (schema.$ref && schema.$ref.includes('components/')) {
const pathFragments = schema.$ref.split('/');
delete schema.$ref;
schema.tsType = pathFragments[pathFragments.length - 1];
}
if (!('additionalProperties' in schema) && isObjectType(schema)) {
schema.additionalProperties = false;
}
}
function normalizeRefs(schema, filename) {
const clonedSchema = (0, _lodash.cloneDeep)(schema);
(0, _utils.traverse)(clonedSchema, schemaToConvert => rule(schemaToConvert, clonedSchema, filename));
return clonedSchema;
}
async function compile(schema, name, options = defaultOptions) {
const errors = (0, _validator.validate)(schema, name);
if (errors.length) {
// errors.forEach(_ => error(_));
throw new _jsonSchemaToTypescript.ValidationError();
}
if (!(0, _lodash.endsWith)(options.cwd, '/')) {
options.cwd += '/';
}
return (0, _format.default)((0, _generator.generate)((0, _optimizer.optimize)((0, _parser.parse)(await (0, _resolver.dereference)((0, _normalizer.normalize)(normalizeRefs(schema), name, {}), options), options)), options), options);
}
/* eslint-enable no-param-reassign */
var _default = compile;
exports.default = _default;