@jsonjoy.com/json-type
Version:
High-performance JSON Pointer implementation
51 lines • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrType = void 0;
const tslib_1 = require("tslib");
const printTree_1 = require("tree-dump/lib/printTree");
const schema = tslib_1.__importStar(require("../../schema"));
const discriminator_1 = require("../discriminator");
const AbsType_1 = require("./AbsType");
class OrType extends AbsType_1.AbsType {
constructor(types, options) {
super({
...schema.s.Or(),
...options,
discriminator: options?.discriminator ?? discriminator_1.Discriminator.createExpression(types),
});
this.types = types;
}
getSchema() {
return {
...this.schema,
types: this.types.map((type) => type.getSchema()),
};
}
getOptions() {
const { kind: _, types: __, ...options } = this.schema;
return options;
}
options(options) {
Object.assign(this.schema, options);
const discriminator = options.discriminator;
if (discriminator) {
if (discriminator === -1 ||
(discriminator.length === 2 && discriminator[0] === 'num' && discriminator[1] === -1)) {
this.schema.discriminator = discriminator_1.Discriminator.createExpression(this.types);
}
}
return this;
}
toString(tab = '') {
return (super.toString(tab) +
(0, printTree_1.printTree)(tab, [
(tab) => 'discriminator: ' +
JSON.stringify(this.schema.discriminator, null, 2)
.split('\n')
.join('\n' + tab),
...this.types.map((type) => (tab) => type.toString(tab)),
]));
}
}
exports.OrType = OrType;
//# sourceMappingURL=OrType.js.map