UNPKG

14.3 kBJavaScriptView Raw
1import { isDevMode } from '@angular/core';
2import { serializationCheckMetaReducer, immutabilityCheckMetaReducer, inNgZoneAssertMetaReducer, } from './meta-reducers';
3import { _USER_RUNTIME_CHECKS, ACTIVE_RUNTIME_CHECKS, META_REDUCERS, USER_RUNTIME_CHECKS, _ACTION_TYPE_UNIQUENESS_CHECK, } from './tokens';
4import { REGISTERED_ACTION_TYPES } from './globals';
5import { RUNTIME_CHECK_URL } from './meta-reducers/utils';
6export function createActiveRuntimeChecks(runtimeChecks) {
7 if (isDevMode()) {
8 return Object.assign({ strictStateSerializability: false, strictActionSerializability: false, strictStateImmutability: true, strictActionImmutability: true, strictActionWithinNgZone: false, strictActionTypeUniqueness: false }, runtimeChecks);
9 }
10 return {
11 strictStateSerializability: false,
12 strictActionSerializability: false,
13 strictStateImmutability: false,
14 strictActionImmutability: false,
15 strictActionWithinNgZone: false,
16 strictActionTypeUniqueness: false,
17 };
18}
19export function createSerializationCheckMetaReducer({ strictActionSerializability, strictStateSerializability, }) {
20 return (reducer) => strictActionSerializability || strictStateSerializability
21 ? serializationCheckMetaReducer(reducer, {
22 action: (action) => strictActionSerializability && !ignoreNgrxAction(action),
23 state: () => strictStateSerializability,
24 })
25 : reducer;
26}
27export function createImmutabilityCheckMetaReducer({ strictActionImmutability, strictStateImmutability, }) {
28 return (reducer) => strictActionImmutability || strictStateImmutability
29 ? immutabilityCheckMetaReducer(reducer, {
30 action: (action) => strictActionImmutability && !ignoreNgrxAction(action),
31 state: () => strictStateImmutability,
32 })
33 : reducer;
34}
35function ignoreNgrxAction(action) {
36 return action.type.startsWith('@ngrx');
37}
38export function createInNgZoneCheckMetaReducer({ strictActionWithinNgZone, }) {
39 return (reducer) => strictActionWithinNgZone
40 ? inNgZoneAssertMetaReducer(reducer, {
41 action: (action) => strictActionWithinNgZone && !ignoreNgrxAction(action),
42 })
43 : reducer;
44}
45export function provideRuntimeChecks(runtimeChecks) {
46 return [
47 {
48 provide: _USER_RUNTIME_CHECKS,
49 useValue: runtimeChecks,
50 },
51 {
52 provide: USER_RUNTIME_CHECKS,
53 useFactory: _runtimeChecksFactory,
54 deps: [_USER_RUNTIME_CHECKS],
55 },
56 {
57 provide: ACTIVE_RUNTIME_CHECKS,
58 deps: [USER_RUNTIME_CHECKS],
59 useFactory: createActiveRuntimeChecks,
60 },
61 {
62 provide: META_REDUCERS,
63 multi: true,
64 deps: [ACTIVE_RUNTIME_CHECKS],
65 useFactory: createImmutabilityCheckMetaReducer,
66 },
67 {
68 provide: META_REDUCERS,
69 multi: true,
70 deps: [ACTIVE_RUNTIME_CHECKS],
71 useFactory: createSerializationCheckMetaReducer,
72 },
73 {
74 provide: META_REDUCERS,
75 multi: true,
76 deps: [ACTIVE_RUNTIME_CHECKS],
77 useFactory: createInNgZoneCheckMetaReducer,
78 },
79 ];
80}
81export function checkForActionTypeUniqueness() {
82 return [
83 {
84 provide: _ACTION_TYPE_UNIQUENESS_CHECK,
85 multi: true,
86 deps: [ACTIVE_RUNTIME_CHECKS],
87 useFactory: _actionTypeUniquenessCheck,
88 },
89 ];
90}
91export function _runtimeChecksFactory(runtimeChecks) {
92 return runtimeChecks;
93}
94export function _actionTypeUniquenessCheck(config) {
95 if (!config.strictActionTypeUniqueness) {
96 return;
97 }
98 const duplicates = Object.entries(REGISTERED_ACTION_TYPES)
99 .filter(([, registrations]) => registrations > 1)
100 .map(([type]) => type);
101 if (duplicates.length) {
102 throw new Error(`Action types are registered more than once, ${duplicates
103 .map((type) => `"${type}"`)
104 .join(', ')}. ${RUNTIME_CHECK_URL}#strictactiontypeuniqueness`);
105 }
106}
107//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZV9jaGVja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JlL3NyYy9ydW50aW1lX2NoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsNEJBQTRCLEVBQzVCLHlCQUF5QixHQUMxQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsNkJBQTZCLEdBQzlCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLGFBQXNDO0lBRXRDLElBQUksU0FBUyxFQUFFLEVBQUU7UUFDZix1QkFDRSwwQkFBMEIsRUFBRSxLQUFLLEVBQ2pDLDJCQUEyQixFQUFFLEtBQUssRUFDbEMsdUJBQXVCLEVBQUUsSUFBSSxFQUM3Qix3QkFBd0IsRUFBRSxJQUFJLEVBQzlCLHdCQUF3QixFQUFFLEtBQUssRUFDL0IsMEJBQTBCLEVBQUUsS0FBSyxJQUM5QixhQUFhLEVBQ2hCO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsMEJBQTBCLEVBQUUsS0FBSztRQUNqQywyQkFBMkIsRUFBRSxLQUFLO1FBQ2xDLHVCQUF1QixFQUFFLEtBQUs7UUFDOUIsd0JBQXdCLEVBQUUsS0FBSztRQUMvQix3QkFBd0IsRUFBRSxLQUFLO1FBQy9CLDBCQUEwQixFQUFFLEtBQUs7S0FDbEMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsbUNBQW1DLENBQUMsRUFDbEQsMkJBQTJCLEVBQzNCLDBCQUEwQixHQUNaO0lBQ2QsT0FBTyxD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QUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUU7UUFDdEMsT0FBTztLQUNSO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztTQUN2RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekIsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsK0NBQStDLFVBQVU7YUFDdEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDO2FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxpQkFBaUIsNkJBQTZCLENBQ2pFLENBQUM7S0FDSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Rldk1vZGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBzZXJpYWxpemF0aW9uQ2hlY2tNZXRhUmVkdWNlcixcbiAgaW1tdXRhYmlsaXR5Q2hlY2tNZXRhUmVkdWNlcixcbiAgaW5OZ1pvbmVBc3NlcnRNZXRhUmVkdWNlcixcbn0gZnJvbSAnLi9tZXRhLXJlZHVjZXJzJztcbmltcG9ydCB7IFJ1bnRpbWVDaGVja3MsIE1ldGFSZWR1Y2VyLCBBY3Rpb24gfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1xuICBfVVNFUl9SVU5USU1FX0NIRUNLUyxcbiAgQUNUSVZFX1JVTlRJTUVfQ0hFQ0tTLFxuICBNRVRBX1JFRFVDRVJTLFxuICBVU0VSX1JVTlRJTUVfQ0hFQ0tTLFxuICBfQUNUSU9OX1RZUEVfVU5JUVVFTkVTU19DSEVDSyxcbn0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgUkVHSVNURVJFRF9BQ1RJT05fVFlQRVMgfSBmcm9tICcuL2dsb2JhbHMnO1xuaW1wb3J0IHsgUlVOVElNRV9DSEVDS19VUkwgfSBmcm9tICcuL21ldGEtcmVkdWNlcnMvdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aXZlUnVudGltZUNoZWNrcyhcbiAgcnVudGltZUNoZWNrcz86IFBhcnRpYWw8UnVudGltZUNoZWNrcz5cbik6IFJ1bnRpbWVDaGVja3Mge1xuICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6IGZhbHNlLFxuICAgICAgc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiBmYWxzZSxcbiAgICAgIHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiB0cnVlLFxuICAgICAgc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiB0cnVlLFxuICAgICAgc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiBmYWxzZSxcbiAgICAgIHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiBmYWxzZSxcbiAgICAgIC4uLnJ1bnRpbWVDaGVja3MsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6IGZhbHNlLFxuICAgIHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTogZmFsc2UsXG4gICAgc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6IGZhbHNlLFxuICAgIHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTogZmFsc2UsXG4gICAgc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiBmYWxzZSxcbiAgICBzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczogZmFsc2UsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJpYWxpemF0aW9uQ2hlY2tNZXRhUmVkdWNlcih7XG4gIHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eSxcbiAgc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHksXG59OiBSdW50aW1lQ2hlY2tzKTogTWV0YVJlZHVjZXIge1xuICByZXR1cm4gKHJlZHVjZXIpID0+XG4gICAgc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5IHx8IHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5XG4gICAgICA/IHNlcmlhbGl6YXRpb25DaGVja01ldGFSZWR1Y2VyKHJlZHVjZXIsIHtcbiAgICAgICAgICBhY3Rpb246IChhY3Rpb24pID0+XG4gICAgICAgICAgICBzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHkgJiYgIWlnbm9yZU5ncnhBY3Rpb24oYWN0aW9uKSxcbiAgICAgICAgICBzdGF0ZTogKCkgPT4gc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHksXG4gICAgICAgIH0pXG4gICAgICA6IHJlZHVjZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbW11dGFiaWxpdHlDaGVja01ldGFSZWR1Y2VyKHtcbiAgc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5LFxuICBzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eSxcbn06IFJ1bnRpbWVDaGVja3MpOiBNZXRhUmVkdWNlciB7XG4gIHJldHVybiAocmVkdWNlcikgPT5cbiAgICBzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHkgfHwgc3RyaWN0U3RhdGVJbW11dGFiaWxpdHlcbiAgICAgID8gaW1tdXRhYmlsaXR5Q2hlY2tNZXRhUmVkdWNlcihyZWR1Y2VyLCB7XG4gICAgICAgICAgYWN0aW9uOiAoYWN0aW9uKSA9PlxuICAgICAgICAgICAgc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5ICYmICFpZ25vcmVOZ3J4QWN0aW9uKGFjdGlvbiksXG4gICAgICAgICAgc3RhdGU6ICgpID0+IHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5LFxuICAgICAgICB9KVxuICAgICAgOiByZWR1Y2VyO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVOZ3J4QWN0aW9uKGFjdGlvbjogQWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24udHlwZS5zdGFydHNXaXRoKCdAbmdyeCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5OZ1pvbmVDaGVja01ldGFSZWR1Y2VyKHtcbiAgc3RyaWN0QWN0aW9uV2l0aGluTmdab25lLFxufTogUnVudGltZUNoZWNrcyk6IE1ldGFSZWR1Y2VyIHtcbiAgcmV0dXJuIChyZWR1Y2VyKSA9PlxuICAgIHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZVxuICAgICAgPyBpbk5nWm9uZUFzc2VydE1ldGFSZWR1Y2VyKHJlZHVjZXIsIHtcbiAgICAgICAgICBhY3Rpb246IChhY3Rpb24pID0+XG4gICAgICAgICAgICBzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmUgJiYgIWlnbm9yZU5ncnhBY3Rpb24oYWN0aW9uKSxcbiAgICAgICAgfSlcbiAgICAgIDogcmVkdWNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVSdW50aW1lQ2hlY2tzKFxuICBydW50aW1lQ2hlY2tzPzogUGFydGlhbDxSdW50aW1lQ2hlY2tzPlxuKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogX1VTRVJfUlVOVElNRV9DSEVDS1MsXG4gICAgICB1c2VWYWx1ZTogcnVudGltZUNoZWNrcyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFVTRVJfUlVOVElNRV9DSEVDS1MsXG4gICAgICB1c2VGYWN0b3J5OiBfcnVudGltZUNoZWNrc0ZhY3RvcnksXG4gICAgICBkZXBzOiBbX1VTRVJfUlVOVElNRV9DSEVDS1NdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQUNUSVZFX1JVTlRJTUVfQ0hFQ0tTLFxuICAgICAgZGVwczogW1VTRVJfUlVOVElNRV9DSEVDS1NdLFxuICAgICAgdXNlRmFjdG9yeTogY3JlYXRlQWN0aXZlUnVudGltZUNoZWNrcyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1FVEFfUkVEVUNFUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIGRlcHM6IFtBQ1RJVkVfUlVOVElNRV9DSEVDS1NdLFxuICAgICAgdXNlRmFjdG9yeTogY3JlYXRlSW1tdXRhYmlsaXR5Q2hlY2tNZXRhUmVkdWNlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1FVEFfUkVEVUNFUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIGRlcHM6IFtBQ1RJVkVfUlVOVElNRV9DSEVDS1NdLFxuICAgICAgdXNlRmFjdG9yeTogY3JlYXRlU2VyaWFsaXphdGlvbkNoZWNrTWV0YVJlZHVjZXIsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNRVRBX1JFRFVDRVJTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICBkZXBzOiBbQUNUSVZFX1JVTlRJTUVfQ0hFQ0tTXSxcbiAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZUluTmdab25lQ2hlY2tNZXRhUmVkdWNlcixcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tGb3JBY3Rpb25UeXBlVW5pcXVlbmVzcygpOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBfQUNUSU9OX1RZUEVfVU5JUVVFTkVTU19DSEVDSyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgZGVwczogW0FDVElWRV9SVU5USU1FX0NIRUNLU10sXG4gICAgICB1c2VGYWN0b3J5OiBfYWN0aW9uVHlwZVVuaXF1ZW5lc3NDaGVjayxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3J1bnRpbWVDaGVja3NGYWN0b3J5KFxuICBydW50aW1lQ2hlY2tzOiBSdW50aW1lQ2hlY2tzXG4pOiBSdW50aW1lQ2hlY2tzIHtcbiAgcmV0dXJuIHJ1bnRpbWVDaGVja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfYWN0aW9uVHlwZVVuaXF1ZW5lc3NDaGVjayhjb25maWc6IFJ1bnRpbWVDaGVja3MpOiB2b2lkIHtcbiAgaWYgKCFjb25maWcuc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVzID0gT2JqZWN0LmVudHJpZXMoUkVHSVNURVJFRF9BQ1RJT05fVFlQRVMpXG4gICAgLmZpbHRlcigoWywgcmVnaXN0cmF0aW9uc10pID0+IHJlZ2lzdHJhdGlvbnMgPiAxKVxuICAgIC5tYXAoKFt0eXBlXSkgPT4gdHlwZSk7XG5cbiAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFjdGlvbiB0eXBlcyBhcmUgcmVnaXN0ZXJlZCBtb3JlIHRoYW4gb25jZSwgJHtkdXBsaWNhdGVzXG4gICAgICAgIC5tYXAoKHR5cGUpID0+IGBcIiR7dHlwZX1cImApXG4gICAgICAgIC5qb2luKCcsICcpfS4gJHtSVU5USU1FX0NIRUNLX1VSTH0jc3RyaWN0YWN0aW9udHlwZXVuaXF1ZW5lc3NgXG4gICAgKTtcbiAgfVxufVxuIl19
\No newline at end of file