{"version":3,"file":"rx-mind-entity-component-store.mjs","sources":["../../../../libs/entity-component-store/src/lib/models.ts","../../../../libs/entity-component-store/src/lib/entity-state-operator.ts","../../../../libs/entity-component-store/src/lib/select-id.ts","../../../../libs/entity-component-store/src/lib/unsorted-state-adapter.ts","../../../../libs/entity-component-store/src/lib/sorted-state-adapter.ts","../../../../libs/entity-component-store/src/lib/entity-state-adapter.ts","../../../../libs/entity-component-store/src/lib/entity-component-store.ts","../../../../libs/entity-component-store/src/lib/entity-state.ts","../../../../libs/entity-component-store/src/rx-mind-entity-component-store.ts"],"sourcesContent":["export interface EntityState<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> {\r\n  ids: Id[];\r\n  entities: Record<Id, Entity>;\r\n}\r\n\r\nexport interface EntityStateAdapter<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n> {\r\n  addOne<State extends EntityState<Entity, Id>>(entity: Entity, state: State): State;\r\n  addMany<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State;\r\n\r\n  setOne<State extends EntityState<Entity, Id>>(entity: Entity, state: State): State;\r\n  setMany<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State;\r\n  setAll<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State;\r\n\r\n  removeOne<State extends EntityState<Entity, Id>>(id: Id, state: State): State;\r\n  removeMany<State extends EntityState<Entity, Id>>(ids: Id[], state: State): State;\r\n  removeMany<State extends EntityState<Entity, Id>>(\r\n    predicate: Predicate<Entity>,\r\n    state: State\r\n  ): State;\r\n  removeAll<State extends EntityState<Entity, Id>>(state: State): State;\r\n\r\n  updateOne<State extends EntityState<Entity, Id>>(update: Update<Entity, Id>, state: State): State;\r\n  updateMany<State extends EntityState<Entity, Id>>(\r\n    updates: Update<Entity, Id>[],\r\n    state: State\r\n  ): State;\r\n\r\n  upsertOne<State extends EntityState<Entity, Id>>(entity: Entity, state: State): State;\r\n  upsertMany<State extends EntityState<Entity, Id>>(entities: Entity[], state: State): State;\r\n\r\n  mapOne<State extends EntityState<Entity, Id>>(map: EntityMapOne<Entity, Id>, state: State): State;\r\n  map<State extends EntityState<Entity, Id>>(map: EntityMap<Entity>, state: State): State;\r\n}\r\n\r\nexport interface EntityStateAdapterConfig<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n> {\r\n  selectId?: SelectId<Entity, Id>;\r\n  sortComparer?: SortComparer<Entity>;\r\n}\r\n\r\nexport interface EntityComponentStoreConfig<\r\n  State extends EntityState<Entity, Id>,\r\n  Entity extends Record<string, any> = ExtractEntity<State>,\r\n  Id extends string | number = ExtractId<State>\r\n> extends EntityStateAdapterConfig<Entity, Id> {\r\n  initialState?: State;\r\n}\r\n\r\nexport type EntityStateOperator<\r\n  Arg,\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n> = <State extends EntityState<Entity, Id>>(arg: Arg, state: State) => State;\r\n\r\nexport interface EntityMapOne<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> {\r\n  id: Id;\r\n  map: EntityMap<Entity>;\r\n}\r\n\r\nexport type EntityMap<Entity extends Record<string, any>> = (entity: Entity) => Entity;\r\n\r\nexport type Predicate<Entity extends Record<string, any>> = (entity: Entity) => boolean;\r\n\r\nexport type SelectId<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> = (entity: Entity) => Id;\r\n\r\nexport type SortComparer<Entity extends Record<string, any>> = (e1: Entity, e2: Entity) => number;\r\n\r\nexport interface Update<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> {\r\n  id: Id;\r\n  changes: Partial<Entity>;\r\n}\r\n\r\nexport type PartialUpdater<State> = (state: State) => Partial<State>;\r\n\r\nexport type ExtractEntity<State> = State extends EntityState<infer Entity> ? Entity : never;\r\n\r\nexport type ExtractId<State> = State extends EntityState<Record<string, any>, infer Id>\r\n  ? Id\r\n  : never;\r\n\r\nexport enum DidMutate {\r\n  EntitiesOnly,\r\n  Both,\r\n  None,\r\n}\r\n","/**\r\n * @license\r\n * Copyright NgRx Team. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/ngrx/platform\r\n */\r\n\r\nimport { DidMutate, EntityState, EntityStateOperator } from './models';\r\n\r\nexport function createEntityStateOperator<\r\n  Arg,\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(\r\n  mutator: (arg: Arg, state: EntityState<Entity, Id>) => DidMutate\r\n): EntityStateOperator<Arg, Entity, Id> {\r\n  return function operation<State extends EntityState<Entity, Id>>(arg: Arg, state: State): State {\r\n    const clonedEntityState: EntityState<Entity, Id> = {\r\n      ids: [...state.ids],\r\n      entities: { ...state.entities },\r\n    };\r\n\r\n    const didMutate = mutator(arg, clonedEntityState);\r\n\r\n    if (didMutate === DidMutate.Both) {\r\n      return Object.assign({}, state, clonedEntityState);\r\n    }\r\n\r\n    if (didMutate === DidMutate.EntitiesOnly) {\r\n      return {\r\n        ...state,\r\n        entities: clonedEntityState.entities,\r\n      };\r\n    }\r\n\r\n    return state;\r\n  };\r\n}\r\n","/**\r\n * @license\r\n * Copyright NgRx Team. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/ngrx/platform\r\n */\r\n\r\nimport { isDevMode } from '@angular/core';\r\nimport { SelectId } from './models';\r\n\r\nexport function selectIdValue<Entity extends Record<string, any>, Id extends string | number>(\r\n  entity: Entity,\r\n  selectId: SelectId<Entity, Id>\r\n): Id {\r\n  const id = selectId(entity);\r\n\r\n  if (isDevMode() && id === undefined) {\r\n    console.warn(\r\n      '@rx-mind/entity-component-store: The entity passed to the `selectId` implementation returned undefined.',\r\n      'You should probably provide your own `selectId` implementation.',\r\n      'The entity that was passed:',\r\n      entity,\r\n      'The `selectId` implementation:',\r\n      selectId.toString()\r\n    );\r\n  }\r\n\r\n  return id;\r\n}\r\n\r\nexport function getDefaultSelectId<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(): SelectId<Entity, Id> {\r\n  return (entity) => ((entity as unknown) as { id: Id }).id;\r\n}\r\n","/**\r\n * @license\r\n * Copyright NgRx Team. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/ngrx/platform\r\n */\r\n\r\nimport { createEntityStateOperator } from './entity-state-operator';\r\nimport {\r\n  DidMutate,\r\n  EntityMap,\r\n  EntityMapOne,\r\n  EntityState,\r\n  EntityStateAdapter,\r\n  Predicate,\r\n  SelectId,\r\n  Update,\r\n} from './models';\r\nimport { selectIdValue } from './select-id';\r\n\r\nexport function createUnsortedStateAdapter<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(selectId: SelectId<Entity, Id>): EntityStateAdapter<Entity, Id> {\r\n  type State = EntityState<Entity, Id>;\r\n\r\n  function addOneMutably(entity: Entity, state: State): DidMutate {\r\n    const id = selectIdValue(entity, selectId);\r\n\r\n    if (id in state.entities) {\r\n      return DidMutate.None;\r\n    }\r\n\r\n    state.ids.push(id);\r\n    state.entities[id] = entity;\r\n\r\n    return DidMutate.Both;\r\n  }\r\n\r\n  function addManyMutably(entities: Entity[], state: State): DidMutate {\r\n    let didMutate = false;\r\n\r\n    for (const entity of entities) {\r\n      didMutate = addOneMutably(entity, state) !== DidMutate.None || didMutate;\r\n    }\r\n\r\n    return didMutate ? DidMutate.Both : DidMutate.None;\r\n  }\r\n\r\n  function setAllMutably(entities: Entity[], state: State): DidMutate {\r\n    state.ids = [];\r\n    state.entities = {} as Record<Id, Entity>;\r\n\r\n    addManyMutably(entities, state);\r\n\r\n    return DidMutate.Both;\r\n  }\r\n\r\n  function setOneMutably(entity: Entity, state: State): DidMutate {\r\n    const id = selectIdValue(entity, selectId);\r\n\r\n    if (id in state.entities) {\r\n      state.entities[id] = entity;\r\n      return DidMutate.EntitiesOnly;\r\n    }\r\n\r\n    state.ids.push(id);\r\n    state.entities[id] = entity;\r\n\r\n    return DidMutate.Both;\r\n  }\r\n\r\n  function setManyMutably(entities: Entity[], state: State): DidMutate {\r\n    const didMutateSetOne = entities.map((entity) => setOneMutably(entity, state));\r\n\r\n    switch (true) {\r\n      case didMutateSetOne.some((didMutate) => didMutate === DidMutate.Both):\r\n        return DidMutate.Both;\r\n      case didMutateSetOne.some((didMutate) => didMutate === DidMutate.EntitiesOnly):\r\n        return DidMutate.EntitiesOnly;\r\n      default:\r\n        return DidMutate.None;\r\n    }\r\n  }\r\n\r\n  function removeOneMutably(id: Id, state: State): DidMutate {\r\n    return removeManyMutably([id], state);\r\n  }\r\n\r\n  function removeManyMutably(ids: Id[], state: State): DidMutate;\r\n  function removeManyMutably(predicate: Predicate<Entity>, state: State): DidMutate;\r\n  function removeManyMutably(idsOrPredicate: Id[] | Predicate<Entity>, state: State): DidMutate {\r\n    const ids =\r\n      idsOrPredicate instanceof Array\r\n        ? idsOrPredicate\r\n        : state.ids.filter((id) => idsOrPredicate(state.entities[id]));\r\n\r\n    const didMutate =\r\n      ids.filter((id) => id in state.entities).map((id) => delete state.entities[id]).length > 0;\r\n\r\n    if (didMutate) {\r\n      state.ids = state.ids.filter((id) => id in state.entities);\r\n    }\r\n\r\n    return didMutate ? DidMutate.Both : DidMutate.None;\r\n  }\r\n\r\n  function removeAll<S extends State>(state: S): S {\r\n    return Object.assign({}, state, {\r\n      ids: [],\r\n      entities: {},\r\n    });\r\n  }\r\n\r\n  function takeNewKey(\r\n    keys: { [id: string]: Id },\r\n    update: Update<Entity, Id>,\r\n    state: State\r\n  ): boolean {\r\n    const original = state.entities[update.id];\r\n    const updated: Entity = Object.assign({}, original, update.changes);\r\n    const newKey = selectIdValue(updated, selectId);\r\n    const hasNewKey = newKey !== update.id;\r\n\r\n    if (hasNewKey) {\r\n      keys[update.id] = newKey;\r\n      delete state.entities[update.id];\r\n    }\r\n\r\n    state.entities[newKey] = updated;\r\n\r\n    return hasNewKey;\r\n  }\r\n\r\n  function updateOneMutably(update: Update<Entity, Id>, state: State): DidMutate {\r\n    return updateManyMutably([update], state);\r\n  }\r\n\r\n  function updateManyMutably(updates: Update<Entity, Id>[], state: State): DidMutate {\r\n    const newKeys: { [id: string]: Id } = {};\r\n\r\n    updates = updates.filter((update) => update.id in state.entities);\r\n\r\n    const didMutateEntities = updates.length > 0;\r\n\r\n    if (didMutateEntities) {\r\n      const didMutateIds =\r\n        updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;\r\n\r\n      if (didMutateIds) {\r\n        state.ids = state.ids.map((id) => newKeys[id] || id);\r\n        return DidMutate.Both;\r\n      } else {\r\n        return DidMutate.EntitiesOnly;\r\n      }\r\n    }\r\n\r\n    return DidMutate.None;\r\n  }\r\n\r\n  function mapMutably(map: EntityMap<Entity>, state: State): DidMutate {\r\n    const changes = state.ids.reduce((changes, id) => {\r\n      const change = map(state.entities[id]);\r\n      if (change !== state.entities[id]) {\r\n        changes.push({ id, changes: change });\r\n      }\r\n      return changes;\r\n    }, [] as Update<Entity, Id>[]);\r\n    const updates = changes.filter(({ id }) => id in state.entities);\r\n\r\n    return updateManyMutably(updates, state);\r\n  }\r\n\r\n  function mapOneMutably({ map, id }: EntityMapOne<Entity, Id>, state: State): DidMutate {\r\n    const entity = state.entities[id];\r\n    if (!entity) {\r\n      return DidMutate.None;\r\n    }\r\n\r\n    const updatedEntity = map(entity);\r\n    return updateOneMutably(\r\n      {\r\n        id,\r\n        changes: updatedEntity,\r\n      },\r\n      state\r\n    );\r\n  }\r\n\r\n  function upsertOneMutably(entity: Entity, state: State): DidMutate {\r\n    return upsertManyMutably([entity], state);\r\n  }\r\n\r\n  function upsertManyMutably(entities: Entity[], state: State): DidMutate {\r\n    const added: any[] = [];\r\n    const updated: any[] = [];\r\n\r\n    for (const entity of entities) {\r\n      const id = selectIdValue(entity, selectId);\r\n      if (id in state.entities) {\r\n        updated.push({ id, changes: entity });\r\n      } else {\r\n        added.push(entity);\r\n      }\r\n    }\r\n\r\n    const didMutateByUpdated = updateManyMutably(updated, state);\r\n    const didMutateByAdded = addManyMutably(added, state);\r\n\r\n    switch (true) {\r\n      case didMutateByAdded === DidMutate.None && didMutateByUpdated === DidMutate.None:\r\n        return DidMutate.None;\r\n      case didMutateByAdded === DidMutate.Both || didMutateByUpdated === DidMutate.Both:\r\n        return DidMutate.Both;\r\n      default:\r\n        return DidMutate.EntitiesOnly;\r\n    }\r\n  }\r\n\r\n  return {\r\n    addOne: createEntityStateOperator(addOneMutably),\r\n    addMany: createEntityStateOperator(addManyMutably),\r\n    setOne: createEntityStateOperator(setOneMutably),\r\n    setMany: createEntityStateOperator(setManyMutably),\r\n    setAll: createEntityStateOperator(setAllMutably),\r\n    updateOne: createEntityStateOperator(updateOneMutably),\r\n    updateMany: createEntityStateOperator(updateManyMutably),\r\n    upsertOne: createEntityStateOperator(upsertOneMutably),\r\n    upsertMany: createEntityStateOperator(upsertManyMutably),\r\n    removeOne: createEntityStateOperator(removeOneMutably),\r\n    removeMany: createEntityStateOperator(removeManyMutably),\r\n    removeAll,\r\n    mapOne: createEntityStateOperator(mapOneMutably),\r\n    map: createEntityStateOperator(mapMutably),\r\n  } as EntityStateAdapter<Entity, Id>;\r\n}\r\n","/**\r\n * @license\r\n * Copyright NgRx Team. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://github.com/ngrx/platform\r\n */\r\n\r\nimport { createUnsortedStateAdapter } from './unsorted-state-adapter';\r\nimport { createEntityStateOperator } from './entity-state-operator';\r\nimport {\r\n  DidMutate,\r\n  EntityMap,\r\n  EntityMapOne,\r\n  EntityState,\r\n  EntityStateAdapter,\r\n  SelectId,\r\n  SortComparer,\r\n  Update,\r\n} from './models';\r\nimport { selectIdValue } from './select-id';\r\n\r\nexport function createSortedStateAdapter<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(\r\n  selectId: SelectId<Entity, Id>,\r\n  sortComparer: SortComparer<Entity>\r\n): EntityStateAdapter<Entity, Id> {\r\n  type State = EntityState<Entity, Id>;\r\n\r\n  const { removeOne, removeMany, removeAll } = createUnsortedStateAdapter(selectId);\r\n\r\n  function addOneMutably(entity: Entity, state: State): DidMutate {\r\n    return addManyMutably([entity], state);\r\n  }\r\n\r\n  function addManyMutably(newModels: Entity[], state: State): DidMutate {\r\n    const models = newModels.filter((model) => !(selectIdValue(model, selectId) in state.entities));\r\n\r\n    if (models.length === 0) {\r\n      return DidMutate.None;\r\n    } else {\r\n      merge(models, state);\r\n      return DidMutate.Both;\r\n    }\r\n  }\r\n\r\n  function setAllMutably(models: Entity[], state: State): DidMutate {\r\n    state.entities = {} as Record<Id, Entity>;\r\n    state.ids = [];\r\n\r\n    addManyMutably(models, state);\r\n\r\n    return DidMutate.Both;\r\n  }\r\n\r\n  function setOneMutably(entity: Entity, state: State): DidMutate {\r\n    const id = selectIdValue(entity, selectId);\r\n    if (id in state.entities) {\r\n      state.ids = state.ids.filter((val) => val !== id);\r\n      merge([entity], state);\r\n      return DidMutate.Both;\r\n    } else {\r\n      return addOneMutably(entity, state);\r\n    }\r\n  }\r\n\r\n  function setManyMutably(entities: Entity[], state: State): DidMutate {\r\n    const didMutateSetOne = entities.map((entity) => setOneMutably(entity, state));\r\n\r\n    switch (true) {\r\n      case didMutateSetOne.some((didMutate) => didMutate === DidMutate.Both):\r\n        return DidMutate.Both;\r\n      case didMutateSetOne.some((didMutate) => didMutate === DidMutate.EntitiesOnly):\r\n        return DidMutate.EntitiesOnly;\r\n      default:\r\n        return DidMutate.None;\r\n    }\r\n  }\r\n\r\n  function updateOneMutably(update: Update<Entity, Id>, state: State): DidMutate {\r\n    return updateManyMutably([update], state);\r\n  }\r\n\r\n  function takeUpdatedModel(models: Entity[], update: Update<Entity, Id>, state: State): boolean {\r\n    if (!(update.id in state.entities)) {\r\n      return false;\r\n    }\r\n\r\n    const original = state.entities[update.id];\r\n    const updated = Object.assign({}, original, update.changes);\r\n    const newKey = selectIdValue(updated, selectId);\r\n\r\n    delete state.entities[update.id];\r\n\r\n    models.push(updated);\r\n\r\n    return newKey !== update.id;\r\n  }\r\n\r\n  function updateManyMutably(updates: Update<Entity, Id>[], state: State): DidMutate {\r\n    const models: Entity[] = [];\r\n\r\n    const didMutateIds =\r\n      updates.filter((update) => takeUpdatedModel(models, update, state)).length > 0;\r\n\r\n    if (models.length === 0) {\r\n      return DidMutate.None;\r\n    } else {\r\n      const originalIds = state.ids;\r\n      const updatedIndexes: number[] = [];\r\n      state.ids = state.ids.filter((id, index) => {\r\n        if (id in state.entities) {\r\n          return true;\r\n        } else {\r\n          updatedIndexes.push(index);\r\n          return false;\r\n        }\r\n      });\r\n\r\n      merge(models, state);\r\n\r\n      if (!didMutateIds && updatedIndexes.every((i) => state.ids[i] === originalIds[i])) {\r\n        return DidMutate.EntitiesOnly;\r\n      } else {\r\n        return DidMutate.Both;\r\n      }\r\n    }\r\n  }\r\n\r\n  function mapMutably(updatesOrMap: EntityMap<Entity>, state: State): DidMutate {\r\n    const updates = state.ids.reduce((changes, id) => {\r\n      const change = updatesOrMap(state.entities[id]);\r\n      if (change !== state.entities[id]) {\r\n        changes.push({ id, changes: change });\r\n      }\r\n      return changes;\r\n    }, [] as Update<Entity, Id>[]);\r\n\r\n    return updateManyMutably(updates, state);\r\n  }\r\n\r\n  function mapOneMutably({ map, id }: EntityMapOne<Entity, Id>, state: State): DidMutate {\r\n    const entity = state.entities[id];\r\n    if (!entity) {\r\n      return DidMutate.None;\r\n    }\r\n\r\n    const updatedEntity = map(entity);\r\n    return updateOneMutably(\r\n      {\r\n        id: id,\r\n        changes: updatedEntity,\r\n      },\r\n      state\r\n    );\r\n  }\r\n\r\n  function upsertOneMutably(entity: Entity, state: State): DidMutate {\r\n    return upsertManyMutably([entity], state);\r\n  }\r\n\r\n  function upsertManyMutably(entities: Entity[], state: State): DidMutate {\r\n    const added: any[] = [];\r\n    const updated: any[] = [];\r\n\r\n    for (const entity of entities) {\r\n      const id = selectIdValue(entity, selectId);\r\n      if (id in state.entities) {\r\n        updated.push({ id, changes: entity });\r\n      } else {\r\n        added.push(entity);\r\n      }\r\n    }\r\n\r\n    const didMutateByUpdated = updateManyMutably(updated, state);\r\n    const didMutateByAdded = addManyMutably(added, state);\r\n\r\n    switch (true) {\r\n      case didMutateByAdded === DidMutate.None && didMutateByUpdated === DidMutate.None:\r\n        return DidMutate.None;\r\n      case didMutateByAdded === DidMutate.Both || didMutateByUpdated === DidMutate.Both:\r\n        return DidMutate.Both;\r\n      default:\r\n        return DidMutate.EntitiesOnly;\r\n    }\r\n  }\r\n\r\n  function merge(models: Entity[], state: State): void {\r\n    models.sort(sortComparer);\r\n\r\n    const ids: any[] = [];\r\n\r\n    let i = 0;\r\n    let j = 0;\r\n\r\n    while (i < models.length && j < state.ids.length) {\r\n      const model = models[i];\r\n      const modelId = selectIdValue(model, selectId);\r\n      const entityId = state.ids[j];\r\n      const entity = state.entities[entityId];\r\n\r\n      if (sortComparer(model, entity) <= 0) {\r\n        ids.push(modelId);\r\n        i++;\r\n      } else {\r\n        ids.push(entityId);\r\n        j++;\r\n      }\r\n    }\r\n\r\n    if (i < models.length) {\r\n      state.ids = ids.concat(models.slice(i).map(selectId));\r\n    } else {\r\n      state.ids = ids.concat(state.ids.slice(j));\r\n    }\r\n\r\n    models.forEach((model) => {\r\n      state.entities[selectId(model)] = model;\r\n    });\r\n  }\r\n\r\n  return {\r\n    addOne: createEntityStateOperator(addOneMutably),\r\n    addMany: createEntityStateOperator(addManyMutably),\r\n    setOne: createEntityStateOperator(setOneMutably),\r\n    setMany: createEntityStateOperator(setManyMutably),\r\n    setAll: createEntityStateOperator(setAllMutably),\r\n    updateOne: createEntityStateOperator(updateOneMutably),\r\n    updateMany: createEntityStateOperator(updateManyMutably),\r\n    upsertOne: createEntityStateOperator(upsertOneMutably),\r\n    upsertMany: createEntityStateOperator(upsertManyMutably),\r\n    removeOne,\r\n    removeMany,\r\n    removeAll,\r\n    map: createEntityStateOperator(mapMutably),\r\n    mapOne: createEntityStateOperator(mapOneMutably),\r\n  };\r\n}\r\n","import { EntityStateAdapter, EntityStateAdapterConfig } from './models';\r\nimport { createSortedStateAdapter } from './sorted-state-adapter';\r\nimport { createUnsortedStateAdapter } from './unsorted-state-adapter';\r\nimport { getDefaultSelectId } from './select-id';\r\n\r\nexport function createEntityStateAdapter<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(config: EntityStateAdapterConfig<Entity, Id> = {}): EntityStateAdapter<Entity, Id> {\r\n  const selectId = config.selectId ?? getDefaultSelectId();\r\n\r\n  return config.sortComparer\r\n    ? createSortedStateAdapter(selectId, config.sortComparer)\r\n    : createUnsortedStateAdapter(selectId);\r\n}\r\n","import { ComponentStore } from '@ngrx/component-store';\r\nimport { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\r\nimport {\r\n  EntityComponentStoreConfig,\r\n  EntityMap,\r\n  EntityMapOne,\r\n  EntityState,\r\n  EntityStateAdapter,\r\n  ExtractEntity,\r\n  ExtractId,\r\n  PartialUpdater,\r\n  Predicate,\r\n  Update,\r\n} from './models';\r\nimport { createEntityStateAdapter } from './entity-state-adapter';\r\n\r\n/**\r\n * Used to provide entity component store config.\r\n *\r\n * @example\r\n *\r\n * const initialState = getInitialEntityState<ProductsState>({ selectedId: null });\r\n *\r\n * \\@Component({\r\n *   // ...\r\n *   viewProviders: [\r\n *     {\r\n *       provide: ENTITY_COMPONENT_STORE_CONFIG,\r\n *       useValue: { initialState }, // additionally, selectId and sortComparer can be provided\r\n *     },\r\n *     ProductsStore,\r\n *   ],\r\n * })\r\n * export class ProductsComponent {\r\n *   constructor(private readonly productsStore: ProductsStore) {}\r\n * }\r\n */\r\nexport const ENTITY_COMPONENT_STORE_CONFIG = new InjectionToken(\r\n  '@rx-mind/entity-component-store: Entity Component Store Config'\r\n);\r\n\r\n/**\r\n * Component store with entity updaters and selectors.\r\n *\r\n * @example\r\n *\r\n * interface ProductsState extends EntityState<Product, number> {\r\n *   query: string;\r\n * }\r\n *\r\n * const initialState = getInitialEntityState<ProductsState>({ query: '' });\r\n *\r\n * \\@Injectable()\r\n * export class ProductsStore extends EntityComponentStore<ProductsState> {\r\n *   private readonly query$ = this.select(s => s.query);\r\n *\r\n *   readonly vm$ = this.select(\r\n *     this.all$,\r\n *     this.query$,\r\n *     (allProducts, query) => ({\r\n *       products: allProducts.filter(p => p.name.includes(query)),\r\n *       query,\r\n *     }),\r\n *   );\r\n *\r\n *   constructor(private readonly productsService: ProductsService) {\r\n *     super({ initialState });\r\n *   }\r\n *\r\n *   readonly loadProducts = this.effect<void>($ => {\r\n *     return $.pipe(\r\n *       concatMap(() =>\r\n *         this.productsService.getAll().pipe(\r\n *           tapResponse(\r\n *             products => this.setAll(products);\r\n *             console.error,\r\n *           ),\r\n *         )\r\n *       ),\r\n *     );\r\n *   });\r\n *\r\n *   readonly deleteProduct = this.effect<number>(id$ => {\r\n *     return id$.pipe(\r\n *       concatMap(id =>\r\n *         this.productsService.create(id).pipe(\r\n *           tapResponse(\r\n *             () => this.removeOne(id),\r\n *             console.error,\r\n *           ),\r\n *         ),\r\n *       ),\r\n *     ),\r\n *   });\r\n * }\r\n */\r\n@Injectable()\r\nexport class EntityComponentStore<\r\n  State extends EntityState<Entity, Id>,\r\n  Entity extends Record<string, any> = ExtractEntity<State>,\r\n  Id extends string | number = ExtractId<State>\r\n> extends ComponentStore<State> {\r\n  private readonly stateAdapter: EntityStateAdapter<Entity, Id>;\r\n\r\n  constructor(\r\n    @Optional()\r\n    @Inject(ENTITY_COMPONENT_STORE_CONFIG)\r\n    config: EntityComponentStoreConfig<State, Entity, Id> = {}\r\n  ) {\r\n    super(config.initialState);\r\n    this.stateAdapter = createEntityStateAdapter(config);\r\n  }\r\n\r\n  /**\r\n   * Selects the array of entity ids.\r\n   */\r\n  readonly ids$ = this.select((state) => state.ids);\r\n\r\n  /**\r\n   * Selects the entity dictionary.\r\n   */\r\n  readonly entities$ = this.select((state) => state.entities);\r\n\r\n  /**\r\n   * Selects the array of all entities.\r\n   */\r\n  readonly all$ = this.select(this.ids$, this.entities$, (ids, entities) =>\r\n    ids.map((id) => entities[id])\r\n  );\r\n\r\n  /**\r\n   * Selects the total number of entities.\r\n   */\r\n  readonly total$ = this.select(this.ids$, (ids) => ids.length);\r\n\r\n  /**\r\n   * Adds one entity to the collection.\r\n   *\r\n   * @param entity An entity that will be added to the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  addOne(entity: Entity, partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.addOne(entity, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Adds multiple entities to the collection.\r\n   *\r\n   * @param entities An array of entities that will be added to the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  addMany(\r\n    entities: Entity[],\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.addMany(entities, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Adds or replaces one entity in the collection.\r\n   *\r\n   * @param entity An entity that will be added or replaced in the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  setOne(entity: Entity, partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.setOne(entity, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Adds or replaces multiple entities in the collection.\r\n   *\r\n   * @param entities An array of entities that will be added or replaced in the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  setMany(\r\n    entities: Entity[],\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.setMany(entities, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Replaces current collection with the provided collection.\r\n   *\r\n   * @param entities An array of entities that will replace current collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  setAll(entities: Entity[], partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.setAll(entities, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Removes one entity from the collection.\r\n   *\r\n   * @param id An entity id that will be removed from the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  removeOne(id: Id, partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.removeOne(id, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Removes multiple entities from the collection by ids.\r\n   *\r\n   * @param ids An array of entity ids that will be removed from the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  removeMany(ids: Id[], partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void;\r\n  /**\r\n   * Removes multiple entities from the collection by predicate.\r\n   *\r\n   * @param predicate A function that accepts an entity and returns true\r\n   * if the entity should be removed.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  removeMany(\r\n    predicate: Predicate<Entity>,\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void;\r\n  removeMany(\r\n    idsOrPredicate: Id[] | Predicate<Entity>,\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.removeMany(idsOrPredicate as Id[], patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Clears entity collection.\r\n   *\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  removeAll(partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.removeAll(patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates one entity in the collection. Supports partial updates.\r\n   *\r\n   * @param update An object that contains entity id and entity changes.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  updateOne(\r\n    update: Update<Entity, Id>,\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.updateOne(update, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates multiple entities in the collection. Supports partial updates.\r\n   *\r\n   * @param updates An array of objects that contain entity id and entity changes.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  updateMany(\r\n    updates: Update<Entity, Id>[],\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.updateMany(updates, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Adds or updates one entity in the collection. Supports partial updates.\r\n   *\r\n   * @param entity An entity that will be added or updated in the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  upsertOne(entity: Entity, partialStateOrUpdater?: Partial<State> | PartialUpdater<State>): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.upsertOne(entity, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Adds or updates multiple entities in the collection. Supports partial updates.\r\n   *\r\n   * @param entities An array of entities that will be added or updated in the collection.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  upsertMany(\r\n    entities: Entity[],\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.upsertMany(entities, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates one entity in the collection by defining a map function.\r\n   *\r\n   * @param map An object that contains entity id and map function.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  mapOne(\r\n    map: EntityMapOne<Entity, Id>,\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.mapOne(map, patchedState);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Updates multiple entities in the collection by defining a map function.\r\n   *\r\n   * @param map A function that accepts an entity and returns mapped entity.\r\n   * @param partialStateOrUpdater A partial state or a partial updater\r\n   * function that accepts the state and returns the partial state.\r\n   */\r\n  map(\r\n    map: EntityMap<Entity>,\r\n    partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n  ): void {\r\n    this.setState((state) => {\r\n      const patchedState = getPatchedState(state, partialStateOrUpdater);\r\n      return this.stateAdapter.map(map, patchedState);\r\n    });\r\n  }\r\n}\r\n\r\nfunction getPatchedState<State>(\r\n  state: State,\r\n  partialStateOrUpdater?: Partial<State> | PartialUpdater<State>\r\n): State {\r\n  const partialState =\r\n    typeof partialStateOrUpdater === 'function'\r\n      ? partialStateOrUpdater(state)\r\n      : partialStateOrUpdater;\r\n\r\n  return {\r\n    ...state,\r\n    ...partialState,\r\n  };\r\n}\r\n","import { EntityState, ExtractEntity, ExtractId } from './models';\r\n\r\n/**\r\n * Returns initial entity state.\r\n *\r\n * @param additionalState An object that contains initial values for additional\r\n * state properties. If the state does not contain additional properties,\r\n * this argument should not passed.\r\n *\r\n * @example\r\n *\r\n * **With additional state properties**\r\n *\r\n * interface ProductsState extends EntityState<Product, number> {\r\n *   selectedId: number | null;\r\n * }\r\n * const initialState = getInitialEntityState<ProductsState>({ selectedId: null });\r\n *\r\n * **Without additional state properties**\r\n *\r\n * type ProductsState = EntityState<Product, number>;\r\n * const initialState = getInitialEntityState<ProductsState>();\r\n */\r\nexport function getInitialEntityState<\r\n  State extends EntityState<Entity, Id>,\r\n  Entity extends Record<string, any> = ExtractEntity<State>,\r\n  Id extends string | number = ExtractId<State>,\r\n  AdditionalState = Omit<State, keyof EntityState<Entity, Id>>,\r\n  Args extends [Record<string, any>?] = keyof AdditionalState extends never\r\n    ? []\r\n    : [additionalState: AdditionalState]\r\n>(...additionalState: Args): State;\r\nexport function getInitialEntityState<\r\n  State extends EntityState<Entity, Id>,\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(additionalState = {}): State {\r\n  const initialEntityState: EntityState<Entity, Id> = {\r\n    ids: [],\r\n    entities: {} as Record<Id, Entity>,\r\n  };\r\n\r\n  return {\r\n    ...initialEntityState,\r\n    ...additionalState,\r\n  } as State;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}