@pebula/metap
Version:
meta-programming tools
217 lines • 14.1 kB
JavaScript
/**
* @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=