@backland/schema
Version:
TypeScript schema declaration and validation library with static type inference
111 lines (109 loc) • 3.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.MetaField = void 0;
exports.cleanMetaField = cleanMetaField;
exports.createEmptyMetaField = createEmptyMetaField;
exports.getObjectDefinitionId = getObjectDefinitionId;
exports.getObjectDefinitionMetaField = getObjectDefinitionMetaField;
exports.isMetaField = isMetaField;
exports.isMetaFieldKey = isMetaFieldKey;
exports.objectMetaFieldKey = void 0;
var _utils = require("@backland/utils");
var _FieldType = require("./FieldType");
// MetaField is a special field type used to add metadata to an object
class MetaField extends _FieldType.FieldType {
constructor(def = {
id: null
}) {
super({
def: def,
name: 'meta'
});
this.toOptional();
const {
id,
description
} = def;
(0, _utils.expectedType)({
id
}, ['string', 'null']);
(0, _utils.expectedType)({
description
}, ['string'], true);
this.parse = this.applyParser({
parse: input => {
(0, _utils.expectedType)({
value: input === null || input === void 0 ? void 0 : input['id']
}, 'string');
(0, _utils.expectedType)({
value: input === null || input === void 0 ? void 0 : input['description']
}, 'string', true);
return input;
}
});
}
static create = (def = {
id: null
}) => {
return new MetaField(def);
};
toString = () => {
var _this$def;
return `${this.typeName}(${((_this$def = this.def) === null || _this$def === void 0 ? void 0 : _this$def.id) || ''})`;
};
}
exports.MetaField = MetaField;
const objectMetaFieldKey = '__dschm__';
exports.objectMetaFieldKey = objectMetaFieldKey;
function createEmptyMetaField() {
return {
def: {
id: null
},
defaultValue: undefined,
type: 'meta'
};
}
function cleanMetaField(input) {
if (!input || typeof input !== 'object') return input;
const defType = (0, _utils.getTypeName)(input.def).toLowerCase();
if (defType === 'object') {
const {
__dschm__,
...def
} = input.def;
return {
...input,
def
};
}
if (input[objectMetaFieldKey]) {
const {
__dschm__,
...rest
} = input;
return rest;
}
return input;
}
function isMetaFieldKey(t) {
return t === objectMetaFieldKey;
}
function isMetaField(t, fieldName) {
if (fieldName && fieldName !== objectMetaFieldKey) return false;
return t && typeof t === 'object' && t.type === 'meta' && typeof t.def === 'object';
}
function getObjectDefinitionMetaField(input) {
return input[objectMetaFieldKey];
}
function getObjectDefinitionId(definition = {}, nullable = false) {
var _getObjectDefinitionM, _getObjectDefinitionM2;
const id = (_getObjectDefinitionM = getObjectDefinitionMetaField(definition)) === null || _getObjectDefinitionM === void 0 ? void 0 : (_getObjectDefinitionM2 = _getObjectDefinitionM.def) === null || _getObjectDefinitionM2 === void 0 ? void 0 : _getObjectDefinitionM2.id;
if (nullable) return id || undefined;
return (0, _utils.nonNullValues)({
id
}, 'Object not identified.').id;
}
//# sourceMappingURL=MetaFieldField.js.map