UNPKG

@pebula/metap

Version:
54 lines 4.58 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { MixinFree } from '@pebula/utils'; /** @type {?} */ const ModelClassMark = Symbol('ModelClass instance mark'); /** * @record * @template T */ export function ModelClass() { } /** * @template T */ export class ModelClassBase { /** * @return {?} */ toString() { return this.constructor.name; } /** * @param {?} instance * @return {?} */ static instanceOf(instance) { return instance[ModelClassMark] === true; } /** * @template T, Z * @param {?} model * @return {?} */ static factory(model) { class ModelClass extends model { } Object.defineProperty(ModelClass, 'name', { configurable: true, value: model.name }); Object.defineProperty(ModelClass, Symbol.hasInstance, { value: ModelClassBase.instanceOf }); MixinFree(ModelClass, ModelClassBase, 'proto'); // TODO: copy other TS reflection info /** @type {?} */ const paramTypes = ((/** @type {?} */ (Reflect))).getOwnMetadata('design:paramtypes', model); ((/** @type {?} */ (Reflect))).defineMetadata('design:paramtypes', paramTypes, ModelClass); return (/** @type {?} */ (ModelClass)); } } Object.defineProperty(ModelClassBase.prototype, ModelClassMark, { value: true }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcGVidWxhL21ldGFwL2ludGVybmFsLyIsInNvdXJjZXMiOlsibGliL21vZGVsL21vZGVsLWNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOztNQUVqRCxjQUFjLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDOzs7OztBQUV6RCxnQ0FBaUM7Ozs7QUFFakMsTUFBTSxPQUFPLGNBQWM7Ozs7SUFDekIsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQzs7Ozs7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQWE7UUFDN0IsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQzNDLENBQUM7Ozs7OztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQU8sS0FBeUI7UUFDNUMsTUFBTSxVQUFXLFNBQVMsS0FBeUI7U0FBRztRQUV0RCxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7WUFDeEMsWUFBWSxFQUFFLElBQUk7WUFDbEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDcEQsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVO1NBQ2pDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7Y0FHekMsVUFBVSxHQUFHLENBQUMsbUJBQUEsT0FBTyxFQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDO1FBQzlFLENBQUMsbUJBQUEsT0FBTyxFQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTdFLE9BQU8sbUJBQUEsVUFBVSxFQUFPLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWl4aW5GcmVlLCBDb25zdHJ1Y3RvciB9IGZyb20gJ0BwZWJ1bGEvdXRpbHMnO1xuXG5jb25zdCBNb2RlbENsYXNzTWFyayA9IFN5bWJvbCgnTW9kZWxDbGFzcyBpbnN0YW5jZSBtYXJrJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDbGFzczxUPiB7fVxuXG5leHBvcnQgY2xhc3MgTW9kZWxDbGFzc0Jhc2U8VD4gaW1wbGVtZW50cyBNb2RlbENsYXNzPFQ+IHtcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgc3RhdGljIGluc3RhbmNlT2YoaW5zdGFuY2U6IGFueSk6IGluc3RhbmNlIGlzIE1vZGVsQ2xhc3NCYXNlPGFueT4ge1xuICAgIHJldHVybiBpbnN0YW5jZVtNb2RlbENsYXNzTWFya10gPT09IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZmFjdG9yeTxULCBaPihtb2RlbDogWiAmIENvbnN0cnVjdG9yPFQ+KTogWiAmIENvbnN0cnVjdG9yPE1vZGVsQ2xhc3NCYXNlPFQ+PiB7XG4gICAgY2xhc3MgTW9kZWxDbGFzcyBleHRlbmRzIChtb2RlbCBhcyBDb25zdHJ1Y3Rvcjx7fT4pIHt9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9kZWxDbGFzcywgJ25hbWUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogbW9kZWwubmFtZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb2RlbENsYXNzLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICAgIHZhbHVlOiBNb2RlbENsYXNzQmFzZS5pbnN0YW5jZU9mXG4gICAgfSk7XG5cbiAgICBNaXhpbkZyZWUoTW9kZWxDbGFzcywgTW9kZWxDbGFzc0Jhc2UsICdwcm90bycpO1xuXG4gICAgLy8gVE9ETzogY29weSBvdGhlciBUUyByZWZsZWN0aW9uIGluZm9cbiAgICBjb25zdCBwYXJhbVR5cGVzID0gKFJlZmxlY3QgYXMgYW55KS5nZXRPd25NZXRhZGF0YSgnZGVzaWduOnBhcmFtdHlwZXMnLCBtb2RlbCk7XG4gICAgKFJlZmxlY3QgYXMgYW55KS5kZWZpbmVNZXRhZGF0YSgnZGVzaWduOnBhcmFtdHlwZXMnLCBwYXJhbVR5cGVzLCBNb2RlbENsYXNzKTtcblxuICAgIHJldHVybiBNb2RlbENsYXNzIGFzIGFueTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTW9kZWxDbGFzc0Jhc2UucHJvdG90eXBlLCBNb2RlbENsYXNzTWFyaywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiJdfQ==