@react-querybuilder/core 8.16.0 → 8.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +7 -2
  2. package/dist/cjs/react-querybuilder_core.cjs.development.js +27 -9
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  4. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +7 -2
  5. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  6. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  7. package/dist/convertQuery-BeJJH9BI.mjs.map +1 -1
  8. package/dist/convertQuery-Lx2HQa0m.js.map +1 -1
  9. package/dist/formatQuery.d.mts +7 -2
  10. package/dist/formatQuery.d.ts +7 -2
  11. package/dist/formatQuery.js +27 -9
  12. package/dist/formatQuery.js.map +1 -1
  13. package/dist/formatQuery.mjs +27 -10
  14. package/dist/formatQuery.mjs.map +1 -1
  15. package/dist/{import-BHlzBLM_.d.mts → import-BC_bAKQ8.d.mts} +2 -2
  16. package/dist/{import-C6imciDf.d.ts → import-D1KnXhkQ.d.ts} +2 -2
  17. package/dist/{index-D-Iej37L.d.mts → index-AAZg4Uh1.d.mts} +2 -2
  18. package/dist/{index-Cjapnb-H.d.ts → index-Ds06V0zO.d.ts} +2 -2
  19. package/dist/objectUtils-Bzug_QfX.js.map +1 -1
  20. package/dist/objectUtils-D96eEEzL.mjs.map +1 -1
  21. package/dist/parseCEL.d.mts +2 -2
  22. package/dist/parseCEL.d.ts +2 -2
  23. package/dist/parseCEL.js.map +1 -1
  24. package/dist/parseCEL.mjs.map +1 -1
  25. package/dist/parseCypher.d.mts +1 -1
  26. package/dist/parseCypher.d.ts +1 -1
  27. package/dist/parseCypher.js.map +1 -1
  28. package/dist/parseCypher.mjs.map +1 -1
  29. package/dist/parseGremlin.d.mts +1 -1
  30. package/dist/parseGremlin.d.ts +1 -1
  31. package/dist/parseGremlin.js.map +1 -1
  32. package/dist/parseGremlin.mjs.map +1 -1
  33. package/dist/parseJSONata.d.mts +2 -2
  34. package/dist/parseJSONata.d.ts +2 -2
  35. package/dist/parseJSONata.js.map +1 -1
  36. package/dist/parseJSONata.mjs.map +1 -1
  37. package/dist/parseJsonLogic.d.mts +2 -2
  38. package/dist/parseJsonLogic.d.ts +2 -2
  39. package/dist/parseJsonLogic.js.map +1 -1
  40. package/dist/parseJsonLogic.mjs.map +1 -1
  41. package/dist/parseMongoDB.d.mts +2 -2
  42. package/dist/parseMongoDB.d.ts +2 -2
  43. package/dist/parseMongoDB.js.map +1 -1
  44. package/dist/parseMongoDB.mjs.map +1 -1
  45. package/dist/parseSPARQL.d.mts +1 -1
  46. package/dist/parseSPARQL.d.ts +1 -1
  47. package/dist/parseSPARQL.js.map +1 -1
  48. package/dist/parseSPARQL.mjs.map +1 -1
  49. package/dist/parseSQL.d.mts +2 -2
  50. package/dist/parseSQL.d.ts +2 -2
  51. package/dist/parseSQL.js.map +1 -1
  52. package/dist/parseSQL.mjs.map +1 -1
  53. package/dist/parseSpEL.d.mts +2 -2
  54. package/dist/parseSpEL.d.ts +2 -2
  55. package/dist/parseSpEL.js.map +1 -1
  56. package/dist/parseSpEL.mjs.map +1 -1
  57. package/dist/prepareQueryObjects-BoG5Rt8z.js.map +1 -1
  58. package/dist/prepareQueryObjects-uA10ZpZX.mjs.map +1 -1
  59. package/dist/react-querybuilder_core.d.mts +7 -2
  60. package/dist/react-querybuilder_core.legacy-esm.d.ts +7 -2
  61. package/dist/react-querybuilder_core.legacy-esm.js +39 -22
  62. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  63. package/dist/react-querybuilder_core.mjs +27 -10
  64. package/dist/react-querybuilder_core.mjs.map +1 -1
  65. package/dist/react-querybuilder_core.production.d.mts +7 -2
  66. package/dist/react-querybuilder_core.production.mjs +1 -1
  67. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  68. package/dist/transformQuery.d.mts +1 -1
  69. package/dist/transformQuery.d.ts +1 -1
  70. package/dist/transformQuery.js.map +1 -1
  71. package/dist/transformQuery.mjs.map +1 -1
  72. package/dist/utils-ChLG90DP.mjs.map +1 -1
  73. package/dist/utils-Qwkq2Q0F.js.map +1 -1
  74. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"parseSPARQL.mjs","names":["SparqlParser"],"sources":["../src/utils/parseSPARQL/parseSPARQL.ts"],"sourcesContent":["import { Parser as SparqlParser } from '@traqula/parser-sparql-1-2';\nimport type {\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n} from '../../types';\n\n// Reuse a single parser instance (Chevrotain-backed; creating parsers is expensive)\nlet parserInstance: SparqlParser | undefined;\nconst getParser = (): SparqlParser => {\n if (!parserInstance) {\n parserInstance = new SparqlParser();\n }\n return parserInstance;\n};\n\n// ─── Traqula AST Type Subset ─────────────────────────────────────────────────\n\ninterface TraqulaQuery {\n type: 'query';\n subType: string;\n where?: TraqulaPatternGroup;\n [key: string]: unknown;\n}\n\ninterface TraqulaPatternGroup {\n type: 'pattern';\n subType: 'group';\n patterns: TraqulaPattern[];\n}\n\ntype TraqulaPattern =\n | TraqulaBgp\n | TraqulaOptional\n | TraqulaFilter\n | TraqulaPatternGroup\n | TraqulaUnion\n | { type: 'pattern'; subType: string; [key: string]: unknown }\n | TraqulaQuery;\n\ninterface TraqulaBgp {\n type: 'pattern';\n subType: 'bgp';\n triples: TraqulaTriple[];\n}\n\ninterface TraqulaOptional {\n type: 'pattern';\n subType: 'optional';\n patterns: TraqulaPattern[];\n}\n\ninterface TraqulaFilter {\n type: 'pattern';\n subType: 'filter';\n expression: TraqulaExpression;\n}\n\ninterface TraqulaUnion {\n type: 'pattern';\n subType: 'union';\n patterns: TraqulaPatternGroup[];\n}\n\ninterface TraqulaTriple {\n type: 'triple';\n subject: TraqulaTerm;\n predicate: TraqulaTerm;\n object: TraqulaTerm;\n}\n\ninterface TraqulaTerm {\n type: 'term' | 'path' | 'wildcard';\n subType?: string;\n value?: string;\n prefix?: string;\n langOrIri?: unknown;\n [key: string]: unknown;\n}\n\ninterface TraqulaExpression {\n type: 'expression' | 'term';\n subType: string;\n operator?: string;\n args?: (TraqulaExpression | TraqulaTerm)[];\n value?: string;\n prefix?: string;\n langOrIri?: unknown;\n [key: string]: unknown;\n}\n\n// ─── AST Walker ──────────────────────────────────────────────────────────────\n\n/** Serializes a Traqula term into a user-facing string. */\nconst termToString = (term: TraqulaTerm): string => {\n if (term.type === 'term') {\n switch (term.subType) {\n case 'variable':\n return `?${term.value}`;\n case 'namedNode':\n if (term.prefix !== undefined && term.prefix !== '') {\n return `${term.prefix}:${term.value}`;\n }\n return term.value ?? '';\n case 'literal':\n return term.value ?? '';\n case 'blankNode':\n return `_:${(term as { label?: string }).label ?? ''}`;\n default:\n return term.value ?? '';\n }\n }\n return '';\n};\n\n/** Extracts a literal JS value from a Traqula term. */\nconst termToLiteralValue = (term: TraqulaTerm | TraqulaExpression): unknown => {\n if (term.type === 'term' && term.subType === 'literal') {\n const raw = term.value ?? '';\n if (term.langOrIri && typeof term.langOrIri === 'object') {\n const iri = term.langOrIri as TraqulaTerm;\n const datatype = iri.value ?? '';\n if (\n datatype.endsWith('#integer') ||\n datatype.endsWith('#decimal') ||\n datatype.endsWith('#double') ||\n datatype.endsWith('#float')\n ) {\n return Number(raw);\n }\n if (datatype.endsWith('#boolean')) {\n return raw === 'true';\n }\n }\n const num = Number(raw);\n if (raw !== '' && !Number.isNaN(num)) return num;\n return raw;\n }\n if (term.type === 'term' && term.subType === 'variable') {\n return `?${term.value}`;\n }\n if (term.type === 'term' && term.subType === 'namedNode') {\n return termToString(term as TraqulaTerm);\n }\n return term.value ?? '';\n};\n\n/** Walks patterns, extracting only FILTER expressions (skipping BGP triples). */\nconst visitPatterns = (\n patterns: TraqulaPattern[],\n out: (DefaultRuleType | DefaultRuleGroupType)[]\n): void => {\n for (const p of patterns) {\n if (p.type === 'pattern') {\n switch (p.subType) {\n case 'bgp':\n // Skip triple patterns — Phase 1 only extracts filter conditions\n break;\n case 'optional':\n visitPatterns((p as TraqulaOptional).patterns, out);\n break;\n case 'filter':\n visitFilter((p as TraqulaFilter).expression, out);\n break;\n case 'group':\n visitPatterns((p as TraqulaPatternGroup).patterns, out);\n break;\n case 'union': {\n const union = p as TraqulaUnion;\n const subRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n for (const branch of union.patterns) {\n const branchRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitPatterns(branch.patterns, branchRules);\n if (branchRules.length === 1) {\n subRules.push(branchRules[0]);\n } else if (branchRules.length > 1) {\n subRules.push({ combinator: 'and', rules: branchRules });\n }\n }\n if (subRules.length > 0) {\n out.push({ combinator: 'or', rules: subRules });\n }\n break;\n }\n default:\n break;\n }\n }\n }\n};\n\n/** Maps a SPARQL comparison operator string to an RQB operator. */\nconst sparqlOpToRqb: Record<string, string> = {\n '=': '=',\n '!=': '!=',\n '<': '<',\n '>': '>',\n '<=': '<=',\n '>=': '>=',\n};\n\n/** Converts a FILTER expression into rules. */\nconst visitFilter = (\n expr: TraqulaExpression,\n out: (DefaultRuleType | DefaultRuleGroupType)[]\n): void => {\n if (expr.type === 'expression' && expr.subType === 'operation') {\n const op = expr.operator ?? '';\n const args = expr.args ?? [];\n\n // Logical operators\n if (op === '&&') {\n for (const arg of args) {\n visitFilter(arg as TraqulaExpression, out);\n }\n return;\n }\n if (op === '||') {\n const subRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n for (const arg of args) {\n const branchRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitFilter(arg as TraqulaExpression, branchRules);\n subRules.push(...branchRules);\n }\n out.push({ combinator: 'or', rules: subRules });\n return;\n }\n\n // Negation\n if (op === '!') {\n if (args.length === 1) {\n const inner = args[0] as TraqulaExpression;\n // !BOUND(x) → null check\n if (\n inner.type === 'expression' &&\n inner.subType === 'operation' &&\n inner.operator === 'bound'\n ) {\n const field = termToString((inner.args?.[0] ?? {}) as TraqulaTerm);\n out.push({ field, operator: 'null', value: null } as DefaultRuleType);\n return;\n }\n const innerRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitFilter(inner, innerRules);\n if (innerRules.length === 1 && !('combinator' in innerRules[0])) {\n out.push(negateRule(innerRules[0]));\n } else {\n out.push({ combinator: 'and', not: true, rules: innerRules });\n }\n return;\n }\n }\n\n // Comparison operators\n if (op in sparqlOpToRqb && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: sparqlOpToRqb[op], value } as DefaultRuleType);\n return;\n }\n\n // BOUND(?x) → notNull\n if (op === 'bound' && args.length === 1) {\n const field = termToString(args[0] as TraqulaTerm);\n out.push({ field, operator: 'notNull', value: null } as DefaultRuleType);\n return;\n }\n\n // String functions\n if (op === 'contains' && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: 'contains', value } as DefaultRuleType);\n return;\n }\n if (op === 'strstarts' && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: 'beginsWith', value } as DefaultRuleType);\n return;\n }\n if (op === 'strends' && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: 'endsWith', value } as DefaultRuleType);\n return;\n }\n }\n};\n\n/** Negates a rule by converting its operator. */\nconst negateRule = (rule: DefaultRuleType): DefaultRuleType => {\n const negMap: Record<string, string> = {\n contains: 'doesNotContain',\n beginsWith: 'doesNotBeginWith',\n endsWith: 'doesNotEndWith',\n notNull: 'null',\n null: 'notNull',\n '=': '!=',\n '!=': '=',\n '<': '>=',\n '>': '<=',\n '<=': '>',\n '>=': '<',\n };\n return { ...rule, operator: negMap[rule.operator] ?? rule.operator } as DefaultRuleType;\n};\n\n/**\n * Ensures all prefixed names in a SPARQL query have corresponding PREFIX\n * declarations so the parser accepts them without requiring full URIs.\n */\nconst ensurePrefixes = (sparql: string): string => {\n const declaredPrefixes = new Set<string>();\n const prefixDeclRegex = /PREFIX\\s+(\\w*):/gi;\n let m: RegExpExecArray | null;\n while ((m = prefixDeclRegex.exec(sparql)) !== null) {\n declaredPrefixes.add(m[1].toLowerCase());\n }\n\n const usedPrefixes = new Set<string>();\n const prefixUsageRegex = /\\b(\\w+):\\w+/g;\n while ((m = prefixUsageRegex.exec(sparql)) !== null) {\n const prefix = m[1];\n if (/^https?$/i.test(prefix) || /^urn$/i.test(prefix)) continue;\n const before = sparql.slice(0, m.index);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose) continue;\n if (!declaredPrefixes.has(prefix.toLowerCase())) {\n usedPrefixes.add(prefix);\n }\n }\n\n if (usedPrefixes.size === 0) return sparql;\n\n const stubs = [...usedPrefixes].map(p => `PREFIX ${p}: <urn:rqb:prefix:${p}:>`).join('\\n');\n return stubs + '\\n' + sparql;\n};\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\n/**\n * Options for {@link parseSPARQL}.\n */\nexport interface ParseSPARQLOptions {\n independentCombinators?: boolean;\n}\n\n/**\n * Parses a SPARQL query string into a {@link DefaultRuleGroupType}.\n *\n * Accepts a full SPARQL query or a `FILTER` expression. Triple patterns are\n * consumed but discarded — only FILTER conditions are returned.\n *\n * @example\n * ```ts\n * // Full query — extracts FILTER conditions only\n * parseSPARQL('SELECT ?x WHERE { ?x foaf:name ?name . FILTER(?age > 30) }');\n *\n * // Bare FILTER expression wrapped in a stub query\n * parseSPARQL('?age > 30 && ?name != \"Alice\"');\n * ```\n */\nexport function parseSPARQL(sparql: string): DefaultRuleGroupType;\nexport function parseSPARQL(\n sparql: string,\n options: Omit<ParseSPARQLOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\nexport function parseSPARQL(\n sparql: string,\n options: Omit<ParseSPARQLOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nexport function parseSPARQL(\n sparql: string,\n _options?: ParseSPARQLOptions\n): DefaultRuleGroupTypeAny {\n const trimmed = sparql.trim();\n if (!trimmed) return { combinator: 'and', rules: [] };\n\n // Auto-detect input shape\n let input = trimmed;\n if (/^\\s*(select|prefix|construct|describe|ask)\\b/i.test(input)) {\n // Full SPARQL query — parse as-is\n } else {\n // Bare expression — wrap in a stub query with FILTER\n input = `SELECT * WHERE { FILTER(${input}) }`;\n }\n\n const prepared = ensurePrefixes(input);\n\n let ast: unknown;\n try {\n ast = getParser().parse(prepared);\n } catch {\n return { combinator: 'and', rules: [] };\n }\n\n const typed = ast as TraqulaQuery;\n if (!typed || typed.type !== 'query' || !typed.where) {\n return { combinator: 'and', rules: [] };\n }\n\n const rules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitPatterns(typed.where.patterns ?? [], rules);\n return { combinator: 'and', rules };\n}\n"],"mappings":";;AASA,IAAI;AACJ,MAAM,kBAAgC;AACpC,KAAI,CAAC,eACH,kBAAiB,IAAIA,QAAc;AAErC,QAAO;;;AAiFT,MAAM,gBAAgB,SAA8B;AAClD,KAAI,KAAK,SAAS,OAChB,SAAQ,KAAK,SAAb;EACE,KAAK,WACH,QAAO,IAAI,KAAK;EAClB,KAAK;AACH,OAAI,KAAK,WAAW,KAAA,KAAa,KAAK,WAAW,GAC/C,QAAO,GAAG,KAAK,OAAO,GAAG,KAAK;AAEhC,UAAO,KAAK,SAAS;EACvB,KAAK,UACH,QAAO,KAAK,SAAS;EACvB,KAAK,YACH,QAAO,KAAM,KAA4B,SAAS;EACpD,QACE,QAAO,KAAK,SAAS;;AAG3B,QAAO;;;AAIT,MAAM,sBAAsB,SAAmD;AAC7E,KAAI,KAAK,SAAS,UAAU,KAAK,YAAY,WAAW;EACtD,MAAM,MAAM,KAAK,SAAS;AAC1B,MAAI,KAAK,aAAa,OAAO,KAAK,cAAc,UAAU;GAExD,MAAM,WADM,KAAK,UACI,SAAS;AAC9B,OACE,SAAS,SAAS,WAAW,IAC7B,SAAS,SAAS,WAAW,IAC7B,SAAS,SAAS,UAAU,IAC5B,SAAS,SAAS,SAAS,CAE3B,QAAO,OAAO,IAAI;AAEpB,OAAI,SAAS,SAAS,WAAW,CAC/B,QAAO,QAAQ;;EAGnB,MAAM,MAAM,OAAO,IAAI;AACvB,MAAI,QAAQ,MAAM,CAAC,OAAO,MAAM,IAAI,CAAE,QAAO;AAC7C,SAAO;;AAET,KAAI,KAAK,SAAS,UAAU,KAAK,YAAY,WAC3C,QAAO,IAAI,KAAK;AAElB,KAAI,KAAK,SAAS,UAAU,KAAK,YAAY,YAC3C,QAAO,aAAa,KAAoB;AAE1C,QAAO,KAAK,SAAS;;;AAIvB,MAAM,iBACJ,UACA,QACS;AACT,MAAK,MAAM,KAAK,SACd,KAAI,EAAE,SAAS,UACb,SAAQ,EAAE,SAAV;EACE,KAAK,MAEH;EACF,KAAK;AACH,iBAAe,EAAsB,UAAU,IAAI;AACnD;EACF,KAAK;AACH,eAAa,EAAoB,YAAY,IAAI;AACjD;EACF,KAAK;AACH,iBAAe,EAA0B,UAAU,IAAI;AACvD;EACF,KAAK,SAAS;GACZ,MAAM,QAAQ;GACd,MAAM,WAAuD,EAAE;AAC/D,QAAK,MAAM,UAAU,MAAM,UAAU;IACnC,MAAM,cAA0D,EAAE;AAClE,kBAAc,OAAO,UAAU,YAAY;AAC3C,QAAI,YAAY,WAAW,EACzB,UAAS,KAAK,YAAY,GAAG;aACpB,YAAY,SAAS,EAC9B,UAAS,KAAK;KAAE,YAAY;KAAO,OAAO;KAAa,CAAC;;AAG5D,OAAI,SAAS,SAAS,EACpB,KAAI,KAAK;IAAE,YAAY;IAAM,OAAO;IAAU,CAAC;AAEjD;;EAEF,QACE;;;;AAOV,MAAM,gBAAwC;CAC5C,KAAK;CACL,MAAM;CACN,KAAK;CACL,KAAK;CACL,MAAM;CACN,MAAM;CACP;;AAGD,MAAM,eACJ,MACA,QACS;AACT,KAAI,KAAK,SAAS,gBAAgB,KAAK,YAAY,aAAa;EAC9D,MAAM,KAAK,KAAK,YAAY;EAC5B,MAAM,OAAO,KAAK,QAAQ,EAAE;AAG5B,MAAI,OAAO,MAAM;AACf,QAAK,MAAM,OAAO,KAChB,aAAY,KAA0B,IAAI;AAE5C;;AAEF,MAAI,OAAO,MAAM;GACf,MAAM,WAAuD,EAAE;AAC/D,QAAK,MAAM,OAAO,MAAM;IACtB,MAAM,cAA0D,EAAE;AAClE,gBAAY,KAA0B,YAAY;AAClD,aAAS,KAAK,GAAG,YAAY;;AAE/B,OAAI,KAAK;IAAE,YAAY;IAAM,OAAO;IAAU,CAAC;AAC/C;;AAIF,MAAI,OAAO;OACL,KAAK,WAAW,GAAG;IACrB,MAAM,QAAQ,KAAK;AAEnB,QACE,MAAM,SAAS,gBACf,MAAM,YAAY,eAClB,MAAM,aAAa,SACnB;KACA,MAAM,QAAQ,aAAc,MAAM,OAAO,MAAM,EAAE,CAAiB;AAClE,SAAI,KAAK;MAAE;MAAO,UAAU;MAAQ,OAAO;MAAM,CAAoB;AACrE;;IAEF,MAAM,aAAyD,EAAE;AACjE,gBAAY,OAAO,WAAW;AAC9B,QAAI,WAAW,WAAW,KAAK,EAAE,gBAAgB,WAAW,IAC1D,KAAI,KAAK,WAAW,WAAW,GAAG,CAAC;QAEnC,KAAI,KAAK;KAAE,YAAY;KAAO,KAAK;KAAM,OAAO;KAAY,CAAC;AAE/D;;;AAKJ,MAAI,MAAM,iBAAiB,KAAK,WAAW,GAAG;GAC5C,MAAM,QAAQ,aAAa,KAAK,GAAkB;GAClD,MAAM,QAAQ,mBAAmB,KAAK,GAAwB;AAC9D,OAAI,KAAK;IAAE;IAAO,UAAU,cAAc;IAAK;IAAO,CAAoB;AAC1E;;AAIF,MAAI,OAAO,WAAW,KAAK,WAAW,GAAG;GACvC,MAAM,QAAQ,aAAa,KAAK,GAAkB;AAClD,OAAI,KAAK;IAAE;IAAO,UAAU;IAAW,OAAO;IAAM,CAAoB;AACxE;;AAIF,MAAI,OAAO,cAAc,KAAK,WAAW,GAAG;GAC1C,MAAM,QAAQ,aAAa,KAAK,GAAkB;GAClD,MAAM,QAAQ,mBAAmB,KAAK,GAAwB;AAC9D,OAAI,KAAK;IAAE;IAAO,UAAU;IAAY;IAAO,CAAoB;AACnE;;AAEF,MAAI,OAAO,eAAe,KAAK,WAAW,GAAG;GAC3C,MAAM,QAAQ,aAAa,KAAK,GAAkB;GAClD,MAAM,QAAQ,mBAAmB,KAAK,GAAwB;AAC9D,OAAI,KAAK;IAAE;IAAO,UAAU;IAAc;IAAO,CAAoB;AACrE;;AAEF,MAAI,OAAO,aAAa,KAAK,WAAW,GAAG;GACzC,MAAM,QAAQ,aAAa,KAAK,GAAkB;GAClD,MAAM,QAAQ,mBAAmB,KAAK,GAAwB;AAC9D,OAAI,KAAK;IAAE;IAAO,UAAU;IAAY;IAAO,CAAoB;AACnE;;;;;AAMN,MAAM,cAAc,SAA2C;CAC7D,MAAM,SAAiC;EACrC,UAAU;EACV,YAAY;EACZ,UAAU;EACV,SAAS;EACT,MAAM;EACN,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACP;AACD,QAAO;EAAE,GAAG;EAAM,UAAU,OAAO,KAAK,aAAa,KAAK;EAAU;;;;;;AAOtE,MAAM,kBAAkB,WAA2B;CACjD,MAAM,mCAAmB,IAAI,KAAa;CAC1C,MAAM,kBAAkB;CACxB,IAAI;AACJ,SAAQ,IAAI,gBAAgB,KAAK,OAAO,MAAM,KAC5C,kBAAiB,IAAI,EAAE,GAAG,aAAa,CAAC;CAG1C,MAAM,+BAAe,IAAI,KAAa;CACtC,MAAM,mBAAmB;AACzB,SAAQ,IAAI,iBAAiB,KAAK,OAAO,MAAM,MAAM;EACnD,MAAM,SAAS,EAAE;AACjB,MAAI,YAAY,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,CAAE;EACvD,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE,MAAM;AAGvC,MAFiB,OAAO,YAAY,IAExB,GADM,OAAO,YAAY,IACb,CAAE;AAC1B,MAAI,CAAC,iBAAiB,IAAI,OAAO,aAAa,CAAC,CAC7C,cAAa,IAAI,OAAO;;AAI5B,KAAI,aAAa,SAAS,EAAG,QAAO;AAGpC,QADc,CAAC,GAAG,aAAa,CAAC,KAAI,MAAK,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,KAAK,KACzE,GAAG,OAAO;;AAwCxB,SAAgB,YACd,QACA,UACyB;CACzB,MAAM,UAAU,OAAO,MAAM;AAC7B,KAAI,CAAC,QAAS,QAAO;EAAE,YAAY;EAAO,OAAO,EAAE;EAAE;CAGrD,IAAI,QAAQ;AACZ,KAAI,gDAAgD,KAAK,MAAM,EAAE,OAI/D,SAAQ,2BAA2B,MAAM;CAG3C,MAAM,WAAW,eAAe,MAAM;CAEtC,IAAI;AACJ,KAAI;AACF,QAAM,WAAW,CAAC,MAAM,SAAS;SAC3B;AACN,SAAO;GAAE,YAAY;GAAO,OAAO,EAAE;GAAE;;CAGzC,MAAM,QAAQ;AACd,KAAI,CAAC,SAAS,MAAM,SAAS,WAAW,CAAC,MAAM,MAC7C,QAAO;EAAE,YAAY;EAAO,OAAO,EAAE;EAAE;CAGzC,MAAM,QAAoD,EAAE;AAC5D,eAAc,MAAM,MAAM,YAAY,EAAE,EAAE,MAAM;AAChD,QAAO;EAAE,YAAY;EAAO;EAAO"}
