UNPKG

@pebula/metap

Version:
217 lines 14.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { isFunction } from '@pebula/utils'; import { KeySet } from './set-map-ext'; /** @type {?} */ var eventHandlers = new KeySet(); /** @type {?} */ var metaInitHandlers = new KeySet(); /** * Event listeners registration object for lifecycle metadata events on a target. * * \@pluginApi * \@mixable * \@singleton */ var /** * Event listeners registration object for lifecycle metadata events on a target. * * \@pluginApi * \@mixable * \@singleton */ TargetEvents = /** @class */ (function () { function TargetEvents() { // support for post instantiation mixins on the prototype (plugins) - don't use new. TargetEvents.create(this); } /** * @template TMetaArgs, TMetaClass, Z * @param {?} metaClass * @return {?} */ TargetEvents.prototype.metaInit = /** * @template TMetaArgs, TMetaClass, Z * @param {?} metaClass * @return {?} */ function (metaClass) { return { run: /** * @param {?} handler * @return {?} */ function (handler) { metaInitHandlers.add(metaClass, handler); } }; }; /** * Fired when the {@link TargetMetadata} instance is created for the target) * * FireBefore: processType */ /** * Fired when the {\@link TargetMetadata} instance is created for the target) * * FireBefore: processType * @param {?} handler * @return {?} */ TargetEvents.prototype.createMetadata = /** * Fired when the {\@link TargetMetadata} instance is created for the target) * * FireBefore: processType * @param {?} handler * @return {?} */ function (handler) { if (isFunction(handler)) { eventHandlers.add('createMetadata', handler); } }; /** * Fired before the type is processed, after extending all metadata. * This event is not guaranteed to fire, it will fire only if the type is decorated with an appropriate decorator. * * FireAfter: createMetadata * FireBefore: processType */ /** * Fired before the type is processed, after extending all metadata. * This event is not guaranteed to fire, it will fire only if the type is decorated with an appropriate decorator. * * FireAfter: createMetadata * FireBefore: processType * @param {?} handler * @return {?} */ TargetEvents.prototype.beforeProcessType = /** * Fired before the type is processed, after extending all metadata. * This event is not guaranteed to fire, it will fire only if the type is decorated with an appropriate decorator. * * FireAfter: createMetadata * FireBefore: processType * @param {?} handler * @return {?} */ function (handler) { if (isFunction(handler)) { eventHandlers.add('beforeProcessType', handler); } }; /** * Fired when the type is processed, after extending all metadata. * This event is not guaranteed to fire, it will fire only if the type is decorated with an appropriate decorator. * * FireAfter: beforeProcessType */ /** * Fired when the type is processed, after extending all metadata. * This event is not guaranteed to fire, it will fire only if the type is decorated with an appropriate decorator. * * FireAfter: beforeProcessType * @param {?} handler * @return {?} */ TargetEvents.prototype.processType = /** * Fired when the type is processed, after extending all metadata. * This event is not guaranteed to fire, it will fire only if the type is decorated with an appropriate decorator. * * FireAfter: beforeProcessType * @param {?} handler * @return {?} */ function (handler) { if (isFunction(handler)) { eventHandlers.add('processType', handler); } }; /** * @param {?=} instance * @return {?} */ TargetEvents.create = /** * @param {?=} instance * @return {?} */ function (instance) { /** @type {?} */ var targetStore = instance || Object.create(TargetEvents.prototype); targetStore.FIRE = EVENT_FIRE; return targetStore; }; return TargetEvents; }()); /** * Event listeners registration object for lifecycle metadata events on a target. * * \@pluginApi * \@mixable * \@singleton */ export { TargetEvents }; if (false) { /** @type {?} */ TargetEvents.prototype.FIRE; } var ɵ0 = /** * @param {?} target * @return {?} */ function (target) { return fireTargetEvent('createMetadata', target); }, ɵ1 = /** * @param {?} target * @return {?} */ function (target) { return fireTargetEvent('beforeProcessType', target); }, ɵ2 = /** * @param {?} target * @return {?} */ function (target) { return fireTargetEvent('processType', target); }; /** @type {?} */ export var EVENT_FIRE = { metaInit: /** * @template TMetaArgs, TMetaClass, Z * @param {?} metaClass * @param {?} target * @param {?} value * @param {?=} metaArgs * @return {?} */ function (metaClass, target, value, metaArgs) { /** @type {?} */ var eventMap = metaInitHandlers.get(metaClass); if (eventMap) { Array.from(eventMap.values()).forEach((/** * @param {?} handler * @return {?} */ function (handler) { return handler(target, value, metaArgs); })); } }, createMetadata: (ɵ0), beforeProcessType: (ɵ1), processType: (ɵ2) }; /** @type {?} */ export var targetEvents = TargetEvents.create(); /** * @param {?} event * @param {?} target * @return {?} */ function fireTargetEvent(event, target) { /** @type {?} */ var eventMap = eventHandlers.get(event); if (eventMap) { Array.from(eventMap.values()).forEach((/** * @param {?} handler * @return {?} */ function (handler) { return handler(target); })); } } export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBlYnVsYS9tZXRhcC9pbnRlcm5hbC8iLCJzb3VyY2VzIjpbImxpYi9mdy9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7SUFHakMsYUFBYSxHQUFHLElBQUksTUFBTSxFQUEwRDs7SUFDcEYsZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLEVBQW9GOzs7Ozs7OztBQVN2SDs7Ozs7Ozs7SUFDRTtRQUNFLG9GQUFvRjtRQUNwRixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7Ozs7OztJQUVELCtCQUFROzs7OztJQUFSLFVBQW1DLFNBQXlEO1FBQzFGLE9BQU87WUFDTCxHQUFHOzs7O1lBQUgsVUFDRSxPQUlTO2dCQUVULGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0MsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7Ozs7SUFDSCxxQ0FBYzs7Ozs7OztJQUFkLFVBQWUsT0FBMkM7UUFDeEQsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7SUFDSCx3Q0FBaUI7Ozs7Ozs7OztJQUFqQixVQUFrQixPQUEyQztRQUMzRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixhQUFhLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHOzs7Ozs7Ozs7SUFDSCxrQ0FBVzs7Ozs7Ozs7SUFBWCxVQUFZLE9BQTJDO1FBQ3JELElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZCLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQzs7Ozs7SUFJTSxtQkFBTTs7OztJQUFiLFVBQWMsUUFBdUI7O1lBQzdCLFdBQVcsR0FDZixRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ25ELFdBQVcsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFDSCxtQkFBQztBQUFELENBQUMsQUFoRUQsSUFnRUM7Ozs7Ozs7Ozs7O0lBUkMsNEJBQXdCOzs7Ozs7QUFvQlIsVUFBQyxNQUF3QixJQUFLLE9BQUEsZUFBZSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUF6QyxDQUF5Qzs7OztBQUNwRSxVQUFDLE1BQXdCLElBQUssT0FBQSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEVBQTVDLENBQTRDOzs7O0FBQ2hGLFVBQUMsTUFBd0IsSUFBSyxPQUFBLGVBQWUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEVBQXRDLENBQXNDOztBQVpuRixNQUFNLEtBQU8sVUFBVSxHQUFHO0lBQ3hCLFFBQVE7Ozs7Ozs7O0lBQVIsVUFBbUMsU0FBeUQsRUFDekQsTUFBd0IsRUFDeEIsS0FBaUIsRUFDakIsUUFBb0I7O1lBQy9DLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2hELElBQUksUUFBUSxFQUFFO1lBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQSxPQUFPLElBQUksT0FBQSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBaEMsQ0FBZ0MsRUFBRSxDQUFDO1NBQ3JGO0lBQ0gsQ0FBQztJQUNELGNBQWMsTUFBeUU7SUFDdkYsaUJBQWlCLE1BQTRFO0lBQzdGLFdBQVcsTUFBc0U7Q0FDbEY7O0FBRUQsTUFBTSxLQUFPLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFOzs7Ozs7QUFPakQsU0FBUyxlQUFlLENBQUMsS0FBeUIsRUFBRSxNQUFXOztRQUN2RCxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDekMsSUFBSSxRQUFRLEVBQUU7UUFDWixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBZixDQUFlLEVBQUMsQ0FBQztLQUNuRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3RvciwgaXNGdW5jdGlvbiB9IGZyb20gJ0BwZWJ1bGEvdXRpbHMnO1xuaW1wb3J0IHsgS2V5U2V0IH0gZnJvbSAnLi9zZXQtbWFwLWV4dCc7XG5pbXBvcnQgeyBNZXRhZGF0YUNsYXNzU3RhdGljIH0gZnJvbSAnLi9tZXRhZGF0YS1mcmFtZXdvcmsnO1xuXG5jb25zdCBldmVudEhhbmRsZXJzID0gbmV3IEtleVNldDxUQVJHRVRfRVZFTlRfTkFNRVMsICh0YXJnZXQ6IENvbnN0cnVjdG9yPGFueT4pID0+IHZvaWQ+KCk7XG5jb25zdCBtZXRhSW5pdEhhbmRsZXJzID0gbmV3IEtleVNldDxDb25zdHJ1Y3Rvcjxhbnk+LCAodGFyZ2V0OiBDb25zdHJ1Y3Rvcjxhbnk+LCB2YWx1ZTogYW55LCBtZXRhQXJncz86IGFueSkgPT4gdm9pZD4oKTtcblxuLyoqXG4gKiBFdmVudCBsaXN0ZW5lcnMgcmVnaXN0cmF0aW9uIG9iamVjdCBmb3IgbGlmZWN5Y2xlIG1ldGFkYXRhIGV2ZW50cyBvbiBhIHRhcmdldC5cbiAqXG4gKiBAcGx1Z2luQXBpXG4gKiBAbWl4YWJsZVxuICogQHNpbmdsZXRvblxuICovXG5leHBvcnQgY2xhc3MgVGFyZ2V0RXZlbnRzIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIHN1cHBvcnQgZm9yIHBvc3QgaW5zdGFudGlhdGlvbiBtaXhpbnMgb24gdGhlIHByb3RvdHlwZSAocGx1Z2lucykgLSBkb24ndCB1c2UgbmV3LlxuICAgIFRhcmdldEV2ZW50cy5jcmVhdGUodGhpcyk7XG4gIH1cblxuICBtZXRhSW5pdDxUTWV0YUFyZ3MsIFRNZXRhQ2xhc3MsIFo+KG1ldGFDbGFzczogWiAmIE1ldGFkYXRhQ2xhc3NTdGF0aWM8VE1ldGFBcmdzLCBUTWV0YUNsYXNzPikge1xuICAgIHJldHVybiB7XG4gICAgICBydW4oXG4gICAgICAgIGhhbmRsZXI6IChcbiAgICAgICAgICB0YXJnZXQ6IENvbnN0cnVjdG9yPGFueT4sXG4gICAgICAgICAgdmFsdWU6IFRNZXRhQ2xhc3MsXG4gICAgICAgICAgbWV0YUFyZ3M/OiBUTWV0YUFyZ3NcbiAgICAgICAgKSA9PiB2b2lkXG4gICAgICApOiB2b2lkIHtcbiAgICAgICAgbWV0YUluaXRIYW5kbGVycy5hZGQobWV0YUNsYXNzLCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVkIHdoZW4gdGhlIHtAbGluayBUYXJnZXRNZXRhZGF0YX0gaW5zdGFuY2UgaXMgY3JlYXRlZCBmb3IgdGhlIHRhcmdldClcbiAgICpcbiAgICogRmlyZUJlZm9yZTogcHJvY2Vzc1R5cGVcbiAgICovXG4gIGNyZWF0ZU1ldGFkYXRhKGhhbmRsZXI6ICh0YXJnZXQ6IENvbnN0cnVjdG9yPGFueT4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgICAgZXZlbnRIYW5kbGVycy5hZGQoJ2NyZWF0ZU1ldGFkYXRhJywgaGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVkIGJlZm9yZSB0aGUgdHlwZSBpcyBwcm9jZXNzZWQsIGFmdGVyIGV4dGVuZGluZyBhbGwgbWV0YWRhdGEuXG4gICAqIFRoaXMgZXZlbnQgaXMgbm90IGd1YXJhbnRlZWQgdG8gZmlyZSwgaXQgd2lsbCBmaXJlIG9ubHkgaWYgdGhlIHR5cGUgaXMgZGVjb3JhdGVkIHdpdGggYW4gYXBwcm9wcmlhdGUgZGVjb3JhdG9yLlxuICAgKlxuICAgKiBGaXJlQWZ0ZXI6IGNyZWF0ZU1ldGFkYXRhXG4gICAqIEZpcmVCZWZvcmU6IHByb2Nlc3NUeXBlXG4gICAqL1xuICBiZWZvcmVQcm9jZXNzVHlwZShoYW5kbGVyOiAodGFyZ2V0OiBDb25zdHJ1Y3Rvcjxhbnk+KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIGV2ZW50SGFuZGxlcnMuYWRkKCdiZWZvcmVQcm9jZXNzVHlwZScsIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlZCB3aGVuIHRoZSB0eXBlIGlzIHByb2Nlc3NlZCwgYWZ0ZXIgZXh0ZW5kaW5nIGFsbCBtZXRhZGF0YS5cbiAgICogVGhpcyBldmVudCBpcyBub3QgZ3VhcmFudGVlZCB0byBmaXJlLCBpdCB3aWxsIGZpcmUgb25seSBpZiB0aGUgdHlwZSBpcyBkZWNvcmF0ZWQgd2l0aCBhbiBhcHByb3ByaWF0ZSBkZWNvcmF0b3IuXG4gICAqXG4gICAqIEZpcmVBZnRlcjogYmVmb3JlUHJvY2Vzc1R5cGVcbiAgICovXG4gIHByb2Nlc3NUeXBlKGhhbmRsZXI6ICh0YXJnZXQ6IENvbnN0cnVjdG9yPGFueT4pID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgICAgZXZlbnRIYW5kbGVycy5hZGQoJ3Byb2Nlc3NUeXBlJywgaGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgRklSRTogdHlwZW9mIEVWRU5UX0ZJUkU7XG5cbiAgc3RhdGljIGNyZWF0ZShpbnN0YW5jZT86IFRhcmdldEV2ZW50cyk6IFRhcmdldEV2ZW50cyB7XG4gICAgY29uc3QgdGFyZ2V0U3RvcmU6IFRhcmdldEV2ZW50cyA9XG4gICAgICBpbnN0YW5jZSB8fCBPYmplY3QuY3JlYXRlKFRhcmdldEV2ZW50cy5wcm90b3R5cGUpO1xuICAgIHRhcmdldFN0b3JlLkZJUkUgPSBFVkVOVF9GSVJFO1xuICAgIHJldHVybiB0YXJnZXRTdG9yZTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRVZFTlRfRklSRSA9IHtcbiAgbWV0YUluaXQ8VE1ldGFBcmdzLCBUTWV0YUNsYXNzLCBaPihtZXRhQ2xhc3M6IFogJiBNZXRhZGF0YUNsYXNzU3RhdGljPFRNZXRhQXJncywgVE1ldGFDbGFzcz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBUTWV0YUNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFBcmdzPzogVE1ldGFBcmdzKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRNYXAgPSBtZXRhSW5pdEhhbmRsZXJzLmdldChtZXRhQ2xhc3MpO1xuICAgIGlmIChldmVudE1hcCkge1xuICAgICAgQXJyYXkuZnJvbShldmVudE1hcC52YWx1ZXMoKSkuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIodGFyZ2V0LCB2YWx1ZSwgbWV0YUFyZ3MpICk7XG4gICAgfVxuICB9LFxuICBjcmVhdGVNZXRhZGF0YTogKHRhcmdldDogQ29uc3RydWN0b3I8YW55PikgPT4gZmlyZVRhcmdldEV2ZW50KCdjcmVhdGVNZXRhZGF0YScsIHRhcmdldCksXG4gIGJlZm9yZVByb2Nlc3NUeXBlOiAodGFyZ2V0OiBDb25zdHJ1Y3Rvcjxhbnk+KSA9PiBmaXJlVGFyZ2V0RXZlbnQoJ2JlZm9yZVByb2Nlc3NUeXBlJywgdGFyZ2V0KSxcbiAgcHJvY2Vzc1R5cGU6ICh0YXJnZXQ6IENvbnN0cnVjdG9yPGFueT4pID0+IGZpcmVUYXJnZXRFdmVudCgncHJvY2Vzc1R5cGUnLCB0YXJnZXQpXG59O1xuXG5leHBvcnQgY29uc3QgdGFyZ2V0RXZlbnRzID0gVGFyZ2V0RXZlbnRzLmNyZWF0ZSgpO1xuXG50eXBlIFRBUkdFVF9FVkVOVF9OQU1FUyA9XG4gIHwgJ2NyZWF0ZU1ldGFkYXRhJ1xuICB8ICdiZWZvcmVQcm9jZXNzVHlwZSdcbiAgfCAncHJvY2Vzc1R5cGUnO1xuXG5mdW5jdGlvbiBmaXJlVGFyZ2V0RXZlbnQoZXZlbnQ6IFRBUkdFVF9FVkVOVF9OQU1FUywgdGFyZ2V0OiBhbnkpOiB2b2lkIHtcbiAgY29uc3QgZXZlbnRNYXAgPSBldmVudEhhbmRsZXJzLmdldChldmVudCk7XG4gIGlmIChldmVudE1hcCkge1xuICAgIEFycmF5LmZyb20oZXZlbnRNYXAudmFsdWVzKCkpLmZvckVhY2goaGFuZGxlciA9PiBoYW5kbGVyKHRhcmdldCkpO1xuICB9XG59XG4iXX0=