UNPKG

@thi.ng/rstream-query

Version:

@thi.ng/rstream based triple store & reactive query engine

40 lines (39 loc) 1.08 kB
import { isString } from "@thi.ng/checks/is-string"; const AUTO_QVAR_PREFIX = "?__q"; let AUTO_QVAR_ID = 0; const isQVar = (x) => isString(x) && x.charAt(0) === "?"; const isAutoQVar = (x) => isString(x) && x.indexOf(AUTO_QVAR_PREFIX) == 0; const autoQVar = () => AUTO_QVAR_PREFIX + (AUTO_QVAR_ID++).toString(36); const qvarName = (x) => x.substring(1); const qvarResolver = (vs, vp, vo, s, p, o) => { const type = vs << 2 | vp << 1 | vo; let ss = vs && qvarName(s); let pp = vp && qvarName(p); let oo = vo && qvarName(o); switch (type) { case 0: default: return; case 1: return (f) => ({ [oo]: f[2] }); case 2: return (f) => ({ [pp]: f[1] }); case 3: return (f) => ({ [pp]: f[1], [oo]: f[2] }); case 4: return (f) => ({ [ss]: f[0] }); case 5: return (f) => ({ [ss]: f[0], [oo]: f[2] }); case 6: return (f) => ({ [ss]: f[0], [pp]: f[1] }); case 7: return (f) => ({ [ss]: f[0], [pp]: f[1], [oo]: f[2] }); } }; export { autoQVar, isAutoQVar, isQVar, qvarName, qvarResolver };