@tanstack/db
Version:
A reactive client store for building super fast apps on sync
67 lines (66 loc) • 2.33 kB
JavaScript
import { BaseQueryBuilder } from "./query/builder/index.js";
import { isCollection } from "./live-query-adapter.js";
import { getStableQueryBuilderHash, getStableValueHash } from "./query/ir-stable-identity.js";
function createInitialQueryBuilder(dbClient, deferredCollections) {
return new 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` && !isCollection(value) && !(value instanceof BaseQueryBuilder) && `query` in value) {
const {
query,
queryKey: _queryKey,
client: _client,
...config
} = value;
return {
...config,
query: typeof query === `function` ? query(createInitialQueryBuilder(dbClient, deferredCollections)) : query
};
}
return value;
}
function getPreparedLiveQueryIdentity(value) {
if (isCollection(value)) return [`collection`, value.id];
if (value instanceof BaseQueryBuilder) {
return [`query`, getStableQueryBuilderHash(value)];
}
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`, config.defaultStringCollation]
];
}
if (value === void 0 || value === null) return [`disabled`];
return [`value`, value];
}
function getLiveQueryHash(preparedValue, queryKey) {
const identity = queryKey?.length ? [`queryKey`, queryKey] : isCollection(preparedValue) ? [`collection`, preparedValue.id] : [`derived`, getPreparedLiveQueryIdentity(preparedValue)];
return getStableValueHash(identity, `queryKey`);
}
export {
getLiveQueryHash,
getPreparedLiveQueryIdentity,
prepareLiveQueryValue
};
//# sourceMappingURL=live-query-options.js.map