UNPKG

@jovian/type-tools

Version:

TypeTools is a Typescript library for providing extensible tooling runtime validations and type helpers.

138 lines 6.45 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.Ephemerals = exports.EphemeralsExtensionData = exports.EphemeralsSettings = void 0; var context_1 = require("./context"); var type_tools_1 = require("./type-tools"); var EphemeralsSettings = (function (_super) { __extends(EphemeralsSettings, _super); function EphemeralsSettings(init) { var _this = _super.call(this, init) || this; _this.extensionEphemerals = EphemeralsSettings.extensionEphemerals; if (init) { Object.assign(_this, init); } return _this; } EphemeralsSettings.extensionEphemerals = 'Ephemerals'; return EphemeralsSettings; }(type_tools_1.TypeToolsSettings)); exports.EphemeralsSettings = EphemeralsSettings; var EphemeralsExtensionData = (function () { function EphemeralsExtensionData() { } return EphemeralsExtensionData; }()); exports.EphemeralsExtensionData = EphemeralsExtensionData; var Ephemerals = (function () { function Ephemerals(settings) { this.settings = (0, type_tools_1.settingsInitialize)(EphemeralsSettings, settings); } Ephemerals.getExtensionData = function (target, settings) { if (settings === void 0) { settings = EphemeralsSettings; } return type_tools_1.TypeToolsBase.getExtension(target, settings.extensionEphemerals, settings); }; Ephemerals.typeCheck = function (target, settings) { if (settings === void 0) { settings = EphemeralsSettings; } return target && !!Ephemerals.getExtensionData(target, settings); }; Ephemerals.implementOn = function (target, settings) { if (settings === void 0) { settings = EphemeralsSettings; } if (!type_tools_1.TypeToolsBase.checkContext(Ephemerals)) { return false; } if (!Ephemerals.getExtensionData(target, settings)) { var extension_1 = {}; if (!target.toJSONs) { Object.defineProperty(target, 'toJSONs', { value: [] }); Object.defineProperty(target.toJSONs, 'debugTrail', { value: [], writable: true }); } target.toJSONs.push({ source: settings.extensionEphemerals, transform: function (data, originalTarget) { var filteredCopy = {}; for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) { var prop = _a[_i]; var ignoreInfo = extension_1[prop]; if (ignoreInfo) { if (Ephemerals.debugDataCollect) { Ephemerals.debugData.push({ ignoredKey: prop, source: ignoreInfo.source, data: ignoreInfo.data }); } } else { var value = data[prop]; if (typeof value !== 'function') { filteredCopy[prop] = data[prop]; } } } if (context_1.Context.serializeMeta && data._meta) { filteredCopy._meta = data._meta; } return filteredCopy; } }); if (!target.toJSON) { Object.defineProperty(target, 'toJSON', { value: function () { var data = target; target.toJSONs.debugTrail = []; for (var _i = 0, _a = target.toJSONs; _i < _a.length; _i++) { var toJSON = _a[_i]; var newlyTransformed = toJSON.transform(data, target); target.toJSONs.debugTrail.push({ source: toJSON.source, before: data, after: newlyTransformed }); data = newlyTransformed; } return data; } }); } type_tools_1.TypeToolsBase.addExtension(target, EphemeralsSettings.extensionEphemerals, extension_1); } return true; }; Ephemerals.of = function (target, properties, settings) { if (settings === void 0) { settings = EphemeralsSettings; } if (!Ephemerals.implementOn(target, settings)) { return; } var ephemerals = Ephemerals.getExtensionData(target, settings); for (var _i = 0, _a = Object.keys(properties); _i < _a.length; _i++) { var propName = _a[_i]; var ephemeralPropRubric = properties[propName]; if (ephemeralPropRubric) { ephemerals[propName] = { source: target, data: ephemeralPropRubric }; } else { ephemerals[propName] = null; } } }; Ephemerals.prototype.getExtensionData = function (target) { return Ephemerals.getExtensionData(target, this.settings); }; Ephemerals.prototype.typeCheck = function (target) { return Ephemerals.typeCheck(target, this.settings); }; Ephemerals.prototype.implementOn = function (target) { return Ephemerals.implementOn(target, this.settings); }; Ephemerals.prototype.of = function (target, properties) { return Ephemerals.of(target, properties, this.settings); }; Ephemerals.debugData = []; Ephemerals.debugDataCollect = false; return Ephemerals; }()); exports.Ephemerals = Ephemerals; //# sourceMappingURL=ephemerals.js.map