1
+ {"version":3,"file":"parseSPARQL.mjs","names":["SparqlParser"],"sources":["../src/utils/parseSPARQL/parseSPARQL.ts"],"sourcesContent":["import { Parser as SparqlParser } from '@traqula/parser-sparql-1-2';\nimport type {\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n} from '../../types';\n\n// Reuse a single parser instance (Chevrotain-backed; creating parsers is expensive)\nlet parserInstance: SparqlParser | undefined;\nconst getParser = (): SparqlParser => {\n if (!parserInstance) {\n parserInstance = new SparqlParser();\n }\n return parserInstance;\n};\n\n// ─── Traqula AST Type Subset ─────────────────────────────────────────────────\n\ninterface TraqulaQuery {\n type: 'query';\n subType: string;\n where?: TraqulaPatternGroup;\n [key: string]: unknown;\n}\n\ninterface TraqulaPatternGroup {\n type: 'pattern';\n subType: 'group';\n patterns: TraqulaPattern[];\n}\n\ntype TraqulaPattern =\n | TraqulaBgp\n | TraqulaOptional\n | TraqulaFilter\n | TraqulaPatternGroup\n | TraqulaUnion\n | { type: 'pattern'; subType: string; [key: string]: unknown }\n | TraqulaQuery;\n\ninterface TraqulaBgp {\n type: 'pattern';\n subType: 'bgp';\n triples: TraqulaTriple[];\n}\n\ninterface TraqulaOptional {\n type: 'pattern';\n subType: 'optional';\n patterns: TraqulaPattern[];\n}\n\ninterface TraqulaFilter {\n type: 'pattern';\n subType: 'filter';\n expression: TraqulaExpression;\n}\n\ninterface TraqulaUnion {\n type: 'pattern';\n subType: 'union';\n patterns: TraqulaPatternGroup[];\n}\n\ninterface TraqulaTriple {\n type: 'triple';\n subject: TraqulaTerm;\n predicate: TraqulaTerm;\n object: TraqulaTerm;\n}\n\ninterface TraqulaTerm {\n type: 'term' | 'path' | 'wildcard';\n subType?: string;\n value?: string;\n prefix?: string;\n langOrIri?: unknown;\n [key: string]: unknown;\n}\n\ninterface TraqulaExpression {\n type: 'expression' | 'term';\n subType: string;\n operator?: string;\n args?: (TraqulaExpression | TraqulaTerm)[];\n value?: string;\n prefix?: string;\n langOrIri?: unknown;\n [key: string]: unknown;\n}\n\n// ─── AST Walker ──────────────────────────────────────────────────────────────\n\n/** Serializes a Traqula term into a user-facing string. */\nconst termToString = (term: TraqulaTerm): string => {\n if (term.type === 'term') {\n switch (term.subType) {\n case 'variable':\n return `?${term.value}`;\n case 'namedNode':\n if (term.prefix !== undefined && term.prefix !== '') {\n return `${term.prefix}:${term.value}`;\n }\n return term.value ?? '';\n case 'literal':\n return term.value ?? '';\n case 'blankNode':\n return `_:${(term as { label?: string }).label ?? ''}`;\n default:\n return term.value ?? '';\n }\n }\n return '';\n};\n\n/** Extracts a literal JS value from a Traqula term. */\nconst termToLiteralValue = (term: TraqulaTerm | TraqulaExpression): unknown => {\n if (term.type === 'term' && term.subType === 'literal') {\n const raw = term.value ?? '';\n if (term.langOrIri && typeof term.langOrIri === 'object') {\n const iri = term.langOrIri as TraqulaTerm;\n const datatype = iri.value ?? '';\n if (\n datatype.endsWith('#integer') ||\n datatype.endsWith('#decimal') ||\n datatype.endsWith('#double') ||\n datatype.endsWith('#float')\n ) {\n return Number(raw);\n }\n if (datatype.endsWith('#boolean')) {\n return raw === 'true';\n }\n }\n const num = Number(raw);\n if (raw !== '' && !Number.isNaN(num)) return num;\n return raw;\n }\n if (term.type === 'term' && term.subType === 'variable') {\n return `?${term.value}`;\n }\n if (term.type === 'term' && term.subType === 'namedNode') {\n return termToString(term as TraqulaTerm);\n }\n return term.value ?? '';\n};\n\n/** Walks patterns, extracting only FILTER expressions (skipping BGP triples). */\nconst visitPatterns = (\n patterns: TraqulaPattern[],\n out: (DefaultRuleType | DefaultRuleGroupType)[]\n): void => {\n for (const p of patterns) {\n if (p.type === 'pattern') {\n switch (p.subType) {\n case 'bgp':\n // Skip triple patterns — Phase 1 only extracts filter conditions\n break;\n case 'optional':\n visitPatterns((p as TraqulaOptional).patterns, out);\n break;\n case 'filter':\n visitFilter((p as TraqulaFilter).expression, out);\n break;\n case 'group':\n visitPatterns((p as TraqulaPatternGroup).patterns, out);\n break;\n case 'union': {\n const union = p as TraqulaUnion;\n const subRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n for (const branch of union.patterns) {\n const branchRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitPatterns(branch.patterns, branchRules);\n if (branchRules.length === 1) {\n subRules.push(branchRules[0]);\n } else if (branchRules.length > 1) {\n subRules.push({ combinator: 'and', rules: branchRules });\n }\n }\n if (subRules.length > 0) {\n out.push({ combinator: 'or', rules: subRules });\n }\n break;\n }\n default:\n break;\n }\n }\n }\n};\n\n/** Maps a SPARQL comparison operator string to an RQB operator. */\nconst sparqlOpToRqb: Record<string, string> = {\n '=': '=',\n '!=': '!=',\n '<': '<',\n '>': '>',\n '<=': '<=',\n '>=': '>=',\n};\n\n/** Converts a FILTER expression into rules. */\nconst visitFilter = (\n expr: TraqulaExpression,\n out: (DefaultRuleType | DefaultRuleGroupType)[]\n): void => {\n if (expr.type === 'expression' && expr.subType === 'operation') {\n const op = expr.operator ?? '';\n const args = expr.args ?? [];\n\n // Logical operators\n if (op === '&&') {\n for (const arg of args) {\n visitFilter(arg as TraqulaExpression, out);\n }\n return;\n }\n if (op === '||') {\n const subRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n for (const arg of args) {\n const branchRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitFilter(arg as TraqulaExpression, branchRules);\n subRules.push(...branchRules);\n }\n out.push({ combinator: 'or', rules: subRules });\n return;\n }\n\n // Negation\n if (op === '!') {\n if (args.length === 1) {\n const inner = args[0] as TraqulaExpression;\n // !BOUND(x) → null check\n if (\n inner.type === 'expression' &&\n inner.subType === 'operation' &&\n inner.operator === 'bound'\n ) {\n const field = termToString((inner.args?.[0] ?? {}) as TraqulaTerm);\n out.push({ field, operator: 'null', value: null } as DefaultRuleType);\n return;\n }\n const innerRules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitFilter(inner, innerRules);\n if (innerRules.length === 1 && !('combinator' in innerRules[0])) {\n out.push(negateRule(innerRules[0]));\n } else {\n out.push({ combinator: 'and', not: true, rules: innerRules });\n }\n return;\n }\n }\n\n // Comparison operators\n if (op in sparqlOpToRqb && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: sparqlOpToRqb[op], value } as DefaultRuleType);\n return;\n }\n\n // BOUND(?x) → notNull\n if (op === 'bound' && args.length === 1) {\n const field = termToString(args[0] as TraqulaTerm);\n out.push({ field, operator: 'notNull', value: null } as DefaultRuleType);\n return;\n }\n\n // String functions\n if (op === 'contains' && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: 'contains', value } as DefaultRuleType);\n return;\n }\n if (op === 'strstarts' && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: 'beginsWith', value } as DefaultRuleType);\n return;\n }\n if (op === 'strends' && args.length === 2) {\n const field = termToString(args[0] as TraqulaTerm);\n const value = termToLiteralValue(args[1] as TraqulaExpression);\n out.push({ field, operator: 'endsWith', value } as DefaultRuleType);\n return;\n }\n }\n};\n\n/** Negates a rule by converting its operator. */\nconst negateRule = (rule: DefaultRuleType): DefaultRuleType => {\n const negMap: Record<string, string> = {\n contains: 'doesNotContain',\n beginsWith: 'doesNotBeginWith',\n endsWith: 'doesNotEndWith',\n notNull: 'null',\n null: 'notNull',\n '=': '!=',\n '!=': '=',\n '<': '>=',\n '>': '<=',\n '<=': '>',\n '>=': '<',\n };\n return { ...rule, operator: negMap[rule.operator] ?? rule.operator } as DefaultRuleType;\n};\n\n/**\n * Ensures all prefixed names in a SPARQL query have corresponding PREFIX\n * declarations so the parser accepts them without requiring full URIs.\n */\nconst ensurePrefixes = (sparql: string): string => {\n const declaredPrefixes = new Set<string>();\n const prefixDeclRegex = /PREFIX\\s+(\\w*):/gi;\n let m: RegExpExecArray | null;\n while ((m = prefixDeclRegex.exec(sparql)) !== null) {\n declaredPrefixes.add(m[1].toLowerCase());\n }\n\n const usedPrefixes = new Set<string>();\n const prefixUsageRegex = /\\b(\\w+):\\w+/g;\n while ((m = prefixUsageRegex.exec(sparql)) !== null) {\n const prefix = m[1];\n if (/^https?$/i.test(prefix) || /^urn$/i.test(prefix)) continue;\n const before = sparql.slice(0, m.index);\n const lastOpen = before.lastIndexOf('<');\n const lastClose = before.lastIndexOf('>');\n if (lastOpen > lastClose) continue;\n if (!declaredPrefixes.has(prefix.toLowerCase())) {\n usedPrefixes.add(prefix);\n }\n }\n\n if (usedPrefixes.size === 0) return sparql;\n\n const stubs = [...usedPrefixes].map(p => `PREFIX ${p}: <urn:rqb:prefix:${p}:>`).join('\\n');\n return stubs + '\\n' + sparql;\n};\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\n/**\n * Options for {@link parseSPARQL}.\n */\nexport interface ParseSPARQLOptions {\n independentCombinators?: boolean;\n}\n\n/**\n * Parses a SPARQL query string into a {@link DefaultRuleGroupType}.\n *\n * Accepts a full SPARQL query or a `FILTER` expression. Triple patterns are\n * consumed but discarded — only FILTER conditions are returned.\n *\n * @example\n * ```ts\n * // Full query — extracts FILTER conditions only\n * parseSPARQL('SELECT ?x WHERE { ?x foaf:name ?name . FILTER(?age > 30) }');\n *\n * // Bare FILTER expression wrapped in a stub query\n * parseSPARQL('?age > 30 && ?name != \"Alice\"');\n * ```\n */\nexport function parseSPARQL(sparql: string): DefaultRuleGroupType;\nexport function parseSPARQL(\n sparql: string,\n options: Omit<ParseSPARQLOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\nexport function parseSPARQL(\n sparql: string,\n options: Omit<ParseSPARQLOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nexport function parseSPARQL(\n sparql: string,\n _options?: ParseSPARQLOptions\n): DefaultRuleGroupTypeAny {\n const trimmed = sparql.trim();\n if (!trimmed) return { combinator: 'and', rules: [] };\n\n // Auto-detect input shape\n let input = trimmed;\n if (/^\\s*(select|prefix|construct|describe|ask)\\b/i.test(input)) {\n // Full SPARQL query — parse as-is\n } else {\n // Bare expression — wrap in a stub query with FILTER\n input = `SELECT * WHERE { FILTER(${input}) }`;\n }\n\n const prepared = ensurePrefixes(input);\n\n let ast: unknown;\n try {\n ast = getParser().parse(prepared);\n } catch {\n return { combinator: 'and', rules: [] };\n }\n\n const typed = ast as TraqulaQuery;\n if (!typed || typed.type !== 'query' || !typed.where) {\n return { combinator: 'and', rules: [] };\n }\n\n const rules: (DefaultRuleType | DefaultRuleGroupType)[] = [];\n visitPatterns(typed.where.patterns ?? [], rules);\n return { combinator: 'and', rules };\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-D-Iej37L.mjs";
2
- import { t as ParserCommonOptions } from "./import-BHlzBLM_.mjs";
1
+ import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-AAZg4Uh1.mjs";
2
+ import { t as ParserCommonOptions } from "./import-BC_bAKQ8.mjs";
3
3
 
4
4
  //#region src/utils/parseSQL/parseSQL.d.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-Cjapnb-H.js";
2
- import { t as ParserCommonOptions } from "./import-C6imciDf.js";
1
+ import { E as DefaultRuleGroupType, j as Except, x as DefaultRuleGroupTypeIC } from "./index-Ds06V0zO.js";
2
+ import { t as ParserCommonOptions } from "./import-D1KnXhkQ.js";
3
3
 
4
4
  //#region src/utils/parseSQL/parseSQL.d.ts
5
5
  /**