ngx-base-state
Version:
Base classes for creation state service via Rxjs observable
30 lines • 5.05 kB
JavaScript
import { ɵNGX_STATE_DECORATOR_METADATA_FIELD } from '../constants';
import { patchedActionFunction } from '../functions';
const forbiddenMethodNamesToPatch = [
'constructor',
'ngOnDestroy'
];
export function NgxState() {
return function InnerFunction(targetClass) {
const prototype = targetClass.prototype;
markTargetClassWithMetadata(prototype);
Object.getOwnPropertyNames(prototype).forEach((fieldName) => {
const isFieldNameForbidden = forbiddenMethodNamesToPatch.includes(fieldName);
if (!isFieldNameForbidden && isFieldHaveTypeFunction(prototype, fieldName)) {
markMethodOfStateAsAction(prototype, fieldName, prototype[fieldName]);
}
});
};
}
function markTargetClassWithMetadata(stateClass) {
stateClass[ɵNGX_STATE_DECORATOR_METADATA_FIELD] = true;
}
function markMethodOfStateAsAction(stateClass, fieldName, originalMethod) {
stateClass[fieldName] = patchedActionFunction(fieldName, originalMethod);
}
function isFieldHaveTypeFunction(stateClass, fieldName) {
return (!Object.getOwnPropertyDescriptor(stateClass, fieldName)?.get &&
!Object.getOwnPropertyDescriptor(stateClass, fieldName)?.set &&
(typeof stateClass[fieldName] === 'function'));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXN0YXRlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnJhcnkvc3JjL2xpYi9kZWNvcmF0b3JzL25neC1zdGF0ZS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRCxNQUFNLDJCQUEyQixHQUFHO0lBQ2hDLGFBQWE7SUFDYixhQUFhO0NBQ2hCLENBQUM7QUFFRixNQUFNLFVBQVUsUUFBUTtJQUNwQixPQUFPLFNBQVMsYUFBYSxDQUFDLFdBQWdCO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFFeEMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3hELE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTdFLElBQUksQ0FBQyxvQkFBb0IsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ3hFLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLDJCQUEyQixDQUFDLFVBQWU7SUFDaEQsVUFBVSxDQUFDLG1DQUFtQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUM5QixVQUFlLEVBQ2YsU0FBaUIsRUFDakIsY0FBd0I7SUFFeEIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxVQUFlLEVBQUUsU0FBaUI7SUFDL0QsT0FBTyxDQUNILENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHO1FBQzVELENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHO1FBQzVELENBQUMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQ2hELENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgybVOR1hfU1RBVEVfREVDT1JBVE9SX01FVEFEQVRBX0ZJRUxEIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgcGF0Y2hlZEFjdGlvbkZ1bmN0aW9uIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuXHJcbmNvbnN0IGZvcmJpZGRlbk1ldGhvZE5hbWVzVG9QYXRjaCA9IFtcclxuICAgICdjb25zdHJ1Y3RvcicsXHJcbiAgICAnbmdPbkRlc3Ryb3knXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gTmd4U3RhdGUoKTogYW55IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBJbm5lckZ1bmN0aW9uKHRhcmdldENsYXNzOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHByb3RvdHlwZSA9IHRhcmdldENsYXNzLnByb3RvdHlwZTtcclxuXHJcbiAgICAgICAgbWFya1RhcmdldENsYXNzV2l0aE1ldGFkYXRhKHByb3RvdHlwZSk7XHJcblxyXG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSkuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRmllbGROYW1lRm9yYmlkZGVuID0gZm9yYmlkZGVuTWV0aG9kTmFtZXNUb1BhdGNoLmluY2x1ZGVzKGZpZWxkTmFtZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzRmllbGROYW1lRm9yYmlkZGVuICYmIGlzRmllbGRIYXZlVHlwZUZ1bmN0aW9uKHByb3RvdHlwZSwgZmllbGROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgbWFya01ldGhvZE9mU3RhdGVBc0FjdGlvbihwcm90b3R5cGUsIGZpZWxkTmFtZSwgcHJvdG90eXBlW2ZpZWxkTmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXJrVGFyZ2V0Q2xhc3NXaXRoTWV0YWRhdGEoc3RhdGVDbGFzczogYW55KTogdm9pZCB7XHJcbiAgICBzdGF0ZUNsYXNzW8m1TkdYX1NUQVRFX0RFQ09SQVRPUl9NRVRBREFUQV9GSUVMRF0gPSB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXJrTWV0aG9kT2ZTdGF0ZUFzQWN0aW9uKFxyXG4gICAgc3RhdGVDbGFzczogYW55LFxyXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXHJcbiAgICBvcmlnaW5hbE1ldGhvZDogRnVuY3Rpb25cclxuKTogdm9pZCB7XHJcbiAgICBzdGF0ZUNsYXNzW2ZpZWxkTmFtZV0gPSBwYXRjaGVkQWN0aW9uRnVuY3Rpb24oZmllbGROYW1lLCBvcmlnaW5hbE1ldGhvZCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRmllbGRIYXZlVHlwZUZ1bmN0aW9uKHN0YXRlQ2xhc3M6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGVDbGFzcywgZmllbGROYW1lKT8uZ2V0ICYmXHJcbiAgICAgICAgIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGVDbGFzcywgZmllbGROYW1lKT8uc2V0ICYmXHJcbiAgICAgICAgKHR5cGVvZiBzdGF0ZUNsYXNzW2ZpZWxkTmFtZV0gPT09ICdmdW5jdGlvbicpXHJcbiAgICApO1xyXG59XHJcbiJdfQ==