ts-json-schema-generator
Version:
Generate JSON schema from your Typescript sources
41 lines • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeOperatorNodeParser = void 0;
const tslib_1 = require("tslib");
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const ArrayType_js_1 = require("../Type/ArrayType.js");
const NumberType_js_1 = require("../Type/NumberType.js");
const ObjectType_js_1 = require("../Type/ObjectType.js");
const StringType_js_1 = require("../Type/StringType.js");
const UnionType_js_1 = require("../Type/UnionType.js");
const derefType_js_1 = require("../Utils/derefType.js");
const typeKeys_js_1 = require("../Utils/typeKeys.js");
class TypeOperatorNodeParser {
childNodeParser;
constructor(childNodeParser) {
this.childNodeParser = childNodeParser;
}
supportsNode(node) {
return node.kind === typescript_1.default.SyntaxKind.TypeOperator;
}
createType(node, context) {
const type = this.childNodeParser.createType(node.type, context);
const derefed = (0, derefType_js_1.derefType)(type);
if (node.operator === typescript_1.default.SyntaxKind.ReadonlyKeyword && derefed) {
return derefed;
}
if (derefed instanceof ArrayType_js_1.ArrayType) {
return new NumberType_js_1.NumberType();
}
const keys = (0, typeKeys_js_1.getTypeKeys)(type);
if (derefed instanceof ObjectType_js_1.ObjectType && derefed.getAdditionalProperties()) {
return new UnionType_js_1.UnionType([...keys, new StringType_js_1.StringType()]);
}
if (keys.length === 1) {
return keys[0];
}
return new UnionType_js_1.UnionType(keys);
}
}
exports.TypeOperatorNodeParser = TypeOperatorNodeParser;
//# sourceMappingURL=TypeOperatorNodeParser.js.map