UNPKG

@tanstack/db

Version:

A reactive client store for building super fast apps on sync

156 lines (155 loc) • 6.01 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const virtualProps = require("../../virtual-props.cjs"); const typeGuards = require("../../utils/type-guards.cjs"); const equalityValueIdentity = require("../equality-value-identity.cjs"); const ROUTED_SCALAR_VALUE = /* @__PURE__ */ Symbol(`tanstack_db_routed_scalar_value`); const ROUTE_METADATA = /* @__PURE__ */ Symbol(`tanstack_db_route_metadata`); const INCLUDES_PUBLIC_KEY = /* @__PURE__ */ Symbol(`includesPublicKey`); const SOURCE_METADATA = /* @__PURE__ */ Symbol(`sourceMetadata`); const SOURCE_ROUTING = /* @__PURE__ */ Symbol(`sourceRouting`); const ROW_METADATA = /* @__PURE__ */ Symbol(`rowMetadata`); const INCLUDES_ROUTING = /* @__PURE__ */ Symbol(`includesRouting`); const INTERNAL_ROUTE_KEYS = /* @__PURE__ */ new Set([ ROUTE_METADATA, INCLUDES_PUBLIC_KEY, SOURCE_METADATA, ROW_METADATA, SOURCE_ROUTING ]); const INTERNAL_CALLBACK_KEYS = /* @__PURE__ */ new Set([ ...INTERNAL_ROUTE_KEYS, INCLUDES_ROUTING ]); function attachRouteMetadata(value, correlationKey, parentContext) { return Object.assign(value, { [ROUTE_METADATA]: { correlationKey, parentContext } }); } function getRouteMetadata(value) { if (value == null || typeof value !== `object` || !(ROUTE_METADATA in value)) { return void 0; } return value[ROUTE_METADATA]; } function getNamespacedRouteMetadata(row, source) { return getRouteMetadata(row) ?? (row != null && typeof row === `object` ? getRouteMetadata(row[source]) : void 0); } function attachRouteMetadataToResult(value, correlationKey, parentContext, publicKey) { if (correlationKey === void 0 && parentContext === void 0 && publicKey === void 0) { return value; } return Object.assign( typeGuards.isPlainObject(value) ? { ...value } : { [ROUTED_SCALAR_VALUE]: value }, { [ROUTE_METADATA]: { correlationKey, parentContext }, [INCLUDES_PUBLIC_KEY]: publicKey } ); } function getRoutedScalarMetadata(value) { if (value == null || typeof value !== `object` || !(ROUTED_SCALAR_VALUE in value)) { return void 0; } const routed = value; return { value: routed[ROUTED_SCALAR_VALUE], ...routed[ROUTE_METADATA], publicKey: routed[INCLUDES_PUBLIC_KEY] }; } function wrapInputRow(alias, row, metadata, hasInternalState = true) { if (!hasInternalState) return { [alias]: row }; const scalar = getRoutedScalarMetadata(row); const route = scalar ?? getRouteMetadata(row); const namespaced = { ...equalityValueIdentity.getParentContextValue(route?.parentContext), [alias]: scalar ? scalar.value : stripInternalCallbackMetadata(row) }; if (route) attachRouteMetadata(namespaced, route.correlationKey, route.parentContext); if (route) Object.assign(namespaced, { [INCLUDES_PUBLIC_KEY]: scalar?.publicKey ?? row[INCLUDES_PUBLIC_KEY] }); if (metadata !== void 0) Object.assign(namespaced, { [SOURCE_METADATA]: { [alias]: metadata } }); if (row !== null && typeof row === `object` && INCLUDES_ROUTING in row) Object.assign(namespaced, { [SOURCE_ROUTING]: { [alias]: row[INCLUDES_ROUTING] } }); return namespaced; } function getSourceMetadata(row, alias) { const metadata = row[SOURCE_METADATA]; if (metadata && Object.hasOwn(metadata, alias)) return metadata[alias]; const source = row[alias]; if (source == null || typeof source !== `object`) return null; const result = {}; for (const name of virtualProps.VIRTUAL_PROP_NAMES) if (name in source) result[name] = source[name]; return result; } function getSourceRouting(row, alias) { return row[SOURCE_ROUTING]?.[alias]; } function mergeSourceContext(target, left, right) { for (const field of [SOURCE_METADATA, SOURCE_ROUTING]) if (left?.[field] || right?.[field]) target[field] = { ...left?.[field], ...right?.[field] }; } function restoreInternalRouteMetadata(target, source) { for (const key of INTERNAL_ROUTE_KEYS) if (Object.hasOwn(source, key)) target[key] = source[key]; } function stripInternalRouteMetadata(value) { return stripInternalMetadata(value, INTERNAL_ROUTE_KEYS); } function stripInternalCallbackMetadata(value) { return stripInternalMetadata(value, INTERNAL_CALLBACK_KEYS); } function stripInternalMetadata(value, keys) { if (!isPublicContainer(value)) return value; for (const key of keys) if (Object.hasOwn(value, key)) { const properties = Object.getOwnPropertyDescriptors(value); for (const omitted of keys) delete properties[omitted]; return Object.defineProperties( createPublicContainerShell(value), properties ); } return value; } function createPublicContainerShell(value) { const prototype = Object.getPrototypeOf(value); return Array.isArray(value) ? Object.setPrototypeOf([], prototype) : Object.create(prototype); } function isPublicContainer(value) { return Array.isArray(value) || typeGuards.isPlainObject(value); } exports.INCLUDES_PUBLIC_KEY = INCLUDES_PUBLIC_KEY; exports.INCLUDES_ROUTING = INCLUDES_ROUTING; exports.ROW_METADATA = ROW_METADATA; exports.SOURCE_METADATA = SOURCE_METADATA; exports.attachRouteMetadata = attachRouteMetadata; exports.attachRouteMetadataToResult = attachRouteMetadataToResult; exports.createPublicContainerShell = createPublicContainerShell; exports.getNamespacedRouteMetadata = getNamespacedRouteMetadata; exports.getRouteMetadata = getRouteMetadata; exports.getRoutedScalarMetadata = getRoutedScalarMetadata; exports.getSourceMetadata = getSourceMetadata; exports.getSourceRouting = getSourceRouting; exports.isPublicContainer = isPublicContainer; exports.mergeSourceContext = mergeSourceContext; exports.restoreInternalRouteMetadata = restoreInternalRouteMetadata; exports.stripInternalCallbackMetadata = stripInternalCallbackMetadata; exports.stripInternalRouteMetadata = stripInternalRouteMetadata; exports.wrapInputRow = wrapInputRow; //# sourceMappingURL=route-metadata.cjs.map