@tanstack/db
Version:
A reactive client store for building super fast apps on sync
104 lines (103 loc) • 4.29 kB
JavaScript
;
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