{"version":3,"file":"solidexpert-ngx-rehydrate.mjs","sources":["../../src/lib/tokens.ts","../../src/lib/utils.ts","../../src/lib/reducers.ts","../../src/lib/rehydration-logger.ts","../../src/lib/store.ts","../../src/lib/browser.ts","../../src/lib/server.ts","../../src/lib/transfer-state.operator.ts","../../src/lib/ngrx-universal-rehydrate-browser.module.ts","../../src/lib/ser.ts","../../src/public-api.ts","../../src/solidexpert-ngx-rehydrate.ts"],"sourcesContent":["import { InjectionToken, makeStateKey } from '@angular/core';\n\nimport type { RehydrationRootConfig } from './utils';\n\nexport const REHYDRATE_ROOT_CONFIG = new InjectionToken<RehydrationRootConfig>('ngrxUniversalHydrateRootConfig');\n\nexport const REHYDRATE_TRANSFER_STATE = makeStateKey<Set<string>>('ngrxUniversalStatesTransferred');\n\nexport const FEATURE_STORES = new InjectionToken<string[]>('ngrxUniversalHydrateFeatureState');","export const enum MergeStrategy {\n    OVERWRITE = 'overwrite',\n    MERGE_OVER = 'mergeOver',\n    MERGE_UNDER = 'mergeUnder',\n}\n\nexport const defaultRehydrationRootConfig: RehydrationRootConfig = {\n    stores: undefined,\n    disableWarnings: false,\n    mergeStrategy: MergeStrategy.MERGE_OVER,\n};\n\nexport interface RehydrationRootConfig {\n    stores: string[] | undefined;\n    disableWarnings: boolean;\n    mergeStrategy: MergeStrategy;\n}\n\nexport function merge(over: any, under: any): any {\n    return Object.entries(over).reduce(\n        (prev, [key, value]) => ({\n            ...prev,\n            [key]: value,\n        }),\n        under\n    );\n}\n\nexport function mergeStates<T, K>(\n    initial: T,\n    transfer: K,\n    mergeStrategy: MergeStrategy\n): any {\n    switch (mergeStrategy) {\n        case MergeStrategy.OVERWRITE:\n            return transfer;\n        case MergeStrategy.MERGE_OVER:\n            return merge(transfer, initial);\n        case MergeStrategy.MERGE_UNDER:\n            return merge(initial, transfer);\n        default:\n            throw Error('Invalid merge strategy must be one of MergeStrategy');\n    }\n}","import { isPlatformBrowser } from '@angular/common';\nimport { inject, type TransferState } from '@angular/core';\nimport { INIT, MetaReducer } from '@ngrx/store';\nimport { REHYDRATE_TRANSFER_STATE } from './tokens';\nimport type { RehydrationRootConfig } from './utils';\nimport { mergeStates } from './utils';\n\nexport function browserRehydrateReducer(\n    // eslint-disable-next-line @typescript-eslint/ban-types\n\n    platformId: Object,\n    _transferStateService: TransferState,\n    config: RehydrationRootConfig\n): MetaReducer<unknown> {\n    const isBrowser = isPlatformBrowser(platformId);\n\n    console.log('browser rehydration', isBrowser);\n\n    if (isBrowser) {\n        /**\n         * This will grab from the transferred state all of the state keys created by this library for the root\n         * and any features that were added\n         */\n        const statesTransferred = _transferStateService.get(REHYDRATE_TRANSFER_STATE, undefined);\n\n        console.log('states transferred', statesTransferred);\n        /**\n         * Only return a reducer that will attempt to rehydrate the state if there were states transferred to begin with\n         */\n        if (statesTransferred) {\n            return (reducer) => (state, action) => {\n                if (action.type === INIT) {\n                    const merged = mergeStates(state, statesTransferred, config.mergeStrategy) || {};\n\n                    return reducer(merged, action);\n                }\n\n                return reducer(state, action);\n            };\n        }\n    }\n\n    /**\n     * If the app is not in the browser or if there were no transferred states then return a meta reducer\n     * that does not don anything to the state\n     */\n    return (reducer) => (state, action) => reducer(state, action);\n}","import { Inject, Injectable } from '@angular/core';\nimport { REHYDRATE_ROOT_CONFIG } from './tokens';\nimport type { RehydrationRootConfig } from './utils';\n\n@Injectable()\nexport class RehydrationLogger {\n    constructor(\n        @Inject(REHYDRATE_ROOT_CONFIG) private config: RehydrationRootConfig\n    ) {}\n\n    log(msg: string): void {\n        if (!this.config.disableWarnings) {\n            console.warn(`NgRx Universal Rehydration: ${msg}`);\n        }\n    }\n}","import { NgModule } from '@angular/core';\nimport {\n    createAction,\n    createFeature,\n    createReducer,\n    createSelector,\n    on,\n    props,\n    StoreModule,\n} from '@ngrx/store';\n\nconst REHYDRATE_STORE = 'rehydrateStore';\n\ninterface RehydrateStore {\n    slices: string[];\n}\n\nconst initialRehydrateStore: RehydrateStore = {\n    slices: [],\n};\n\nexport const addSlice = createAction(\n    '[@trellisorg/ngrx-universal-rehydrate] add store slice(s)',\n    props<{ slices: string[] }>()\n);\n\nexport const rehydrateFeature = createFeature({\n    name: REHYDRATE_STORE,\n    reducer: createReducer(\n        initialRehydrateStore,\n        on(addSlice, (state, { slices }) => ({\n            ...state,\n            slices: [...new Set<string>([...state.slices, ...slices])],\n        }))\n    ),\n});\n\nexport const selectStateToTransfer = createSelector(\n    (state) => state,\n    rehydrateFeature.selectSlices,\n    (state, slices) =>\n        slices.length > 0\n            ? slices.reduce(\n                  (toTransfer, slice) => ({\n                      ...toTransfer,\n                      [slice]: state[slice],\n                  }),\n                  {}\n              )\n            : undefined\n);\n\n@NgModule({\n    imports: [StoreModule.forFeature(rehydrateFeature)],\n})\nexport class RehydrateStoreModule {}","import { isPlatformServer } from '@angular/common';\nimport { APP_INITIALIZER, EnvironmentProviders, PLATFORM_ID, Provider, TransferState, inject, makeEnvironmentProviders } from '@angular/core';\nimport { META_REDUCERS, Store, provideState } from '@ngrx/store';\nimport { browserRehydrateReducer } from './reducers';\nimport { RehydrationLogger } from './rehydration-logger';\nimport { addSlice, rehydrateFeature } from './store';\nimport { REHYDRATE_ROOT_CONFIG } from './tokens';\nimport { RehydrationRootConfig, defaultRehydrationRootConfig } from './utils';\n\n/**\n * Provides NgRx state rehydration for browser\n * \n * @param config Configuration for rehydration\n * @returns Environment providers for rehydration\n * \n * @example\n * ```typescript\n * export const appConfig: ApplicationConfig = {\n *   providers: [\n *     provideRehydrateBrowser({\n *       stores: ['auth', 'user', 'settings'],\n *       mergeStrategy: MergeStrategy.OVERWRITE,\n *     }),\n *   ],\n * };\n * ```\n */\nexport function provideRehydrateBrowser(\n    config: Partial<RehydrationRootConfig> = {}\n): EnvironmentProviders {\n    const mergedConfig = {\n        ...defaultRehydrationRootConfig,\n        ...config,\n    };\n\n    const providers: (Provider | EnvironmentProviders)[] = [\n        // Provide the rehydrate configuration\n        {\n            provide: REHYDRATE_ROOT_CONFIG,\n            useValue: mergedConfig,\n        },\n        // Provide the rehydrate feature reducer\n        provideState(rehydrateFeature),\n        // Provide the meta-reducer for rehydration\n        {\n            provide: META_REDUCERS,\n            deps: [PLATFORM_ID, TransferState, REHYDRATE_ROOT_CONFIG],\n            useFactory: browserRehydrateReducer,\n            multi: true,\n        },\n        // Initialize slices on server\n        {\n            provide: APP_INITIALIZER,\n            useFactory: () => {\n                const platformId = inject(PLATFORM_ID);\n                const store = inject(Store);\n                const rehydrateConfig = inject(REHYDRATE_ROOT_CONFIG);\n\n                return () => {\n                    if (isPlatformServer(platformId)) {\n                        console.log('adding slices', rehydrateConfig.stores);\n                        store.dispatch(addSlice({ slices: rehydrateConfig.stores ?? [] }));\n                    }\n                };\n            },\n            multi: true,\n        },\n        // Provide the rehydration logger\n        RehydrationLogger,\n    ];\n\n    return makeEnvironmentProviders(providers);\n}\n\n/**\n * Provides additional store slices for rehydration\n * Use this in lazy-loaded routes or feature modules\n * \n * @param stores Array of store slice names to rehydrate\n * @returns Environment providers\n * \n * @example\n * ```typescript\n * export const routes: Routes = [\n *   {\n *     path: 'admin',\n *     providers: [\n *       provideRehydrateFeature(['adminUsers', 'adminSettings'])\n *     ],\n *     loadChildren: () => import('./admin/routes'),\n *   },\n * ];\n * ```\n */\nexport function provideRehydrateFeature(stores: string[]): EnvironmentProviders {\n    const providers: (Provider | EnvironmentProviders)[] = [\n        {\n            provide: APP_INITIALIZER,\n            useFactory: () => {\n                const platformId = inject(PLATFORM_ID);\n                const store = inject(Store);\n\n                return () => {\n                    if (isPlatformServer(platformId)) {\n                        store.dispatch(addSlice({ slices: stores }));\n                    }\n                };\n            },\n            multi: true,\n        },\n    ];\n\n    return makeEnvironmentProviders(providers);\n}\n\n","import { APP_BOOTSTRAP_LISTENER, EnvironmentProviders, Provider, TransferState, inject, makeEnvironmentProviders } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { take } from 'rxjs/operators';\nimport { selectStateToTransfer } from './store';\nimport { REHYDRATE_TRANSFER_STATE } from './tokens';\n\n/**\n * Provides NgRx state rehydration for server-side rendering\n * \n * This provider sets up the necessary hooks to transfer state from the server to the client\n * during Angular Universal SSR.\n * \n * @returns Environment providers for server-side rehydration\n * \n * @example\n * ```typescript\n * // app.config.server.ts\n * export const serverConfig: ApplicationConfig = {\n *   providers: [\n *     provideServerRendering(),\n *     provideRehydrateServer(),\n *   ],\n * };\n * ```\n */\nexport function provideRehydrateServer(): EnvironmentProviders {\n    const providers: Provider[] = [\n        {\n            provide: APP_BOOTSTRAP_LISTENER,\n            multi: true,\n            useFactory: () => {\n                const store = inject(Store);\n                const transferState = inject(TransferState);\n\n                return async () => {\n                    try {\n                        const state = await store\n                            .select(selectStateToTransfer)\n                            .pipe(take(1))\n                            .toPromise();\n\n                        if (state) {\n                            transferState.set(REHYDRATE_TRANSFER_STATE, state);\n                        }\n                    } catch (error) {\n                        console.error('Error transferring state:', error);\n                    }\n                };\n            },\n        },\n    ];\n\n    return makeEnvironmentProviders(providers);\n}\n\n","import { isPlatformServer } from '@angular/common';\nimport { TransferState, makeStateKey } from '@angular/core';\nimport { Observable, OperatorFunction, Subscriber } from 'rxjs';\nimport { createOperatorSubscriber } from 'rxjs/internal/operators/OperatorSubscriber';\n\nexport function isFunction(value: any): value is (...args: any[]) => any {\n    return typeof value === 'function';\n}\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType<typeof Observable>['lift'] } {\n    return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate<T, R>(\n    init: (liftedSource: Observable<T>, subscriber: Subscriber<R>) => (() => void) | void\n): OperatorFunction<T, R> {\n    return (source: Observable<T>) => {\n        if (hasLift(source)) {\n            return source.lift(function (this: Subscriber<R>, liftedSource: Observable<T>) {\n                try {\n                    return init(liftedSource, this);\n                } catch (err) {\n                    this.error(err);\n                }\n            });\n        }\n        throw new TypeError('Unable to lift unknown Observable type');\n    };\n}\n\n/**\n * Internal filter function that manages transfer state keys\n * @internal\n */\nfunction filter<T>(key: string, platformId: Object, transferState: TransferState): boolean {\n    const stateKey = makeStateKey<T>(key);\n\n    if (isPlatformServer(platformId)) {\n        // On server: mark that this request was made\n        transferState.set(stateKey, true as any);\n        return true;\n    }\n\n    if (transferState.hasKey(stateKey)) {\n        // On browser: if key exists, remove it and skip this request\n        transferState.remove(stateKey);\n        return false;\n    }\n\n    // On browser: if key doesn't exist, allow the request\n    return true;\n}\n\n/**\n * RxJS operator that prevents duplicate HTTP requests during SSR hydration.\n * \n * This operator uses Angular's TransferState to track which HTTP requests were made on the server.\n * On the browser, it skips the initial request if it was already made on the server, preventing\n * duplicate calls during hydration.\n * \n * **How it works:**\n * - **Server**: Allows the request and marks it in TransferState\n * - **Browser (first load)**: Skips the request if it was made on server\n * - **Browser (subsequent)**: Allows the request normally\n * \n * @param key Unique identifier for this request (e.g., 'api-users-list')\n * @param platformId Angular PLATFORM_ID to detect server/browser\n * @param transferState Angular TransferState service\n * @returns RxJS operator function\n * \n * @example\n * Basic usage in a service:\n * ```typescript\n * import { inject, PLATFORM_ID } from '@angular/core';\n * import { HttpClient } from '@angular/common/http';\n * import { TransferState } from '@angular/core';\n * import { withTransferState } from '@solidexpert/ngx-rehydrate';\n * \n * @Injectable({ providedIn: 'root' })\n * export class UserService {\n *   private http = inject(HttpClient);\n *   private platformId = inject(PLATFORM_ID);\n *   private transferState = inject(TransferState);\n * \n *   getUsers() {\n *     return this.http.get('/api/users').pipe(\n *       withTransferState('api-users', this.platformId, this.transferState)\n *     );\n *   }\n * }\n * ```\n * \n * @example\n * With NgRx Effects:\n * ```typescript\n * @Injectable()\n * export class UserEffects {\n *   private actions$ = inject(Actions);\n *   private userService = inject(UserService);\n *   private platformId = inject(PLATFORM_ID);\n *   private transferState = inject(TransferState);\n * \n *   loadUsers$ = createEffect(() =>\n *     this.actions$.pipe(\n *       ofType(UserActions.loadUsers),\n *       switchMap(() =>\n *         this.userService.getUsers().pipe(\n *           withTransferState('users-list', this.platformId, this.transferState),\n *           map(users => UserActions.loadUsersSuccess({ users })),\n *           catchError(error => of(UserActions.loadUsersFailure({ error })))\n *         )\n *       )\n *     )\n *   );\n * }\n * ```\n * \n * @example\n * With parameters in the key:\n * ```typescript\n * getUserById(id: string) {\n *   return this.http.get(`/api/users/${id}`).pipe(\n *     withTransferState(`api-user-${id}`, this.platformId, this.transferState)\n *   );\n * }\n * ```\n * \n * @example\n * Helper function for cleaner code:\n * ```typescript\n * @Injectable({ providedIn: 'root' })\n * export class ApiService {\n *   private http = inject(HttpClient);\n *   private platformId = inject(PLATFORM_ID);\n *   private transferState = inject(TransferState);\n * \n *   // Helper method\n *   private withTransfer<T>(key: string) {\n *     return withTransferState<T>(key, this.platformId, this.transferState);\n *   }\n * \n *   getUsers() {\n *     return this.http.get('/api/users').pipe(\n *       this.withTransfer('api-users')\n *     );\n *   }\n * \n *   getPosts() {\n *     return this.http.get('/api/posts').pipe(\n *       this.withTransfer('api-posts')\n *     );\n *   }\n * }\n * ```\n * \n * @see {@link https://angular.io/api/platform-browser/TransferState TransferState Documentation}\n * @see {@link https://angular.io/guide/universal Angular Universal Guide}\n */\nexport function withTransferState<T>(\n    key: string,\n    platformId: Object,\n    transferState: TransferState\n): OperatorFunction<T, T> {\n    return operate((source, subscriber) => {\n        // Subscribe to the source, all errors and completions are forwarded to the consumer\n        source.subscribe(\n            createOperatorSubscriber(\n                subscriber,\n                (value) => filter(key, platformId, transferState) && subscriber.next(value)\n            )\n        );\n    });\n}\n\n","import { isPlatformServer } from '@angular/common';\nimport { Inject, Injector, ModuleWithProviders, NgModule, PLATFORM_ID, TransferState } from '@angular/core';\n\nimport { META_REDUCERS, Store } from '@ngrx/store';\nimport { browserRehydrateReducer } from './reducers';\nimport { RehydrationLogger } from './rehydration-logger';\nimport { RehydrateStoreModule, addSlice } from './store';\nimport { FEATURE_STORES, REHYDRATE_ROOT_CONFIG } from './tokens';\nimport { RehydrationRootConfig, defaultRehydrationRootConfig } from './utils';\n\n@NgModule({\n    imports: [RehydrateStoreModule], //git pull origin master\n})\nexport class NgrxUniversalRehydrateBrowserRootModule {\n    constructor(\n        _injector: Injector,\n        @Inject(REHYDRATE_ROOT_CONFIG) rootConfig: RehydrationRootConfig,\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        @Inject(PLATFORM_ID) platformId: Object,\n        _store: Store\n    ) {\n        /*\n         * If we are on the server then we need to add the slices defined at root\n         * to the store so they can be transferred\n         */\n        if (isPlatformServer(platformId)) {\n            console.log('adding slices', rootConfig.stores);\n            _store.dispatch(addSlice({ slices: rootConfig.stores ?? [] }));\n        }\n    }\n}\n\n@NgModule({})\nexport class NgrxUniversalRehydrateBrowserFeatureModule {\n    constructor(\n        @Inject(FEATURE_STORES) private stores: string[],\n        // eslint-disable-next-line @typescript-eslint/ban-types\n        @Inject(PLATFORM_ID) platformId: Object,\n        private _store: Store\n    ) {\n        if (isPlatformServer(platformId)) this._store.dispatch(addSlice({ slices: stores }));\n    }\n}\n\n@NgModule({})\nexport class NgrxUniversalRehydrateBrowserModule {\n    static forRoot(\n        config: Partial<RehydrationRootConfig>\n    ): ModuleWithProviders<NgrxUniversalRehydrateBrowserRootModule> {\n        return {\n            ngModule: NgrxUniversalRehydrateBrowserRootModule,\n            providers: [\n                {\n                    provide: REHYDRATE_ROOT_CONFIG,\n                    useValue: {\n                        ...defaultRehydrationRootConfig,\n                        ...config,\n                    },\n                },\n                {\n                    provide: META_REDUCERS,\n                    deps: [PLATFORM_ID, TransferState, REHYDRATE_ROOT_CONFIG],\n                    useFactory: browserRehydrateReducer,\n                    multi: true,\n                },\n                RehydrationLogger,\n            ],\n        };\n    }\n\n    static forFeature(\n        stores: RehydrationRootConfig['stores']\n    ): ModuleWithProviders<NgrxUniversalRehydrateBrowserFeatureModule> {\n        return {\n            ngModule: NgrxUniversalRehydrateBrowserFeatureModule,\n            providers: [\n                {\n                    provide: FEATURE_STORES,\n                    useValue: stores,\n                    multi: true,\n                },\n            ],\n        };\n    }\n}","import { Inject, ModuleWithProviders, NgModule, Optional, TransferState } from '@angular/core';\n\nimport { BEFORE_APP_SERIALIZED } from '@angular/platform-server';\nimport { Store } from '@ngrx/store';\nimport { take } from 'rxjs/operators';\nimport { selectStateToTransfer } from './store';\nimport { REHYDRATE_TRANSFER_STATE } from './tokens';\n\n/**\n *\n * @param store\n * @param transferState\n * @param existing The existing callback for serializing the TransferState\n */\nexport function serializeRehydrateStateFactory(store: Store, transferState: TransferState, existing: () => void) {\n    return async () => {\n        const state = await store.select(selectStateToTransfer).pipe(take(1)).toPromise();\n\n        if (state) {\n            transferState.set(REHYDRATE_TRANSFER_STATE, state);\n        }\n\n        await existing();\n    };\n}\n\n@NgModule({})\nexport class NgrxUniversalRehydrateServerModule {\n    constructor(\n        @Optional()\n        @Inject(BEFORE_APP_SERIALIZED)\n        callbacks: (() => void | Promise<void>)[],\n        _store: Store,\n        _transferState: TransferState\n    ) {\n        /*\n         * Register the callback that will store the saved slices into TransferState prior to render\n         *\n         * As it stands there is only one BEFORE_APP_SERIALIZED callback in the Angular framework.\n         * This is the callback to serialize the transfer state (if it exists at all).\n         *\n         * We are assuming that the first callback is the aforementioned callback, this may break in the future\n         * since we are wrapping that callback with our own callback to ensure that the transfer state for rehydration\n         * is added to the TransferState before it is serialized\n         */\n        const serializeStateCallback =\n            callbacks[0] ||\n            // So, so hacky. But currently there is no other way to find the right callback since the functions\n            // prototype does not have the name property. Open to ideas here.\n            callbacks.find((c) => c.toString().includes(`appId + '-state'`));\n\n        if (serializeStateCallback) {\n            callbacks[0] = serializeRehydrateStateFactory(_store, _transferState, serializeStateCallback);\n        }\n    }\n\n    static forServer(): ModuleWithProviders<NgrxUniversalRehydrateServerModule> {\n        return {\n            ngModule: NgrxUniversalRehydrateServerModule,\n            providers: [],\n        };\n    }\n}","/*\n * Public API Surface of @solidexpert/ngx-rehydrate\n */\n\n// Modern standalone providers (Recommended)\nexport * from './lib/browser';\nexport * from './lib/server';\n\n// Core functionality\nexport * from './lib/reducers';\nexport * from './lib/store';\nexport * from './lib/tokens';\nexport * from './lib/utils';\nexport * from './lib/rehydration-logger';\n\n// RxJS operators\nexport * from './lib/transfer-state.operator';\n\n// Legacy NgModule-based API (Deprecated - use standalone providers instead)\n/**\n * @deprecated Use `provideRehydrateBrowser()` instead\n */\nexport * from './lib/ngrx-universal-rehydrate-browser.module';\n\n/**\n * @deprecated Use `provideRehydrateServer()` instead\n */\nexport * from './lib/ser';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}