@pebula/metap
Version:
meta-programming tools
173 lines • 13.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Mixin } from '@pebula/utils';
/** @type {?} */
var ModelClassCollectionMark = Symbol('ModelClassCollection instance mark');
/** @type {?} */
var NON_EXTENDABLE_PROPS = ['constructor'];
/** @type {?} */
var pCopyMap = new Map();
/**
* @param {?} proto
* @return {?}
*/
function buildAndCacheProperties(proto) {
/** @type {?} */
var propertiesToCopy = Object.getOwnPropertyNames(proto)
.concat((/** @type {?} */ (Object.getOwnPropertySymbols(proto))))
.filter((/**
* @param {?} v
* @return {?}
*/
function (v) { return NON_EXTENDABLE_PROPS.indexOf(v) === -1; }));
pCopyMap.set(proto, propertiesToCopy);
}
/**
* @param {?} proto
* @param {?} thisVar
* @return {?}
*/
function runtimeExtend(proto, thisVar) {
/** @type {?} */
var propertiesToCopy = pCopyMap.get(proto) || [];
thisVar[ModelClassCollectionMark] = true;
for (var i = 0, len = propertiesToCopy.length; i < len; i++) {
/** @type {?} */
var name_1 = propertiesToCopy[i];
/** @type {?} */
var propDesc = Object.getOwnPropertyDescriptor(proto, name_1);
if (propDesc) {
Object.defineProperty(thisVar, name_1, propDesc);
}
else {
thisVar[name_1] = proto[name_1];
}
}
}
// TODO: document the class and how to use it. explain about methods that return new instance (concat, reverse, etc)
// that return Array instance and not ActiveRecordCollection instance.
// TODO: override ref changing methods? throw on them? return ActiveRecordCollection on them?
/**
* @template T
*/
var
// TODO: document the class and how to use it. explain about methods that return new instance (concat, reverse, etc)
// that return Array instance and not ActiveRecordCollection instance.
// TODO: override ref changing methods? throw on them? return ActiveRecordCollection on them?
/**
* @template T
*/
ModelClassCollection = /** @class */ (function (_super) {
tslib_1.__extends(ModelClassCollection, _super);
function ModelClassCollection() {
var _this = _super.call(this) || this;
runtimeExtend(ModelClassCollection.prototype, _this);
return _this;
}
/**
* @param {?} type
* @return {?}
*/
ModelClassCollection.extend = /**
* @param {?} type
* @return {?}
*/
function (type) {
Mixin((/** @type {?} */ (ModelClassCollection)), type);
buildAndCacheProperties(ModelClassCollection.prototype);
};
/**
* @param {?} instance
* @return {?}
*/
ModelClassCollection.instanceOf = /**
* @param {?} instance
* @return {?}
*/
function (instance) {
return instance[ModelClassCollectionMark] === true;
};
/**
* @template T
* @param {?=} targetStore
* @param {?=} type
* @return {?}
*/
ModelClassCollection.create = /**
* @template T
* @param {?=} targetStore
* @param {?=} type
* @return {?}
*/
function (targetStore, type) {
if (!type) {
return new ModelClassCollection();
}
else {
return targetStore.getTargetMeta(type).createCollection();
}
};
/**
* Creates a new ModelClassCollection class mixed in with the proto object.
* @param proto An object literal used as a mixin to the ModelClassCollection prototype.
* @returns
*/
/**
* Creates a new ModelClassCollection class mixed in with the proto object.
* @template T
* @param {?} proto An object literal used as a mixin to the ModelClassCollection prototype.
* @return {?}
*/
ModelClassCollection.factory = /**
* Creates a new ModelClassCollection class mixed in with the proto object.
* @template T
* @param {?} proto An object literal used as a mixin to the ModelClassCollection prototype.
* @return {?}
*/
function (proto) {
/** @type {?} */
var clz = /** @class */ (function (_super) {
tslib_1.__extends(RuntimeTDMCollection, _super);
function RuntimeTDMCollection() {
var _this = _super.call(this) || this;
runtimeExtend(clz.prototype, _this);
return _this;
}
/**
* @param {?} type
* @return {?}
*/
RuntimeTDMCollection.extend = /**
* @param {?} type
* @return {?}
*/
function (type) {
Mixin((/** @type {?} */ (ModelClassCollection)), type);
buildAndCacheProperties(clz.prototype);
};
return RuntimeTDMCollection;
}(ModelClassCollection));
Object.defineProperty(clz, Symbol.hasInstance, {
value: clz.instanceOf
});
Object.assign(clz.prototype, proto);
buildAndCacheProperties(clz.prototype);
return clz;
};
return ModelClassCollection;
}(Array));
// TODO: document the class and how to use it. explain about methods that return new instance (concat, reverse, etc)
// that return Array instance and not ActiveRecordCollection instance.
// TODO: override ref changing methods? throw on them? return ActiveRecordCollection on them?
/**
* @template T
*/
export { ModelClassCollection };
Object.defineProperty(ModelClassCollection, Symbol.hasInstance, {
value: ModelClassCollection.instanceOf
});
buildAndCacheProperties(ModelClassCollection.prototype);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BwZWJ1bGEvbWV0YXAvaW50ZXJuYWwvIiwic291cmNlcyI6WyJsaWIvbW9kZWwvbW9kZWwtY2xhc3MtY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBZSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0lBRzdDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQzs7SUFDdkUsb0JBQW9CLEdBQUcsQ0FBQyxhQUFhLENBQUM7O0lBRXRDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBK0I7Ozs7O0FBRXZELFNBQVMsdUJBQXVCLENBQUMsS0FBVTs7UUFDbkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztTQUN2RCxNQUFNLENBQUMsbUJBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFPLENBQUM7U0FDbEQsTUFBTTs7OztJQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUF0QyxDQUFzQyxFQUFDO0lBRXRELFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsQ0FBQzs7Ozs7O0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBVSxFQUFFLE9BQW1COztRQUM5QyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7SUFFbEQsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTs7WUFDckQsTUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs7WUFDMUIsUUFBUSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsTUFBSSxDQUFDO1FBQzdELElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO2FBQU07WUFDTCxPQUFPLENBQUMsTUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQUksQ0FBQyxDQUFDO1NBQzdCO0tBQ0Y7QUFDSCxDQUFDOzs7Ozs7O0FBS0Q7Ozs7Ozs7O0lBQWtGLGdEQUFRO0lBQ3hGO1FBQUEsWUFDRSxpQkFBTyxTQUVSO1FBREMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxLQUFJLENBQUMsQ0FBQzs7SUFDdEQsQ0FBQzs7Ozs7SUFFTSwyQkFBTTs7OztJQUFiLFVBQWMsSUFBUztRQUNyQixLQUFLLENBQUMsbUJBQUEsb0JBQW9CLEVBQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6Qyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDOzs7OztJQUVNLCtCQUFVOzs7O0lBQWpCLFVBQWtCLFFBQWE7UUFDN0IsT0FBTyxRQUFRLENBQUMsd0JBQXdCLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDckQsQ0FBQzs7Ozs7OztJQVVNLDJCQUFNOzs7Ozs7SUFBYixVQUFpQixXQUF5QixFQUFFLElBQXFCO1FBQy9ELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLElBQUksb0JBQW9CLEVBQU8sQ0FBQztTQUN4QzthQUFNO1lBQ0wsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7OztJQUNJLDRCQUFPOzs7Ozs7SUFBZCxVQUFrQixLQUFVOztZQUNwQixHQUFHO1lBQXlDLGdEQUF1QjtZQUN2RTtnQkFBQSxZQUNFLGlCQUFPLFNBRVI7Z0JBREMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSSxDQUFDLENBQUM7O1lBQ3JDLENBQUM7Ozs7O1lBRU0sMkJBQU07Ozs7WUFBYixVQUFjLElBQVM7Z0JBQ3JCLEtBQUssQ0FBQyxtQkFBQSxvQkFBb0IsRUFBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6Qyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNILDJCQUFDO1FBQUQsQ0FBQyxBQVZXLENBQXNDLG9CQUFvQixFQVVyRTtRQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDN0MsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVO1NBQ3RCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0gsMkJBQUM7QUFBRCxDQUFDLEFBMURELENBQWtGLEtBQUssR0EwRHRGOzs7Ozs7OztBQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRTtJQUM5RCxLQUFLLEVBQUUsb0JBQW9CLENBQUMsVUFBVTtDQUN2QyxDQUFDLENBQUM7QUFFSCx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBNaXhpbiB9IGZyb20gJ0BwZWJ1bGEvdXRpbHMnO1xuaW1wb3J0IHsgVGFyZ2V0U3RvcmUgfSBmcm9tICcuLi9tZXRhZGF0YS90YXJnZXQtc3RvcmUnO1xuXG5jb25zdCBNb2RlbENsYXNzQ29sbGVjdGlvbk1hcmsgPSBTeW1ib2woJ01vZGVsQ2xhc3NDb2xsZWN0aW9uIGluc3RhbmNlIG1hcmsnKTtcbmNvbnN0IE5PTl9FWFRFTkRBQkxFX1BST1BTID0gWydjb25zdHJ1Y3RvciddO1xuXG5jb25zdCBwQ29weU1hcCA9IG5ldyBNYXA8YW55LCBBcnJheTxzdHJpbmcgfCBzeW1ib2w+PigpO1xuXG5mdW5jdGlvbiBidWlsZEFuZENhY2hlUHJvcGVydGllcyhwcm90bzogYW55KSB7XG4gIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bylcbiAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvdG8pIGFzIGFueSlcbiAgICAuZmlsdGVyKHYgPT4gTk9OX0VYVEVOREFCTEVfUFJPUFMuaW5kZXhPZih2KSA9PT0gLTEpO1xuXG4gIHBDb3B5TWFwLnNldChwcm90bywgcHJvcGVydGllc1RvQ29weSk7XG59XG5cbmZ1bmN0aW9uIHJ1bnRpbWVFeHRlbmQocHJvdG86IGFueSwgdGhpc1ZhcjogQXJyYXk8YW55Pik6IGFueSB7XG4gIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSBwQ29weU1hcC5nZXQocHJvdG8pIHx8IFtdO1xuXG4gIHRoaXNWYXJbTW9kZWxDbGFzc0NvbGxlY3Rpb25NYXJrXSA9IHRydWU7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHByb3BlcnRpZXNUb0NvcHkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBuYW1lID0gcHJvcGVydGllc1RvQ29weVtpXTtcbiAgICBjb25zdCBwcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG5hbWUpO1xuICAgIGlmIChwcm9wRGVzYykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXNWYXIsIG5hbWUsIHByb3BEZXNjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1ZhcltuYW1lXSA9IHByb3RvW25hbWVdO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiBkb2N1bWVudCB0aGUgY2xhc3MgYW5kIGhvdyB0byB1c2UgaXQuIGV4cGxhaW4gYWJvdXQgbWV0aG9kcyB0aGF0IHJldHVybiBuZXcgaW5zdGFuY2UgKGNvbmNhdCwgcmV2ZXJzZSwgZXRjKVxuLy8gdGhhdCByZXR1cm4gQXJyYXkgaW5zdGFuY2UgYW5kIG5vdCBBY3RpdmVSZWNvcmRDb2xsZWN0aW9uIGluc3RhbmNlLlxuLy8gVE9ETzogb3ZlcnJpZGUgcmVmIGNoYW5naW5nIG1ldGhvZHM/IHRocm93IG9uIHRoZW0/IHJldHVybiBBY3RpdmVSZWNvcmRDb2xsZWN0aW9uIG9uIHRoZW0/XG5leHBvcnQgY2xhc3MgTW9kZWxDbGFzc0NvbGxlY3Rpb248VCAvKiBleHRlbmRzIEFjdGl2ZVJlY29yZDxhbnksIGFueT4gKi8+IGV4dGVuZHMgQXJyYXk8VD4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHJ1bnRpbWVFeHRlbmQoTW9kZWxDbGFzc0NvbGxlY3Rpb24ucHJvdG90eXBlLCB0aGlzKTtcbiAgfVxuXG4gIHN0YXRpYyBleHRlbmQodHlwZTogYW55KTogdm9pZCB7XG4gICAgTWl4aW4oTW9kZWxDbGFzc0NvbGxlY3Rpb24gYXMgYW55LCB0eXBlKTtcbiAgICBidWlsZEFuZENhY2hlUHJvcGVydGllcyhNb2RlbENsYXNzQ29sbGVjdGlvbi5wcm90b3R5cGUpO1xuICB9XG5cbiAgc3RhdGljIGluc3RhbmNlT2YoaW5zdGFuY2U6IGFueSk6IGluc3RhbmNlIGlzIE1vZGVsQ2xhc3NDb2xsZWN0aW9uPGFueT4ge1xuICAgIHJldHVybiBpbnN0YW5jZVtNb2RlbENsYXNzQ29sbGVjdGlvbk1hcmtdID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgTW9kZWxDbGFzc0NvbGxlY3Rpb24uXG4gICAqIElmIGEgdHlwZSBpcyBzcGVjaWZpZWQsIHJldHVybnMgdGhlIE1vZGVsQ2xhc3NDb2xsZWN0aW9uIGNsYXNzIGZvciB0aGF0IHR5cGUuXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIG1ldGhvZCBhbG9uZyB3aXRoIGEgdHlwZSB0byBlbnN1cmUgcGx1Z2lucyBmdW5jdGlvbmFsaXR5LlxuICAgKiBAcGFyYW0gdHlwZVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZTxUPigpOiBNb2RlbENsYXNzQ29sbGVjdGlvbjxUPlxuICBzdGF0aWMgY3JlYXRlPFQ+KHRhcmdldFN0b3JlOiBUYXJnZXRTdG9yZSwgdHlwZTogQ29uc3RydWN0b3I8VD4pOiBNb2RlbENsYXNzQ29sbGVjdGlvbjxUPjtcbiAgc3RhdGljIGNyZWF0ZTxUPih0YXJnZXRTdG9yZT86IFRhcmdldFN0b3JlLCB0eXBlPzogQ29uc3RydWN0b3I8VD4pOiBNb2RlbENsYXNzQ29sbGVjdGlvbjxUPiB7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IE1vZGVsQ2xhc3NDb2xsZWN0aW9uPGFueT4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRhcmdldFN0b3JlLmdldFRhcmdldE1ldGEodHlwZSkuY3JlYXRlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE1vZGVsQ2xhc3NDb2xsZWN0aW9uIGNsYXNzIG1peGVkIGluIHdpdGggdGhlIHByb3RvIG9iamVjdC5cbiAgICogQHBhcmFtIHByb3RvIEFuIG9iamVjdCBsaXRlcmFsIHVzZWQgYXMgYSBtaXhpbiB0byB0aGUgTW9kZWxDbGFzc0NvbGxlY3Rpb24gcHJvdG90eXBlLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGZhY3Rvcnk8VD4ocHJvdG86IGFueSk6IHR5cGVvZiBNb2RlbENsYXNzQ29sbGVjdGlvbiAmIENvbnN0cnVjdG9yPE1vZGVsQ2xhc3NDb2xsZWN0aW9uPFQ+PiB7XG4gICAgY29uc3QgY2x6ID0gY2xhc3MgUnVudGltZVRETUNvbGxlY3Rpb248VD4gZXh0ZW5kcyBNb2RlbENsYXNzQ29sbGVjdGlvbjxUPiB7XG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgcnVudGltZUV4dGVuZChjbHoucHJvdG90eXBlLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgc3RhdGljIGV4dGVuZCh0eXBlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgTWl4aW4oTW9kZWxDbGFzc0NvbGxlY3Rpb24gYXMgYW55LCB0eXBlKTtcbiAgICAgICAgYnVpbGRBbmRDYWNoZVByb3BlcnRpZXMoY2x6LnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbHosIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgICAgdmFsdWU6IGNsei5pbnN0YW5jZU9mXG4gICAgfSk7XG5cbiAgICBPYmplY3QuYXNzaWduKGNsei5wcm90b3R5cGUsIHByb3RvKTtcbiAgICBidWlsZEFuZENhY2hlUHJvcGVydGllcyhjbHoucHJvdG90eXBlKTtcblxuICAgIHJldHVybiBjbHo7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vZGVsQ2xhc3NDb2xsZWN0aW9uLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgdmFsdWU6IE1vZGVsQ2xhc3NDb2xsZWN0aW9uLmluc3RhbmNlT2Zcbn0pO1xuXG5idWlsZEFuZENhY2hlUHJvcGVydGllcyhNb2RlbENsYXNzQ29sbGVjdGlvbi5wcm90b3R5cGUpO1xuIl19