{"version":3,"file":"o3r-core.mjs","sources":["../../src/core/application/build-properties.ts","../../src/core/metadata/component-decorator.ts","../../src/core/metadata/component-identifier.ts","../../src/messages/message-interfaces.ts","../../src/messages/message-helpers.ts","../../src/store/async/async.adapter.ts","../../src/store/async/async-entity.adapter.ts","../../src/store/async/async.helpers.ts","../../src/store/async/async.operators.ts","../../src/store/async/async.props.ts","../../src/store/async/async.serializer.ts","../../src/store/types.ts","../../src/utils/debug/debug-helper.ts","../../src/utils/deep-fill/deep-fill.ts","../../src/utils/rendering/rendering-helpers.ts","../../src/o3r-core.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention -- exception for `BuildTimeProperties` */\n\n/**\n * Library build time properties\n */\nexport interface BuildTimeProperties {\n  /**\n   * True if the application in launch in debug mode\n   */\n  DEBUG_MODE: boolean;\n\n  /**\n   * True if the webStorage option is enabled\n   */\n  ENABLE_WEBSTORAGE: boolean;\n\n  /**\n   * Name of the current environment\n   */\n  ENVIRONMENT: string;\n\n  /**\n   * Boolean that can be used to activate API calls mocks for development or mock-up purpose.\n   */\n  USE_MOCKS: boolean;\n\n  /**\n   * Maximum size of the dev tool history\n   */\n  DEVTOOL_HISTORY_SIZE: number | undefined;\n\n  /**\n   * path to bundles in published folder\n   */\n  LOCALIZATION_BUNDLES_OUTPUT: string;\n\n  /**\n   * The name of the bundle generated with the default localization components keys\n   */\n  DEFAULT_LOC_BUNDLE_NAME: string;\n\n  /**\n   * Indicates the default server prefix to be used in case no dynamic is found\n   */\n  APP_BASE_HREF: string | undefined;\n\n  /**\n   * Version of the App based on the package.json\n   */\n  APP_VERSION: string;\n\n  /**\n   * Determine if the ghosting is activated on the app\n   */\n  ENABLE_GHOSTING: boolean;\n}\n\n/**\n * Library build time default properties\n */\nexport const DEFAULT_BUILD_PROPERTIES: Readonly<BuildTimeProperties> = {\n  DEBUG_MODE: true,\n  APP_BASE_HREF: '.',\n  APP_VERSION: '0.0.0',\n  DEFAULT_LOC_BUNDLE_NAME: '',\n  DEVTOOL_HISTORY_SIZE: 20,\n  ENABLE_GHOSTING: false,\n  ENABLE_WEBSTORAGE: true,\n  ENVIRONMENT: 'dev',\n  LOCALIZATION_BUNDLES_OUTPUT: 'localizations/',\n  USE_MOCKS: false\n} as const;\n","import type {\n  Translation,\n} from '../interfaces';\n\n/** Type of component */\nexport type ComponentType = 'Block' | 'Page' | 'ExposedComponent' | 'Component';\n\n/**\n * Information about an Otter component to provide\n */\nexport interface OtterComponentInfoToProvide {\n  /** Type of component */\n  componentType: ComponentType;\n}\n\n/**\n * Information about an Otter component\n */\nexport interface OtterComponentInfo extends OtterComponentInfoToProvide {\n  /** Configuration ID */\n  configId?: string;\n  /** Translation keys */\n  translations?: Translation;\n  /** Component Name */\n  componentName: string;\n}\n\n/**\n * Private field where Otter component information are stored\n */\nexport const otterComponentInfoPropertyName = '__otter-info__';\n\n/**\n * Decorates an Angular component to provide Otter information\n * @param info Information to define the Otter component\n * @returns the component with the information\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- decorator should be PascalCase\nexport function O3rComponent(info: OtterComponentInfoToProvide) {\n  return <T extends new (...args: any[]) => object>(constructor: T) => {\n    const componentName = constructor.name;\n    constructor.prototype[otterComponentInfoPropertyName] = { ...info, componentName };\n    return constructor;\n  };\n}\n","/**\n * Compute the name of the component with the library's name to generate unique component identifier used in metadata and different modules\n * @param componentName Name of the component to get the configuration\n * @param libraryName Name of the library the component is coming from\n */\nexport function computeItemIdentifier<C extends string, L extends string>(componentName: C, libraryName?: L): `${L extends string ? `${L}#` : ''}${C}` {\n  return (libraryName ? libraryName + '#' : '') + componentName as `${L extends string ? `${L}#` : ''}${C}`;\n}\n","/** Type of a message exchanged within the Otter Framework */\nexport const otterMessageType = 'otter';\n\n/** Target of a message that should be handled by the application */\nexport const applicationMessageTarget = 'app';\n\nexport interface OtterMessageContent<DataType extends string = string> {\n  /** Type of data */\n  dataType: DataType;\n}\n\nexport interface OtterMessage<Content extends OtterMessageContent = OtterMessageContent, Target extends string | undefined = undefined | string> {\n  /** Type of the message */\n  type: typeof otterMessageType;\n\n  /** Version of the message (default to the `@o3r/core` version ) */\n  version?: string;\n\n  /** Target of the message */\n  to: Target;\n\n  /** Message content */\n  content: Content;\n}\n\n/** Type helper to retrieve the data types of a union of MessageContent */\nexport type MessageDataTypes<T extends OtterMessageContent> = T['dataType'];\n\n/** Type helper to filter the message that can be received by the application */\nexport type FilterMessageToApplication<T extends OtterMessage> = T extends { to: infer U } ? U extends (typeof applicationMessageTarget | undefined) ? T : never : never;\n\nexport type ContentMessageData<T extends OtterMessageContent> = T extends any\n  ? Omit<T, 'dataType'>\n  : never;\n","import {\n  filter,\n  map,\n  Observable,\n} from 'rxjs';\nimport {\n  applicationMessageTarget,\n  ContentMessageData,\n  FilterMessageToApplication,\n  OtterMessage,\n  OtterMessageContent,\n  otterMessageType,\n} from './message-interfaces';\n\n/**\n * Determine if a message should be handle by the application\n * @param message Message to analyze\n */\nexport const isToAppOtterMessage = <T extends OtterMessage>(message?: T): message is FilterMessageToApplication<T & { to: 'app' }> => {\n  return message?.to === applicationMessageTarget;\n};\n\n/**\n * Determine if a message is emitted by an Otter tool\n * @param message Message to analyze\n */\nexport const isOtterMessage = <T extends OtterMessageContent>(message: any): message is OtterMessage<T> => {\n  return message?.type === otterMessageType;\n};\n\n/**\n * Send an Otter Message\n * @param dataType Type of the message\n * @param content content of the message\n * @param preStringify determine if the message should JSON.stringify before being send (will use the default mechanism otherwise)\n */\nexport const sendOtterMessage = <T extends OtterMessageContent>(dataType: T['dataType'], content: ContentMessageData<T>, preStringify = true) => {\n  const message = {\n    type: otterMessageType,\n    content: {\n      ...content,\n      dataType\n    }\n  };\n  return window.postMessage(preStringify ? JSON.stringify(message) : message, '*');\n};\n\nexport function filterMessageContent<T extends Event | MessageEvent>(): (source$: Observable<T>) => Observable<OtterMessageContent<string>>;\nexport function filterMessageContent<T extends Event | MessageEvent, S extends OtterMessageContent>(predicate: (message: any) => message is S): (source$: Observable<T>) => Observable<S>;\n/**\n * Filter the Otter message that should be handle by the application and returns it content\n * @param predicate condition to filter the message\n * @returns content of the message\n */\n\n/**\n * Operator to get only Otter messages that match the predicate\n * @param predicate\n */\nexport function filterMessageContent<T extends Event | MessageEvent, S extends OtterMessageContent>(predicate?: (message: any) => message is S):\n(source$: Observable<T>) => Observable<OtterMessageContent<string> | S> {\n  return (source$: Observable<T>) => {\n    const obs = source$.pipe(\n      map((event) => {\n        const data = (event as MessageEvent).data;\n        return typeof data === 'string' ? JSON.parse(data) : data;\n      }),\n      filter(isOtterMessage),\n      filter(isToAppOtterMessage),\n      map((message) => message.content)\n    );\n    if (predicate) {\n      return obs.pipe(filter(predicate));\n    }\n    return obs;\n  };\n}\n","import {\n  AsyncStoreItem,\n  EntityStatus,\n  RequestId,\n} from './async.interfaces';\n\n/**\n * Adapter to help manipulate AsyncStoreItems to register new request and update the status when they fail or resolve.\n */\nexport interface AsyncStoreItemAdapter {\n  /**\n   * Adds a request to an AsyncStoreItem.\n   * If the item had a failure and no ongoing requests, sets it's failure status back to false\n   * @param item\n   * @param requestId\n   */\n  addRequest<T extends AsyncStoreItem>(item: T, requestId: string): T;\n\n  /**\n   * Updates an AsyncStoreItem when a request has resolved.\n   * Removes it from its requestIds array.\n   * If no requestId provided, the method returns the current status of the AsyncStoreItem\n   * @param item\n   * @param requestId\n   */\n  resolveRequest<T extends AsyncStoreItem>(item: T, requestId?: string): T;\n\n  /**\n   * Updates an AsyncStoreItem when a request has failed.\n   * Removes it from its requestIds array and set its failure status.\n   * @param item\n   * @param requestId\n   */\n  failRequest<T extends AsyncStoreItem>(item: T, requestId?: string): T;\n\n  /**\n   * Add AsyncStoreItem properties (with initial values) to the given entity\n   * @param entityItem\n   * @returns Given item improved with AsyncStoreItem properties\n   */\n  initialize<T extends object>(entityItem: T): T & AsyncStoreItem;\n\n  /**\n   * Extract only AsyncStoreItem properties from the given entity\n   * @param entityItem   A model containing AsyncStoreItem properties\n   * @returns Object containing only AsyncStoreItem properties\n   */\n  extractAsyncStoreItem<T extends AsyncStoreItem>(entityItem: T): AsyncStoreItem;\n\n  /**\n   * Clear AsyncStoreItem properties from the given entity\n   * @param entityItem A model containing AsyncStoreItem properties\n   */\n  clearAsyncStoreItem<T extends AsyncStoreItem>(entityItem: T): T;\n\n  /**\n   * Merges an AsyncStoreItem collection into one item that gives an overall status.\n   * @param items\n   */\n  merge(...items: (AsyncStoreItem | undefined)[]): AsyncStoreItem;\n\n  /**\n   * Add a request to the given subResource of an EntityStatus object\n   * @param status\n   * @param subResource\n   * @param requestId\n   */\n  entityStatusAddRequest<T extends EntityStatus<T>>(status: T, subResource: keyof T, requestId: string): T;\n\n  /**\n   * Resolve a request on the given subResource of an EntityStatus object\n   * @param status\n   * @param subResource\n   * @param requestId\n   */\n  entityStatusResolveRequest<T extends EntityStatus<T>>(status: T, subResource: keyof T, requestId?: string): T;\n\n  /**\n   * Fail a request to the given subResource of an EntityStatus object\n   * @param status\n   * @param subResource\n   * @param requestId\n   */\n  entityStatusFailRequest<T extends EntityStatus<T>>(status: T, subResource: keyof T, requestId?: string): T;\n\n  /**\n   * Reset the failure status of the given subResource of an EntityStatus object\n   * @param status\n   * @param subResource\n   */\n  entityStatusResetFailure<T extends EntityStatus<T>>(status: T, subResource: keyof T): T;\n\n  /**\n   * Reset the failure status of the given AsyncStoreItem to false\n   * @param entityItem\n   * @returns AsyncStoreItem with the updated failure status\n   */\n  resetFailureStatus<T extends AsyncStoreItem>(entityItem: T): T;\n\n  /**\n   * Set the pending status of the given AsyncStoreItem to true\n   * @param entityItem\n   * @returns AsyncStoreItem with the updated pending status\n   */\n  setLoadingStatus<T extends AsyncStoreItem>(entityItem: T): T;\n}\n\nexport const asyncStoreItemAdapter: AsyncStoreItemAdapter = {\n  addRequest: (item, requestId) => {\n    return {\n      ...item,\n      requestIds: [...item.requestIds, requestId],\n      isFailure: item.requestIds.length === 0 ? false : item.isFailure,\n      isPending: true\n    };\n  },\n\n  failRequest: (item, requestId) => {\n    const requestIds = requestId ? item.requestIds.filter((id) => id !== requestId) : item.requestIds;\n    return {\n      ...item,\n      isFailure: true,\n      isPending: requestIds.length > 0,\n      requestIds\n    };\n  },\n\n  resolveRequest: (item, requestId) => {\n    const requestIds = requestId ? item.requestIds.filter((id) => id !== requestId) : item.requestIds;\n    return {\n      ...item,\n      requestIds,\n      isPending: requestIds.length > 0\n    };\n  },\n\n  initialize: (entityItem) => {\n    return {\n      ...entityItem,\n      requestIds: [] as RequestId[]\n    };\n  },\n\n  extractAsyncStoreItem: (entityItem) => {\n    return {\n      requestIds: [...entityItem.requestIds],\n      isFailure: entityItem.isFailure,\n      isPending: entityItem.isPending\n    };\n  },\n\n  clearAsyncStoreItem: <T extends AsyncStoreItem>(entityItem: T) => {\n    const { isPending, isFailure, ...newResponse }: T = { ...entityItem, requestIds: [] };\n    return newResponse as T;\n  },\n\n  merge: (...items) => {\n    return items.reduce<AsyncStoreItem>((mergedItem, item) => item\n      ? {\n        requestIds: [...mergedItem.requestIds, ...item.requestIds],\n        isFailure: mergedItem.isFailure || item.isFailure,\n        isPending: mergedItem.isPending || item.isPending\n      }\n      : mergedItem, asyncStoreItemAdapter.initialize({}));\n  },\n\n  entityStatusAddRequest: (status, subResource, requestId) => {\n    const currentSubStatus: AsyncStoreItem = status[subResource] || asyncStoreItemAdapter.initialize({});\n    return {\n      ...status,\n      [subResource]: asyncStoreItemAdapter.addRequest(currentSubStatus, requestId)\n    };\n  },\n\n  entityStatusResolveRequest: (status, subResource, requestId) => {\n    const currentSubStatus = status[subResource];\n    return {\n      ...status,\n      [subResource]: currentSubStatus ? asyncStoreItemAdapter.resolveRequest(currentSubStatus, requestId) : { requestIds: [] as RequestId[] }\n    };\n  },\n\n  entityStatusFailRequest: (status, subResource, requestId) => {\n    const currentSubStatus = status[subResource];\n    return {\n      ...status,\n      [subResource]: currentSubStatus ? asyncStoreItemAdapter.failRequest(currentSubStatus, requestId) : { requestIds: [] as RequestId[], isFailure: true }\n    };\n  },\n\n  entityStatusResetFailure: (status, subResource) => {\n    const currentSubStatus = status[subResource];\n    return {\n      ...status,\n      [subResource]: currentSubStatus ? asyncStoreItemAdapter.resetFailureStatus(currentSubStatus) : { requestIds: [] as RequestId[] }\n    };\n  },\n\n  resetFailureStatus: (entityItem) => {\n    return {\n      ...entityItem,\n      isFailure: false\n    };\n  },\n\n  setLoadingStatus: (entityItem) => {\n    return {\n      ...entityItem,\n      isPending: true\n    };\n  }\n};\n","import type {\n  EntityAdapter,\n  EntityState,\n  Update,\n} from '@ngrx/entity';\nimport {\n  asyncStoreItemAdapter,\n} from './async.adapter';\nimport {\n  AsyncStoreItem,\n  EntityWithoutAsyncStoreItem,\n} from './async.interfaces';\n\n/** Adapter for Asynchronous Entity Store */\nexport interface EntityAsyncRequestAdapter<T extends AsyncStoreItem> extends EntityAdapter<T> {\n\n  /**\n   * Updates the AsyncStoreItem properties of each entity matching an id from the list of given ids, when a request has failed.\n   * @param state        Actual state\n   * @param ids          Ids of the entity to be updated with AsyncStoreItem properties\n   * @param requestId    Id of request which has failed\n   */\n  failRequestMany<V extends EntityState<T> & AsyncStoreItem>(state: V, ids?: (string | number)[], requestId?: string): V;\n\n  /**\n   * Adds AsyncStoreItem property to the global store, or the entity if it already exists, when a request is triggered.\n   * @param state       Actual state\n   * @param id          Id of the entity to update\n   * @param requestId   Id of the request which is triggered\n   */\n  addRequestOne<V extends EntityState<T> & AsyncStoreItem>(state: V, id: string | number | null | undefined, requestId: string): V;\n\n  /**\n   * Adds AsyncStoreItem properties for each entity matching the given ids, when a request is triggered\n   * @param state        Actual state\n   * @param ids          Ids of the entity to be updated with AsyncStoreItem properties\n   * @param requestId    Id of request which is triggered\n   */\n  addRequestMany<V extends EntityState<T>>(state: V, ids: (string | number)[], requestId: string): V;\n\n  /**\n   * Updates the state with the given entity. Update the global or the current entity's status if it exists.\n   * @param state        Actual state\n   * @param entity       Payload item;\n   * @param requestId    Id of request which has resolved if any\n   */\n  resolveRequestOne<V extends EntityState<T> & AsyncStoreItem>(state: V, entity: EntityWithoutAsyncStoreItem<T> & Record<'id', string | number>, requestId?: string): V;\n\n  /**\n   * Updates the state with the given entity. Update the global or the current entity's status if it exists.\n   * @param state        Actual state\n   * @param entity       Payload item;\n   * @param requestId    Id of request which has resolved if any\n   * @param idProperty   Property of the entity containing its unique identifier\n   */\n  resolveRequestOne<V extends EntityState<T> & AsyncStoreItem, W extends keyof T>(state: V, entity: EntityWithoutAsyncStoreItem<T> & Record<W, string | number>, requestId?: string, idProperty?: W): V;\n\n  /**\n   * Updates the state with the given entities. Updates also AsyncStoreItem properties of each entity, when a request is resolved.\n   * @param state        Actual state\n   * @param entities     Payload items;\n   * @param requestId    Id of request which has resolved if any\n   */\n  resolveRequestMany<V extends EntityState<T>>(state: V, entities: (Partial<T> & Record<'id', string | number>)[], requestId?: string): V;\n\n  /**\n   * Updates the state with the given entities. Updates also AsyncStoreItem properties of each entity, when a request is resolved.\n   * @param state        Actual state\n   * @param entities     Payload items;\n   * @param requestId    Id of request which has resolved if any\n   * @param idProperty   Property of the entity containing its unique identifier\n   */\n  resolveRequestMany<V extends EntityState<T>, W extends keyof T>(state: V, entities: (Partial<T> & Record<W, string | number>)[], requestId?: string, idProperty?: W): V;\n}\n\n/**\n * Create an Asynchronous Request Entity Adapter\n * @param  adapter  Entity Adapter\n */\nexport function createEntityAsyncRequestAdapter<T extends AsyncStoreItem>(adapter: EntityAdapter<T>): EntityAsyncRequestAdapter<T> {\n  const addRequestOne: <V extends EntityState<T> & AsyncStoreItem>(state: V, id: string | number | null | undefined, requestId: string) => V = (state, id, requestId) => {\n    const currentEntity = typeof id !== 'undefined' && id !== null && state.entities[id];\n    if (currentEntity) {\n      const changes = asyncStoreItemAdapter.addRequest(asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity), requestId);\n      return adapter.updateOne({ id, changes } as Update<T>, state);\n    }\n    return asyncStoreItemAdapter.addRequest(state, requestId);\n  };\n\n  const addRequestMany: <V extends EntityState<T>>(state: V, ids: (string | number)[], requestId: string) => V = <V extends EntityState<T>>(state: V, ids: (string | number)[], requestId: string): V =>\n    adapter.updateMany(ids.filter((id) => !!state.entities[id]).map((id) => ({\n      id,\n      changes: asyncStoreItemAdapter.addRequest(asyncStoreItemAdapter.extractAsyncStoreItem(state.entities[id]!), requestId)\n    } as Update<T>)\n    ), state);\n\n  const resolveRequestOne: <V extends EntityState<T> & AsyncStoreItem, W extends keyof T | 'id' = 'id'>\n  (state: V, entity: EntityWithoutAsyncStoreItem<T> & Record<W, string | number>, requestId?: string, idProperty?: W) => V = <V extends EntityState<T> & AsyncStoreItem, W extends keyof T | 'id'>\n  (state: V, entity: EntityWithoutAsyncStoreItem<T> & Record<W, string | number>, requestId?: string, idProperty: W = 'id' as W): V => {\n    const currentEntity = state.entities[entity[idProperty]];\n    const newEntity = currentEntity\n      ? asyncStoreItemAdapter.resolveRequest({ ...entity, ...asyncStoreItemAdapter.extractAsyncStoreItem(currentEntity) }, requestId)\n      : asyncStoreItemAdapter.initialize(entity);\n    state = asyncStoreItemAdapter.resolveRequest(state, requestId);\n    return adapter.upsertOne(newEntity as T, state);\n  };\n\n  const resolveRequestMany: <V extends EntityState<T>, W extends keyof T | 'id' = 'id'>\n  (state: V, entities: (Partial<T> & Record<W, string | number>)[], requestId?: string, idProperty?: W) => V = <V extends EntityState<T>, W extends keyof T | 'id'>\n  (state: V, entities: (Partial<T> & Record<W, string | number>)[], requestId?: string, idProperty: W = 'id' as W): V =>\n    adapter.updateMany(\n      entities.filter((entity) => !!state.entities[entity[idProperty]]).map((entity) => {\n        const model = { ...entity, ...asyncStoreItemAdapter.extractAsyncStoreItem(state.entities[entity[idProperty]]!) };\n        return { id: entity[idProperty], changes: asyncStoreItemAdapter.resolveRequest(model, requestId) } as Update<T>;\n      }\n      ), state);\n\n  const failRequestMany: <V extends EntityState<T> & AsyncStoreItem>\n  (state: V, ids?: (string | number)[], requestId?: string) => V = <V extends EntityState<T> & AsyncStoreItem>\n  (state: V, ids: (string | number)[] = [], requestId?: string): V => {\n    if (ids.length > 0 && !ids.some((id) => state.entities[id] === undefined)) {\n      return adapter.updateMany(ids.map((id) => ({\n        id,\n        changes: asyncStoreItemAdapter.failRequest(asyncStoreItemAdapter.extractAsyncStoreItem(state.entities[id]!), requestId)\n      } as Update<T>)\n      ), state);\n    }\n    return asyncStoreItemAdapter.failRequest(state, requestId);\n  };\n\n  return {\n    ...adapter,\n    failRequestMany,\n    addRequestOne,\n    addRequestMany,\n    resolveRequestOne,\n    resolveRequestMany\n  };\n}\n","import {\n  AsyncRequest,\n  FromApiActionPayload,\n} from './async.interfaces';\n\n/**\n * Determine if the action is an AsyncRequest action\n * @param action Redux Action\n */\nexport function isCallAction<T = any>(action?: any): action is FromApiActionPayload<T> {\n  if (!action) {\n    return false;\n  }\n\n  return !!action.call && action.call instanceof Promise;\n}\n\n/**\n * Determine if the action is an AsyncRequest action with a Request ID\n * @param action Redux Action\n */\nexport function isIdentifiedCallAction<T = any>(action?: any): action is FromApiActionPayload<T> & AsyncRequest {\n  return isCallAction(action) && typeof action.requestId !== 'undefined';\n}\n\n/**\n * Determine if the given item implements the AsyncRequest interface\n * @param item\n */\nexport function isAsyncRequest<T>(item: any): item is T & AsyncRequest {\n  return typeof item.requestId !== 'undefined';\n}\n","import {\n  Action,\n} from '@ngrx/store';\nimport {\n  BehaviorSubject,\n  EMPTY,\n  from,\n  identity,\n  isObservable,\n  merge,\n  Observable,\n  of,\n  OperatorFunction,\n  Subject,\n} from 'rxjs';\nimport {\n  catchError,\n  delay,\n  filter,\n  finalize,\n  pairwise,\n  startWith,\n  switchMap,\n  tap,\n} from 'rxjs/operators';\nimport {\n  isIdentifiedCallAction,\n} from './async.helpers';\nimport {\n  AsyncRequest,\n  ExtractFromApiActionPayloadType,\n  FromApiActionPayload,\n} from './async.interfaces';\n\n/**\n * Determine if the given parameter is a Promise\n * @param object\n */\nconst isPromise = <U>(object: U | Promise<U>): object is Promise<U> => object && typeof object === 'object' && typeof (object as any).then !== 'undefined';\n\n/**\n * Custom operator to use instead of SwitchMap with effects based on FromApi actions.\n * It makes sure to emit an action when the inner subscription is unsubscribed in order to keep the store up-to-date with pending information.\n * @param successHandler function that returns the action to emit in case the FromApi call is a success\n * @param errorHandler function that returns the action to emit in case the FromApi call fails\n * @param cancelRequestActionFactory function that returns the action to emit in case the FromApi action is 'cancelled' because a new action was received by the switchMap\n */\nexport function fromApiEffectSwitchMap<T extends FromApiActionPayload<any>, S extends ExtractFromApiActionPayloadType<T>, U extends Action, V extends Action, W extends Action>(\n    successHandler: (result: S, action: T) => U | Observable<U> | Promise<U>,\n    errorHandler?: (error: any, action: T) => Observable<V>,\n    cancelRequestActionFactory?: (props: AsyncRequest, action: T) => W): OperatorFunction<T, U | V | W> {\n  const pendingRequestIdsContext: Record<string, boolean> = {};\n\n  return (source$) => source$.pipe(\n    tap((action) => {\n      if (isIdentifiedCallAction(action)) {\n        pendingRequestIdsContext[action.requestId] = true;\n      }\n    }),\n    startWith(undefined),\n    pairwise(),\n    switchMap(([previousAction, action]) => {\n      if (!action) {\n        return EMPTY;\n      }\n      const isPreviousActionStillRunning = isIdentifiedCallAction(previousAction) && pendingRequestIdsContext[previousAction.requestId];\n      const cleanStack = () => {\n        if (isIdentifiedCallAction(action)) {\n          delete pendingRequestIdsContext[action.requestId];\n        }\n      };\n      return from(action.call).pipe(\n        tap(cleanStack),\n        switchMap((result) => {\n          const success = successHandler(result, action);\n          return isObservable(success) ? success : (isPromise(success) ? success : of(success));\n        }),\n        catchError((error) => {\n          cleanStack();\n          return errorHandler?.(error, action) || EMPTY;\n        }),\n        isPreviousActionStillRunning && cancelRequestActionFactory ? startWith(cancelRequestActionFactory({ requestId: previousAction.requestId }, action)) : identity\n      );\n    })\n  );\n}\n\n/**\n * Same as {@link fromApiEffectSwitchMap}, instead one inner subscription is kept by id.\n * @param successHandler\n * @param errorHandler\n * @param cancelRequestActionFactory\n * @param cleanUpTimer\n */\nexport function fromApiEffectSwitchMapById<T extends FromApiActionPayload<any> & { id: string },\n  S extends ExtractFromApiActionPayloadType<T>,\n  U extends Action,\n  V extends Action,\n  W extends Action>(\n  successHandler: (result: S, action: T) => U | Observable<U> | Promise<U>,\n  errorHandler?: (error: any, action: T) => Observable<V>,\n  cancelRequestActionFactory?: (props: AsyncRequest, action: T) => W,\n  cleanUpTimer?: number\n): OperatorFunction<T, U | V | W> {\n  const innerSourcesById: Record<string, [Subject<any>, Observable<any>]> = {};\n  return (source$: Observable<T>) => {\n    return source$.pipe(\n      filter((action: T) => {\n        if (!isIdentifiedCallAction(action) || !action.id) {\n          return false;\n        }\n        if (isIdentifiedCallAction(action) && innerSourcesById[action.id]) {\n          innerSourcesById[action.id][0].next(action);\n          return false;\n        }\n        return true;\n      }),\n      switchMap((action: T) => {\n        const newIdSubject = new BehaviorSubject(action);\n        const newId$ = newIdSubject.pipe(\n          fromApiEffectSwitchMap(\n            successHandler,\n            errorHandler,\n            cancelRequestActionFactory\n          )\n        );\n        innerSourcesById[action.id] = [newIdSubject, newId$];\n        if (cleanUpTimer !== undefined) {\n          newIdSubject.pipe(\n            switchMap((myAction) => from(myAction.call).pipe(\n              delay(cleanUpTimer),\n              finalize(() => {\n                delete innerSourcesById[myAction.id];\n                newIdSubject.complete();\n              })\n            ))\n          ).subscribe();\n        }\n        const streams = Object.values(innerSourcesById).map(([_, obs]) => obs);\n        return merge(...streams);\n      })\n    );\n  };\n}\n","import {\n  v4,\n} from 'uuid';\nimport {\n  isAsyncRequest,\n} from './async.helpers';\nimport {\n  AsyncRequest,\n} from './async.interfaces';\n\n/**\n * Returns a creator that makes sure that requestId is defined in the action's properties by generating one\n * if needed.\n */\nexport const asyncProps = <P extends object>(): (props: P) => P & AsyncRequest => {\n  return (props: P) => isAsyncRequest(props) ? props : { ...props, requestId: v4() };\n};\n","import type {\n  EntityState,\n} from '@ngrx/entity';\nimport {\n  asyncStoreItemAdapter,\n} from './async.adapter';\nimport {\n  AsyncStoreItem,\n  EntityStatus,\n} from './async.interfaces';\n\n/**\n * Serializer for asynchronous store.\n * @param state State of an asynchronous store to serialize\n * @returns a plain json object to pass to json.stringify\n */\nexport function asyncSerializer<T extends AsyncStoreItem>(state: T) {\n  return asyncStoreItemAdapter.clearAsyncStoreItem(state);\n}\n\n/**\n * Serializer for asynchronous entity store.\n * @param state State of an asynchronous entity store to serialize\n * @returns a plain json object to pass to json.stringify\n */\nexport function asyncEntitySerializer<T extends AsyncStoreItem & EntityState<AsyncStoreItem>>(state: T) {\n  const entities = (state.ids as string[]).reduce((entitiesAcc, entityId) => {\n    entitiesAcc[entityId] = asyncStoreItemAdapter.clearAsyncStoreItem(state.entities[entityId]!);\n    return entitiesAcc;\n  }, {} as typeof state.entities);\n\n  return { ...asyncStoreItemAdapter.clearAsyncStoreItem(state), entities };\n}\n\n/**\n * Serializer for asynchronous entity store with status.\n * @param state State of an asynchronous entity store with status to serialize\n * @returns a plain json object to pass to json.stringify\n */\nexport function asyncEntityWithStatusSerializer<T extends AsyncStoreItem & EntityState<AsyncStoreItem & { status: EntityStatus<T['entities']['status']> }>>(state: T) {\n  const entities = (state.ids as string[]).reduce((entitiesAcc, entityId) => {\n    entitiesAcc[entityId] = { ...asyncStoreItemAdapter.clearAsyncStoreItem(state.entities[entityId]!), status: {} };\n    return entitiesAcc;\n  }, {} as typeof state.entities);\n\n  return { ...asyncStoreItemAdapter.clearAsyncStoreItem(state), entities };\n}\n","/**\n * Object that define how to serialize a specific state\n */\nexport interface Serializer<T> {\n  serialize?: (obj: T) => any;\n  deserialize?: (data?: any) => T;\n  reviver?: (key: string, value: any) => any;\n  replacer?: (key: string, value: any) => any;\n  initialState?: T;\n}\n\nexport class StateSerializer<T> implements Serializer<T> {\n  public serialize?: (obj: T) => any;\n  public deserialize?: (data?: any) => T;\n  public replacer?: (key: string, value: any) => any;\n  public initialState?: T;\n\n  constructor(serializer: Serializer<T>) {\n    this.serialize = serializer.serialize || this.serialize;\n    this.deserialize = serializer.deserialize || this.deserialize;\n    this.reviver = serializer.reviver || this.reviver;\n    this.replacer = serializer.replacer || this.replacer;\n    this.initialState = serializer.initialState || this.initialState;\n  }\n\n  public reviver = (_: string, value: any): any => value;\n}\n\nexport interface LocalStateModel {\n  /**\n   * Temporary ID of the model in the dictionary\n   */\n  tid: string;\n}\n\n/**\n * Adds an `id` to the given type\n */\nexport type Idfy<T> = T & { id: string | number };\n\n/**\n * Payload to update actions\n */\nexport interface UpdateActionPayload<T> {\n  stateDetails: Partial<T>;\n}\n\n/**\n * Payload to set actions\n */\nexport interface SetActionPayload<T> {\n  stateDetails: T;\n}\n\n/**\n * Payload to set state actions\n */\nexport interface SetStateActionPayload<T> {\n  state: T;\n}\n/**\n * Payload to fail actions\n */\nexport interface FailActionPayload<T> {\n  error?: T;\n}\n\nexport type Keep<T, K extends keyof T> = Partial<T> & Pick<T, K>;\n\n/** Payload to update entities actions */\nexport interface UpdateEntitiesActionPayload<T, K extends keyof T> {\n  entities: Keep<T, K>[];\n}\n\n/** Payload to update entities actions with a field ID */\nexport interface UpdateEntitiesActionPayloadWithId<T extends { id: string | number }> {\n  entities: Keep<T, 'id'>[];\n}\n\n/** Payload to update entities actions */\nexport interface UpdateEntityActionPayload<T, K extends keyof T> {\n  entity: Keep<T, K>;\n}\n\n/** Payload to update entities actions with a field ID */\nexport interface UpdateEntityActionPayloadWithId<T extends { id: string | number }> {\n  entity: Keep<T, 'id'>;\n}\n\n/** Payload to set entities and upsert entities actions */\nexport interface SetEntitiesActionPayload<T> {\n  entities: T[];\n}\n\n/** Payload to set entity and upsert entity actions */\nexport interface SetEntityActionPayload<T> {\n  entity: T;\n}\n\n/** Payload to fail entities actions */\nexport interface FailEntitiesActionPayload<T> extends FailActionPayload<T> {\n  ids?: (string | number)[];\n}\n\n/**\n * Payload to clear the store in case of failure\n */\nexport interface ClearOnFailurePayload {\n  /** Clear store on failure */\n  clearOnFailure?: boolean;\n}\n","import type {\n  BootstrapConfig,\n  Dataset,\n} from '../../core/application/dgp-interfaces';\n\n/**\n * Pad number\n * @param val\n * @param digits\n */\nexport function padNumber(val: number, digits = 2): string {\n  const str = `${val}`;\n  return '0'.repeat(Math.max(0, digits - str.length)) + str;\n}\n\n/**\n * Returns TRUE if bootstrap config environment is production FALSE otherwise\n * @param dataset\n * @returns TRUE if bootstrap config environment is production FALSE otherwise\n */\nexport function isProductionEnvironment(dataset: Dataset): boolean {\n  const bootstrapConfig: BootstrapConfig = dataset.bootstrapconfig && JSON.parse(dataset.bootstrapconfig);\n  return bootstrapConfig?.environment === 'prod';\n}\n","/** Reviver Mapper to detect and create object on deepFill */\nexport interface PrimitiveReviverMapper<T = any> {\n  /** Condition to fill to be determine as  */\n  condition: (data: any) => boolean;\n\n  /**\n   * Construct the primitive type if needed\n   * @param data to be constructed\n   * @default {@link defaultConstruct}\n   */\n  construct?: (data: any) => T;\n}\n\nconst defaultConstruct = (data: any) => data;\n\nconst isDate = (data: any) => data instanceof Date && !Number.isNaN(data as any);\n\n/**\n * Check if an object is not an array or a date\n * @param obj\n * @param additionalMappers\n */\nexport function isObject(obj: any, additionalMappers?: PrimitiveReviverMapper[]) {\n  return obj instanceof Object && !Array.isArray(obj) && !additionalMappers?.some((mapper) => mapper.condition(obj)) && !isDate(obj);\n}\n\n/**\n * Return a new reference of the given object\n * @param obj\n * @param additionalMappers\n */\nexport function immutablePrimitive(obj: any, additionalMappers?: PrimitiveReviverMapper[]) {\n  if (Array.isArray(obj)) {\n    return obj.slice();\n  }\n\n  const matchingPrimitive = additionalMappers?.find((mapper) => mapper.condition(obj));\n  const resolvedType = matchingPrimitive && ((matchingPrimitive.construct || defaultConstruct)(obj));\n  if (resolvedType !== undefined) {\n    return resolvedType;\n  }\n  if (isDate(obj)) {\n    return new Date(obj);\n  } else if (obj instanceof Object) {\n    return deepFill(obj, obj, additionalMappers);\n  } else {\n    return obj;\n  }\n}\n\n/**\n * Deep fill of base object using source\n * It will do a deep merge of the objects, overriding arrays\n * All properties not present in source, but present in base, will remain\n * @param base\n * @param source\n * @param additionalMappers Map of conditions of type mapper\n */\nexport function deepFill<T extends { [x: string]: any }>(base: T, source?: { [x: string]: any }, additionalMappers?: PrimitiveReviverMapper[]): T {\n  if (typeof source === 'undefined') {\n    return deepFill(base, base, additionalMappers);\n  }\n  if (!isObject(base, additionalMappers)) {\n    return immutablePrimitive(typeof source === 'undefined' ? base : source, additionalMappers);\n  }\n  const newObj = { ...base };\n  for (const key in base) {\n    if (source[key] === null) {\n      newObj[key] = immutablePrimitive(null, additionalMappers);\n    } else if (key in source && typeof base[key] === typeof source[key]) {\n      const keyOfSource = source[key];\n      newObj[key] = typeof keyOfSource === 'undefined' ? immutablePrimitive(base[key], additionalMappers) : deepFill(base[key], keyOfSource, additionalMappers);\n    } else {\n      newObj[key] = immutablePrimitive(base[key], additionalMappers);\n    }\n  }\n\n  // getting keys present in source and not present in base\n  for (const key in source) {\n    if (!(key in newObj)) {\n      newObj[key as keyof T] = immutablePrimitive(source[key], additionalMappers);\n    }\n  }\n  return newObj;\n}\n","import {\n  animationFrameScheduler,\n  from,\n  Observable,\n  observeOn,\n  of,\n} from 'rxjs';\nimport {\n  bufferCount,\n  concatMap,\n  delay,\n  mergeMap,\n  scan,\n  tap,\n} from 'rxjs/operators';\n\n/**\n * Buffers and emits data for lazy/progressive rendering of big lists\n * That could solve issues with long-running tasks when trying to render an array\n * of similar components.\n * @param delayMs Delay between data emits\n * @param concurrency Amount of elements that should be emitted at once\n */\nexport function lazyArray<T>(delayMs = 0, concurrency = 2) {\n  let isFirstEmission = true;\n  return (source$: Observable<T[]>) => {\n    return source$.pipe(\n      mergeMap((items) => {\n        if (!isFirstEmission) {\n          return of(items);\n        }\n\n        const items$ = from(items);\n\n        return items$.pipe(\n          bufferCount(concurrency),\n          concatMap((value, index) => {\n            return of(value).pipe(\n              observeOn(animationFrameScheduler),\n              delay(index * delayMs)\n            );\n          }),\n          scan((acc: T[], steps: T[]) => {\n            return [...acc, ...steps];\n          }, []),\n          tap((scannedItems: T[]) => {\n            const scanDidComplete = scannedItems.length === items.length;\n\n            if (scanDidComplete) {\n              isFirstEmission = false;\n            }\n          })\n        );\n      })\n    );\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["filter"],"mappings":"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"}