UNPKG

@backland/schema

Version:

TypeScript schema declaration and validation library with static type inference

111 lines (109 loc) 3.18 kB
"use strict"; 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