{"version":3,"sources":["jsdelivr-header.js","/npm/@thi.ng/oquery@2.3.51/match.js","/npm/@thi.ng/oquery@2.3.51/query.js"],"names":[],"mappings":"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","file":"/npm/@thi.ng/oquery@2.3.51/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/@thi.ng/oquery@2.3.51/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { isNumber } from \"@thi.ng/checks/is-number\";\nimport { isString } from \"@thi.ng/checks/is-string\";\nimport { numericOp, stringOp } from \"@thi.ng/compare\";\nconst matchStrings = (key, matches, opts) => {\n  const [includes, excludes] = matches.reduce(\n    (acc, x) => {\n      x[0] === \"!\" ? acc[1].push(x.substring(1)) : acc[0].push(x);\n      return acc;\n    },\n    [[], []]\n  );\n  return matchMultiple(key, includes, excludes, opts);\n};\nconst matchMultiple = (key, includes, excludes, opts = {}) => {\n  const { union = false, value: valueFn } = opts;\n  return excludes?.length ? {\n    q: [\n      key,\n      (values) => {\n        const $values = valueFn ? valueFn(values) : values;\n        for (const x of excludes) {\n          if ($values.includes(x)) return false;\n        }\n        let match = false;\n        for (const x of includes) {\n          if ($values.includes(x)) {\n            match = true;\n            if (union) break;\n          } else if (!union) {\n            match = false;\n            break;\n          }\n        }\n        return match;\n      }\n    ],\n    opts: { cwise: false }\n  } : { q: [key, includes], opts: { intersect: !union } };\n};\nconst matchPattern = (key, expr, opts) => {\n  let re;\n  if (expr instanceof RegExp) {\n    re = expr;\n  } else {\n    if (expr === \"*\") return { q: [key, (x) => x != null], opts };\n    if (/^[<>=!]/.test(expr)) {\n      const op = /^[<>=!]+/.exec(expr)[0];\n      const arg = expr.substring(op.length).trim();\n      const argN = parseFloat(arg);\n      return matchCompare(\n        key,\n        op,\n        isNaN(argN) ? arg : argN,\n        opts\n      );\n    }\n    re = new RegExp(expr, \"i\");\n  }\n  return {\n    q: [\n      key,\n      (x) => (isString(x) || isNumber(x)) && re.test(String(x))\n    ],\n    opts\n  };\n};\nconst matchCompare = (key, op, arg, opts) => ({\n  q: [key, isNumber(arg) ? numericOp(op, arg) : stringOp(op, arg)],\n  opts\n});\nexport {\n  matchCompare,\n  matchMultiple,\n  matchPattern,\n  matchStrings\n};\n","import { isArray } from \"@thi.ng/checks/is-array\";\nimport { isFunction } from \"@thi.ng/checks/is-function\";\nimport { isSet } from \"@thi.ng/checks/is-set\";\nimport { compare } from \"@thi.ng/compare/compare\";\nimport { compareByKey } from \"@thi.ng/compare/keys\";\nimport { reverse } from \"@thi.ng/compare/reverse\";\nimport { defmulti } from \"@thi.ng/defmulti/defmulti\";\nimport { equiv } from \"@thi.ng/equiv\";\nconst __classify = (x) => x != null ? isFunction(x) ? \"f\" : \"l\" : \"n\";\nconst __ensureArray = (src) => isArray(src) ? src : [...src];\nconst __ensureSet = (src) => isArray(src) ? new Set(src) : src;\nconst __intersect = (src) => {\n  const a = __ensureArray(src);\n  const num = a.length;\n  return (b) => {\n    const $b = __ensureSet(b);\n    for (let i = num; i-- > 0; ) {\n      if (!$b.has(a[i])) return false;\n    }\n    return true;\n  };\n};\nconst __coerce = (x, isec = false) => isArray(x) ? isec ? __intersect(x) : (y) => x.includes(y) : isSet(x) ? isec ? __intersect(x) : (y) => x.has(y) : x;\nconst __coerceStr = (x) => isArray(x) ? __coerce(x.map((y) => String(y))) : isSet(x) ? __coerce(new Set([...x].map((y) => String(y)))) : x == null || isFunction(x) ? x : String(x);\nconst __addTriple = (acc, s, p, o) => {\n  const sval = acc[s];\n  sval ? sval[p] = o : acc[s] = { [p]: o };\n};\nconst __match = (o, val, opts) => {\n  if (val != null) {\n    const pred = isFunction(o) ? o : ($) => opts.equiv(o, $);\n    return opts.cwise && isArray(val) ? val.some(pred) : pred(val);\n  }\n  return false;\n};\nconst __collect = (acc, s, p, o, val, opts) => {\n  if (val != null) {\n    const pred = isFunction(o) ? o : ($) => opts.equiv(o, $);\n    if (opts.cwise && isArray(val)) {\n      val = val.filter(pred);\n      val.length && __addTriple(acc, s, p, val);\n    } else if (pred(val)) {\n      __addTriple(acc, s, p, val);\n    }\n  }\n};\nconst __collectFull = (res, s, val) => res[s] = val;\nconst __collectSP = (res, sval, s, p, o, opts) => {\n  if (opts.partial) {\n    for (let $p in sval) {\n      p($p) && __collect(res, s, $p, o, sval[$p], opts);\n    }\n  } else {\n    for (let $p in sval) {\n      if (p($p) && __match(o, sval[$p], opts)) {\n        __collectFull(res, s, sval);\n        return;\n      }\n    }\n  }\n};\nconst __collectSO = (res, sval, s, o, opts) => {\n  if (opts.partial) {\n    for (const p in sval) {\n      __collect(res, s, p, o, sval[p], opts);\n    }\n  } else {\n    for (const p in sval) {\n      if (__match(o, sval[p], opts)) {\n        __collectFull(res, s, sval);\n        return;\n      }\n    }\n  }\n};\nconst __queryLL = (res, db, s, p, o, opts) => {\n  const sval = db[s];\n  const val = sval?.[p];\n  if (opts.partial) {\n    __collect(res, s, p, o, val, opts);\n  } else {\n    __match(o, val, opts) && __collectFull(res, s, sval);\n  }\n};\nconst __queryLF = (res, db, s, p, o, opts) => {\n  const sval = db[s];\n  sval != null && __collectSP(res, sval, s, p, o, opts);\n};\nconst __queryLN = (res, db, s, _, o, opts) => {\n  const sval = db[s];\n  sval != null && __collectSO(res, sval, s, o, opts);\n};\nconst __queryFL = (res, db, s, p, o, opts) => {\n  if (opts.partial) {\n    for (let $s in db) {\n      s($s) && __collect(res, $s, p, o, db[$s]?.[p], opts);\n    }\n  } else {\n    for (let $s in db) {\n      const sval = db[$s];\n      s($s) && __match(o, sval?.[p], opts) && __collectFull(res, $s, sval);\n    }\n  }\n};\nconst __queryFF = (res, db, s, p, o, opts) => {\n  for (let $s in db) {\n    s($s) && __collectSP(res, db[$s], $s, p, o, opts);\n  }\n};\nconst __queryFFNPartial = (res, db, s, p) => {\n  for (let $s in db) {\n    if (s($s)) {\n      const sval = db[$s];\n      for (let $p in sval) {\n        p($p) && __addTriple(res, $s, $p, sval[$p]);\n      }\n    }\n  }\n};\nconst __queryFFN = (res, db, s, p) => {\n  for (let $s in db) {\n    if (s($s)) {\n      const sval = db[$s];\n      for (let $p in sval) {\n        if (p($p)) {\n          __collectFull(res, $s, sval);\n          break;\n        }\n      }\n    }\n  }\n};\nconst __queryFN = (res, db, s, _, o, opts) => {\n  for (let $s in db) {\n    s($s) && __collectSO(res, db[$s], $s, o, opts);\n  }\n};\nconst __queryNL = (res, db, _, p, o, opts) => {\n  if (opts.partial) {\n    for (const s in db) {\n      __collect(res, s, p, o, db[s][p], opts);\n    }\n  } else {\n    for (const s in db) {\n      const sval = db[s];\n      __match(o, sval[p], opts) && __collectFull(res, s, sval);\n    }\n  }\n};\nconst __queryNF = (res, db, _, p, o, opts) => {\n  for (const s in db) {\n    __collectSP(res, db[s], s, p, o, opts);\n  }\n};\nconst __queryNN = (res, db, _, __, o, opts) => {\n  for (const s in db) {\n    __collectSO(res, db[s], s, o, opts);\n  }\n};\nconst __queryNLNPartial = (res, db, _, p) => {\n  for (const s in db) {\n    const val = db[s][p];\n    val != null && __addTriple(res, s, p, val);\n  }\n};\nconst __queryNLN = (res, db, _, p) => {\n  for (const s in db) {\n    const sval = db[s];\n    const val = sval[p];\n    val != null && __collectFull(res, s, sval);\n  }\n};\nconst __querySP = (res, sval, s, p, _, opts) => {\n  if (opts.partial) {\n    for (const q in sval) {\n      if (p(q)) {\n        const val = sval[q];\n        val != null && __addTriple(res, s, q, val);\n      }\n    }\n  } else {\n    for (const q in sval) {\n      if (p(q)) {\n        __collectFull(res, s, sval);\n        return;\n      }\n    }\n  }\n};\nconst __queryO = (res, db, s, p, _, opts) => {\n  const sval = db[s];\n  const val = sval?.[p];\n  val != null && (opts.partial ? __addTriple(res, s, p, val) : __collectFull(res, s, sval));\n};\nconst IMPLS = {\n  lll: __queryLL,\n  llf: __queryLL,\n  lln: __queryO,\n  lfl: __queryLF,\n  lff: __queryLF,\n  lfn: (res, db, s, p, _, opts) => {\n    const sval = db[s];\n    sval != null && __querySP(res, sval, s, p, null, opts);\n  },\n  lnl: __queryLN,\n  lnf: __queryLN,\n  lnn: (res, db, s) => {\n    const sval = db[s];\n    sval != null && __collectFull(res, s, sval);\n  },\n  fll: __queryFL,\n  flf: __queryFL,\n  fln: (res, db, s, p, _, opts) => {\n    for (let $s in db) {\n      s($s) && __queryO(res, db, $s, p, null, opts);\n    }\n  },\n  ffl: __queryFF,\n  fff: __queryFF,\n  ffn: (res, db, s, p, o, opts) => (opts.partial ? __queryFFNPartial : __queryFFN)(res, db, s, p, o, opts),\n  fnl: __queryFN,\n  fnf: __queryFN,\n  fnn: (res, db, s) => {\n    for (let $s in db) {\n      if (s($s)) {\n        const sval = db[$s];\n        sval != null && __collectFull(res, $s, sval);\n      }\n    }\n  },\n  nll: __queryNL,\n  nlf: __queryNL,\n  nln: (res, db, s, p, o, opts) => (opts.partial ? __queryNLNPartial : __queryNLN)(res, db, s, p, o, opts),\n  nfl: __queryNF,\n  nff: __queryNF,\n  nfn: (res, db, _, p, __, opts) => {\n    for (const s in db) {\n      __querySP(res, db[s], s, p, null, opts);\n    }\n  },\n  nnl: __queryNN,\n  nnf: __queryNN,\n  nnn: (res, db) => Object.assign(res, db)\n};\nconst __impl = defmulti((_, __, s, p, o) => __classify(s) + __classify(p) + __classify(o), {}, IMPLS);\nconst __objQuery = (src, opts, args) => {\n  const isIsec = opts.cwise && opts.intersect;\n  isIsec && (opts.cwise = false);\n  let [s, p, o, out] = args;\n  out = out || {};\n  __impl(\n    out,\n    src,\n    __coerceStr(s),\n    __coerceStr(p),\n    __coerce(o, isIsec),\n    opts\n  );\n  return out;\n};\nconst __arrayQuery = (src, opts, p, o, collect) => {\n  const isIsec = opts.cwise && opts.intersect;\n  isIsec && (opts.cwise = false);\n  const $p = __coerceStr(p);\n  const $o = __coerce(o, isIsec);\n  const impl = IMPLS[\"n\" + __classify($p) + __classify($o)];\n  for (let i = 0, n = src.length; i < n; i++) {\n    const res = {};\n    impl(res, { _: src[i] }, \"_\", $p, $o, opts);\n    res._ && collect(res._, i);\n  }\n};\nconst DEFAULT_OPTS = {\n  partial: false,\n  cwise: true,\n  intersect: false,\n  equiv\n};\nconst defQuery = (opts) => {\n  const $opts = { ...DEFAULT_OPTS, ...opts };\n  return ((src, ...args) => {\n    if (isArray(src)) {\n      const out = args[2] || [];\n      __arrayQuery(src, $opts, args[0], args[1], (x) => out.push(x));\n      return out;\n    } else {\n      return __objQuery(src, $opts, args);\n    }\n  });\n};\nconst defKeyQuery = (opts) => {\n  const $opts = { ...DEFAULT_OPTS, ...opts };\n  return ((src, ...args) => {\n    if (isArray(src)) {\n      const out = args[2] || /* @__PURE__ */ new Set();\n      __arrayQuery(src, $opts, args[0], args[1], (_, i) => out.add(i));\n      return out;\n    } else {\n      const res = __objQuery(src, $opts, args.slice(0, 3));\n      const out = args[3];\n      if (!out) return new Set(Object.keys(res));\n      for (const k in res) out.add(k);\n      return out;\n    }\n  });\n};\nconst query = (db, terms, opts = {}) => {\n  for (const term of terms) {\n    if (!term) continue;\n    db = defQuery(term.opts)(\n      db,\n      term.q[0],\n      term.q[1]\n    );\n    term.post && (db = term.post(db));\n    if (!db.length) return db;\n  }\n  const limit = opts.limit || 0;\n  if (limit > 0 && limit < db.length) {\n    db.length = limit;\n  }\n  if (opts.sort) {\n    db.sort(\n      compareByKey(\n        opts.sort,\n        opts.reverse ? reverse(compare) : compare\n      )\n    );\n  }\n  return db;\n};\nexport {\n  defKeyQuery,\n  defQuery,\n  query\n};\n"]}