@tanstack/db
Version:
A reactive client store for building super fast apps on sync
71 lines (70 loc) • 2.17 kB
JavaScript
import { Value, getPropRefSourceAlias, PropRef, getPropRefPropertyPath, Func } from "../ir.js";
function getSourceAliasesFromExpression(expr) {
switch (expr.type) {
case `ref`: {
const sourceAlias = getPropRefSourceAlias(expr) ?? expr.path[0];
return new Set(sourceAlias ? [sourceAlias] : []);
}
case `func`: {
const sourceAliases = /* @__PURE__ */ new Set();
for (const arg of expr.args) {
for (const alias of getSourceAliasesFromExpression(arg)) {
sourceAliases.add(alias);
}
}
return sourceAliases;
}
default:
return /* @__PURE__ */ new Set();
}
}
function normalizeExpressionPaths(whereClause, collectionAlias) {
const tpe = whereClause.type;
if (tpe === `val`) {
return new Value(whereClause.value);
} else if (tpe === `ref`) {
const path = whereClause.path;
const sourceAlias = getPropRefSourceAlias(whereClause);
if (Array.isArray(path)) {
if (sourceAlias === collectionAlias) {
return new PropRef(getPropRefPropertyPath(whereClause));
} else if (sourceAlias !== void 0) {
return new PropRef(path, sourceAlias);
} else if (path[0] === collectionAlias && path.length > 1) {
return new PropRef(path.slice(1));
} else if (path.length === 1 && path[0] !== void 0) {
return new PropRef([path[0]]);
}
}
return new PropRef(Array.isArray(path) ? path : [String(path)]);
} else {
const args = [];
for (const arg of whereClause.args) {
const convertedArg = normalizeExpressionPaths(
arg,
collectionAlias
);
args.push(convertedArg);
}
return new Func(whereClause.name, args);
}
}
function normalizeOrderByPaths(orderBy, collectionAlias) {
const normalizedOrderBy = orderBy.map((clause) => {
const basicExp = normalizeExpressionPaths(
clause.expression,
collectionAlias
);
return {
...clause,
expression: basicExp
};
});
return normalizedOrderBy;
}
export {
getSourceAliasesFromExpression,
normalizeExpressionPaths,
normalizeOrderByPaths
};
//# sourceMappingURL=expressions.js.map