UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

104 lines (103 loc) • 4.29 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const index = require("./query/builder/index.cjs"); const liveQueryAdapter = require("./live-query-adapter.cjs"); const liveQueryCollection = require("./query/live-query-collection.cjs"); const pooledLiveQuery = require("./query/pooled-live-query.cjs"); const irStableIdentity = require("./query/ir-stable-identity.cjs"); const runtimeReferenceIdentity = require("./query/runtime-reference-identity.cjs"); function createInitialQueryBuilder(dbClient, deferredCollections) { return new index.BaseQueryBuilder( {}, dbClient ? (options) => { const collection = dbClient._materializeCollectionForRender( options ); if (collection._deferSyncStart()) deferredCollections.add(collection); return collection; } : void 0 ); } function prepareLiveQueryValue(value, dbClient, deferredCollections) { if (typeof value === `function`) { return prepareLiveQueryValue( value(createInitialQueryBuilder(dbClient, deferredCollections)), dbClient, deferredCollections ); } if (value && typeof value === `object` && !liveQueryAdapter.isCollection(value) && !(value instanceof index.BaseQueryBuilder) && `query` in value) { const { query, queryKey: _queryKey, client: _client, ...config } = value; const preparedQuery = typeof query === `function` ? query(createInitialQueryBuilder(dbClient, deferredCollections)) : query; if (preparedQuery === void 0 || preparedQuery === null) { return preparedQuery; } return { ...config, query: preparedQuery }; } return value; } function getPreparedLiveQueryIdentity(value) { if (liveQueryAdapter.isCollection(value)) return [`collection`, value.id]; if (value instanceof index.BaseQueryBuilder) { const pooled = pooledLiveQuery.getPooledQueryIdentity(value); return pooled === void 0 ? [`query`, irStableIdentity.getStableQueryBuilderHash(value)] : [`pooled`, pooled]; } if (value && typeof value === `object` && `query` in value) { const config = value; return [ `config`, getPreparedLiveQueryIdentity(config.query), [`getKey`, config.getKey], [`schema`, config.schema], [`singleResult`, config.singleResult === true], [ `defaultStringCollation`, runtimeReferenceIdentity.getStringCollationIdentity(config.defaultStringCollation) ] ]; } if (value === void 0 || value === null) return [`disabled`]; return [`value`, value]; } function getLiveQueryHash(preparedValue, queryKey) { const identity = queryKey?.length ? [`queryKey`, queryKey] : liveQueryAdapter.isCollection(preparedValue) ? [`collection`, preparedValue.id] : [`derived`, getPreparedLiveQueryIdentity(preparedValue)]; return irStableIdentity.getStableValueHash(identity, `queryKey`); } function poolConfig(config, gcTime) { if (!(config.query instanceof index.BaseQueryBuilder) || !Object.keys(config).every((key) => key === `query` || key === `gcTime`)) { return void 0; } return pooledLiveQuery.createPooledLiveQuery(config.query, { gcTime: config.gcTime ?? gcTime }); } function resolveLiveQueryValue(value, { gcTime, pool = true } = {}) { if (value === void 0 || value === null) return null; if (liveQueryAdapter.isCollection(value)) { value.startSyncImmediate(); return value; } if (value instanceof index.BaseQueryBuilder) { return (pool ? pooledLiveQuery.createPooledLiveQuery(value, { gcTime }) : void 0) ?? liveQueryCollection.createLiveQueryCollection({ query: value, startSync: true, gcTime }); } if (typeof value === `object`) { const config = value; return (pool ? poolConfig(config, gcTime) : void 0) ?? liveQueryCollection.createLiveQueryCollection({ startSync: true, gcTime, ...config }); } throw new Error( `A live query must be a QueryBuilder, LiveQueryCollectionConfig, Collection, undefined, or null. Got: ${typeof value}` ); } exports.getLiveQueryHash = getLiveQueryHash; exports.getPreparedLiveQueryIdentity = getPreparedLiveQueryIdentity; exports.prepareLiveQueryValue = prepareLiveQueryValue; exports.resolveLiveQueryValue = resolveLiveQueryValue; //# sourceMappingURL=live-query-options.cjs.map