@jovian/type-tools
Version:
TypeTools is a Typescript library for providing extensible tooling runtime validations and type helpers.
138 lines • 6.45 kB
JavaScript
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
;