@mini-rx/signal-store
Version:
Signal Store for Angular
99 lines • 13.1 kB
JavaScript
import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders, } from '@angular/core';
import { Actions, } from '@mini-rx/common';
import { rxEffect, storeCore } from './store-core';
import { Store } from './store';
import { globalCsConfig } from './component-store';
import { fromClassesWithEffectsToClassProviders, fromObjectsWithEffectsToEffects, } from './effects-mapper';
import { COMPONENT_STORE_CONFIG_PROVIDER, EFFECTS_PROVIDER, FEATURE_CONFIGS, FEATURE_NAMES, FEATURE_PROVIDER, FEATURE_REDUCERS, OBJECTS_WITH_EFFECTS, STORE_CONFIG, STORE_PROVIDER, } from './injection-tokens';
// Store
function storeFactory(config) {
return new Store(config);
}
function rootStoreProviderFactory() {
inject(Store);
inject(Actions);
}
export function provideStore(config) {
return makeEnvironmentProviders([
{ provide: STORE_CONFIG, useValue: config },
{
provide: Store,
useFactory: storeFactory,
deps: [STORE_CONFIG],
},
{
provide: Actions,
useValue: storeCore.actions$,
},
{ provide: STORE_PROVIDER, useFactory: rootStoreProviderFactory },
{
provide: ENVIRONMENT_INITIALIZER,
multi: true,
useFactory() {
return () => inject(STORE_PROVIDER);
},
},
]);
}
// Feature
function featureProviderFactory() {
const featureNames = inject(FEATURE_NAMES);
const reducers = inject(FEATURE_REDUCERS);
const configs = inject(FEATURE_CONFIGS);
featureNames.forEach((featureName, index) => {
storeCore.addFeature(featureName, reducers[index], configs[index]);
});
}
export function provideFeature(featureName, reducer, config) {
return makeEnvironmentProviders([
{ provide: FEATURE_NAMES, multi: true, useValue: featureName },
{ provide: FEATURE_REDUCERS, multi: true, useValue: reducer },
{ provide: FEATURE_CONFIGS, multi: true, useValue: config },
{ provide: FEATURE_PROVIDER, useFactory: featureProviderFactory },
{
provide: ENVIRONMENT_INITIALIZER,
multi: true,
useFactory() {
return () => inject(FEATURE_PROVIDER);
},
},
]);
}
// Effects
function effectsProviderFactory() {
const objectsWithEffects = inject(OBJECTS_WITH_EFFECTS);
const effects = fromObjectsWithEffectsToEffects(objectsWithEffects);
effects.forEach((effect) => {
rxEffect(effect);
});
}
export function provideEffects(...classesWithEffects) {
return makeEnvironmentProviders([
...fromClassesWithEffectsToClassProviders(OBJECTS_WITH_EFFECTS, classesWithEffects),
{ provide: EFFECTS_PROVIDER, useFactory: effectsProviderFactory },
{
provide: ENVIRONMENT_INITIALIZER,
multi: true,
useFactory() {
return () => inject(EFFECTS_PROVIDER);
},
},
]);
}
// Component Store config
export function provideComponentStoreConfig(config) {
return makeEnvironmentProviders([
{
provide: COMPONENT_STORE_CONFIG_PROVIDER,
useFactory: () => globalCsConfig.set(config),
},
{
provide: ENVIRONMENT_INITIALIZER,
multi: true,
useFactory() {
return () => inject(COMPONENT_STORE_CONFIG_PROVIDER);
},
},
]);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zaWduYWwtc3RvcmUvc3JjL2xpYi9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBRTNCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFSCxPQUFPLEdBTVYsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsc0NBQXNDLEVBQ3RDLCtCQUErQixHQUNsQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDSCwrQkFBK0IsRUFDL0IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsWUFBWSxFQUNaLGNBQWMsR0FDakIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixRQUFRO0FBQ1IsU0FBUyxZQUFZLENBQUMsTUFBNkI7SUFDL0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyx3QkFBd0I7SUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFJLE1BQXNCO0lBQ2xELE9BQU8sd0JBQXdCLENBQUM7UUFDNUIsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7UUFDM0M7WUFDSSxPQUFPLEVBQUUsS0FBSztZQUNkLFVB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QUUsK0JBQStCO1lBQ3hDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztTQUMvQztRQUNEO1lBQ0ksT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVU7Z0JBQ04sT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUN6RCxDQUFDO1NBQ0o7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgICBpbmplY3QsXG4gICAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICAgIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBBY3Rpb24sXG4gICAgQWN0aW9ucyxcbiAgICBBcHBTdGF0ZSxcbiAgICBDb21wb25lbnRTdG9yZUNvbmZpZyxcbiAgICBGZWF0dXJlQ29uZmlnLFxuICAgIFJlZHVjZXIsXG4gICAgU3RvcmVDb25maWcsXG59IGZyb20gJ0BtaW5pLXJ4L2NvbW1vbic7XG5pbXBvcnQgeyByeEVmZmVjdCwgc3RvcmVDb3JlIH0gZnJvbSAnLi9zdG9yZS1jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBnbG9iYWxDc0NvbmZpZyB9IGZyb20gJy4vY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7XG4gICAgZnJvbUNsYXNzZXNXaXRoRWZmZWN0c1RvQ2xhc3NQcm92aWRlcnMsXG4gICAgZnJvbU9iamVjdHNXaXRoRWZmZWN0c1RvRWZmZWN0cyxcbn0gZnJvbSAnLi9lZmZlY3RzLW1hcHBlcic7XG5pbXBvcnQge1xuICAgIENPTVBPTkVOVF9TVE9SRV9DT05GSUdfUFJPVklERVIsXG4gICAgRUZGRUNUU19QUk9WSURFUixcbiAgICBGRUFUVVJFX0NPTkZJR1MsXG4gICAgRkVBVFVSRV9OQU1FUyxcbiAgICBGRUFUVVJFX1BST1ZJREVSLFxuICAgIEZFQVRVUkVfUkVEVUNFUlMsXG4gICAgT0JKRUNUU19XSVRIX0VGRkVDVFMsXG4gICAgU1RPUkVfQ09ORklHLFxuICAgIFNUT1JFX1BST1ZJREVSLFxufSBmcm9tICcuL2luamVjdGlvbi10b2tlbnMnO1xuXG4vLyBTdG9yZVxuZnVuY3Rpb24gc3RvcmVGYWN0b3J5KGNvbmZpZzogU3RvcmVDb25maWc8QXBwU3RhdGU+KSB7XG4gICAgcmV0dXJuIG5ldyBTdG9yZShjb25maWcpO1xufVxuXG5mdW5jdGlvbiByb290U3RvcmVQcm92aWRlckZhY3RvcnkoKTogdm9pZCB7XG4gICAgaW5qZWN0KFN0b3JlKTtcbiAgICBpbmplY3QoQWN0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU3RvcmU8VD4oY29uZmlnOiBTdG9yZUNvbmZpZzxUPik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAgeyBwcm92aWRlOiBTVE9SRV9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogU3RvcmUsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBzdG9yZUZhY3RvcnksXG4gICAgICAgICAgICBkZXBzOiBbU1RPUkVfQ09ORklHXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQWN0aW9ucyxcbiAgICAgICAgICAgIHVzZVZhbHVlOiBzdG9yZUNvcmUuYWN0aW9ucyQsXG4gICAgICAgIH0sXG4gICAgICAgIHsgcHJvdmlkZTogU1RPUkVfUFJPVklERVIsIHVzZUZhY3Rvcnk6IHJvb3RTdG9yZVByb3ZpZGVyRmFjdG9yeSB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRmFjdG9yeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gaW5qZWN0KFNUT1JFX1BST1ZJREVSKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSk7XG59XG5cbi8vIEZlYXR1cmVcbmZ1bmN0aW9uIGZlYXR1cmVQcm92aWRlckZhY3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3QgZmVhdHVyZU5hbWVzID0gaW5qZWN0KEZFQVRVUkVfTkFNRVMpO1xuICAgIGNvbnN0IHJlZHVjZXJzID0gaW5qZWN0KEZFQVRVUkVfUkVEVUNFUlMpO1xuICAgIGNvbnN0IGNvbmZpZ3MgPSBpbmplY3QoRkVBVFVSRV9DT05GSUdTKTtcblxuICAgIGZlYXR1cmVOYW1lcy5mb3JFYWNoKChmZWF0dXJlTmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgc3RvcmVDb3JlLmFkZEZlYXR1cmUoZmVhdHVyZU5hbWUsIHJlZHVjZXJzW2luZGV4XSwgY29uZmlnc1tpbmRleF0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZlYXR1cmU8VD4oXG4gICAgZmVhdHVyZU5hbWU6IHN0cmluZyxcbiAgICByZWR1Y2VyOiBSZWR1Y2VyPFQ+LFxuICAgIGNvbmZpZz86IFBhcnRpYWw8RmVhdHVyZUNvbmZpZzxUPj5cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAgeyBwcm92aWRlOiBGRUFUVVJFX05BTUVTLCBtdWx0aTogdHJ1ZSwgdXNlVmFsdWU6IGZlYXR1cmVOYW1lIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRkVBVFVSRV9SRURVQ0VSUywgbXVsdGk6IHRydWUsIHVzZVZhbHVlOiByZWR1Y2VyIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRkVBVFVSRV9DT05GSUdTLCBtdWx0aTogdHJ1ZSwgdXNlVmFsdWU6IGNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IEZFQVRVUkVfUFJPVklERVIsIHVzZUZhY3Rvcnk6IGZlYXR1cmVQcm92aWRlckZhY3RvcnkgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUZhY3RvcnkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGluamVjdChGRUFUVVJFX1BST1ZJREVSKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSk7XG59XG5cbi8vIEVmZmVjdHNcbmZ1bmN0aW9uIGVmZmVjdHNQcm92aWRlckZhY3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgb2JqZWN0c1dpdGhFZmZlY3RzID0gaW5qZWN0KE9CSkVDVFNfV0lUSF9FRkZFQ1RTKTtcblxuICAgIGNvbnN0IGVmZmVjdHMgPSBmcm9tT2JqZWN0c1dpdGhFZmZlY3RzVG9FZmZlY3RzKG9iamVjdHNXaXRoRWZmZWN0cyk7XG4gICAgZWZmZWN0cy5mb3JFYWNoKChlZmZlY3Q6IE9ic2VydmFibGU8QWN0aW9uPikgPT4ge1xuICAgICAgICByeEVmZmVjdChlZmZlY3QpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUVmZmVjdHMoY2xhc3Nlc1dpdGhFZmZlY3RzOiBUeXBlPGFueT5bXSk6IEVudmlyb25tZW50UHJvdmlkZXJzO1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVFZmZlY3RzKC4uLmNsYXNzZXNXaXRoRWZmZWN0czogVHlwZTxhbnk+W10pOiBFbnZpcm9ubWVudFByb3ZpZGVycztcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRWZmZWN0cyguLi5jbGFzc2VzV2l0aEVmZmVjdHM6IGFueVtdKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICAgIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgICAgICAuLi5mcm9tQ2xhc3Nlc1dpdGhFZmZlY3RzVG9DbGFzc1Byb3ZpZGVycyhPQkpFQ1RTX1dJVEhfRUZGRUNUUywgY2xhc3Nlc1dpdGhFZmZlY3RzKSxcbiAgICAgICAgeyBwcm92aWRlOiBFRkZFQ1RTX1BST1ZJREVSLCB1c2VGYWN0b3J5OiBlZmZlY3RzUHJvdmlkZXJGYWN0b3J5IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VGYWN0b3J5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBpbmplY3QoRUZGRUNUU19QUk9WSURFUik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF0pO1xufVxuXG4vLyBDb21wb25lbnQgU3RvcmUgY29uZmlnXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbXBvbmVudFN0b3JlQ29uZmlnKGNvbmZpZzogQ29tcG9uZW50U3RvcmVDb25maWcpIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ09NUE9ORU5UX1NUT1JFX0NPTkZJR19QUk9WSURFUixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IGdsb2JhbENzQ29uZmlnLnNldChjb25maWcpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRmFjdG9yeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gaW5qZWN0KENPTVBPTkVOVF9TVE9SRV9DT05GSUdfUFJPVklERVIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdKTtcbn1cbiJdfQ==