@rapharacing/schemas
Version:
OpenAPI to JSON Schema to be used with middy for CC response validation
74 lines (57 loc) • 2.79 kB
JavaScript
;
var _quicktypeCore = require("quicktype-core");
var _fsExtra = _interopRequireDefault(require("fs-extra"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
const SCHEMAS_PATH = "./src/schemas";
const INTERFACES_PATH = "./src/interfaces";
function quicktypeJSONSchema(_x, _x2, _x3) {
return _quicktypeJSONSchema.apply(this, arguments);
}
function _quicktypeJSONSchema() {
_quicktypeJSONSchema = _asyncToGenerator(function* (targetLanguage, typeName, jsonSchemaString) {
const schemaInput = new _quicktypeCore.JSONSchemaInput(new _quicktypeCore.JSONSchemaStore());
yield schemaInput.addSource({
name: typeName,
schema: jsonSchemaString
});
const inputData = new _quicktypeCore.InputData();
inputData.addInput(schemaInput);
return (0, _quicktypeCore.quicktype)({
inputData,
lang: targetLanguage,
allPropertiesOptional: true,
rendererOptions: {
"just-types": true,
"runtime-typecheck": false
}
});
});
return _quicktypeJSONSchema.apply(this, arguments);
}
const generateInterfaces = files => {
const disallowed = "_definitions.json";
const filterdFiles = files.filter(f => f !== disallowed);
for (const idx in filterdFiles) {
const file = filterdFiles[idx];
const string = _fsExtra.default.readFile(file);
const json = _fsExtra.default.readJsonSync(`${SCHEMAS_PATH}/${file}`);
const title = json.title;
quicktypeJSONSchema("typescript", title, string);
}
};
try {
console.log(`Generating definitions from ${SCHEMAS_PATH}`); // Ensures that a directory is empty.
// Deletes directory contents if the directory is not empty.
// If the directory does not exist, it is created. The directory itself is not deleted.
_fsExtra.default.emptyDir(INTERFACES_PATH, error => {
if (error) throw new Error(error);
}); // Get a list of schemas
_fsExtra.default.readdir(SCHEMAS_PATH, (error, files) => {
if (error) throw new Error(error);
if (files) generateInterfaces(files);
});
} catch (error) {
throw new Error(error);
}