signalkin 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +458 -0
- package/fesm2022/signalkin.mjs +598 -0
- package/fesm2022/signalkin.mjs.map +1 -0
- package/package.json +25 -0
- package/types/signalkin.d.ts +401 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signalkin.mjs","sources":["../../../projects/signalkin/src/lib/internal-helpers.ts","../../../projects/signalkin/src/lib/with-entity-accessors.ts","../../../projects/signalkin/src/lib/with-entity-relationship.ts","../../../projects/signalkin/src/lib/with-transitive-relationship.ts","../../../projects/signalkin/src/public-api.ts","../../../projects/signalkin/src/signalkin.ts"],"sourcesContent":["import { EntityId } from '@ngrx/signals/entities';\r\nimport { ForeignIdAccessor, IdAccessor } from './types';\r\n\r\nexport const capitalize = (value: string): string => value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\nexport const addUnique = (list: EntityId[] | undefined, id: EntityId): EntityId[] =>\r\n list?.includes(id) ? list : [...(list ?? []), id];\r\n\r\n/** Whether an accessor returned a usable id (keeps `0` and `''`, drops `undefined` / `null`). */\r\nexport const hasId = (id: EntityId | undefined | null): id is EntityId => id !== undefined && id !== null;\r\n\r\n/** Turns a primary-id key-or-getter accessor into a getter; a string is read as a property name off the entity. */\r\nexport const toIdReader = (\r\n accessor: IdAccessor | undefined,\r\n defaultKey: string,\r\n): ((entity: any) => EntityId | undefined) => {\r\n const resolved = accessor ?? defaultKey;\r\n\r\n return typeof resolved === 'function' ? resolved : (entity: any) => entity?.[resolved];\r\n};\r\n\r\n/**\r\n * Resolves a lookup argument that may be an entity OR its id down to the id: an object is read\r\n * through `readId`, anything else (a raw id) passes through. Lets every lookup accept `Entity | EntityId`.\r\n */\r\nexport const toRefResolver = (\r\n readId: (entity: any) => EntityId | undefined,\r\n): ((ref: any) => EntityId | undefined) => (ref: any) =>\r\n ref !== null && typeof ref === 'object' ? readId(ref) : ref;\r\n\r\n/**\r\n * A foreign-key reader that always yields an array of usable ids: a scalar id becomes a one-item\r\n * array, an array (a plural FK like `aisleIds`) passes through, and a missing/empty key yields `[]`.\r\n * This lets a `>1` side carry an array foreign key without the caller normalizing.\r\n */\r\nexport const toIdsReader = (\r\n accessor: ForeignIdAccessor | undefined,\r\n defaultKey: string,\r\n): ((entity: any) => EntityId[]) => {\r\n const read: (entity: any) => EntityId | EntityId[] | undefined =\r\n typeof accessor === 'function' ? accessor : (entity: any) => entity?.[accessor ?? defaultKey];\r\n\r\n return (entity: any) => {\r\n const value = read(entity);\r\n\r\n return Array.isArray(value) ? value.filter(hasId) : hasId(value) ? [value] : [];\r\n };\r\n};\r\n\r\n/** Unions two adjacency maps, deduping ids per key. */\r\nexport const mergeLinks = (\r\n base: Record<EntityId, EntityId[]>,\r\n extra: Record<EntityId, EntityId[]>,\r\n): Record<EntityId, EntityId[]> => {\r\n const merged: Record<EntityId, EntityId[]> = {};\r\n\r\n [base, extra].forEach((source) =>\r\n Object.keys(source).forEach((keyId) => {\r\n merged[keyId] = source[keyId].reduce((ids, id) => addUnique(ids, id), merged[keyId] ?? []);\r\n }),\r\n );\r\n\r\n return merged;\r\n};\r\n\r\n/**\r\n * Drops links whose source or target entity no longer exists, so lookups never\r\n * return ids for entities that were removed from their collection.\r\n */\r\nexport const projectLinks = (\r\n links: Record<EntityId, EntityId[]>,\r\n keyEntityMap: Record<EntityId, unknown>,\r\n valueEntityMap: Record<EntityId, unknown>,\r\n): Record<EntityId, EntityId[]> => {\r\n const projected: Record<EntityId, EntityId[]> = {};\r\n\r\n Object.keys(links).forEach((keyId) => {\r\n if (keyEntityMap[keyId] === undefined) return;\r\n\r\n projected[keyId] = links[keyId].filter((valueId) => valueEntityMap[valueId] !== undefined);\r\n });\r\n\r\n return projected;\r\n};\r\n","import { computed, Signal } from '@angular/core';\r\nimport {\r\n patchState,\r\n signalStoreFeature,\r\n SignalStoreFeature,\r\n SignalStoreFeatureResult,\r\n withComputed,\r\n withMethods,\r\n} from '@ngrx/signals';\r\nimport {\r\n addEntities,\r\n addEntity,\r\n EntityChanges,\r\n EntityId,\r\n EntityMap,\r\n prependEntities,\r\n prependEntity,\r\n removeAllEntities,\r\n removeEntities,\r\n removeEntity,\r\n SelectEntityId,\r\n setAllEntities,\r\n setEntities,\r\n setEntity,\r\n updateAllEntities,\r\n updateEntities,\r\n updateEntity,\r\n upsertEntities,\r\n upsertEntity,\r\n} from '@ngrx/signals/entities';\r\nimport { capitalize, toIdReader, toRefResolver } from './internal-helpers';\r\nimport { CollectionNames, EntityOf, EntityPredicate, RequiredEntityMaps } from './types';\r\n\r\n/** What withEntityAccessors needs from a config: the collection name, its `selectId` if not the `id` property, and its `plural` if not `+s`. An `entityConfig(...)` result works as-is. */\r\nexport type EntityAccessorConfig = {\r\n entity?: unknown;\r\n collection: string;\r\n selectId?: SelectEntityId<any>;\r\n plural?: string;\r\n};\r\n\r\n/** The collections a call targets: the passed configs' collections, or EVERY collection on the store when none are passed. */\r\ntype TargetNames<Store extends SignalStoreFeatureResult, Configs extends readonly EntityAccessorConfig[]> =\r\n Configs extends readonly [] ? CollectionNames<Store['state']> : Configs[number]['collection'];\r\n\r\n/** A collection's plural, from its passed config if one names it, else `+s`. */\r\ntype PluralOf<Configs extends readonly EntityAccessorConfig[], Name extends string> = [\r\n Extract<Configs[number], { collection: Name }>,\r\n] extends [never]\r\n ? `${Name}s`\r\n : Extract<Configs[number], { collection: Name }> extends { plural: infer Plural extends string }\r\n ? Plural\r\n : `${Name}s`;\r\n\r\n/** Convenience signals added alongside ngrx's own `${collection}EntityMap` / `${collection}Ids` / `${collection}Entities`. */\r\ntype EntityAccessorProps<Store, Configs extends readonly EntityAccessorConfig[], Names extends string> = {\r\n [Name in Names as PluralOf<Configs, Name>]: Signal<EntityOf<Store, Name>[]>;\r\n} & {\r\n [Name in Names as `${Name}Map`]: Signal<EntityMap<EntityOf<Store, Name>>>;\r\n} & {\r\n [Name in Names as `${Name}Count`]: Signal<number>;\r\n};\r\n\r\n/** The standard collection methods, one per ngrx updater plus lookups, named by collection. */\r\ntype EntityAccessorMethods<Store, Configs extends readonly EntityAccessorConfig[], Names extends string> = {\r\n [Name in Names as `add${Capitalize<Name>}`]: (entity: EntityOf<Store, Name>) => void;\r\n} & {\r\n [Name in Names as `add${Capitalize<PluralOf<Configs, Name>>}`]: (entities: EntityOf<Store, Name>[]) => void;\r\n} & {\r\n [Name in Names as `prepend${Capitalize<Name>}`]: (entity: EntityOf<Store, Name>) => void;\r\n} & {\r\n [Name in Names as `prepend${Capitalize<PluralOf<Configs, Name>>}`]: (entities: EntityOf<Store, Name>[]) => void;\r\n} & {\r\n [Name in Names as `set${Capitalize<Name>}`]: (entity: EntityOf<Store, Name>) => void;\r\n} & {\r\n [Name in Names as `set${Capitalize<PluralOf<Configs, Name>>}`]: (entities: EntityOf<Store, Name>[]) => void;\r\n} & {\r\n [Name in Names as `setAll${Capitalize<PluralOf<Configs, Name>>}`]: (entities: EntityOf<Store, Name>[]) => void;\r\n} & {\r\n [Name in Names as `upsert${Capitalize<Name>}`]: (entity: EntityOf<Store, Name>) => void;\r\n} & {\r\n [Name in Names as `upsert${Capitalize<PluralOf<Configs, Name>>}`]: (entities: EntityOf<Store, Name>[]) => void;\r\n} & {\r\n [Name in Names as `update${Capitalize<Name>}`]: (\r\n entity: EntityOf<Store, Name> | EntityId,\r\n changes: EntityChanges<EntityOf<Store, Name>>,\r\n ) => void;\r\n} & {\r\n [Name in Names as `update${Capitalize<PluralOf<Configs, Name>>}`]: (\r\n entitiesOrPredicate: (EntityOf<Store, Name> | EntityId)[] | EntityPredicate<EntityOf<Store, Name>>,\r\n changes: EntityChanges<EntityOf<Store, Name>>,\r\n ) => void;\r\n} & {\r\n [Name in Names as `updateAll${Capitalize<PluralOf<Configs, Name>>}`]: (\r\n changes: EntityChanges<EntityOf<Store, Name>>,\r\n ) => void;\r\n} & {\r\n [Name in Names as `remove${Capitalize<Name>}`]: (entity: EntityOf<Store, Name> | EntityId) => void;\r\n} & {\r\n [Name in Names as `remove${Capitalize<PluralOf<Configs, Name>>}`]: (\r\n entitiesOrPredicate: (EntityOf<Store, Name> | EntityId)[] | EntityPredicate<EntityOf<Store, Name>>,\r\n ) => void;\r\n} & {\r\n [Name in Names as `removeAll${Capitalize<PluralOf<Configs, Name>>}`]: () => void;\r\n} & {\r\n [Name in Names as `swap${Capitalize<PluralOf<Configs, Name>>}`]: (\r\n entityA: EntityOf<Store, Name> | EntityId,\r\n entityB: EntityOf<Store, Name> | EntityId,\r\n ) => void;\r\n} & {\r\n [Name in Names as `reorder${Capitalize<PluralOf<Configs, Name>>}`]: (\r\n orderedEntities: (EntityOf<Store, Name> | EntityId)[],\r\n ) => void;\r\n} & {\r\n [Name in Names as `move${Capitalize<Name>}ToIndex`]: (entity: EntityOf<Store, Name> | EntityId, index: number) => void;\r\n} & {\r\n [Name in Names as `${Name}ById`]: (id: EntityId) => EntityOf<Store, Name> | undefined;\r\n} & {\r\n [Name in Names as `has${Capitalize<Name>}`]: (entity: EntityOf<Store, Name> | EntityId) => boolean;\r\n};\r\n\r\ntype EntityAccessorsOutput<Store, Configs extends readonly EntityAccessorConfig[], Names extends string> = {\r\n state: {};\r\n props: EntityAccessorProps<Store, Configs, Names>;\r\n methods: EntityAccessorMethods<Store, Configs, Names>;\r\n};\r\n\r\n/**\r\n * Standard collection methods and convenience signals for the store's entities, named by collection — no args covers every collection, or pass configs to narrow and to honor a custom `selectId` / `plural`.\r\n *\r\n * @example\r\n * signalStore(\r\n * withEntities(bookConfig),\r\n * withEntityAccessors(bookConfig),\r\n * );\r\n * // books(), bookMap(), bookCount(), bookById(id), hasBook(book | id)\r\n * // addBook, addBooks, prependBook, setBook, setAllBooks, upsertBook\r\n * // updateBook(book | id, changes), updateAllBooks(changes), removeBook(book | id), removeAllBooks()\r\n * // swapBooks(a, b), reorderBooks(orderedBooks), moveBookToIndex(book | id, index) reorder the collection\r\n */\r\nexport const withEntityAccessors = <\r\n const Configs extends readonly EntityAccessorConfig[],\r\n Store extends SignalStoreFeatureResult & RequiredEntityMaps<Configs[number]['collection']>,\r\n>(\r\n ...configs: Configs\r\n): SignalStoreFeature<Store, EntityAccessorsOutput<Store, Configs, TargetNames<Store, Configs> & string>> => {\r\n const resolveCollections = (innerStore: any): string[] =>\r\n configs.length > 0\r\n ? configs.map((config) => {\r\n if (typeof innerStore[`${config.collection}EntityMap`] !== 'function') {\r\n throw new Error(\r\n `signalkin: '${config.collection}EntityMap' is not on the store — register withEntities ` +\r\n `for '${config.collection}' before withEntityAccessors.`,\r\n );\r\n }\r\n\r\n return config.collection;\r\n })\r\n : Object.keys(innerStore)\r\n .filter((key) => key.endsWith('EntityMap') && key !== 'EntityMap')\r\n .map((key) => key.slice(0, -'EntityMap'.length));\r\n\r\n const selectIdFor = (collection: string): SelectEntityId<any> | undefined =>\r\n configs.find((config) => config.collection === collection)?.selectId;\r\n\r\n const pluralFor = (collection: string): string =>\r\n configs.find((config) => config.collection === collection)?.plural ?? `${collection}s`;\r\n\r\n const feature = signalStoreFeature(\r\n withComputed((innerStore: any) => {\r\n const props: Record<string, Signal<unknown>> = {};\r\n\r\n resolveCollections(innerStore).forEach((collection) => {\r\n props[pluralFor(collection)] = computed(() => innerStore[`${collection}Entities`]());\r\n props[`${collection}Map`] = computed(() => innerStore[`${collection}EntityMap`]());\r\n props[`${collection}Count`] = computed(() => innerStore[`${collection}Ids`]().length);\r\n });\r\n\r\n return props;\r\n }),\r\n withMethods((innerStore: any) => {\r\n const methods: Record<string, (...args: any[]) => unknown> = {};\r\n\r\n resolveCollections(innerStore).forEach((collection) => {\r\n const capitalizedCollection = capitalize(collection);\r\n const capitalizedPlural = capitalize(pluralFor(collection));\r\n const entityMapKey = `${collection}EntityMap`;\r\n const updaterConfig = { collection, selectId: selectIdFor(collection) } as any;\r\n const resolveRef = toRefResolver(toIdReader(selectIdFor(collection), 'id'));\r\n const resolveTargets = (entitiesOrPredicate: unknown): unknown =>\r\n Array.isArray(entitiesOrPredicate) ? entitiesOrPredicate.map(resolveRef) : entitiesOrPredicate;\r\n\r\n methods[`add${capitalizedCollection}`] = (entity: unknown) => patchState(innerStore, addEntity(entity, updaterConfig));\r\n methods[`add${capitalizedPlural}`] = (entities: unknown[]) =>\r\n patchState(innerStore, addEntities(entities, updaterConfig));\r\n methods[`prepend${capitalizedCollection}`] = (entity: unknown) => patchState(innerStore, prependEntity(entity, updaterConfig));\r\n methods[`prepend${capitalizedPlural}`] = (entities: unknown[]) =>\r\n patchState(innerStore, prependEntities(entities, updaterConfig));\r\n methods[`set${capitalizedCollection}`] = (entity: unknown) => patchState(innerStore, setEntity(entity, updaterConfig));\r\n methods[`set${capitalizedPlural}`] = (entities: unknown[]) =>\r\n patchState(innerStore, setEntities(entities, updaterConfig));\r\n methods[`setAll${capitalizedPlural}`] = (entities: unknown[]) =>\r\n patchState(innerStore, setAllEntities(entities, updaterConfig));\r\n methods[`upsert${capitalizedCollection}`] = (entity: unknown) => patchState(innerStore, upsertEntity(entity, updaterConfig));\r\n methods[`upsert${capitalizedPlural}`] = (entities: unknown[]) =>\r\n patchState(innerStore, upsertEntities(entities, updaterConfig));\r\n methods[`update${capitalizedCollection}`] = (ref: unknown, changes: unknown) =>\r\n patchState(innerStore, updateEntity({ id: resolveRef(ref), changes } as any, updaterConfig));\r\n methods[`update${capitalizedPlural}`] = (entitiesOrPredicate: unknown, changes: unknown) =>\r\n patchState(\r\n innerStore,\r\n updateEntities(\r\n (Array.isArray(entitiesOrPredicate)\r\n ? { ids: resolveTargets(entitiesOrPredicate), changes }\r\n : { predicate: entitiesOrPredicate, changes }) as any,\r\n updaterConfig,\r\n ),\r\n );\r\n methods[`updateAll${capitalizedPlural}`] = (changes: unknown) =>\r\n patchState(innerStore, updateAllEntities(changes as any, updaterConfig));\r\n methods[`remove${capitalizedCollection}`] = (ref: unknown) =>\r\n patchState(innerStore, removeEntity(resolveRef(ref) as EntityId, updaterConfig));\r\n methods[`remove${capitalizedPlural}`] = (entitiesOrPredicate: unknown) =>\r\n patchState(innerStore, removeEntities(resolveTargets(entitiesOrPredicate) as any, updaterConfig));\r\n methods[`removeAll${capitalizedPlural}`] = () => patchState(innerStore, removeAllEntities(updaterConfig));\r\n\r\n // Ordering mutations over the collection's own id order (what `${collection}Entities` follows).\r\n const idsKey = `${collection}Ids`;\r\n const writeIds = (ids: EntityId[]): void => patchState(innerStore, { [idsKey]: ids } as any);\r\n\r\n methods[`swap${capitalizedPlural}`] = (aRef: unknown, bRef: unknown) => {\r\n const ids = [...(innerStore[idsKey]() as EntityId[])];\r\n const indexA = ids.indexOf(resolveRef(aRef) as EntityId);\r\n const indexB = ids.indexOf(resolveRef(bRef) as EntityId);\r\n\r\n if (indexA === -1 || indexB === -1) {\r\n console.warn(`signalkin: swap${capitalizedPlural} — both entities must be in the '${collection}' collection; call ignored.`);\r\n return;\r\n }\r\n\r\n [ids[indexA], ids[indexB]] = [ids[indexB], ids[indexA]];\r\n writeIds(ids);\r\n };\r\n\r\n methods[`reorder${capitalizedPlural}`] = (orderedEntities: unknown[]) => {\r\n const orderedIds = (orderedEntities ?? []).map(resolveRef).filter((id): id is EntityId => id !== undefined);\r\n const current = innerStore[idsKey]() as EntityId[];\r\n const isFullPermutation =\r\n orderedIds.length === current.length &&\r\n new Set(orderedIds).size === orderedIds.length &&\r\n orderedIds.every((id) => current.includes(id));\r\n\r\n if (!isFullPermutation) {\r\n console.warn(`signalkin: reorder${capitalizedPlural} — pass every '${collection}' entity exactly once; call ignored.`);\r\n return;\r\n }\r\n\r\n writeIds(orderedIds);\r\n };\r\n\r\n methods[`move${capitalizedCollection}ToIndex`] = (ref: unknown, index: number) => {\r\n const ids = [...(innerStore[idsKey]() as EntityId[])];\r\n const currentIndex = ids.indexOf(resolveRef(ref) as EntityId);\r\n\r\n if (currentIndex === -1) return;\r\n\r\n const target = Math.max(0, Math.min(index, ids.length - 1));\r\n const [moved] = ids.splice(currentIndex, 1);\r\n ids.splice(target, 0, moved);\r\n writeIds(ids);\r\n };\r\n\r\n methods[`${collection}ById`] = (id: EntityId) => innerStore[entityMapKey]()[id];\r\n methods[`has${capitalizedCollection}`] = (ref: unknown) => innerStore[entityMapKey]()[resolveRef(ref) as EntityId] !== undefined;\r\n });\r\n\r\n return methods;\r\n }),\r\n );\r\n\r\n return feature as unknown as SignalStoreFeature<\r\n Store,\r\n EntityAccessorsOutput<Store, Configs, TargetNames<Store, Configs> & string>\r\n >;\r\n};\r\n","import { computed, Signal } from '@angular/core';\r\nimport {\r\n patchState,\r\n signalStoreFeature,\r\n SignalStoreFeature,\r\n SignalStoreFeatureResult,\r\n withComputed,\r\n withMethods,\r\n withState,\r\n} from '@ngrx/signals';\r\nimport { EntityId, updateEntity } from '@ngrx/signals/entities';\r\nimport {\r\n addUnique,\r\n capitalize,\r\n hasId,\r\n mergeLinks,\r\n projectLinks,\r\n toIdReader,\r\n toIdsReader,\r\n toRefResolver,\r\n} from './internal-helpers';\r\nimport {\r\n Cardinality,\r\n CompositeIdLead,\r\n CompositeIdResult,\r\n CompositeLead,\r\n CompositeResult,\r\n EntityOf,\r\n ForeignIdAccessor,\r\n IdAccessor,\r\n IdLead,\r\n IdOf,\r\n IsMulti,\r\n IsSingle,\r\n Lead,\r\n Related,\r\n RelationshipOptions,\r\n RequiredEntityStore,\r\n} from './types';\r\n\r\ntype LinkState<FromName extends string, ToName extends string> = {\r\n [Key in `_${FromName}${Capitalize<ToName>}Links`]: Record<EntityId, EntityId[]>;\r\n} & {\r\n [Key in `_${ToName}${Capitalize<FromName>}Links`]: Record<EntityId, EntityId[]>;\r\n};\r\n\r\ntype IndexProps<FromName extends string, ToName extends string> = {\r\n [Key in `${FromName}${Capitalize<ToName>}Map`]: Signal<Record<EntityId, EntityId[]>>;\r\n} & {\r\n [Key in `${ToName}${Capitalize<FromName>}Map`]: Signal<Record<EntityId, EntityId[]>>;\r\n};\r\n\r\n/**\r\n * The two get-by lookups for one direction: return the related entity(ies) or their id(s), keyed by\r\n * ONE entity of the other side — passed as the entity OR its id. The returned noun pluralizes by the\r\n * returned side's own count; the shape is a single value for a 1-side, an array otherwise.\r\n */\r\ntype DirectionalLookup<\r\n ReturnEntity,\r\n ReturnName extends string,\r\n ReturnPlural extends string,\r\n ReturnCount extends Cardinality,\r\n ReturnId extends EntityId,\r\n InputEntity,\r\n InputName extends string,\r\n> = {\r\n [Key in `${Lead<ReturnName, ReturnPlural, ReturnCount>}By${Capitalize<InputName>}`]: (\r\n input: InputEntity | EntityId,\r\n ) => Related<ReturnEntity, ReturnCount>;\r\n} & {\r\n [Key in `${IdLead<ReturnName, ReturnCount>}By${Capitalize<InputName>}`]: (\r\n input: InputEntity | EntityId,\r\n ) => Related<ReturnId, ReturnCount>;\r\n};\r\n\r\n/** Existence checks and counts across the link, both directions. Each entity argument accepts the entity or its id. */\r\ntype HasCountMethods<FromEntity, FromName extends string, ToEntity, ToName extends string> = {\r\n [Key in `${FromName}Has${Capitalize<ToName>}`]: (from: FromEntity | EntityId, to: ToEntity | EntityId) => boolean;\r\n} & {\r\n [Key in `${ToName}Has${Capitalize<FromName>}`]: (to: ToEntity | EntityId, from: FromEntity | EntityId) => boolean;\r\n} & {\r\n [Key in `${ToName}CountBy${Capitalize<FromName>}`]: (from: FromEntity | EntityId) => number;\r\n} & {\r\n [Key in `${FromName}CountBy${Capitalize<ToName>}`]: (to: ToEntity | EntityId) => number;\r\n};\r\n\r\ntype LookupMethods<\r\n FromEntity,\r\n FromName extends string,\r\n FromPlural extends string,\r\n FromCount extends Cardinality,\r\n FromId extends EntityId,\r\n ToEntity,\r\n ToName extends string,\r\n ToPlural extends string,\r\n ToCount extends Cardinality,\r\n ToId extends EntityId,\r\n> = DirectionalLookup<ToEntity, ToName, ToPlural, ToCount, ToId, FromEntity, FromName> &\r\n DirectionalLookup<FromEntity, FromName, FromPlural, FromCount, FromId, ToEntity, ToName> &\r\n HasCountMethods<FromEntity, FromName, ToEntity, ToName>;\r\n\r\n/**\r\n * When the INPUT side relates to MORE THAN ONE of the other (count is a number 2+ or `'many'`), the\r\n * SET of that side's ids for a given other-side entity can be used as a key. This generates the\r\n * variadic set-lookups: pass those entities or ids (any order), get the matching other-side\r\n * entity(ies) or id(s). The result is a single value when the set is a candidate key (the keyed side\r\n * has a fixed count 2+) or only one of the returned side can match (returned side is a 1-side);\r\n * otherwise it's an array of every match. The method name goes singular / plural to match.\r\n */\r\ntype CompositeSetLookup<\r\n ReturnEntity,\r\n ReturnName extends string,\r\n ReturnPlural extends string,\r\n ReturnId extends EntityId,\r\n ReturnCount extends Cardinality,\r\n InputEntity,\r\n InputPlural extends string,\r\n InputCount extends Cardinality,\r\n> = IsMulti<InputCount> extends true\r\n ? {\r\n [Key in `${CompositeLead<ReturnName, ReturnPlural, InputCount, ReturnCount>}By${Capitalize<InputPlural>}`]: (\r\n ...refs: (InputEntity | EntityId)[]\r\n ) => CompositeResult<ReturnEntity, InputCount, ReturnCount>;\r\n } & {\r\n [Key in `${CompositeIdLead<ReturnName, InputCount, ReturnCount>}By${Capitalize<InputPlural>}`]: (\r\n ...refs: (InputEntity | EntityId)[]\r\n ) => CompositeIdResult<ReturnId, InputCount, ReturnCount>;\r\n }\r\n : {};\r\n\r\ntype MutationMethods<FromEntity, FromName extends string, ToEntity, ToName extends string> = {\r\n [Key in `add${Capitalize<ToName>}To${Capitalize<FromName>}`]: (\r\n from: FromEntity | EntityId,\r\n to: ToEntity | EntityId,\r\n ) => void;\r\n} & {\r\n [Key in `remove${Capitalize<ToName>}From${Capitalize<FromName>}`]: (\r\n from: FromEntity | EntityId,\r\n to: ToEntity | EntityId,\r\n ) => void;\r\n} & {\r\n [Key in `move${Capitalize<ToName>}To${Capitalize<FromName>}`]: (\r\n to: ToEntity | EntityId,\r\n from: FromEntity | EntityId,\r\n ) => void;\r\n};\r\n\r\n/**\r\n * The position of a member entity within its owner's ordered related list (as returned by the owner's\r\n * get-by lookup), or -1 when the member is not linked. Takes only the member — the owner is the single\r\n * entity the member belongs to. Generated only where the member has exactly one owner (the owner side\r\n * is count 1) and that owner holds many members (the member side is `'many'` or a fixed count 2+); a\r\n * many-to-many has no single owner to infer, so it gets none. The member is passed as the entity or its id.\r\n */\r\ntype IndexOfMethod<\r\n OwnerName extends string,\r\n OwnerCount extends Cardinality,\r\n MemberName extends string,\r\n MemberEntity,\r\n MemberCount extends Cardinality,\r\n> = IsSingle<OwnerCount> extends true\r\n ? IsMulti<MemberCount> extends true\r\n ? {\r\n [Key in `indexOf${Capitalize<OwnerName>}${Capitalize<MemberName>}`]: (\r\n member: MemberEntity | EntityId,\r\n ) => number;\r\n }\r\n : {}\r\n : {};\r\n\r\n/**\r\n * Ordering mutations for a member within its owner's related list: swap two members, set the full\r\n * order, or move one to an index. Generated in the same direction as {@link IndexOfMethod} — only where\r\n * the member has a single owner (owner side is count 1) that holds many members. `reorder` takes the\r\n * complete set of that owner's members and no-ops (with a warning) on an incomplete or foreign list.\r\n * Members are passed as the entity or its id.\r\n */\r\ntype OrderingMethods<\r\n OwnerName extends string,\r\n OwnerCount extends Cardinality,\r\n MemberName extends string,\r\n MemberPlural extends string,\r\n MemberEntity,\r\n MemberCount extends Cardinality,\r\n> = IsSingle<OwnerCount> extends true\r\n ? IsMulti<MemberCount> extends true\r\n ? {\r\n [Key in `swap${Capitalize<OwnerName>}${Capitalize<MemberPlural>}`]: (\r\n memberA: MemberEntity | EntityId,\r\n memberB: MemberEntity | EntityId,\r\n ) => void;\r\n } & {\r\n [Key in `reorder${Capitalize<OwnerName>}${Capitalize<MemberPlural>}`]: (\r\n orderedMembers: (MemberEntity | EntityId)[],\r\n ) => void;\r\n } & {\r\n [Key in `move${Capitalize<OwnerName>}${Capitalize<MemberName>}ToIndex`]: (\r\n member: MemberEntity | EntityId,\r\n index: number,\r\n ) => void;\r\n }\r\n : {}\r\n : {};\r\n\r\n/**\r\n * The By-form of {@link OrderingMethods} plus indexOf, for a member that has MORE THAN ONE owner (owner\r\n * side is not count 1) and belongs to more than one of each owner (member side is multi — a fixed count\r\n * 2+ or `'many'`). The owner can't be inferred, so it is named explicitly as the last argument:\r\n * `indexOfCellByOption(cell, option)`, or `indexOfOptionByCell(option, cell)` in the mirror direction.\r\n * Members are passed as the entity or its id; `reorder` requires that owner's complete member set.\r\n */\r\ntype ByOrderingMethods<\r\n OwnerName extends string,\r\n OwnerEntity,\r\n OwnerCount extends Cardinality,\r\n MemberName extends string,\r\n MemberPlural extends string,\r\n MemberEntity,\r\n MemberCount extends Cardinality,\r\n> = IsMulti<OwnerCount> extends true\r\n ? IsMulti<MemberCount> extends true\r\n ? {\r\n [Key in `indexOf${Capitalize<MemberName>}By${Capitalize<OwnerName>}`]: (\r\n member: MemberEntity | EntityId,\r\n owner: OwnerEntity | EntityId,\r\n ) => number;\r\n } & {\r\n [Key in `swap${Capitalize<MemberPlural>}By${Capitalize<OwnerName>}`]: (\r\n memberA: MemberEntity | EntityId,\r\n memberB: MemberEntity | EntityId,\r\n owner: OwnerEntity | EntityId,\r\n ) => void;\r\n } & {\r\n [Key in `reorder${Capitalize<MemberPlural>}By${Capitalize<OwnerName>}`]: (\r\n orderedMembers: (MemberEntity | EntityId)[],\r\n owner: OwnerEntity | EntityId,\r\n ) => void;\r\n } & {\r\n [Key in `move${Capitalize<MemberName>}By${Capitalize<OwnerName>}ToIndex`]: (\r\n member: MemberEntity | EntityId,\r\n index: number,\r\n owner: OwnerEntity | EntityId,\r\n ) => void;\r\n }\r\n : {}\r\n : {};\r\n\r\n/**\r\n * Filtered directional lookups that keep only the owners where the member sits at EXACTLY the given\r\n * index in that owner's ordered member list, so index 0 is the first slot and a member showing up at\r\n * index 1 is ignored. Generated when BOTH sides are multi (neither is count 1): the owner then holds an\r\n * ordered array of two-or-more members (a fixed count 2+ or `'many'`), and the member belongs to more\r\n * than one owner, so the same member can occupy a different slot in each — which is what makes filtering\r\n * by index meaningful. Both the entity and the id form are returned, in the same order as the base\r\n * `${OwnerPlural}By${MemberName}` lookup. The member is passed as the entity or its id.\r\n *\r\n * @example ensemblesByMusicianAtIndex(musician, 3) — ensembles where that musician plays the 4th chair.\r\n */\r\ntype IndexedLookupMethods<\r\n OwnerName extends string,\r\n OwnerPlural extends string,\r\n OwnerEntity,\r\n OwnerId extends EntityId,\r\n OwnerCount extends Cardinality,\r\n MemberName extends string,\r\n MemberEntity,\r\n MemberCount extends Cardinality,\r\n> = IsMulti<OwnerCount> extends true\r\n ? IsMulti<MemberCount> extends true\r\n ? {\r\n [Key in `${OwnerPlural}By${Capitalize<MemberName>}AtIndex`]: (\r\n member: MemberEntity | EntityId,\r\n index: number,\r\n ) => OwnerEntity[];\r\n } & {\r\n [Key in `${OwnerName}IdsBy${Capitalize<MemberName>}AtIndex`]: (\r\n member: MemberEntity | EntityId,\r\n index: number,\r\n ) => OwnerId[];\r\n }\r\n : {}\r\n : {};\r\n\r\ntype RelationshipOutput<\r\n FromEntity,\r\n FromName extends string,\r\n FromPlural extends string,\r\n FromCount extends Cardinality,\r\n FromId extends EntityId,\r\n ToEntity,\r\n ToName extends string,\r\n ToPlural extends string,\r\n ToCount extends Cardinality,\r\n ToId extends EntityId,\r\n> = {\r\n state: LinkState<FromName, ToName>;\r\n props: IndexProps<FromName, ToName>;\r\n methods: LookupMethods<FromEntity, FromName, FromPlural, FromCount, FromId, ToEntity, ToName, ToPlural, ToCount, ToId> &\r\n // from's id-set keys the to-side; to's id-set keys the from-side.\r\n CompositeSetLookup<ToEntity, ToName, ToPlural, ToId, ToCount, FromEntity, FromPlural, FromCount> &\r\n CompositeSetLookup<FromEntity, FromName, FromPlural, FromId, FromCount, ToEntity, ToPlural, ToCount> &\r\n IndexOfMethod<FromName, FromCount, ToName, ToEntity, ToCount> &\r\n IndexOfMethod<ToName, ToCount, FromName, FromEntity, FromCount> &\r\n OrderingMethods<FromName, FromCount, ToName, ToPlural, ToEntity, ToCount> &\r\n OrderingMethods<ToName, ToCount, FromName, FromPlural, FromEntity, FromCount> &\r\n ByOrderingMethods<FromName, FromEntity, FromCount, ToName, ToPlural, ToEntity, ToCount> &\r\n ByOrderingMethods<ToName, ToEntity, ToCount, FromName, FromPlural, FromEntity, FromCount> &\r\n IndexedLookupMethods<FromName, FromPlural, FromEntity, FromId, FromCount, ToName, ToEntity, ToCount> &\r\n IndexedLookupMethods<ToName, ToPlural, ToEntity, ToId, ToCount, FromName, FromEntity, FromCount> &\r\n MutationMethods<FromEntity, FromName, ToEntity, ToName>;\r\n};\r\n\r\n/**\r\n * Relates two entity collections into typed cross-lookups, counts, composite set-lookups, and link mutations named by each side's `collection`; `count` (`1`, a number, or `'many'`) drives the names and shapes, and every lookup takes the entity or its id.\r\n *\r\n * @example\r\n * signalStore(\r\n * withEntities(libraryConfig),\r\n * withEntities(bookConfig),\r\n * withEntityRelationship({ collection: 'library', count: 1 }, { collection: 'book', count: 'many' }),\r\n * );\r\n * // booksByLibrary(library | id) -> Book[]\r\n * // libraryByBook(book | id) -> Library | undefined\r\n * // libraryHasBook, bookCountByLibrary, addBookToLibrary, removeBookFromLibrary, moveBookToLibrary\r\n * // indexOfLibraryBook(book | id) -> number (the book's position in its library, -1 if absent)\r\n * // swapLibraryBooks(a, b), reorderLibraryBooks(orderedBooks), moveLibraryBookToIndex(book, index) reorder a library's books\r\n * // book side is 'many', so a set-lookup keyed by a full book-set: libraryByBooks(...books | ids) -> Library\r\n */\r\nexport const withEntityRelationship = <\r\n FromName extends string,\r\n FromCount extends Cardinality,\r\n ToName extends string,\r\n ToCount extends Cardinality,\r\n Store extends SignalStoreFeatureResult & RequiredEntityStore<FromName, ToName>,\r\n FromSelect extends IdAccessor = IdAccessor,\r\n ToSelect extends IdAccessor = IdAccessor,\r\n FromPlural extends string = `${FromName}s`,\r\n ToPlural extends string = `${ToName}s`,\r\n>(\r\n from: { collection: FromName; count: FromCount; plural?: FromPlural; selectId?: FromSelect; selectForeignId?: ForeignIdAccessor },\r\n to: { collection: ToName; count: ToCount; plural?: ToPlural; selectId?: ToSelect; selectForeignId?: ForeignIdAccessor },\r\n options?: RelationshipOptions,\r\n): SignalStoreFeature<\r\n Store,\r\n RelationshipOutput<\r\n EntityOf<Store, FromName>,\r\n FromName,\r\n FromPlural,\r\n FromCount,\r\n IdOf<FromSelect, EntityOf<Store, FromName>>,\r\n EntityOf<Store, ToName>,\r\n ToName,\r\n ToPlural,\r\n ToCount,\r\n IdOf<ToSelect, EntityOf<Store, ToName>>\r\n >\r\n> => {\r\n const fromName = from.collection;\r\n const toName = to.collection;\r\n const fromPlural = from.plural ?? `${fromName}s`;\r\n const toPlural = to.plural ?? `${toName}s`;\r\n const fromIsSingle = from.count === 1;\r\n const toIsSingle = to.count === 1;\r\n\r\n const autoIndex = options?.autoIndex ?? true;\r\n const syncForeignKeys = options?.syncForeignKeys ?? true;\r\n const compositeLookups = options?.compositeLookups ?? true;\r\n const readFromPrimaryId = toIdReader(from.selectId, 'id');\r\n const readToPrimaryId = toIdReader(to.selectId, 'id');\r\n // Default foreign-key name pluralizes when the side points at MORE THAN ONE of the other.\r\n const fromForeignKeyDefault = toIsSingle ? `${toName}Id` : `${toName}Ids`;\r\n const toForeignKeyDefault = fromIsSingle ? `${fromName}Id` : `${fromName}Ids`;\r\n const readFromForeignIds = toIdsReader(from.selectForeignId, fromForeignKeyDefault);\r\n const readToForeignIds = toIdsReader(to.selectForeignId, toForeignKeyDefault);\r\n // The WRITABLE foreign-key property per side, for syncForeignKeys — undefined when the accessor is\r\n // a getter, which can't be written back.\r\n const fromForeignKey =\r\n typeof from.selectForeignId === 'function' ? undefined : (from.selectForeignId ?? fromForeignKeyDefault);\r\n const toForeignKey =\r\n typeof to.selectForeignId === 'function' ? undefined : (to.selectForeignId ?? toForeignKeyDefault);\r\n\r\n const forwardLinksKey = `_${fromName}${capitalize(toName)}Links`;\r\n const reverseLinksKey = `_${toName}${capitalize(fromName)}Links`;\r\n const forwardMapKey = `${fromName}${capitalize(toName)}Map`;\r\n const reverseMapKey = `${toName}${capitalize(fromName)}Map`;\r\n const fromEntityMapKey = `${fromName}EntityMap`;\r\n const toEntityMapKey = `${toName}EntityMap`;\r\n\r\n const feature = signalStoreFeature(\r\n withState(() => ({\r\n [forwardLinksKey]: {} as Record<EntityId, EntityId[]>,\r\n [reverseLinksKey]: {} as Record<EntityId, EntityId[]>,\r\n })),\r\n withComputed((innerStore: any) => {\r\n // Links derived from each side's foreign key, rebuilt whenever either collection changes.\r\n const foreignLinks = computed(() => {\r\n const forward: Record<EntityId, EntityId[]> = {};\r\n const backward: Record<EntityId, EntityId[]> = {};\r\n\r\n if (!autoIndex) return { forward, backward };\r\n\r\n // A to-side entity naming its from-side owner(s) (e.g. book.libraryId, or a book's aisleIds).\r\n Object.values(innerStore[toEntityMapKey]()).forEach((entity) => {\r\n const toId = readToPrimaryId(entity);\r\n\r\n if (!hasId(toId)) return;\r\n\r\n readToForeignIds(entity).forEach((fromId) => {\r\n forward[fromId] = addUnique(forward[fromId], toId);\r\n backward[toId] = addUnique(backward[toId], fromId);\r\n });\r\n });\r\n\r\n // A from-side entity naming its to-side(s) (covers the reverse direction and m:n).\r\n Object.values(innerStore[fromEntityMapKey]()).forEach((entity) => {\r\n const fromId = readFromPrimaryId(entity);\r\n\r\n if (!hasId(fromId)) return;\r\n\r\n readFromForeignIds(entity).forEach((toId) => {\r\n forward[fromId] = addUnique(forward[fromId], toId);\r\n backward[toId] = addUnique(backward[toId], fromId);\r\n });\r\n });\r\n\r\n return { forward, backward };\r\n });\r\n\r\n return {\r\n [forwardMapKey]: computed(() =>\r\n projectLinks(\r\n mergeLinks(innerStore[forwardLinksKey](), foreignLinks().forward),\r\n innerStore[fromEntityMapKey](),\r\n innerStore[toEntityMapKey](),\r\n ),\r\n ),\r\n [reverseMapKey]: computed(() =>\r\n projectLinks(\r\n mergeLinks(innerStore[reverseLinksKey](), foreignLinks().backward),\r\n innerStore[toEntityMapKey](),\r\n innerStore[fromEntityMapKey](),\r\n ),\r\n ),\r\n };\r\n }),\r\n withMethods((innerStore: any) => {\r\n const resolveFromRef = toRefResolver(readFromPrimaryId);\r\n const resolveToRef = toRefResolver(readToPrimaryId);\r\n\r\n const resolveEntities = (ids: EntityId[] | undefined, entityMapKey: string): unknown[] =>\r\n (ids ?? []).map((id) => innerStore[entityMapKey]()[id]).filter((entity: unknown) => entity !== undefined);\r\n\r\n const writeLinks = (\r\n forward: Record<EntityId, EntityId[]>,\r\n backward: Record<EntityId, EntityId[]>,\r\n ): void => patchState(innerStore, { [forwardLinksKey]: forward, [reverseLinksKey]: backward } as any);\r\n\r\n const addLink = (fromId: EntityId, toId: EntityId): void => {\r\n const forward = { ...innerStore[forwardLinksKey]() };\r\n const backward = { ...innerStore[reverseLinksKey]() };\r\n forward[fromId] = addUnique(forward[fromId], toId);\r\n backward[toId] = addUnique(backward[toId], fromId);\r\n writeLinks(forward, backward);\r\n };\r\n\r\n const fromUpdaterConfig = { collection: fromName, selectId: (entity: any) => readFromPrimaryId(entity) } as any;\r\n const toUpdaterConfig = { collection: toName, selectId: (entity: any) => readToPrimaryId(entity) } as any;\r\n\r\n /**\r\n * Writes one entity's foreign key when syncForeignKeys is on and the side has a writable key:\r\n * the current FK ids run through `mutate`, then an array FK is replaced with the result and a\r\n * scalar FK with its first id (`undefined` clears it). No-ops on a missing entity or unchanged result.\r\n */\r\n const writeForeignIds = (\r\n entityMapKey: string,\r\n updaterConfig: any,\r\n foreignKey: string | undefined,\r\n isArrayForeignKey: boolean,\r\n entityId: EntityId,\r\n mutate: (currentIds: EntityId[]) => EntityId[],\r\n ): void => {\r\n if (!syncForeignKeys || foreignKey === undefined) return;\r\n\r\n const entity = innerStore[entityMapKey]()[entityId];\r\n\r\n if (entity === undefined) return;\r\n\r\n const current = entity[foreignKey];\r\n const currentIds = Array.isArray(current) ? current.filter(hasId) : hasId(current) ? [current] : [];\r\n const nextIds = mutate(currentIds);\r\n\r\n if (nextIds.length === currentIds.length && nextIds.every((id, index) => id === currentIds[index])) return;\r\n\r\n const nextValue = isArrayForeignKey ? nextIds : nextIds[0];\r\n patchState(\r\n innerStore,\r\n updateEntity({ id: entityId, changes: { [foreignKey]: nextValue } as any }, updaterConfig),\r\n );\r\n };\r\n\r\n /**\r\n * Persists an owner's reordered member list into the owner's OWN array foreign key (e.g.\r\n * `cell.optionIds`), so a swap/reorder/move survives in the entity, not just the manual link. Gated\r\n * by syncForeignKeys, and only when the owner actually stores that key as an array — a 1:many owner\r\n * keeps order through its members' back-references, so there is nothing to write and we never\r\n * fabricate a key on a side that doesn't hold one.\r\n */\r\n const writeOwnerForeignOrder = (\r\n entityMapKey: string,\r\n updaterConfig: any,\r\n foreignKey: string | undefined,\r\n ownerId: EntityId,\r\n orderedIds: EntityId[],\r\n ): void => {\r\n if (!syncForeignKeys || foreignKey === undefined) return;\r\n\r\n const owner = innerStore[entityMapKey]()[ownerId];\r\n\r\n if (!owner || !Array.isArray(owner[foreignKey])) return;\r\n\r\n writeForeignIds(entityMapKey, updaterConfig, foreignKey, true, ownerId, () => orderedIds);\r\n };\r\n const writeFromOwnerOrder = (ownerId: EntityId, orderedIds: EntityId[]): void =>\r\n writeOwnerForeignOrder(fromEntityMapKey, fromUpdaterConfig, fromForeignKey, ownerId, orderedIds);\r\n const writeToOwnerOrder = (ownerId: EntityId, orderedIds: EntityId[]): void =>\r\n writeOwnerForeignOrder(toEntityMapKey, toUpdaterConfig, toForeignKey, ownerId, orderedIds);\r\n\r\n // Removes the manual link, and (with syncForeignKeys) also clears the matching id from both\r\n // entities' foreign keys — otherwise an FK-derived link regenerates on the next read.\r\n const removeLink = (fromId: EntityId, toId: EntityId): void => {\r\n const forward = { ...innerStore[forwardLinksKey]() };\r\n const backward = { ...innerStore[reverseLinksKey]() };\r\n forward[fromId] = (forward[fromId] ?? []).filter((id: EntityId) => id !== toId);\r\n backward[toId] = (backward[toId] ?? []).filter((id: EntityId) => id !== fromId);\r\n writeLinks(forward, backward);\r\n\r\n writeForeignIds(toEntityMapKey, toUpdaterConfig, toForeignKey, !fromIsSingle, toId, (ids) =>\r\n ids.filter((id) => id !== fromId),\r\n );\r\n writeForeignIds(fromEntityMapKey, fromUpdaterConfig, fromForeignKey, !toIsSingle, fromId, (ids) =>\r\n ids.filter((id) => id !== toId),\r\n );\r\n };\r\n\r\n const moveTo = (toId: EntityId, newFromId: EntityId): void => {\r\n const forward = { ...innerStore[forwardLinksKey]() };\r\n const backward = { ...innerStore[reverseLinksKey]() };\r\n\r\n (backward[toId] ?? []).forEach((fromId: EntityId) => {\r\n forward[fromId] = (forward[fromId] ?? []).filter((id: EntityId) => id !== toId);\r\n });\r\n\r\n backward[toId] = [newFromId];\r\n forward[newFromId] = addUnique(forward[newFromId], toId);\r\n writeLinks(forward, backward);\r\n\r\n // With syncForeignKeys: re-point the to-entity's FK, and move the to-id from every old\r\n // from-entity's FK to the new one.\r\n writeForeignIds(toEntityMapKey, toUpdaterConfig, toForeignKey, !fromIsSingle, toId, () => [newFromId]);\r\n\r\n if (syncForeignKeys && fromForeignKey !== undefined) {\r\n Object.values(innerStore[fromEntityMapKey]()).forEach((entity: any) => {\r\n const fromId = readFromPrimaryId(entity);\r\n\r\n if (!hasId(fromId) || fromId === newFromId) return;\r\n\r\n writeForeignIds(fromEntityMapKey, fromUpdaterConfig, fromForeignKey, !toIsSingle, fromId, (ids) =>\r\n ids.filter((id) => id !== toId),\r\n );\r\n });\r\n writeForeignIds(fromEntityMapKey, fromUpdaterConfig, fromForeignKey, !toIsSingle, newFromId, (ids) =>\r\n addUnique(ids, toId),\r\n );\r\n }\r\n };\r\n\r\n const toEntityLead = toIsSingle ? toName : toPlural;\r\n const toIdLead = toIsSingle ? `${toName}Id` : `${toName}Ids`;\r\n const fromEntityLead = fromIsSingle ? fromName : fromPlural;\r\n const fromIdLead = fromIsSingle ? `${fromName}Id` : `${fromName}Ids`;\r\n const capitalizedFrom = capitalize(fromName);\r\n const capitalizedTo = capitalize(toName);\r\n\r\n const toIdsByFrom = (fromId: EntityId | undefined): EntityId[] =>\r\n hasId(fromId) ? innerStore[forwardMapKey]()[fromId] ?? [] : [];\r\n const fromIdsByTo = (toId: EntityId | undefined): EntityId[] =>\r\n hasId(toId) ? innerStore[reverseMapKey]()[toId] ?? [] : [];\r\n // The adjacency maps are already pruned (projectLinks), so their ids resolve to live entities.\r\n const shapeToEntities = (ids: EntityId[]): unknown =>\r\n toIsSingle ? resolveEntities(ids, toEntityMapKey)[0] : resolveEntities(ids, toEntityMapKey);\r\n const shapeFromEntities = (ids: EntityId[]): unknown =>\r\n fromIsSingle ? resolveEntities(ids, fromEntityMapKey)[0] : resolveEntities(ids, fromEntityMapKey);\r\n const shapeToIds = (ids: EntityId[]): unknown => (toIsSingle ? ids[0] : ids);\r\n const shapeFromIds = (ids: EntityId[]): unknown => (fromIsSingle ? ids[0] : ids);\r\n\r\n const methods: Record<string, (...args: any[]) => unknown> = {\r\n [`${toEntityLead}By${capitalizedFrom}`]: (from: any) => shapeToEntities(toIdsByFrom(resolveFromRef(from))),\r\n [`${toIdLead}By${capitalizedFrom}`]: (from: any) => shapeToIds(toIdsByFrom(resolveFromRef(from))),\r\n [`${fromEntityLead}By${capitalizedTo}`]: (to: any) => shapeFromEntities(fromIdsByTo(resolveToRef(to))),\r\n [`${fromIdLead}By${capitalizedTo}`]: (to: any) => shapeFromIds(fromIdsByTo(resolveToRef(to))),\r\n\r\n [`${fromName}Has${capitalizedTo}`]: (from: any, to: any) =>\r\n (innerStore[forwardMapKey]()[resolveFromRef(from) as EntityId] ?? []).includes(resolveToRef(to) as EntityId),\r\n [`${toName}Has${capitalizedFrom}`]: (to: any, from: any) =>\r\n (innerStore[reverseMapKey]()[resolveToRef(to) as EntityId] ?? []).includes(resolveFromRef(from) as EntityId),\r\n [`${toName}CountBy${capitalizedFrom}`]: (from: any) =>\r\n (innerStore[forwardMapKey]()[resolveFromRef(from) as EntityId] ?? []).length,\r\n [`${fromName}CountBy${capitalizedTo}`]: (to: any) =>\r\n (innerStore[reverseMapKey]()[resolveToRef(to) as EntityId] ?? []).length,\r\n\r\n [`add${capitalizedTo}To${capitalizedFrom}`]: (from: any, to: any) =>\r\n addLink(resolveFromRef(from) as EntityId, resolveToRef(to) as EntityId),\r\n [`remove${capitalizedTo}From${capitalizedFrom}`]: (from: any, to: any) =>\r\n removeLink(resolveFromRef(from) as EntityId, resolveToRef(to) as EntityId),\r\n [`move${capitalizedTo}To${capitalizedFrom}`]: (to: any, newFrom: any) =>\r\n moveTo(resolveToRef(to) as EntityId, resolveFromRef(newFrom) as EntityId),\r\n };\r\n\r\n // A set of the input side's ids keys the other side. Collect ALL return-entities per set so the\r\n // lookup can hand back every match; shape to single or array by the same rule as the type layer.\r\n // JSON-encode the sorted ids so the key is collision-proof: an id that contains a plain\r\n // delimiter (`a|b`) can't merge with another set, since every element is quoted and escaped.\r\n const keyOf = (ids: EntityId[]): string => JSON.stringify(ids.map(String).sort());\r\n const isFixedCount = (count: Cardinality): boolean => typeof count === 'number' && count >= 2;\r\n const isMulti = (count: Cardinality): boolean => count !== 1;\r\n\r\n const addSetLookup = (\r\n returnName: string,\r\n returnPlural: string,\r\n returnCount: Cardinality,\r\n inputPlural: string,\r\n inputCount: Cardinality,\r\n sourceMapKey: string,\r\n returnEntityMapKey: string,\r\n readInputId: (entity: any) => EntityId | undefined,\r\n ): void => {\r\n const index = computed(() => {\r\n const built: Record<string, EntityId[]> = {};\r\n const source = innerStore[sourceMapKey]() as Record<EntityId, EntityId[]>;\r\n Object.keys(source).forEach((returnId) => {\r\n const key = keyOf(source[returnId]);\r\n built[key] = addUnique(built[key], returnId);\r\n });\r\n return built;\r\n });\r\n const resolveInputRef = toRefResolver(readInputId);\r\n const lookupIds = (refs: any[]): EntityId[] =>\r\n index()[keyOf(refs.map((ref) => resolveInputRef(ref) as EntityId))] ?? [];\r\n\r\n const single = isFixedCount(inputCount) || returnCount === 1;\r\n const entityLead = single ? returnName : returnPlural;\r\n const idLead = single ? `${returnName}Id` : `${returnName}Ids`;\r\n const capitalizedInputPlural = capitalize(inputPlural);\r\n\r\n methods[`${entityLead}By${capitalizedInputPlural}`] = (...refs: any[]) => {\r\n const entities = resolveEntities(lookupIds(refs), returnEntityMapKey);\r\n return single ? entities[0] : entities;\r\n };\r\n methods[`${idLead}By${capitalizedInputPlural}`] = (...refs: any[]) => {\r\n const ids = lookupIds(refs);\r\n return single ? ids[0] : ids;\r\n };\r\n };\r\n\r\n // Ordering + indexOf over an owner's member list. The owner's ordered members are its entry in the\r\n // manual links map; mergeLinks keeps that array's order ahead of the FK-derived links, so writing it\r\n // sets the order the get-by lookup returns. With syncForeignKeys the same order is also written into\r\n // the owner entity's array foreign key (when it holds one). swap/reorder/move share this core, keyed\r\n // by owner id.\r\n const makeOrderingCore = (\r\n linksKey: string,\r\n membersOf: (ownerId: EntityId | undefined) => EntityId[],\r\n writeOwnerOrder: (ownerId: EntityId, orderedIds: EntityId[]) => void,\r\n ) => {\r\n const writeOrder = (ownerId: EntityId, orderedIds: EntityId[]): void => {\r\n patchState(innerStore, { [linksKey]: { ...innerStore[linksKey](), [ownerId]: orderedIds } } as any);\r\n writeOwnerOrder(ownerId, orderedIds);\r\n };\r\n\r\n return {\r\n swap: (label: string, ownerId: EntityId, aId: EntityId | undefined, bId: EntityId | undefined): void => {\r\n const current = [...membersOf(ownerId)];\r\n const indexA = current.indexOf(aId as EntityId);\r\n const indexB = current.indexOf(bId as EntityId);\r\n\r\n if (indexA === -1 || indexB === -1) {\r\n console.warn(`signalkin: ${label} — both members must belong to that owner; call ignored.`);\r\n return;\r\n }\r\n\r\n [current[indexA], current[indexB]] = [current[indexB], current[indexA]];\r\n writeOrder(ownerId, current);\r\n },\r\n reorder: (label: string, ownerId: EntityId, orderedIds: EntityId[]): void => {\r\n const current = membersOf(ownerId);\r\n const isFullPermutation =\r\n orderedIds.length === current.length &&\r\n new Set(orderedIds).size === orderedIds.length &&\r\n orderedIds.every((id) => current.includes(id));\r\n\r\n if (!isFullPermutation) {\r\n console.warn(`signalkin: ${label} — pass that owner's complete member set exactly once; call ignored.`);\r\n return;\r\n }\r\n\r\n writeOrder(ownerId, orderedIds);\r\n },\r\n move: (ownerId: EntityId, memberId: EntityId | undefined, index: number): void => {\r\n const current = [...membersOf(ownerId)];\r\n const currentIndex = current.indexOf(memberId as EntityId);\r\n\r\n if (currentIndex === -1) return;\r\n\r\n const target = Math.max(0, Math.min(index, current.length - 1));\r\n current.splice(currentIndex, 1);\r\n current.splice(target, 0, memberId as EntityId);\r\n writeOrder(ownerId, current);\r\n },\r\n };\r\n };\r\n\r\n // One-arg family: the member has exactly one owner (owner side count 1), so it is inferred and only\r\n // the member is passed. indexOf<Owner><Member>(member) + swap/reorder/move<Owner><Member(s)>.\r\n const installOrdering = (\r\n capitalizedOwner: string,\r\n capitalizedMember: string,\r\n capitalizedMemberPlural: string,\r\n linksKey: string,\r\n membersOf: (ownerId: EntityId | undefined) => EntityId[],\r\n ownerOf: (memberId: EntityId | undefined) => EntityId | undefined,\r\n resolveMember: (ref: any) => EntityId | undefined,\r\n writeOwnerOrder: (ownerId: EntityId, orderedIds: EntityId[]) => void,\r\n ): void => {\r\n const core = makeOrderingCore(linksKey, membersOf, writeOwnerOrder);\r\n\r\n methods[`indexOf${capitalizedOwner}${capitalizedMember}`] = (member: any) => {\r\n const memberId = resolveMember(member) as EntityId;\r\n\r\n return membersOf(ownerOf(memberId)).indexOf(memberId);\r\n };\r\n methods[`swap${capitalizedOwner}${capitalizedMemberPlural}`] = (memberA: any, memberB: any) => {\r\n const aId = resolveMember(memberA);\r\n const ownerId = ownerOf(aId);\r\n\r\n if (!hasId(ownerId)) return;\r\n\r\n core.swap(`swap${capitalizedOwner}${capitalizedMemberPlural}`, ownerId, aId, resolveMember(memberB));\r\n };\r\n methods[`reorder${capitalizedOwner}${capitalizedMemberPlural}`] = (orderedMembers: any[]) => {\r\n const orderedIds = (orderedMembers ?? []).map(resolveMember).filter(hasId) as EntityId[];\r\n const ownerId = ownerOf(orderedIds[0]);\r\n\r\n if (!hasId(ownerId)) return;\r\n\r\n core.reorder(`reorder${capitalizedOwner}${capitalizedMemberPlural}`, ownerId, orderedIds);\r\n };\r\n methods[`move${capitalizedOwner}${capitalizedMember}ToIndex`] = (member: any, index: number) => {\r\n const memberId = resolveMember(member);\r\n const ownerId = ownerOf(memberId);\r\n\r\n if (!hasId(ownerId)) return;\r\n\r\n core.move(ownerId, memberId, index);\r\n };\r\n };\r\n\r\n // By-family: the member has MORE THAN ONE owner (owner side not count 1) and belongs to more than\r\n // one of each owner (member side multi — fixed 2+ or 'many'), so the owner can't be inferred and is\r\n // named as the last argument.\r\n const installByOrdering = (\r\n capitalizedOwner: string,\r\n capitalizedMember: string,\r\n capitalizedMemberPlural: string,\r\n linksKey: string,\r\n membersOf: (ownerId: EntityId | undefined) => EntityId[],\r\n resolveOwner: (ref: any) => EntityId | undefined,\r\n resolveMember: (ref: any) => EntityId | undefined,\r\n writeOwnerOrder: (ownerId: EntityId, orderedIds: EntityId[]) => void,\r\n ): void => {\r\n const core = makeOrderingCore(linksKey, membersOf, writeOwnerOrder);\r\n\r\n methods[`indexOf${capitalizedMember}By${capitalizedOwner}`] = (member: any, owner: any) =>\r\n membersOf(resolveOwner(owner)).indexOf(resolveMember(member) as EntityId);\r\n methods[`swap${capitalizedMemberPlural}By${capitalizedOwner}`] = (memberA: any, memberB: any, owner: any) => {\r\n const ownerId = resolveOwner(owner);\r\n\r\n if (!hasId(ownerId)) return;\r\n\r\n core.swap(`swap${capitalizedMemberPlural}By${capitalizedOwner}`, ownerId, resolveMember(memberA), resolveMember(memberB));\r\n };\r\n methods[`reorder${capitalizedMemberPlural}By${capitalizedOwner}`] = (orderedMembers: any[], owner: any) => {\r\n const ownerId = resolveOwner(owner);\r\n\r\n if (!hasId(ownerId)) return;\r\n\r\n core.reorder(`reorder${capitalizedMemberPlural}By${capitalizedOwner}`, ownerId, (orderedMembers ?? []).map(resolveMember).filter(hasId) as EntityId[]);\r\n };\r\n methods[`move${capitalizedMember}By${capitalizedOwner}ToIndex`] = (member: any, index: number, owner: any) => {\r\n const ownerId = resolveOwner(owner);\r\n\r\n if (!hasId(ownerId)) return;\r\n\r\n core.move(ownerId, resolveMember(member), index);\r\n };\r\n };\r\n\r\n // Filtered directional lookup: the owners where the member sits at EXACTLY `index` in the owner's\r\n // ordered member list. Installed in the same By-family cases as installByOrdering (member 'many',\r\n // owner multi) — a single-owner member has no choice of slot to filter on. Returns entities and ids.\r\n const installIndexedLookup = (\r\n ownerName: string,\r\n ownerPlural: string,\r\n capitalizedMember: string,\r\n ownerEntityMapKey: string,\r\n membersOf: (ownerId: EntityId | undefined) => EntityId[],\r\n ownersOf: (memberId: EntityId | undefined) => EntityId[],\r\n resolveMember: (ref: any) => EntityId | undefined,\r\n ): void => {\r\n const ownerIdsAtIndex = (member: any, index: number): EntityId[] => {\r\n const memberId = resolveMember(member);\r\n return ownersOf(memberId).filter((ownerId) => membersOf(ownerId)[index] === memberId);\r\n };\r\n methods[`${ownerPlural}By${capitalizedMember}AtIndex`] = (member: any, index: number) =>\r\n resolveEntities(ownerIdsAtIndex(member, index), ownerEntityMapKey);\r\n methods[`${ownerName}IdsBy${capitalizedMember}AtIndex`] = (member: any, index: number) =>\r\n ownerIdsAtIndex(member, index);\r\n };\r\n\r\n // Direction owner = from, members = to (e.g. a feature's options, or an option's cells). A single\r\n // owner is inferred (one-arg installOrdering); a multi owner is named explicitly (installByOrdering),\r\n // now for any multi member side (fixed count 2+ or 'many'), not just 'many'.\r\n if (isMulti(to.count)) {\r\n if (fromIsSingle) {\r\n installOrdering(capitalizedFrom, capitalizedTo, capitalize(toPlural), forwardLinksKey,\r\n (ownerId) => toIdsByFrom(ownerId), (memberId) => fromIdsByTo(memberId)[0], resolveToRef, writeFromOwnerOrder);\r\n } else {\r\n installByOrdering(capitalizedFrom, capitalizedTo, capitalize(toPlural), forwardLinksKey,\r\n (ownerId) => toIdsByFrom(ownerId), resolveFromRef, resolveToRef, writeFromOwnerOrder);\r\n }\r\n }\r\n // Direction owner = to, members = from.\r\n if (isMulti(from.count)) {\r\n if (toIsSingle) {\r\n installOrdering(capitalizedTo, capitalizedFrom, capitalize(fromPlural), reverseLinksKey,\r\n (ownerId) => fromIdsByTo(ownerId), (memberId) => toIdsByFrom(memberId)[0], resolveFromRef, writeToOwnerOrder);\r\n } else {\r\n installByOrdering(capitalizedTo, capitalizedFrom, capitalize(fromPlural), reverseLinksKey,\r\n (ownerId) => fromIdsByTo(ownerId), resolveToRef, resolveFromRef, writeToOwnerOrder);\r\n }\r\n }\r\n\r\n // AtIndex filtered lookups apply whenever BOTH sides are multi: the owner holds an ordered array of\r\n // 2+ members and the member belongs to more than one owner, so it can sit at a different slot in\r\n // each. This is broader than the 'many'-only by-ordering gate above — a fixed-count member (a cell's\r\n // two optionIds, an ensemble's four musicians) still gets it. Both directions.\r\n if (isMulti(from.count) && isMulti(to.count)) {\r\n installIndexedLookup(fromName, fromPlural, capitalizedTo, fromEntityMapKey,\r\n (ownerId) => toIdsByFrom(ownerId), (memberId) => fromIdsByTo(memberId), resolveToRef);\r\n installIndexedLookup(toName, toPlural, capitalizedFrom, toEntityMapKey,\r\n (ownerId) => fromIdsByTo(ownerId), (memberId) => toIdsByFrom(memberId), resolveFromRef);\r\n }\r\n\r\n if (compositeLookups) {\r\n // from's id-set keys the to-side (source: to -> its froms).\r\n if (isMulti(from.count)) {\r\n addSetLookup(toName, toPlural, to.count, fromPlural, from.count, reverseMapKey, toEntityMapKey, readFromPrimaryId);\r\n }\r\n\r\n // to's id-set keys the from-side (source: from -> its tos).\r\n if (isMulti(to.count)) {\r\n addSetLookup(fromName, fromPlural, from.count, toPlural, to.count, forwardMapKey, fromEntityMapKey, readToPrimaryId);\r\n }\r\n }\r\n\r\n return methods;\r\n }),\r\n );\r\n\r\n return feature as unknown as SignalStoreFeature<\r\n Store,\r\n RelationshipOutput<\r\n EntityOf<Store, FromName>,\r\n FromName,\r\n FromPlural,\r\n FromCount,\r\n IdOf<FromSelect, EntityOf<Store, FromName>>,\r\n EntityOf<Store, ToName>,\r\n ToName,\r\n ToPlural,\r\n ToCount,\r\n IdOf<ToSelect, EntityOf<Store, ToName>>\r\n >\r\n >;\r\n};\r\n","import {\r\n signalStoreFeature,\r\n SignalStoreFeature,\r\n SignalStoreFeatureResult,\r\n withMethods,\r\n} from '@ngrx/signals';\r\nimport { EntityId } from '@ngrx/signals/entities';\r\nimport { capitalize, hasId, toIdReader, toRefResolver } from './internal-helpers';\r\nimport { EntityOf, IdAccessor, IdOf, RequiredEntityStore } from './types';\r\n\r\n/**\r\n * The read-only lookups a transitive relationship generates, both directions, arrays throughout\r\n * (a chained walk can reach more than one of either endpoint). Each lookup accepts the endpoint\r\n * entity OR its id, and returns the far endpoint entities or their ids.\r\n */\r\ntype TransitiveOutput<\r\n FromEntity,\r\n FromName extends string,\r\n FromPlural extends string,\r\n FromId extends EntityId,\r\n ToEntity,\r\n ToName extends string,\r\n ToPlural extends string,\r\n ToId extends EntityId,\r\n> = {\r\n state: {};\r\n props: {};\r\n methods: {\r\n [Key in `${ToPlural}By${Capitalize<FromName>}`]: (from: FromEntity | EntityId) => ToEntity[];\r\n } & {\r\n [Key in `${ToName}IdsBy${Capitalize<FromName>}`]: (from: FromEntity | EntityId) => ToId[];\r\n } & {\r\n [Key in `${FromPlural}By${Capitalize<ToName>}`]: (to: ToEntity | EntityId) => FromEntity[];\r\n } & {\r\n [Key in `${FromName}IdsBy${Capitalize<ToName>}`]: (to: ToEntity | EntityId) => FromId[];\r\n };\r\n};\r\n\r\n/**\r\n * Read-only lookups between two collections that share no foreign key, by walking the intermediary collection(s) between them (`through` a single name or an ordered list); returns arrays both directions.\r\n *\r\n * @example\r\n * signalStore(\r\n * withEntities(libraryConfig), withEntities(shelfConfig), withEntities(bookConfig),\r\n * withEntityRelationship({ collection: 'library', count: 1 }, { collection: 'shelf', count: 'many' }),\r\n * withEntityRelationship({ collection: 'shelf', count: 1 }, { collection: 'book', count: 'many' }),\r\n * withTransitiveRelationship({ from: 'library', to: 'book', through: 'shelf' }),\r\n * );\r\n * // booksByLibrary(library | id) -> Book[]\r\n * // librariesByBook(book | id) -> Library[]\r\n */\r\nexport const withTransitiveRelationship = <\r\n FromName extends string,\r\n ToName extends string,\r\n Store extends SignalStoreFeatureResult & RequiredEntityStore<FromName, ToName>,\r\n FromSelect extends IdAccessor = IdAccessor,\r\n ToSelect extends IdAccessor = IdAccessor,\r\n FromPlural extends string = `${FromName}s`,\r\n ToPlural extends string = `${ToName}s`,\r\n>(config: {\r\n from: FromName;\r\n to: ToName;\r\n through: string | string[];\r\n fromPlural?: FromPlural;\r\n toPlural?: ToPlural;\r\n selectFromId?: FromSelect;\r\n selectToId?: ToSelect;\r\n}): SignalStoreFeature<\r\n Store,\r\n TransitiveOutput<\r\n EntityOf<Store, FromName>,\r\n FromName,\r\n FromPlural,\r\n IdOf<FromSelect>,\r\n EntityOf<Store, ToName>,\r\n ToName,\r\n ToPlural,\r\n IdOf<ToSelect>\r\n >\r\n> => {\r\n const { from, to, through } = config;\r\n const fromPlural = config.fromPlural ?? `${from}s`;\r\n const toPlural = config.toPlural ?? `${to}s`;\r\n const path = [from, ...(Array.isArray(through) ? through : [through]), to];\r\n // Adjacency map keys along the path, forward (from→to) and reverse (to→from).\r\n const forwardMapKeys = path.slice(0, -1).map((hop, index) => `${hop}${capitalize(path[index + 1])}Map`);\r\n const reverseMapKeys = path.slice(1).map((hop, index) => `${hop}${capitalize(path[index])}Map`).reverse();\r\n const fromEntityMapKey = `${from}EntityMap`;\r\n const toEntityMapKey = `${to}EntityMap`;\r\n const readFromId = toIdReader(config.selectFromId, 'id');\r\n const readToId = toIdReader(config.selectToId, 'id');\r\n const capitalizedFrom = capitalize(from);\r\n const capitalizedTo = capitalize(to);\r\n\r\n const feature = signalStoreFeature(\r\n withMethods((innerStore: any) => {\r\n // Walk the chain of adjacency maps, flattening + deduping ids hop by hop.\r\n const walk = (startId: EntityId | undefined, mapKeys: string[]): EntityId[] =>\r\n hasId(startId)\r\n ? mapKeys.reduce<EntityId[]>((ids, mapKey) => {\r\n if (typeof innerStore[mapKey] !== 'function') {\r\n throw new Error(\r\n `signalkin: '${mapKey}' is not on the store — a transitive relationship needs the direct ` +\r\n `withEntityRelationship for every hop on its path registered before it (path: ${path.join(' → ')}).`,\r\n );\r\n }\r\n\r\n const map = innerStore[mapKey]() as Record<EntityId, EntityId[]>;\r\n\r\n return Array.from(new Set(ids.flatMap((id) => map[id] ?? [])));\r\n }, [startId])\r\n : [];\r\n const resolve = (ids: EntityId[], entityMapKey: string): unknown[] =>\r\n ids.map((id) => innerStore[entityMapKey]()[id]).filter((entity: unknown) => entity !== undefined);\r\n\r\n const toIdsByFrom = (fromId: EntityId | undefined): EntityId[] => walk(fromId, forwardMapKeys);\r\n const fromIdsByTo = (toId: EntityId | undefined): EntityId[] => walk(toId, reverseMapKeys);\r\n const resolveFromRef = toRefResolver(readFromId);\r\n const resolveToRef = toRefResolver(readToId);\r\n\r\n const methods: Record<string, (...args: any[]) => unknown> = {\r\n [`${toPlural}By${capitalizedFrom}`]: (from: any) => resolve(toIdsByFrom(resolveFromRef(from)), toEntityMapKey),\r\n [`${to}IdsBy${capitalizedFrom}`]: (from: any) => toIdsByFrom(resolveFromRef(from)),\r\n [`${fromPlural}By${capitalizedTo}`]: (to: any) => resolve(fromIdsByTo(resolveToRef(to)), fromEntityMapKey),\r\n [`${from}IdsBy${capitalizedTo}`]: (to: any) => fromIdsByTo(resolveToRef(to)),\r\n };\r\n\r\n return methods;\r\n }),\r\n );\r\n\r\n return feature as unknown as SignalStoreFeature<\r\n Store,\r\n TransitiveOutput<\r\n EntityOf<Store, FromName>,\r\n FromName,\r\n FromPlural,\r\n IdOf<FromSelect>,\r\n EntityOf<Store, ToName>,\r\n ToName,\r\n ToPlural,\r\n IdOf<ToSelect>\r\n >\r\n >;\r\n};\r\n","/*\r\n * Public API Surface of signalkin\r\n */\r\n\r\nexport { withEntityAccessors } from './lib/with-entity-accessors';\r\nexport type { EntityAccessorConfig } from './lib/with-entity-accessors';\r\nexport { withEntityRelationship } from './lib/with-entity-relationship';\r\nexport { withTransitiveRelationship } from './lib/with-transitive-relationship';\r\nexport type {\r\n Cardinality,\r\n EntityPredicate,\r\n ForeignIdAccessor,\r\n IdAccessor,\r\n RelationshipOptions,\r\n RelationshipSide,\r\n} from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "signalkin",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/core": "^22.0.0",
|
|
7
|
+
"@ngrx/signals": "^21.1.1"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"tslib": "^2.3.0"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"module": "fesm2022/signalkin.mjs",
|
|
14
|
+
"typings": "types/signalkin.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
"./package.json": {
|
|
17
|
+
"default": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./types/signalkin.d.ts",
|
|
21
|
+
"default": "./fesm2022/signalkin.mjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"type": "module"
|
|
25
|
+
}
|