@tanstack/angular-db 0.1.37 → 0.1.39

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import {\n DestroyRef,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n signal,\n} from \"@angular/core\"\nimport { BaseQueryBuilder, createLiveQueryCollection } from \"@tanstack/db\"\nimport type {\n ChangeMessage,\n Collection,\n CollectionStatus,\n Context,\n GetResult,\n InitialQueryBuilder,\n LiveQueryCollectionConfig,\n QueryBuilder,\n} from \"@tanstack/db\"\nimport type { Signal } from \"@angular/core\"\n\n/**\n * The result of calling `injectLiveQuery`.\n * Contains reactive signals for the query state and data.\n */\nexport interface InjectLiveQueryResult<\n TResult extends object = any,\n TKey extends string | number = string | number,\n TUtils extends Record<string, any> = {},\n> {\n /** A signal containing the complete state map of results keyed by their ID */\n state: Signal<Map<TKey, TResult>>\n /** A signal containing the results as an array */\n data: Signal<Array<TResult>>\n /** A signal containing the underlying collection instance (null for disabled queries) */\n collection: Signal<Collection<TResult, TKey, TUtils> | null>\n /** A signal containing the current status of the collection */\n status: Signal<CollectionStatus | `disabled`>\n /** A signal indicating whether the collection is currently loading */\n isLoading: Signal<boolean>\n /** A signal indicating whether the collection is ready */\n isReady: Signal<boolean>\n /** A signal indicating whether the collection is idle */\n isIdle: Signal<boolean>\n /** A signal indicating whether the collection has an error */\n isError: Signal<boolean>\n /** A signal indicating whether the collection has been cleaned up */\n isCleanedUp: Signal<boolean>\n}\n\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext>\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext> | undefined | null\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext>\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext> | undefined | null\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n config: LiveQueryCollectionConfig<TContext>\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TResult extends object,\n TKey extends string | number,\n TUtils extends Record<string, any>,\n>(\n liveQueryCollection: Collection<TResult, TKey, TUtils>\n): InjectLiveQueryResult<TResult, TKey, TUtils>\nexport function injectLiveQuery(opts: any) {\n assertInInjectionContext(injectLiveQuery)\n const destroyRef = inject(DestroyRef)\n\n const collection = computed(() => {\n // Check if it's an existing collection\n const isExistingCollection =\n opts &&\n typeof opts === `object` &&\n typeof opts.subscribeChanges === `function` &&\n typeof opts.startSyncImmediate === `function` &&\n typeof opts.id === `string`\n\n if (isExistingCollection) {\n return opts\n }\n\n if (typeof opts === `function`) {\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = opts(queryBuilder)\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: opts,\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Check if it's reactive query options\n const isReactiveQueryOptions =\n opts &&\n typeof opts === `object` &&\n typeof opts.query === `function` &&\n typeof opts.params === `function`\n\n if (isReactiveQueryOptions) {\n const { params, query } = opts\n const currentParams = params()\n\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = query({ params: currentParams, q: queryBuilder })\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: (q) => query({ params: currentParams, q }),\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Handle LiveQueryCollectionConfig objects\n if (opts && typeof opts === `object` && typeof opts.query === `function`) {\n return createLiveQueryCollection(opts)\n }\n\n throw new Error(`Invalid options provided to injectLiveQuery`)\n })\n\n const state = signal(new Map<string | number, any>())\n const data = signal<Array<any>>([])\n const status = signal<CollectionStatus | `disabled`>(\n collection() ? `idle` : `disabled`\n )\n\n const syncDataFromCollection = (\n currentCollection: Collection<any, any, any>\n ) => {\n const newState = new Map(currentCollection.entries())\n const newData = Array.from(currentCollection.values())\n\n state.set(newState)\n data.set(newData)\n status.set(currentCollection.status)\n }\n\n let unsub: (() => void) | null = null\n const cleanup = () => {\n unsub?.()\n unsub = null\n }\n\n effect((onCleanup) => {\n const currentCollection = collection()\n\n // Handle null collection (disabled query)\n if (!currentCollection) {\n status.set(`disabled` as const)\n state.set(new Map())\n data.set([])\n cleanup()\n return\n }\n\n cleanup()\n\n // Initialize immediately with current state\n syncDataFromCollection(currentCollection)\n\n // Start sync if idle\n if (currentCollection.status === `idle`) {\n currentCollection.startSyncImmediate()\n // Update status after starting sync\n status.set(currentCollection.status)\n }\n\n // Subscribe to changes\n const subscription = currentCollection.subscribeChanges(\n (_: Array<ChangeMessage<any>>) => {\n syncDataFromCollection(currentCollection)\n }\n )\n unsub = subscription.unsubscribe.bind(subscription)\n\n // Handle ready state\n currentCollection.onFirstReady(() => {\n status.set(currentCollection.status)\n })\n\n onCleanup(cleanup)\n })\n\n destroyRef.onDestroy(cleanup)\n\n return {\n state,\n data,\n collection,\n status,\n isLoading: computed(() => status() === `loading`),\n isReady: computed(() => status() === `ready` || status() === `disabled`),\n isIdle: computed(() => status() === `idle`),\n isError: computed(() => status() === `error`),\n isCleanedUp: computed(() => status() === `cleaned-up`),\n }\n}\n"],"names":["assertInInjectionContext","inject","DestroyRef","computed","BaseQueryBuilder","createLiveQueryCollection","signal","effect"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/index.ts"],"sourcesContent":["import {\n DestroyRef,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core'\nimport { BaseQueryBuilder, createLiveQueryCollection } from '@tanstack/db'\nimport type {\n ChangeMessage,\n Collection,\n CollectionStatus,\n Context,\n GetResult,\n InitialQueryBuilder,\n LiveQueryCollectionConfig,\n QueryBuilder,\n} from '@tanstack/db'\nimport type { Signal } from '@angular/core'\n\n/**\n * The result of calling `injectLiveQuery`.\n * Contains reactive signals for the query state and data.\n */\nexport interface InjectLiveQueryResult<\n TResult extends object = any,\n TKey extends string | number = string | number,\n TUtils extends Record<string, any> = {},\n> {\n /** A signal containing the complete state map of results keyed by their ID */\n state: Signal<Map<TKey, TResult>>\n /** A signal containing the results as an array */\n data: Signal<Array<TResult>>\n /** A signal containing the underlying collection instance (null for disabled queries) */\n collection: Signal<Collection<TResult, TKey, TUtils> | null>\n /** A signal containing the current status of the collection */\n status: Signal<CollectionStatus | `disabled`>\n /** A signal indicating whether the collection is currently loading */\n isLoading: Signal<boolean>\n /** A signal indicating whether the collection is ready */\n isReady: Signal<boolean>\n /** A signal indicating whether the collection is idle */\n isIdle: Signal<boolean>\n /** A signal indicating whether the collection has an error */\n isError: Signal<boolean>\n /** A signal indicating whether the collection has been cleaned up */\n isCleanedUp: Signal<boolean>\n}\n\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext>\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext> | undefined | null\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext>,\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (\n q: InitialQueryBuilder,\n ) => QueryBuilder<TContext> | undefined | null,\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n config: LiveQueryCollectionConfig<TContext>,\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TResult extends object,\n TKey extends string | number,\n TUtils extends Record<string, any>,\n>(\n liveQueryCollection: Collection<TResult, TKey, TUtils>,\n): InjectLiveQueryResult<TResult, TKey, TUtils>\nexport function injectLiveQuery(opts: any) {\n assertInInjectionContext(injectLiveQuery)\n const destroyRef = inject(DestroyRef)\n\n const collection = computed(() => {\n // Check if it's an existing collection\n const isExistingCollection =\n opts &&\n typeof opts === `object` &&\n typeof opts.subscribeChanges === `function` &&\n typeof opts.startSyncImmediate === `function` &&\n typeof opts.id === `string`\n\n if (isExistingCollection) {\n return opts\n }\n\n if (typeof opts === `function`) {\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = opts(queryBuilder)\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: opts,\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Check if it's reactive query options\n const isReactiveQueryOptions =\n opts &&\n typeof opts === `object` &&\n typeof opts.query === `function` &&\n typeof opts.params === `function`\n\n if (isReactiveQueryOptions) {\n const { params, query } = opts\n const currentParams = params()\n\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = query({ params: currentParams, q: queryBuilder })\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: (q) => query({ params: currentParams, q }),\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Handle LiveQueryCollectionConfig objects\n if (opts && typeof opts === `object` && typeof opts.query === `function`) {\n return createLiveQueryCollection(opts)\n }\n\n throw new Error(`Invalid options provided to injectLiveQuery`)\n })\n\n const state = signal(new Map<string | number, any>())\n const data = signal<Array<any>>([])\n const status = signal<CollectionStatus | `disabled`>(\n collection() ? `idle` : `disabled`,\n )\n\n const syncDataFromCollection = (\n currentCollection: Collection<any, any, any>,\n ) => {\n const newState = new Map(currentCollection.entries())\n const newData = Array.from(currentCollection.values())\n\n state.set(newState)\n data.set(newData)\n status.set(currentCollection.status)\n }\n\n let unsub: (() => void) | null = null\n const cleanup = () => {\n unsub?.()\n unsub = null\n }\n\n effect((onCleanup) => {\n const currentCollection = collection()\n\n // Handle null collection (disabled query)\n if (!currentCollection) {\n status.set(`disabled` as const)\n state.set(new Map())\n data.set([])\n cleanup()\n return\n }\n\n cleanup()\n\n // Initialize immediately with current state\n syncDataFromCollection(currentCollection)\n\n // Start sync if idle\n if (currentCollection.status === `idle`) {\n currentCollection.startSyncImmediate()\n // Update status after starting sync\n status.set(currentCollection.status)\n }\n\n // Subscribe to changes\n const subscription = currentCollection.subscribeChanges(\n (_: Array<ChangeMessage<any>>) => {\n syncDataFromCollection(currentCollection)\n },\n )\n unsub = subscription.unsubscribe.bind(subscription)\n\n // Handle ready state\n currentCollection.onFirstReady(() => {\n status.set(currentCollection.status)\n })\n\n onCleanup(cleanup)\n })\n\n destroyRef.onDestroy(cleanup)\n\n return {\n state,\n data,\n collection,\n status,\n isLoading: computed(() => status() === `loading`),\n isReady: computed(() => status() === `ready` || status() === `disabled`),\n isIdle: computed(() => status() === `idle`),\n isError: computed(() => status() === `error`),\n isCleanedUp: computed(() => status() === `cleaned-up`),\n }\n}\n"],"names":["assertInInjectionContext","inject","DestroyRef","computed","BaseQueryBuilder","createLiveQueryCollection","signal","effect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n DestroyRef,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n signal,\n} from \"@angular/core\"\nimport { BaseQueryBuilder, createLiveQueryCollection } from \"@tanstack/db\"\nimport type {\n ChangeMessage,\n Collection,\n CollectionStatus,\n Context,\n GetResult,\n InitialQueryBuilder,\n LiveQueryCollectionConfig,\n QueryBuilder,\n} from \"@tanstack/db\"\nimport type { Signal } from \"@angular/core\"\n\n/**\n * The result of calling `injectLiveQuery`.\n * Contains reactive signals for the query state and data.\n */\nexport interface InjectLiveQueryResult<\n TResult extends object = any,\n TKey extends string | number = string | number,\n TUtils extends Record<string, any> = {},\n> {\n /** A signal containing the complete state map of results keyed by their ID */\n state: Signal<Map<TKey, TResult>>\n /** A signal containing the results as an array */\n data: Signal<Array<TResult>>\n /** A signal containing the underlying collection instance (null for disabled queries) */\n collection: Signal<Collection<TResult, TKey, TUtils> | null>\n /** A signal containing the current status of the collection */\n status: Signal<CollectionStatus | `disabled`>\n /** A signal indicating whether the collection is currently loading */\n isLoading: Signal<boolean>\n /** A signal indicating whether the collection is ready */\n isReady: Signal<boolean>\n /** A signal indicating whether the collection is idle */\n isIdle: Signal<boolean>\n /** A signal indicating whether the collection has an error */\n isError: Signal<boolean>\n /** A signal indicating whether the collection has been cleaned up */\n isCleanedUp: Signal<boolean>\n}\n\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext>\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext> | undefined | null\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext>\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext> | undefined | null\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n config: LiveQueryCollectionConfig<TContext>\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TResult extends object,\n TKey extends string | number,\n TUtils extends Record<string, any>,\n>(\n liveQueryCollection: Collection<TResult, TKey, TUtils>\n): InjectLiveQueryResult<TResult, TKey, TUtils>\nexport function injectLiveQuery(opts: any) {\n assertInInjectionContext(injectLiveQuery)\n const destroyRef = inject(DestroyRef)\n\n const collection = computed(() => {\n // Check if it's an existing collection\n const isExistingCollection =\n opts &&\n typeof opts === `object` &&\n typeof opts.subscribeChanges === `function` &&\n typeof opts.startSyncImmediate === `function` &&\n typeof opts.id === `string`\n\n if (isExistingCollection) {\n return opts\n }\n\n if (typeof opts === `function`) {\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = opts(queryBuilder)\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: opts,\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Check if it's reactive query options\n const isReactiveQueryOptions =\n opts &&\n typeof opts === `object` &&\n typeof opts.query === `function` &&\n typeof opts.params === `function`\n\n if (isReactiveQueryOptions) {\n const { params, query } = opts\n const currentParams = params()\n\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = query({ params: currentParams, q: queryBuilder })\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: (q) => query({ params: currentParams, q }),\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Handle LiveQueryCollectionConfig objects\n if (opts && typeof opts === `object` && typeof opts.query === `function`) {\n return createLiveQueryCollection(opts)\n }\n\n throw new Error(`Invalid options provided to injectLiveQuery`)\n })\n\n const state = signal(new Map<string | number, any>())\n const data = signal<Array<any>>([])\n const status = signal<CollectionStatus | `disabled`>(\n collection() ? `idle` : `disabled`\n )\n\n const syncDataFromCollection = (\n currentCollection: Collection<any, any, any>\n ) => {\n const newState = new Map(currentCollection.entries())\n const newData = Array.from(currentCollection.values())\n\n state.set(newState)\n data.set(newData)\n status.set(currentCollection.status)\n }\n\n let unsub: (() => void) | null = null\n const cleanup = () => {\n unsub?.()\n unsub = null\n }\n\n effect((onCleanup) => {\n const currentCollection = collection()\n\n // Handle null collection (disabled query)\n if (!currentCollection) {\n status.set(`disabled` as const)\n state.set(new Map())\n data.set([])\n cleanup()\n return\n }\n\n cleanup()\n\n // Initialize immediately with current state\n syncDataFromCollection(currentCollection)\n\n // Start sync if idle\n if (currentCollection.status === `idle`) {\n currentCollection.startSyncImmediate()\n // Update status after starting sync\n status.set(currentCollection.status)\n }\n\n // Subscribe to changes\n const subscription = currentCollection.subscribeChanges(\n (_: Array<ChangeMessage<any>>) => {\n syncDataFromCollection(currentCollection)\n }\n )\n unsub = subscription.unsubscribe.bind(subscription)\n\n // Handle ready state\n currentCollection.onFirstReady(() => {\n status.set(currentCollection.status)\n })\n\n onCleanup(cleanup)\n })\n\n destroyRef.onDestroy(cleanup)\n\n return {\n state,\n data,\n collection,\n status,\n isLoading: computed(() => status() === `loading`),\n isReady: computed(() => status() === `ready` || status() === `disabled`),\n isIdle: computed(() => status() === `idle`),\n isError: computed(() => status() === `error`),\n isCleanedUp: computed(() => status() === `cleaned-up`),\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import {\n DestroyRef,\n assertInInjectionContext,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core'\nimport { BaseQueryBuilder, createLiveQueryCollection } from '@tanstack/db'\nimport type {\n ChangeMessage,\n Collection,\n CollectionStatus,\n Context,\n GetResult,\n InitialQueryBuilder,\n LiveQueryCollectionConfig,\n QueryBuilder,\n} from '@tanstack/db'\nimport type { Signal } from '@angular/core'\n\n/**\n * The result of calling `injectLiveQuery`.\n * Contains reactive signals for the query state and data.\n */\nexport interface InjectLiveQueryResult<\n TResult extends object = any,\n TKey extends string | number = string | number,\n TUtils extends Record<string, any> = {},\n> {\n /** A signal containing the complete state map of results keyed by their ID */\n state: Signal<Map<TKey, TResult>>\n /** A signal containing the results as an array */\n data: Signal<Array<TResult>>\n /** A signal containing the underlying collection instance (null for disabled queries) */\n collection: Signal<Collection<TResult, TKey, TUtils> | null>\n /** A signal containing the current status of the collection */\n status: Signal<CollectionStatus | `disabled`>\n /** A signal indicating whether the collection is currently loading */\n isLoading: Signal<boolean>\n /** A signal indicating whether the collection is ready */\n isReady: Signal<boolean>\n /** A signal indicating whether the collection is idle */\n isIdle: Signal<boolean>\n /** A signal indicating whether the collection has an error */\n isError: Signal<boolean>\n /** A signal indicating whether the collection has been cleaned up */\n isCleanedUp: Signal<boolean>\n}\n\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext>\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TContext extends Context,\n TParams extends any,\n>(options: {\n params: () => TParams\n query: (args: {\n params: TParams\n q: InitialQueryBuilder\n }) => QueryBuilder<TContext> | undefined | null\n}): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext>,\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n queryFn: (\n q: InitialQueryBuilder,\n ) => QueryBuilder<TContext> | undefined | null,\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<TContext extends Context>(\n config: LiveQueryCollectionConfig<TContext>,\n): InjectLiveQueryResult<GetResult<TContext>>\nexport function injectLiveQuery<\n TResult extends object,\n TKey extends string | number,\n TUtils extends Record<string, any>,\n>(\n liveQueryCollection: Collection<TResult, TKey, TUtils>,\n): InjectLiveQueryResult<TResult, TKey, TUtils>\nexport function injectLiveQuery(opts: any) {\n assertInInjectionContext(injectLiveQuery)\n const destroyRef = inject(DestroyRef)\n\n const collection = computed(() => {\n // Check if it's an existing collection\n const isExistingCollection =\n opts &&\n typeof opts === `object` &&\n typeof opts.subscribeChanges === `function` &&\n typeof opts.startSyncImmediate === `function` &&\n typeof opts.id === `string`\n\n if (isExistingCollection) {\n return opts\n }\n\n if (typeof opts === `function`) {\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = opts(queryBuilder)\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: opts,\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Check if it's reactive query options\n const isReactiveQueryOptions =\n opts &&\n typeof opts === `object` &&\n typeof opts.query === `function` &&\n typeof opts.params === `function`\n\n if (isReactiveQueryOptions) {\n const { params, query } = opts\n const currentParams = params()\n\n // Check if query function returns null/undefined (disabled query)\n const queryBuilder = new BaseQueryBuilder() as InitialQueryBuilder\n const result = query({ params: currentParams, q: queryBuilder })\n\n if (result === undefined || result === null) {\n // Disabled query - return null\n return null\n }\n\n return createLiveQueryCollection({\n query: (q) => query({ params: currentParams, q }),\n startSync: true,\n gcTime: 0,\n })\n }\n\n // Handle LiveQueryCollectionConfig objects\n if (opts && typeof opts === `object` && typeof opts.query === `function`) {\n return createLiveQueryCollection(opts)\n }\n\n throw new Error(`Invalid options provided to injectLiveQuery`)\n })\n\n const state = signal(new Map<string | number, any>())\n const data = signal<Array<any>>([])\n const status = signal<CollectionStatus | `disabled`>(\n collection() ? `idle` : `disabled`,\n )\n\n const syncDataFromCollection = (\n currentCollection: Collection<any, any, any>,\n ) => {\n const newState = new Map(currentCollection.entries())\n const newData = Array.from(currentCollection.values())\n\n state.set(newState)\n data.set(newData)\n status.set(currentCollection.status)\n }\n\n let unsub: (() => void) | null = null\n const cleanup = () => {\n unsub?.()\n unsub = null\n }\n\n effect((onCleanup) => {\n const currentCollection = collection()\n\n // Handle null collection (disabled query)\n if (!currentCollection) {\n status.set(`disabled` as const)\n state.set(new Map())\n data.set([])\n cleanup()\n return\n }\n\n cleanup()\n\n // Initialize immediately with current state\n syncDataFromCollection(currentCollection)\n\n // Start sync if idle\n if (currentCollection.status === `idle`) {\n currentCollection.startSyncImmediate()\n // Update status after starting sync\n status.set(currentCollection.status)\n }\n\n // Subscribe to changes\n const subscription = currentCollection.subscribeChanges(\n (_: Array<ChangeMessage<any>>) => {\n syncDataFromCollection(currentCollection)\n },\n )\n unsub = subscription.unsubscribe.bind(subscription)\n\n // Handle ready state\n currentCollection.onFirstReady(() => {\n status.set(currentCollection.status)\n })\n\n onCleanup(cleanup)\n })\n\n destroyRef.onDestroy(cleanup)\n\n return {\n state,\n data,\n collection,\n status,\n isLoading: computed(() => status() === `loading`),\n isReady: computed(() => status() === `ready` || status() === `disabled`),\n isIdle: computed(() => status() === `idle`),\n isError: computed(() => status() === `error`),\n isCleanedUp: computed(() => status() === `cleaned-up`),\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@tanstack/angular-db",
3
+ "version": "0.1.39",
3
4
  "description": "Angular integration for @tanstack/db",
4
- "version": "0.1.37",
5
5
  "author": "Ethan McDaniel",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "https://github.com/TanStack/db.git",
9
+ "url": "git+https://github.com/TanStack/db.git",
10
10
  "directory": "packages/angular-db"
11
11
  },
12
12
  "homepage": "https://tanstack.com/db",
@@ -15,19 +15,10 @@
15
15
  "angular",
16
16
  "typescript"
17
17
  ],
18
- "dependencies": {
19
- "@tanstack/db": "0.5.11"
20
- },
21
- "devDependencies": {
22
- "@angular/common": "^19.2.15",
23
- "@angular/compiler": "^20.0.0",
24
- "@angular/core": "^19.2.16",
25
- "@angular/platform-browser": "^19.2.16",
26
- "@angular/platform-browser-dynamic": "^19.2.16",
27
- "@vitest/coverage-istanbul": "^3.2.4",
28
- "rxjs": "^7.8.2",
29
- "zone.js": "^0.16.0"
30
- },
18
+ "type": "module",
19
+ "main": "dist/cjs/index.cjs",
20
+ "module": "dist/esm/index.js",
21
+ "types": "dist/esm/index.d.ts",
31
22
  "exports": {
32
23
  ".": {
33
24
  "import": {
@@ -41,23 +32,32 @@
41
32
  },
42
33
  "./package.json": "./package.json"
43
34
  },
35
+ "sideEffects": false,
44
36
  "files": [
45
37
  "dist",
46
38
  "src"
47
39
  ],
48
- "main": "dist/cjs/index.cjs",
49
- "module": "dist/esm/index.js",
40
+ "dependencies": {
41
+ "@tanstack/db": "0.5.13"
42
+ },
50
43
  "peerDependencies": {
51
44
  "@angular/core": ">=16.0.0",
52
45
  "rxjs": ">=6.0.0"
53
46
  },
54
- "sideEffects": false,
55
- "type": "module",
56
- "types": "dist/esm/index.d.ts",
47
+ "devDependencies": {
48
+ "@angular/common": "^19.2.17",
49
+ "@angular/compiler": "^20.3.15",
50
+ "@angular/core": "^19.2.17",
51
+ "@angular/platform-browser": "^19.2.17",
52
+ "@angular/platform-browser-dynamic": "^19.2.17",
53
+ "@vitest/coverage-istanbul": "^3.2.4",
54
+ "rxjs": "^7.8.2",
55
+ "zone.js": "^0.16.0"
56
+ },
57
57
  "scripts": {
58
58
  "build": "vite build",
59
59
  "dev": "vite build --watch",
60
- "test": "npx vitest --run",
60
+ "test": "vitest --run",
61
61
  "lint": "eslint . --fix"
62
62
  }
63
63
  }
package/src/index.ts CHANGED
@@ -5,8 +5,8 @@ import {
5
5
  effect,
6
6
  inject,
7
7
  signal,
8
- } from "@angular/core"
9
- import { BaseQueryBuilder, createLiveQueryCollection } from "@tanstack/db"
8
+ } from '@angular/core'
9
+ import { BaseQueryBuilder, createLiveQueryCollection } from '@tanstack/db'
10
10
  import type {
11
11
  ChangeMessage,
12
12
  Collection,
@@ -16,8 +16,8 @@ import type {
16
16
  InitialQueryBuilder,
17
17
  LiveQueryCollectionConfig,
18
18
  QueryBuilder,
19
- } from "@tanstack/db"
20
- import type { Signal } from "@angular/core"
19
+ } from '@tanstack/db'
20
+ import type { Signal } from '@angular/core'
21
21
 
22
22
  /**
23
23
  * The result of calling `injectLiveQuery`.
@@ -69,20 +69,22 @@ export function injectLiveQuery<
69
69
  }) => QueryBuilder<TContext> | undefined | null
70
70
  }): InjectLiveQueryResult<GetResult<TContext>>
71
71
  export function injectLiveQuery<TContext extends Context>(
72
- queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext>
72
+ queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext>,
73
73
  ): InjectLiveQueryResult<GetResult<TContext>>
74
74
  export function injectLiveQuery<TContext extends Context>(
75
- queryFn: (q: InitialQueryBuilder) => QueryBuilder<TContext> | undefined | null
75
+ queryFn: (
76
+ q: InitialQueryBuilder,
77
+ ) => QueryBuilder<TContext> | undefined | null,
76
78
  ): InjectLiveQueryResult<GetResult<TContext>>
77
79
  export function injectLiveQuery<TContext extends Context>(
78
- config: LiveQueryCollectionConfig<TContext>
80
+ config: LiveQueryCollectionConfig<TContext>,
79
81
  ): InjectLiveQueryResult<GetResult<TContext>>
80
82
  export function injectLiveQuery<
81
83
  TResult extends object,
82
84
  TKey extends string | number,
83
85
  TUtils extends Record<string, any>,
84
86
  >(
85
- liveQueryCollection: Collection<TResult, TKey, TUtils>
87
+ liveQueryCollection: Collection<TResult, TKey, TUtils>,
86
88
  ): InjectLiveQueryResult<TResult, TKey, TUtils>
87
89
  export function injectLiveQuery(opts: any) {
88
90
  assertInInjectionContext(injectLiveQuery)
@@ -156,11 +158,11 @@ export function injectLiveQuery(opts: any) {
156
158
  const state = signal(new Map<string | number, any>())
157
159
  const data = signal<Array<any>>([])
158
160
  const status = signal<CollectionStatus | `disabled`>(
159
- collection() ? `idle` : `disabled`
161
+ collection() ? `idle` : `disabled`,
160
162
  )
161
163
 
162
164
  const syncDataFromCollection = (
163
- currentCollection: Collection<any, any, any>
165
+ currentCollection: Collection<any, any, any>,
164
166
  ) => {
165
167
  const newState = new Map(currentCollection.entries())
166
168
  const newData = Array.from(currentCollection.values())
@@ -204,7 +206,7 @@ export function injectLiveQuery(opts: any) {
204
206
  const subscription = currentCollection.subscribeChanges(
205
207
  (_: Array<ChangeMessage<any>>) => {
206
208
  syncDataFromCollection(currentCollection)
207
- }
209
+ },
208
210
  )
209
211
  unsub = subscription.unsubscribe.bind(subscription)
210
212