@traqula/rules-sparql-1-1 0.0.10 → 0.0.13
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.
- package/lib/grammar/builtIn.d.ts +1 -1
- package/lib/grammar/expression.js +1 -7
- package/lib/grammar/expression.js.map +1 -1
- package/lib/grammar/propertyPaths.d.ts +2 -2
- package/lib/grammar/tripleBlock.d.ts +4 -4
- package/lib/index.cjs +141 -81
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +3 -0
- package/lib/utils.js.map +1 -1
- package/lib/validation/validators.js +11 -9
- package/lib/validation/validators.js.map +1 -1
- package/package.json +3 -3
package/lib/grammar/builtIn.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export declare const builtInDatatype: import(".").RuleDefExpressionFunctionX<"bu
|
|
|
9
9
|
export declare const builtInBound: import(".").RuleDefExpressionFunctionX<"builtInBound", [import("..").TermVariable]>;
|
|
10
10
|
export declare const builtInIri: import(".").RuleDefExpressionFunctionX<"builtInIri", [Expression]>;
|
|
11
11
|
export declare const builtInUri: import(".").RuleDefExpressionFunctionX<"builtInUri", [Expression]>;
|
|
12
|
-
export declare const builtInBnodeSparqlJs: import(".").RuleDefExpressionFunctionX<"builtInBnode", [
|
|
12
|
+
export declare const builtInBnodeSparqlJs: import(".").RuleDefExpressionFunctionX<"builtInBnode", [] | [Expression]>;
|
|
13
13
|
export declare const builtInRand: import(".").RuleDefExpressionFunctionX<"builtInRand", []>;
|
|
14
14
|
export declare const builtInAbs: import(".").RuleDefExpressionFunctionX<"builtInAbs", [Expression]>;
|
|
15
15
|
export declare const builtInCeil: import(".").RuleDefExpressionFunctionX<"builtInCeil", [Expression]>;
|
|
@@ -304,13 +304,7 @@ export const unaryExpression = {
|
|
|
304
304
|
{ ALT: () => CONSUME(l.symbols.opMinus) },
|
|
305
305
|
]);
|
|
306
306
|
const expr = SUBRULE2(primaryExpression);
|
|
307
|
-
return ACTION(() => (
|
|
308
|
-
type: 'expression',
|
|
309
|
-
subType: 'operation',
|
|
310
|
-
operator: operator.image === '!' ? '!' : (operator.image === '+' ? 'UPLUS' : 'UMINUS'),
|
|
311
|
-
args: [expr],
|
|
312
|
-
loc: C.factory.sourceLocation(operator, expr),
|
|
313
|
-
}));
|
|
307
|
+
return ACTION(() => C.factory.expressionOperation(operator.image === '!' ? '!' : (operator.image === '+' ? 'UPLUS' : 'UMINUS'), [expr], C.factory.sourceLocation(operator, expr)));
|
|
314
308
|
} },
|
|
315
309
|
]),
|
|
316
310
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.js","sourceRoot":"","sources":["expression.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ImplArgs, RuleDefReturn, Wrap } from '@traqula/core';\nimport * as l from '../lexer';\nimport type { SparqlGrammarRule, SparqlRule } from '../sparql11HelperTypes';\nimport type {\n Expression,\n ExpressionFunctionCall,\n ExpressionOperation,\n TermIri,\n TermLiteral,\n} from '../Sparql11types';\nimport { aggregate, builtInCall } from './builtIn';\nimport {\n var_,\n varOrTerm,\n} from './general';\nimport {\n booleanLiteral,\n iri,\n numericLiteral,\n numericLiteralNegative,\n numericLiteralPositive,\n rdfLiteral,\n} from './literals';\nimport { groupGraphPattern } from './whereClause';\n\n/**\n * [[71]](https://www.w3.org/TR/sparql11-query/#rArgList)\n */\nexport interface IArgList {\n args: Expression[];\n distinct: boolean;\n}\nexport const argList: SparqlRule<'argList', Wrap<IArgList>> = <const> {\n name: 'argList',\n impl: ({ ACTION, CONSUME, SUBRULE1, OPTION, OR, AT_LEAST_ONE_SEP }) => C =>\n OR<RuleDefReturn<typeof argList>>([\n { ALT: () => {\n const nil = CONSUME(l.terminals.nil);\n return ACTION(() =>\n C.factory.wrap({ args: [], distinct: false }, C.factory.sourceLocation(nil)));\n } },\n { ALT: () => {\n const args: Expression[] = [];\n const open = CONSUME(l.symbols.LParen);\n const distinct = OPTION(() => {\n CONSUME(l.distinct);\n return true;\n }) ?? false;\n\n AT_LEAST_ONE_SEP({\n SEP: l.symbols.comma,\n DEF: () => {\n const arg = SUBRULE1(expression);\n args.push(arg);\n },\n });\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() =>\n C.factory.wrap({ args, distinct }, C.factory.sourceLocation(open, close)));\n } },\n ]),\n gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => {\n PRINT_WORD('(');\n if (ast.val.distinct) {\n PRINT_WORD('DISTINCT');\n }\n });\n const [ head, ...tail ] = ast.val.args;\n if (head) {\n SUBRULE(expression, head);\n }\n for (const expr of tail) {\n F.printFilter(ast, () => PRINT_WORD(','));\n SUBRULE(expression, expr);\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n },\n};\n\n/**\n * [[72]](https://www.w3.org/TR/sparql11-query/#rConstructTemplate)\n */\nexport const expressionList: SparqlGrammarRule<'expressionList', Wrap<Expression[]>> = <const> {\n name: 'expressionList',\n impl: ({ ACTION, CONSUME, MANY, OR, SUBRULE1, SUBRULE2 }) => C => OR([\n { ALT: () => {\n const nil = CONSUME(l.terminals.nil);\n return ACTION(() => C.factory.wrap([], C.factory.sourceLocation(nil)));\n } },\n { ALT: () => {\n const open = CONSUME(l.symbols.LParen);\n const expr1 = SUBRULE1(expression);\n const args: Expression[] = [ expr1 ];\n MANY(() => {\n CONSUME(l.symbols.comma);\n const expr = SUBRULE2(expression);\n args.push(expr);\n });\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() => C.factory.wrap(args, C.factory.sourceLocation(open, close)));\n } },\n ]),\n};\n\nconst infixOperators = new Set([ 'in', 'notin', '||', '&&', '=', '!=', '<', '>', '<=', '>=', '+', '-', '*', '/' ]);\nconst prefixOperator = new Set([ '!', 'UPLUS', 'UMINUS' ]);\n\n/**\n * [[110]](https://www.w3.org/TR/sparql11-query/#rExpression)\n */\nexport const expression: SparqlRule<'expression', Expression> = <const> {\n name: 'expression',\n impl: ({ SUBRULE }) => () => SUBRULE(conditionalOrExpression),\n gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {\n if (F.isTerm(ast)) {\n SUBRULE(varOrTerm, ast);\n } else if (F.isExpressionOperator(ast)) {\n if (infixOperators.has(ast.operator)) {\n const [ left, ...right ] = ast.args;\n F.printFilter(ast, () => PRINT_WORD('('));\n SUBRULE(expression, left);\n F.printFilter(ast, () => {\n if (ast.operator === 'notin') {\n PRINT_WORD('NOT IN');\n } else if (ast.operator === 'in') {\n PRINT_WORD('IN');\n } else {\n PRINT_WORD(ast.operator.toUpperCase());\n }\n });\n if (right.length === 1) {\n SUBRULE(expression, right[0]);\n } else {\n SUBRULE(argList, F.wrap({ args: right, distinct: false }, ast.loc));\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n } else if (prefixOperator.has(ast.operator)) {\n const [ expr ] = <[Expression]>ast.args;\n F.printFilter(ast, () => PRINT_WORD(ast.operator.toUpperCase()));\n SUBRULE(expression, expr);\n } else {\n F.printFilter(ast, () => PRINT_WORD(ast.operator.toUpperCase(), '('));\n const [ head, ...tail ] = ast.args;\n if (head) {\n SUBRULE(expression, head);\n }\n for (const arg of tail) {\n F.printFilter(ast, () => PRINT_WORD(','));\n SUBRULE(expression, arg);\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n }\n } else if (F.isExpressionPatternOperation(ast)) {\n const patterns = ast.args;\n F.printFilter(ast, () => PRINT_WORD(ast.operator === 'exists' ? 'EXISTS' : 'NOT EXISTS'));\n SUBRULE(groupGraphPattern, patterns);\n } else if (F.isExpressionFunctionCall(ast)) {\n SUBRULE(iriOrFunction, ast);\n } else if (F.isExpressionAggregate(ast)) {\n SUBRULE(aggregate, ast);\n }\n },\n};\n\ntype LeftDeepBuildArgs = (left: Expression) => ExpressionOperation;\n\nfunction constructLeftDeep(\n startGenerator: () => Expression,\n restGenerator: () => LeftDeepBuildArgs,\n ACTION: ImplArgs['ACTION'],\n MANY: ImplArgs['MANY'],\n): ExpressionOperation | Expression {\n // By using iterExpression, we avoid creating unnecessary arrays\n let iterExpr = startGenerator();\n MANY(() => {\n const res = restGenerator();\n ACTION(() => {\n iterExpr = res(iterExpr);\n });\n });\n return iterExpr;\n}\n\n/**\n * [[111]](https://www.w3.org/TR/sparql11-query/#rConditionalOrExpression)\n */\nexport const conditionalOrExpression: SparqlGrammarRule<'conditionalOrExpression', ExpressionOperation | Expression> =\n <const> {\n name: 'conditionalOrExpression',\n impl: ({ ACTION, MANY, CONSUME, SUBRULE1, SUBRULE2 }) => C => constructLeftDeep(\n () => SUBRULE1(conditionalAndExpression),\n () => {\n CONSUME(l.symbols.logicOr);\n const args = SUBRULE2(conditionalAndExpression);\n return left => ACTION(() =>\n C.factory.expressionOperation('||', [ left, args ], C.factory.sourceLocation(left, args)));\n },\n ACTION,\n MANY,\n ),\n };\n\n/**\n * [[112]](https://www.w3.org/TR/sparql11-query/#rConditionalAndExpression)\n */\nexport const conditionalAndExpression: SparqlGrammarRule<'conditionalAndExpression', Expression> = <const> {\n name: 'conditionalAndExpression',\n impl: ({ ACTION, MANY, SUBRULE1, SUBRULE2, CONSUME }) => C => constructLeftDeep(\n () => SUBRULE1(valueLogical),\n () => {\n CONSUME(l.symbols.logicAnd);\n const arg = SUBRULE2(valueLogical);\n return left => ACTION(() =>\n C.factory.expressionOperation('&&', [ left, arg ], C.factory.sourceLocation(left, arg)));\n },\n ACTION,\n MANY,\n ),\n};\n\n/**\n * [[113]](https://www.w3.org/TR/sparql11-query/#rValueLogical)\n */\nexport const valueLogical: SparqlGrammarRule<'valueLogical', Expression> = <const> {\n name: 'valueLogical',\n impl: ({ SUBRULE }) => () => SUBRULE(relationalExpression),\n};\n\n/**\n * [[114]](https://www.w3.org/TR/sparql11-query/#rRelationalExpression)\n */\nexport const relationalExpression:\nSparqlGrammarRule<'relationalExpression', ExpressionOperation | Expression> = <const>{\n name: 'relationalExpression',\n impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR1, OR2, OR3 }) => (C) => {\n const args1 = SUBRULE1(numericExpression);\n const expression = OPTION<ExpressionOperation>(() =>\n OR1<ExpressionOperation>([\n { ALT: () => {\n // Stay in numeric;\n const operator = OR2([\n { ALT: () => CONSUME(l.symbols.equal) },\n { ALT: () => CONSUME(l.symbols.notEqual) },\n { ALT: () => CONSUME(l.symbols.lessThan) },\n { ALT: () => CONSUME(l.symbols.greaterThan) },\n { ALT: () => CONSUME(l.symbols.lessThanEqual) },\n { ALT: () => CONSUME(l.symbols.greaterThanEqual) },\n ]);\n const expr = SUBRULE2(numericExpression);\n return ACTION(() => C.factory.expressionOperation(\n operator.image,\n [ args1, expr ],\n C.factory.sourceLocation(args1, expr),\n ));\n } },\n { ALT: () => {\n const operator = OR3([\n { ALT: () => CONSUME(l.in_) },\n { ALT: () => CONSUME(l.notIn) },\n ]);\n const args = SUBRULE1(expressionList);\n return ACTION(() => C.factory.expressionOperation(\n operator.image,\n [ args1, ...args.val ],\n C.factory.sourceLocation(args1, args),\n ));\n } },\n ]));\n return expression ?? args1;\n },\n};\n\n/**\n * [[115]](https://www.w3.org/TR/sparql11-query/#rNumericExpression)\n */\nexport const numericExpression: SparqlGrammarRule<'numericExpression', Expression> = <const> {\n name: 'numericExpression',\n impl: ({ SUBRULE }) => () => SUBRULE(additiveExpression),\n};\n\n/**\n * [[116]](https://www.w3.org/TR/sparql11-query/#rAdditiveExpression)\n */\nexport const additiveExpression: SparqlGrammarRule<'additiveExpression', Expression> = <const> {\n name: 'additiveExpression',\n impl: ({ ACTION, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, MANY1, MANY2, OR1, OR2, OR3, OR4 }) => C =>\n constructLeftDeep(\n () => SUBRULE1(multiplicativeExpression),\n () => OR1<(left: Expression) => ExpressionOperation>([\n { ALT: () => {\n // Multiplicative expression as 2nd argument\n const operator = OR2([\n { ALT: () => CONSUME(l.symbols.opPlus) },\n { ALT: () => CONSUME(l.symbols.opMinus) },\n ]);\n const arg = SUBRULE2(multiplicativeExpression);\n return ACTION(() => left =>\n C.factory.expressionOperation(operator.image, [ left, arg ], C.factory.sourceLocation(left, arg)));\n } },\n { ALT: () => {\n // The operator of this alternative is actually parsed as part of the signed numeric literal. (note #6)\n const { operator, startInt } = OR3<{ operator: '+' | '-'; startInt: TermLiteral }>([\n { ALT: () => {\n // Note #6. No spaces are allowed between the sign and a number.\n // In this rule however, we do not want to care about this.\n const integer = SUBRULE(numericLiteralPositive);\n return ACTION(() => {\n integer.value = integer.value.replace(/^\\+/u, '');\n return <const> {\n operator: '+',\n startInt: integer,\n };\n });\n } },\n { ALT: () => {\n const integer = SUBRULE(numericLiteralNegative);\n return ACTION(() => {\n integer.value = integer.value.replace(/^-/u, '');\n return <const> {\n operator: '-',\n startInt: integer,\n };\n });\n } },\n ]);\n const multiplicativeExpr = constructLeftDeep(\n () => ACTION(() => startInt),\n () => {\n const innerOperator = OR4([\n { ALT: () => CONSUME(l.symbols.star) },\n { ALT: () => CONSUME(l.symbols.slash) },\n ]);\n const innerExpr = SUBRULE1(unaryExpression);\n return ACTION(() => leftInner => C.factory.expressionOperation(\n innerOperator.image,\n [ leftInner, innerExpr ],\n C.factory.sourceLocation(leftInner, innerExpr),\n ));\n },\n ACTION,\n MANY2,\n );\n return left => C.factory.expressionOperation(\n operator,\n [ left, multiplicativeExpr ],\n C.factory.sourceLocation(left, multiplicativeExpr),\n );\n } },\n ]),\n ACTION,\n MANY1,\n ),\n};\n\n/**\n * [[117]](https://www.w3.org/TR/sparql11-query/#rMultiplicativeExpression)\n */\nexport const multiplicativeExpression: SparqlGrammarRule<'multiplicativeExpression', Expression> = <const> {\n name: 'multiplicativeExpression',\n impl: ({ ACTION, CONSUME, MANY, SUBRULE1, SUBRULE2, OR }) => C => constructLeftDeep(\n () => SUBRULE1(unaryExpression),\n () => {\n const operator = OR([\n { ALT: () => CONSUME(l.symbols.star) },\n { ALT: () => CONSUME(l.symbols.slash) },\n ]);\n const expr = SUBRULE2(unaryExpression);\n return (left: Expression) => ({\n type: 'expression',\n subType: 'operation',\n operator: operator.image,\n args: [ left, expr ],\n loc: C.factory.sourceLocation(left, expr),\n });\n },\n ACTION,\n MANY,\n ),\n};\n\n/**\n * [[118]](https://www.w3.org/TR/sparql11-query/#rUnaryExpression)\n */\nexport const unaryExpression: SparqlGrammarRule<'unaryExpression', Expression> = <const> {\n name: 'unaryExpression',\n impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, OR1, OR2 }) => C => OR1<Expression>([\n { ALT: () => SUBRULE1(primaryExpression) },\n { ALT: () => {\n const operator = OR2([\n { ALT: () => CONSUME(l.symbols.exclamation) },\n { ALT: () => CONSUME(l.symbols.opPlus) },\n { ALT: () => CONSUME(l.symbols.opMinus) },\n ]);\n const expr = SUBRULE2(primaryExpression);\n return ACTION(() => ({\n type: 'expression',\n subType: 'operation',\n operator: operator.image === '!' ? '!' : (operator.image === '+' ? 'UPLUS' : 'UMINUS'),\n args: [ expr ],\n loc: C.factory.sourceLocation(operator, expr),\n }));\n } },\n ]),\n};\n\n/**\n * [[119]](https://www.w3.org/TR/sparql11-query/#rPrimaryExpression)\n */\nexport const primaryExpression: SparqlGrammarRule<'primaryExpression', Expression> = <const> {\n name: 'primaryExpression',\n impl: ({ SUBRULE, OR }) => () => OR([\n { ALT: () => SUBRULE(brackettedExpression) },\n { ALT: () => SUBRULE(builtInCall) },\n { ALT: () => SUBRULE(iriOrFunction) },\n { ALT: () => SUBRULE(rdfLiteral) },\n { ALT: () => SUBRULE(numericLiteral) },\n { ALT: () => SUBRULE(booleanLiteral) },\n { ALT: () => SUBRULE(var_) },\n ]),\n};\n\n/**\n * [[120]](https://www.w3.org/TR/sparql11-query/#rBrackettedExpression)\n */\nexport const brackettedExpression: SparqlGrammarRule<'brackettedExpression', Expression> = <const> {\n name: 'brackettedExpression',\n impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {\n const open = CONSUME(l.symbols.LParen);\n const expr = SUBRULE(expression);\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() => {\n expr.loc = C.factory.sourceLocation(open, close);\n return expr;\n });\n },\n};\n\n/**\n * [[128]](https://www.w3.org/TR/sparql11-query/#ririOrFunction)\n */\nexport const iriOrFunction: SparqlRule<'iriOrFunction', TermIri | ExpressionFunctionCall> = <const> {\n name: 'iriOrFunction',\n impl: ({ ACTION, SUBRULE, OPTION }) => (C) => {\n const iriVal = SUBRULE(iri);\n const functionCall = OPTION<ExpressionFunctionCall>(() => {\n const args = SUBRULE(argList);\n return ACTION(() => {\n const distinct = args.val.distinct;\n if (!C.parseMode.has('canParseAggregate') && distinct) {\n throw new Error(`DISTINCT implies that this function is an aggregated function, which is not allowed in this context.`);\n }\n return {\n type: 'expression',\n subType: 'functionCall',\n function: iriVal,\n args: args.val.args,\n distinct,\n loc: C.factory.sourceLocation(iriVal, args),\n };\n });\n });\n return functionCall ?? iriVal;\n },\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {\n if (F.isTermNamed(ast)) {\n SUBRULE(iri, ast);\n } else {\n SUBRULE(iri, ast.function);\n SUBRULE(argList, F.wrap({ args: ast.args, distinct: ast.distinct }, ast.loc));\n }\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"expression.js","sourceRoot":"","sources":["expression.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ImplArgs, RuleDefReturn, Wrap } from '@traqula/core';\nimport * as l from '../lexer';\nimport type { SparqlGrammarRule, SparqlRule } from '../sparql11HelperTypes';\nimport type {\n Expression,\n ExpressionFunctionCall,\n ExpressionOperation,\n TermIri,\n TermLiteral,\n} from '../Sparql11types';\nimport { aggregate, builtInCall } from './builtIn';\nimport {\n var_,\n varOrTerm,\n} from './general';\nimport {\n booleanLiteral,\n iri,\n numericLiteral,\n numericLiteralNegative,\n numericLiteralPositive,\n rdfLiteral,\n} from './literals';\nimport { groupGraphPattern } from './whereClause';\n\n/**\n * [[71]](https://www.w3.org/TR/sparql11-query/#rArgList)\n */\nexport interface IArgList {\n args: Expression[];\n distinct: boolean;\n}\nexport const argList: SparqlRule<'argList', Wrap<IArgList>> = <const> {\n name: 'argList',\n impl: ({ ACTION, CONSUME, SUBRULE1, OPTION, OR, AT_LEAST_ONE_SEP }) => C =>\n OR<RuleDefReturn<typeof argList>>([\n { ALT: () => {\n const nil = CONSUME(l.terminals.nil);\n return ACTION(() =>\n C.factory.wrap({ args: [], distinct: false }, C.factory.sourceLocation(nil)));\n } },\n { ALT: () => {\n const args: Expression[] = [];\n const open = CONSUME(l.symbols.LParen);\n const distinct = OPTION(() => {\n CONSUME(l.distinct);\n return true;\n }) ?? false;\n\n AT_LEAST_ONE_SEP({\n SEP: l.symbols.comma,\n DEF: () => {\n const arg = SUBRULE1(expression);\n args.push(arg);\n },\n });\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() =>\n C.factory.wrap({ args, distinct }, C.factory.sourceLocation(open, close)));\n } },\n ]),\n gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => {\n PRINT_WORD('(');\n if (ast.val.distinct) {\n PRINT_WORD('DISTINCT');\n }\n });\n const [ head, ...tail ] = ast.val.args;\n if (head) {\n SUBRULE(expression, head);\n }\n for (const expr of tail) {\n F.printFilter(ast, () => PRINT_WORD(','));\n SUBRULE(expression, expr);\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n },\n};\n\n/**\n * [[72]](https://www.w3.org/TR/sparql11-query/#rConstructTemplate)\n */\nexport const expressionList: SparqlGrammarRule<'expressionList', Wrap<Expression[]>> = <const> {\n name: 'expressionList',\n impl: ({ ACTION, CONSUME, MANY, OR, SUBRULE1, SUBRULE2 }) => C => OR([\n { ALT: () => {\n const nil = CONSUME(l.terminals.nil);\n return ACTION(() => C.factory.wrap([], C.factory.sourceLocation(nil)));\n } },\n { ALT: () => {\n const open = CONSUME(l.symbols.LParen);\n const expr1 = SUBRULE1(expression);\n const args: Expression[] = [ expr1 ];\n MANY(() => {\n CONSUME(l.symbols.comma);\n const expr = SUBRULE2(expression);\n args.push(expr);\n });\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() => C.factory.wrap(args, C.factory.sourceLocation(open, close)));\n } },\n ]),\n};\n\nconst infixOperators = new Set([ 'in', 'notin', '||', '&&', '=', '!=', '<', '>', '<=', '>=', '+', '-', '*', '/' ]);\nconst prefixOperator = new Set([ '!', 'UPLUS', 'UMINUS' ]);\n\n/**\n * [[110]](https://www.w3.org/TR/sparql11-query/#rExpression)\n */\nexport const expression: SparqlRule<'expression', Expression> = <const> {\n name: 'expression',\n impl: ({ SUBRULE }) => () => SUBRULE(conditionalOrExpression),\n gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {\n if (F.isTerm(ast)) {\n SUBRULE(varOrTerm, ast);\n } else if (F.isExpressionOperator(ast)) {\n if (infixOperators.has(ast.operator)) {\n const [ left, ...right ] = ast.args;\n F.printFilter(ast, () => PRINT_WORD('('));\n SUBRULE(expression, left);\n F.printFilter(ast, () => {\n if (ast.operator === 'notin') {\n PRINT_WORD('NOT IN');\n } else if (ast.operator === 'in') {\n PRINT_WORD('IN');\n } else {\n PRINT_WORD(ast.operator.toUpperCase());\n }\n });\n if (right.length === 1) {\n SUBRULE(expression, right[0]);\n } else {\n SUBRULE(argList, F.wrap({ args: right, distinct: false }, ast.loc));\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n } else if (prefixOperator.has(ast.operator)) {\n const [ expr ] = <[Expression]>ast.args;\n F.printFilter(ast, () => PRINT_WORD(ast.operator.toUpperCase()));\n SUBRULE(expression, expr);\n } else {\n F.printFilter(ast, () => PRINT_WORD(ast.operator.toUpperCase(), '('));\n const [ head, ...tail ] = ast.args;\n if (head) {\n SUBRULE(expression, head);\n }\n for (const arg of tail) {\n F.printFilter(ast, () => PRINT_WORD(','));\n SUBRULE(expression, arg);\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n }\n } else if (F.isExpressionPatternOperation(ast)) {\n const patterns = ast.args;\n F.printFilter(ast, () => PRINT_WORD(ast.operator === 'exists' ? 'EXISTS' : 'NOT EXISTS'));\n SUBRULE(groupGraphPattern, patterns);\n } else if (F.isExpressionFunctionCall(ast)) {\n SUBRULE(iriOrFunction, ast);\n } else if (F.isExpressionAggregate(ast)) {\n SUBRULE(aggregate, ast);\n }\n },\n};\n\ntype LeftDeepBuildArgs = (left: Expression) => ExpressionOperation;\n\nfunction constructLeftDeep(\n startGenerator: () => Expression,\n restGenerator: () => LeftDeepBuildArgs,\n ACTION: ImplArgs['ACTION'],\n MANY: ImplArgs['MANY'],\n): ExpressionOperation | Expression {\n // By using iterExpression, we avoid creating unnecessary arrays\n let iterExpr = startGenerator();\n MANY(() => {\n const res = restGenerator();\n ACTION(() => {\n iterExpr = res(iterExpr);\n });\n });\n return iterExpr;\n}\n\n/**\n * [[111]](https://www.w3.org/TR/sparql11-query/#rConditionalOrExpression)\n */\nexport const conditionalOrExpression: SparqlGrammarRule<'conditionalOrExpression', ExpressionOperation | Expression> =\n <const> {\n name: 'conditionalOrExpression',\n impl: ({ ACTION, MANY, CONSUME, SUBRULE1, SUBRULE2 }) => C => constructLeftDeep(\n () => SUBRULE1(conditionalAndExpression),\n () => {\n CONSUME(l.symbols.logicOr);\n const args = SUBRULE2(conditionalAndExpression);\n return left => ACTION(() =>\n C.factory.expressionOperation('||', [ left, args ], C.factory.sourceLocation(left, args)));\n },\n ACTION,\n MANY,\n ),\n };\n\n/**\n * [[112]](https://www.w3.org/TR/sparql11-query/#rConditionalAndExpression)\n */\nexport const conditionalAndExpression: SparqlGrammarRule<'conditionalAndExpression', Expression> = <const> {\n name: 'conditionalAndExpression',\n impl: ({ ACTION, MANY, SUBRULE1, SUBRULE2, CONSUME }) => C => constructLeftDeep(\n () => SUBRULE1(valueLogical),\n () => {\n CONSUME(l.symbols.logicAnd);\n const arg = SUBRULE2(valueLogical);\n return left => ACTION(() =>\n C.factory.expressionOperation('&&', [ left, arg ], C.factory.sourceLocation(left, arg)));\n },\n ACTION,\n MANY,\n ),\n};\n\n/**\n * [[113]](https://www.w3.org/TR/sparql11-query/#rValueLogical)\n */\nexport const valueLogical: SparqlGrammarRule<'valueLogical', Expression> = <const> {\n name: 'valueLogical',\n impl: ({ SUBRULE }) => () => SUBRULE(relationalExpression),\n};\n\n/**\n * [[114]](https://www.w3.org/TR/sparql11-query/#rRelationalExpression)\n */\nexport const relationalExpression:\nSparqlGrammarRule<'relationalExpression', ExpressionOperation | Expression> = <const>{\n name: 'relationalExpression',\n impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR1, OR2, OR3 }) => (C) => {\n const args1 = SUBRULE1(numericExpression);\n const expression = OPTION<ExpressionOperation>(() =>\n OR1<ExpressionOperation>([\n { ALT: () => {\n // Stay in numeric;\n const operator = OR2([\n { ALT: () => CONSUME(l.symbols.equal) },\n { ALT: () => CONSUME(l.symbols.notEqual) },\n { ALT: () => CONSUME(l.symbols.lessThan) },\n { ALT: () => CONSUME(l.symbols.greaterThan) },\n { ALT: () => CONSUME(l.symbols.lessThanEqual) },\n { ALT: () => CONSUME(l.symbols.greaterThanEqual) },\n ]);\n const expr = SUBRULE2(numericExpression);\n return ACTION(() => C.factory.expressionOperation(\n operator.image,\n [ args1, expr ],\n C.factory.sourceLocation(args1, expr),\n ));\n } },\n { ALT: () => {\n const operator = OR3([\n { ALT: () => CONSUME(l.in_) },\n { ALT: () => CONSUME(l.notIn) },\n ]);\n const args = SUBRULE1(expressionList);\n return ACTION(() => C.factory.expressionOperation(\n operator.image,\n [ args1, ...args.val ],\n C.factory.sourceLocation(args1, args),\n ));\n } },\n ]));\n return expression ?? args1;\n },\n};\n\n/**\n * [[115]](https://www.w3.org/TR/sparql11-query/#rNumericExpression)\n */\nexport const numericExpression: SparqlGrammarRule<'numericExpression', Expression> = <const> {\n name: 'numericExpression',\n impl: ({ SUBRULE }) => () => SUBRULE(additiveExpression),\n};\n\n/**\n * [[116]](https://www.w3.org/TR/sparql11-query/#rAdditiveExpression)\n */\nexport const additiveExpression: SparqlGrammarRule<'additiveExpression', Expression> = <const> {\n name: 'additiveExpression',\n impl: ({ ACTION, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, MANY1, MANY2, OR1, OR2, OR3, OR4 }) => C =>\n constructLeftDeep(\n () => SUBRULE1(multiplicativeExpression),\n () => OR1<(left: Expression) => ExpressionOperation>([\n { ALT: () => {\n // Multiplicative expression as 2nd argument\n const operator = OR2([\n { ALT: () => CONSUME(l.symbols.opPlus) },\n { ALT: () => CONSUME(l.symbols.opMinus) },\n ]);\n const arg = SUBRULE2(multiplicativeExpression);\n return ACTION(() => left =>\n C.factory.expressionOperation(operator.image, [ left, arg ], C.factory.sourceLocation(left, arg)));\n } },\n { ALT: () => {\n // The operator of this alternative is actually parsed as part of the signed numeric literal. (note #6)\n const { operator, startInt } = OR3<{ operator: '+' | '-'; startInt: TermLiteral }>([\n { ALT: () => {\n // Note #6. No spaces are allowed between the sign and a number.\n // In this rule however, we do not want to care about this.\n const integer = SUBRULE(numericLiteralPositive);\n return ACTION(() => {\n integer.value = integer.value.replace(/^\\+/u, '');\n return <const> {\n operator: '+',\n startInt: integer,\n };\n });\n } },\n { ALT: () => {\n const integer = SUBRULE(numericLiteralNegative);\n return ACTION(() => {\n integer.value = integer.value.replace(/^-/u, '');\n return <const> {\n operator: '-',\n startInt: integer,\n };\n });\n } },\n ]);\n const multiplicativeExpr = constructLeftDeep(\n () => ACTION(() => startInt),\n () => {\n const innerOperator = OR4([\n { ALT: () => CONSUME(l.symbols.star) },\n { ALT: () => CONSUME(l.symbols.slash) },\n ]);\n const innerExpr = SUBRULE1(unaryExpression);\n return ACTION(() => leftInner => C.factory.expressionOperation(\n innerOperator.image,\n [ leftInner, innerExpr ],\n C.factory.sourceLocation(leftInner, innerExpr),\n ));\n },\n ACTION,\n MANY2,\n );\n return left => C.factory.expressionOperation(\n operator,\n [ left, multiplicativeExpr ],\n C.factory.sourceLocation(left, multiplicativeExpr),\n );\n } },\n ]),\n ACTION,\n MANY1,\n ),\n};\n\n/**\n * [[117]](https://www.w3.org/TR/sparql11-query/#rMultiplicativeExpression)\n */\nexport const multiplicativeExpression: SparqlGrammarRule<'multiplicativeExpression', Expression> = <const> {\n name: 'multiplicativeExpression',\n impl: ({ ACTION, CONSUME, MANY, SUBRULE1, SUBRULE2, OR }) => C => constructLeftDeep(\n () => SUBRULE1(unaryExpression),\n () => {\n const operator = OR([\n { ALT: () => CONSUME(l.symbols.star) },\n { ALT: () => CONSUME(l.symbols.slash) },\n ]);\n const expr = SUBRULE2(unaryExpression);\n return (left: Expression) => ({\n type: 'expression',\n subType: 'operation',\n operator: operator.image,\n args: [ left, expr ],\n loc: C.factory.sourceLocation(left, expr),\n });\n },\n ACTION,\n MANY,\n ),\n};\n\n/**\n * [[118]](https://www.w3.org/TR/sparql11-query/#rUnaryExpression)\n */\nexport const unaryExpression: SparqlGrammarRule<'unaryExpression', Expression> = <const> {\n name: 'unaryExpression',\n impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, OR1, OR2 }) => C => OR1<Expression>([\n { ALT: () => SUBRULE1(primaryExpression) },\n { ALT: () => {\n const operator = OR2([\n { ALT: () => CONSUME(l.symbols.exclamation) },\n { ALT: () => CONSUME(l.symbols.opPlus) },\n { ALT: () => CONSUME(l.symbols.opMinus) },\n ]);\n const expr = SUBRULE2(primaryExpression);\n return ACTION(() => C.factory.expressionOperation(\n operator.image === '!' ? '!' : (operator.image === '+' ? 'UPLUS' : 'UMINUS'),\n [ expr ],\n C.factory.sourceLocation(operator, expr),\n ));\n } },\n ]),\n};\n\n/**\n * [[119]](https://www.w3.org/TR/sparql11-query/#rPrimaryExpression)\n */\nexport const primaryExpression: SparqlGrammarRule<'primaryExpression', Expression> = <const> {\n name: 'primaryExpression',\n impl: ({ SUBRULE, OR }) => () => OR([\n { ALT: () => SUBRULE(brackettedExpression) },\n { ALT: () => SUBRULE(builtInCall) },\n { ALT: () => SUBRULE(iriOrFunction) },\n { ALT: () => SUBRULE(rdfLiteral) },\n { ALT: () => SUBRULE(numericLiteral) },\n { ALT: () => SUBRULE(booleanLiteral) },\n { ALT: () => SUBRULE(var_) },\n ]),\n};\n\n/**\n * [[120]](https://www.w3.org/TR/sparql11-query/#rBrackettedExpression)\n */\nexport const brackettedExpression: SparqlGrammarRule<'brackettedExpression', Expression> = <const> {\n name: 'brackettedExpression',\n impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {\n const open = CONSUME(l.symbols.LParen);\n const expr = SUBRULE(expression);\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() => {\n expr.loc = C.factory.sourceLocation(open, close);\n return expr;\n });\n },\n};\n\n/**\n * [[128]](https://www.w3.org/TR/sparql11-query/#ririOrFunction)\n */\nexport const iriOrFunction: SparqlRule<'iriOrFunction', TermIri | ExpressionFunctionCall> = <const> {\n name: 'iriOrFunction',\n impl: ({ ACTION, SUBRULE, OPTION }) => (C) => {\n const iriVal = SUBRULE(iri);\n const functionCall = OPTION<ExpressionFunctionCall>(() => {\n const args = SUBRULE(argList);\n return ACTION(() => {\n const distinct = args.val.distinct;\n if (!C.parseMode.has('canParseAggregate') && distinct) {\n throw new Error(`DISTINCT implies that this function is an aggregated function, which is not allowed in this context.`);\n }\n return {\n type: 'expression',\n subType: 'functionCall',\n function: iriVal,\n args: args.val.args,\n distinct,\n loc: C.factory.sourceLocation(iriVal, args),\n };\n });\n });\n return functionCall ?? iriVal;\n },\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {\n if (F.isTermNamed(ast)) {\n SUBRULE(iri, ast);\n } else {\n SUBRULE(iri, ast.function);\n SUBRULE(argList, F.wrap({ args: ast.args, distinct: ast.distinct }, ast.loc));\n }\n },\n};\n"]}
|
|
@@ -14,11 +14,11 @@ export declare const pathEltOrInverse: SparqlGrammarRule<'pathEltOrInverse', Pat
|
|
|
14
14
|
/**
|
|
15
15
|
* [[90]](https://www.w3.org/TR/sparql11-query/#rPathSequence)
|
|
16
16
|
*/
|
|
17
|
-
export declare const pathSequence: SparqlGrammarRule<"pathSequence", import("..").TermIriFull | import("..").TermIriPrefixed |
|
|
17
|
+
export declare const pathSequence: SparqlGrammarRule<"pathSequence", import("..").TermIriFull | import("..").TermIriPrefixed | import("..").PropertyPathChain | PathModified | PathNegated>;
|
|
18
18
|
/**
|
|
19
19
|
* [[89]](https://www.w3.org/TR/sparql11-query/#rPathAlternative)
|
|
20
20
|
*/
|
|
21
|
-
export declare const pathAlternative: SparqlGrammarRule<"pathAlternative", import("..").TermIriFull | import("..").TermIriPrefixed |
|
|
21
|
+
export declare const pathAlternative: SparqlGrammarRule<"pathAlternative", import("..").TermIriFull | import("..").TermIriPrefixed | import("..").PropertyPathChain | PathModified | PathNegated>;
|
|
22
22
|
/**
|
|
23
23
|
* [[91]](https://www.w3.org/TR/sparql11-query/#rPathElt)
|
|
24
24
|
*/
|
|
@@ -22,10 +22,10 @@ export declare const verbPath: SparqlGrammarRule<'verbPath', Path>;
|
|
|
22
22
|
* [[85]](https://www.w3.org/TR/sparql11-query/#rVerbSimple)
|
|
23
23
|
*/
|
|
24
24
|
export declare const verbSimple: SparqlGrammarRule<'verbSimple', TermVariable>;
|
|
25
|
-
export declare const objectList: SparqlGrammarRule<"objectList", TripleNesting[], [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").
|
|
26
|
-
export declare const objectListPath: SparqlGrammarRule<"objectListPath", TripleNesting[], [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").
|
|
27
|
-
export declare const object: SparqlGrammarRule<"object", TripleNesting, [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").
|
|
28
|
-
export declare const objectPath: SparqlGrammarRule<"objectPath", TripleNesting, [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").
|
|
25
|
+
export declare const objectList: SparqlGrammarRule<"objectList", TripleNesting[], [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").PropertyPathChain | import("..").PathModified | import("..").PathNegated]>;
|
|
26
|
+
export declare const objectListPath: SparqlGrammarRule<"objectListPath", TripleNesting[], [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").PropertyPathChain | import("..").PathModified | import("..").PathNegated]>;
|
|
27
|
+
export declare const object: SparqlGrammarRule<"object", TripleNesting, [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").PropertyPathChain | import("..").PathModified | import("..").PathNegated]>;
|
|
28
|
+
export declare const objectPath: SparqlGrammarRule<"objectPath", TripleNesting, [GraphNode, import("..").TermIriFull | import("..").TermIriPrefixed | TermVariable | import("..").PropertyPathChain | import("..").PathModified | import("..").PathNegated]>;
|
|
29
29
|
export declare const collection: SparqlRule<"collection", TripleCollectionList>;
|
|
30
30
|
export declare const collectionPath: SparqlRule<"collectionPath", TripleCollectionList>;
|
|
31
31
|
export declare const triplesNode: SparqlRule<"triplesNode", TripleCollection>;
|
package/lib/index.cjs
CHANGED
|
@@ -23,6 +23,7 @@ __export(index_exports, {
|
|
|
23
23
|
CommonIRIs: () => CommonIRIs,
|
|
24
24
|
Factory: () => Factory,
|
|
25
25
|
MinimalSparqlParser: () => MinimalSparqlParser,
|
|
26
|
+
TransformerSparql11: () => TransformerSparql11,
|
|
26
27
|
baseAggregateFunc: () => baseAggregateFunc,
|
|
27
28
|
checkNote13: () => checkNote13,
|
|
28
29
|
completeParseContext: () => completeParseContext,
|
|
@@ -9837,58 +9838,115 @@ function createToken2(config) {
|
|
|
9837
9838
|
return createToken(config);
|
|
9838
9839
|
}
|
|
9839
9840
|
|
|
9840
|
-
// ../core/lib/
|
|
9841
|
-
var
|
|
9842
|
-
|
|
9843
|
-
|
|
9844
|
-
|
|
9845
|
-
|
|
9846
|
-
|
|
9847
|
-
|
|
9848
|
-
return patch(copy3);
|
|
9841
|
+
// ../core/lib/Transformers.ts
|
|
9842
|
+
var TransformerType = class {
|
|
9843
|
+
safeObjectVisit(value, mapper) {
|
|
9844
|
+
if (value && typeof value === "object") {
|
|
9845
|
+
if (Array.isArray(value)) {
|
|
9846
|
+
return value.map((x) => this.safeObjectVisit(x, mapper));
|
|
9847
|
+
}
|
|
9848
|
+
return mapper(value);
|
|
9849
9849
|
}
|
|
9850
|
-
return
|
|
9850
|
+
return value;
|
|
9851
9851
|
}
|
|
9852
|
-
|
|
9852
|
+
transformNode(curObject, nodeCallBacks) {
|
|
9853
|
+
let continueCheck;
|
|
9854
|
+
let transformation;
|
|
9855
|
+
const casted = curObject;
|
|
9856
|
+
if (casted.type) {
|
|
9857
|
+
continueCheck = nodeCallBacks[casted.type]?.continue;
|
|
9858
|
+
transformation = nodeCallBacks[casted.type]?.transform;
|
|
9859
|
+
}
|
|
9860
|
+
let shouldContinue = true;
|
|
9861
|
+
if (continueCheck) {
|
|
9862
|
+
shouldContinue = continueCheck(curObject);
|
|
9863
|
+
}
|
|
9864
|
+
if (!shouldContinue) {
|
|
9865
|
+
return curObject;
|
|
9866
|
+
}
|
|
9853
9867
|
const copy3 = { ...curObject };
|
|
9854
9868
|
for (const [key, value] of Object.entries(copy3)) {
|
|
9855
|
-
copy3[key] = this.safeObjectVisit(value, (obj) => this.
|
|
9869
|
+
copy3[key] = this.safeObjectVisit(value, (obj) => this.transformNode(obj, nodeCallBacks));
|
|
9856
9870
|
}
|
|
9857
|
-
if (
|
|
9858
|
-
return
|
|
9871
|
+
if (transformation) {
|
|
9872
|
+
return transformation(copy3);
|
|
9859
9873
|
}
|
|
9860
9874
|
return copy3;
|
|
9861
9875
|
}
|
|
9862
|
-
|
|
9863
|
-
|
|
9864
|
-
|
|
9876
|
+
visitNode(curObject, nodeCallBacks) {
|
|
9877
|
+
let callback;
|
|
9878
|
+
const casted = curObject;
|
|
9879
|
+
if (casted.type) {
|
|
9880
|
+
callback = nodeCallBacks[casted.type];
|
|
9865
9881
|
}
|
|
9866
|
-
|
|
9867
|
-
|
|
9868
|
-
|
|
9869
|
-
this.safeObjectVisit(value, (obj) => this.visitNode(obj, searchType, visitor));
|
|
9882
|
+
let shouldIterate = true;
|
|
9883
|
+
if (callback) {
|
|
9884
|
+
shouldIterate = callback(curObject);
|
|
9870
9885
|
}
|
|
9871
|
-
if (
|
|
9872
|
-
|
|
9886
|
+
if (shouldIterate) {
|
|
9887
|
+
for (const value of Object.values(curObject)) {
|
|
9888
|
+
this.safeObjectVisit(value, (obj) => this.visitNode(obj, nodeCallBacks));
|
|
9889
|
+
}
|
|
9873
9890
|
}
|
|
9874
9891
|
}
|
|
9875
|
-
|
|
9876
|
-
|
|
9877
|
-
|
|
9892
|
+
};
|
|
9893
|
+
var TransformerSubType = class extends TransformerType {
|
|
9894
|
+
// Public visitObjects(curObject: object, visitor: (current: object) => void): void {
|
|
9895
|
+
// for (const value of Object.values(curObject)) {
|
|
9896
|
+
// this.safeObjectVisit(value, obj => this.visitObjects(obj, visitor));
|
|
9897
|
+
// }
|
|
9898
|
+
// }
|
|
9899
|
+
transformNodeSpecific(curObject, nodeCallBacks, nodeSpecificCallBacks = {}) {
|
|
9900
|
+
let continueCheck;
|
|
9901
|
+
let transformation;
|
|
9902
|
+
const casted = curObject;
|
|
9903
|
+
if (casted.type && casted.subType) {
|
|
9904
|
+
const specific = nodeSpecificCallBacks[casted.type];
|
|
9905
|
+
if (specific) {
|
|
9906
|
+
continueCheck = specific[casted.subType]?.continue;
|
|
9907
|
+
transformation = specific[casted.subType]?.transform;
|
|
9908
|
+
}
|
|
9909
|
+
}
|
|
9910
|
+
let shouldContinue = true;
|
|
9911
|
+
if (continueCheck) {
|
|
9912
|
+
shouldContinue = continueCheck(curObject);
|
|
9913
|
+
}
|
|
9914
|
+
if (!shouldContinue) {
|
|
9915
|
+
return curObject;
|
|
9916
|
+
}
|
|
9917
|
+
const copy3 = { ...curObject };
|
|
9918
|
+
for (const [key, value] of Object.entries(copy3)) {
|
|
9919
|
+
copy3[key] = this.safeObjectVisit(value, (obj) => this.transformNodeSpecific(obj, nodeCallBacks, nodeSpecificCallBacks));
|
|
9878
9920
|
}
|
|
9879
|
-
|
|
9880
|
-
|
|
9881
|
-
visitor(curObject);
|
|
9921
|
+
if (transformation) {
|
|
9922
|
+
return transformation(copy3);
|
|
9882
9923
|
}
|
|
9924
|
+
return copy3;
|
|
9883
9925
|
}
|
|
9884
|
-
|
|
9885
|
-
|
|
9886
|
-
|
|
9887
|
-
|
|
9926
|
+
/**
|
|
9927
|
+
* When both nodeCallBack and NodeSpecific callBack are matched, will only look at nodeSpecifCallback
|
|
9928
|
+
*/
|
|
9929
|
+
visitNodeSpecific(curObject, nodeCallBacks, nodeSpecificCallBacks = {}) {
|
|
9930
|
+
let callback;
|
|
9931
|
+
const casted = curObject;
|
|
9932
|
+
if (casted.type && casted.subType) {
|
|
9933
|
+
const specific = nodeSpecificCallBacks[casted.type];
|
|
9934
|
+
if (specific) {
|
|
9935
|
+
callback = specific[casted.subType];
|
|
9936
|
+
}
|
|
9937
|
+
}
|
|
9938
|
+
if (!callback && casted.type) {
|
|
9939
|
+
callback = nodeCallBacks[curObject.type];
|
|
9940
|
+
}
|
|
9941
|
+
let shouldIterate = true;
|
|
9942
|
+
if (callback) {
|
|
9943
|
+
shouldIterate = callback(curObject) ?? true;
|
|
9944
|
+
}
|
|
9945
|
+
if (shouldIterate) {
|
|
9946
|
+
for (const value of Object.values(curObject)) {
|
|
9947
|
+
this.safeObjectVisit(value, (obj) => this.visitNodeSpecific(obj, nodeCallBacks, nodeSpecificCallBacks));
|
|
9888
9948
|
}
|
|
9889
|
-
return mapper(value);
|
|
9890
9949
|
}
|
|
9891
|
-
return value;
|
|
9892
9950
|
}
|
|
9893
9951
|
};
|
|
9894
9952
|
|
|
@@ -11191,9 +11249,46 @@ var Factory = class extends asArg(CoreFactory).call(ContextFactoryMixin).call(Ex
|
|
|
11191
11249
|
}
|
|
11192
11250
|
};
|
|
11193
11251
|
|
|
11252
|
+
// lib/utils.ts
|
|
11253
|
+
function sparqlCodepointEscape(input) {
|
|
11254
|
+
const sanitizedInput = input.replaceAll(
|
|
11255
|
+
/\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{8})/gu,
|
|
11256
|
+
(_, unicode4, unicode8) => {
|
|
11257
|
+
if (unicode4) {
|
|
11258
|
+
const charCode2 = Number.parseInt(unicode4, 16);
|
|
11259
|
+
return String.fromCodePoint(charCode2);
|
|
11260
|
+
}
|
|
11261
|
+
const charCode = Number.parseInt(unicode8, 16);
|
|
11262
|
+
if (charCode < 65535) {
|
|
11263
|
+
return String.fromCodePoint(charCode);
|
|
11264
|
+
}
|
|
11265
|
+
const substractedCharCode = charCode - 65536;
|
|
11266
|
+
return String.fromCodePoint(55296 + (substractedCharCode >> 10), 56320 + (substractedCharCode & 1023));
|
|
11267
|
+
}
|
|
11268
|
+
);
|
|
11269
|
+
if (/[\uD800-\uDBFF](?:[^\uDC00-\uDFFF]|$)/u.test(sanitizedInput)) {
|
|
11270
|
+
throw new Error(`Invalid unicode codepoint of surrogate pair without corresponding codepoint`);
|
|
11271
|
+
}
|
|
11272
|
+
return sanitizedInput;
|
|
11273
|
+
}
|
|
11274
|
+
var CommonIRIs = /* @__PURE__ */ ((CommonIRIs2) => {
|
|
11275
|
+
CommonIRIs2["BOOLEAN"] = "http://www.w3.org/2001/XMLSchema#boolean";
|
|
11276
|
+
CommonIRIs2["INTEGER"] = "http://www.w3.org/2001/XMLSchema#integer";
|
|
11277
|
+
CommonIRIs2["DECIMAL"] = "http://www.w3.org/2001/XMLSchema#decimal";
|
|
11278
|
+
CommonIRIs2["DOUBLE"] = "http://www.w3.org/2001/XMLSchema#double";
|
|
11279
|
+
CommonIRIs2["STRING"] = "http://www.w3.org/2001/XMLSchema#string";
|
|
11280
|
+
CommonIRIs2["FIRST"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#first";
|
|
11281
|
+
CommonIRIs2["REST"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest";
|
|
11282
|
+
CommonIRIs2["NIL"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil";
|
|
11283
|
+
CommonIRIs2["TYPE"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
11284
|
+
return CommonIRIs2;
|
|
11285
|
+
})(CommonIRIs || {});
|
|
11286
|
+
var TransformerSparql11 = class extends TransformerSubType {
|
|
11287
|
+
};
|
|
11288
|
+
|
|
11194
11289
|
// lib/validation/validators.ts
|
|
11195
11290
|
var F = new Factory();
|
|
11196
|
-
var transformer = new
|
|
11291
|
+
var transformer = new TransformerSparql11();
|
|
11197
11292
|
function getAggregatesOfExpression(expression2) {
|
|
11198
11293
|
if (F.isExpressionAggregate(expression2)) {
|
|
11199
11294
|
return [expression2];
|
|
@@ -11342,7 +11437,9 @@ function checkNote13(patterns) {
|
|
|
11342
11437
|
if (F.isPatternBind(pattern) && index > 0 && F.isPatternBgp(patterns[index - 1])) {
|
|
11343
11438
|
const bgp = patterns[index - 1];
|
|
11344
11439
|
const variables = [];
|
|
11345
|
-
transformer.visitNodeSpecific(bgp,
|
|
11440
|
+
transformer.visitNodeSpecific(bgp, {}, { term: { variable: (var_2) => {
|
|
11441
|
+
variables.push(var_2);
|
|
11442
|
+
} } });
|
|
11346
11443
|
if (variables.some((var_2) => var_2.value === pattern.variable.value)) {
|
|
11347
11444
|
throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);
|
|
11348
11445
|
}
|
|
@@ -11368,12 +11465,12 @@ function updateNoReuseBlankNodeLabels(updateQuery) {
|
|
|
11368
11465
|
const operation = update2.operation;
|
|
11369
11466
|
if (operation.subType === "insertdata") {
|
|
11370
11467
|
const blankNodesHere = /* @__PURE__ */ new Set();
|
|
11371
|
-
transformer.visitNodeSpecific(operation,
|
|
11468
|
+
transformer.visitNodeSpecific(operation, {}, { term: { blankNode: (blankNode2) => {
|
|
11372
11469
|
blankNodesHere.add(blankNode2.label);
|
|
11373
11470
|
if (blankLabelsUsedInInsertData.has(blankNode2.label)) {
|
|
11374
11471
|
throw new Error("Detected reuse blank node across different INSERT DATA clauses");
|
|
11375
11472
|
}
|
|
11376
|
-
});
|
|
11473
|
+
} } });
|
|
11377
11474
|
for (const blankNode2 of blankNodesHere) {
|
|
11378
11475
|
blankLabelsUsedInInsertData.add(blankNode2);
|
|
11379
11476
|
}
|
|
@@ -11381,41 +11478,6 @@ function updateNoReuseBlankNodeLabels(updateQuery) {
|
|
|
11381
11478
|
}
|
|
11382
11479
|
}
|
|
11383
11480
|
|
|
11384
|
-
// lib/utils.ts
|
|
11385
|
-
function sparqlCodepointEscape(input) {
|
|
11386
|
-
const sanitizedInput = input.replaceAll(
|
|
11387
|
-
/\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{8})/gu,
|
|
11388
|
-
(_, unicode4, unicode8) => {
|
|
11389
|
-
if (unicode4) {
|
|
11390
|
-
const charCode2 = Number.parseInt(unicode4, 16);
|
|
11391
|
-
return String.fromCodePoint(charCode2);
|
|
11392
|
-
}
|
|
11393
|
-
const charCode = Number.parseInt(unicode8, 16);
|
|
11394
|
-
if (charCode < 65535) {
|
|
11395
|
-
return String.fromCodePoint(charCode);
|
|
11396
|
-
}
|
|
11397
|
-
const substractedCharCode = charCode - 65536;
|
|
11398
|
-
return String.fromCodePoint(55296 + (substractedCharCode >> 10), 56320 + (substractedCharCode & 1023));
|
|
11399
|
-
}
|
|
11400
|
-
);
|
|
11401
|
-
if (/[\uD800-\uDBFF](?:[^\uDC00-\uDFFF]|$)/u.test(sanitizedInput)) {
|
|
11402
|
-
throw new Error(`Invalid unicode codepoint of surrogate pair without corresponding codepoint`);
|
|
11403
|
-
}
|
|
11404
|
-
return sanitizedInput;
|
|
11405
|
-
}
|
|
11406
|
-
var CommonIRIs = /* @__PURE__ */ ((CommonIRIs2) => {
|
|
11407
|
-
CommonIRIs2["BOOLEAN"] = "http://www.w3.org/2001/XMLSchema#boolean";
|
|
11408
|
-
CommonIRIs2["INTEGER"] = "http://www.w3.org/2001/XMLSchema#integer";
|
|
11409
|
-
CommonIRIs2["DECIMAL"] = "http://www.w3.org/2001/XMLSchema#decimal";
|
|
11410
|
-
CommonIRIs2["DOUBLE"] = "http://www.w3.org/2001/XMLSchema#double";
|
|
11411
|
-
CommonIRIs2["STRING"] = "http://www.w3.org/2001/XMLSchema#string";
|
|
11412
|
-
CommonIRIs2["FIRST"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#first";
|
|
11413
|
-
CommonIRIs2["REST"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#rest";
|
|
11414
|
-
CommonIRIs2["NIL"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil";
|
|
11415
|
-
CommonIRIs2["TYPE"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
11416
|
-
return CommonIRIs2;
|
|
11417
|
-
})(CommonIRIs || {});
|
|
11418
|
-
|
|
11419
11481
|
// lib/grammar/literals.ts
|
|
11420
11482
|
function stringEscapedLexical(str2) {
|
|
11421
11483
|
const lexical = str2.replaceAll(/["\\\t\n\r\b\f]/gu, (char) => {
|
|
@@ -13398,13 +13460,11 @@ var unaryExpression = {
|
|
|
13398
13460
|
{ ALT: () => CONSUME(symbols_exports.opMinus) }
|
|
13399
13461
|
]);
|
|
13400
13462
|
const expr = SUBRULE2(primaryExpression);
|
|
13401
|
-
return ACTION(() => (
|
|
13402
|
-
|
|
13403
|
-
|
|
13404
|
-
|
|
13405
|
-
|
|
13406
|
-
loc: C.factory.sourceLocation(operator, expr)
|
|
13407
|
-
}));
|
|
13463
|
+
return ACTION(() => C.factory.expressionOperation(
|
|
13464
|
+
operator.image === "!" ? "!" : operator.image === "+" ? "UPLUS" : "UMINUS",
|
|
13465
|
+
[expr],
|
|
13466
|
+
C.factory.sourceLocation(operator, expr)
|
|
13467
|
+
));
|
|
13408
13468
|
} }
|
|
13409
13469
|
])
|
|
13410
13470
|
};
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { TransformerSubType } from '@traqula/core';
|
|
2
|
+
import type { Sparql11Nodes } from './Sparql11types';
|
|
1
3
|
/**
|
|
2
4
|
* Transform input in accordance to [19.2](https://www.w3.org/TR/sparql11-query/#codepointEscape)
|
|
3
5
|
* and validate unicode codepoints.
|
|
@@ -14,3 +16,5 @@ export declare enum CommonIRIs {
|
|
|
14
16
|
NIL = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil",
|
|
15
17
|
TYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
|
|
16
18
|
}
|
|
19
|
+
export declare class TransformerSparql11 extends TransformerSubType<Sparql11Nodes> {
|
|
20
|
+
}
|
package/lib/utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TransformerSubType } from '@traqula/core';
|
|
1
2
|
/**
|
|
2
3
|
* Transform input in accordance to [19.2](https://www.w3.org/TR/sparql11-query/#codepointEscape)
|
|
3
4
|
* and validate unicode codepoints.
|
|
@@ -35,4 +36,6 @@ export var CommonIRIs;
|
|
|
35
36
|
CommonIRIs["NIL"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil";
|
|
36
37
|
CommonIRIs["TYPE"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
37
38
|
})(CommonIRIs || (CommonIRIs = {}));
|
|
39
|
+
export class TransformerSparql11 extends TransformerSubType {
|
|
40
|
+
}
|
|
38
41
|
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CACrC,2CAA2C,EAC3C,CAAC,CAAC,EAAE,QAAgB,EAAE,QAAgB,EAAE,EAAE;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/C,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC/C,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5G,CAAC,CACF,CAAC;IACF,2CAA2C;IAC3C,IAAI,wCAAwC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAN,IAAY,UAYX;AAZD,WAAY,UAAU;IACpB,MAAM;IACN,kEAAoD,CAAA;IACpD,kEAAoD,CAAA;IACpD,kEAAoD,CAAA;IACpD,gEAAkD,CAAA;IAClD,gEAAkD,CAAA;IAClD,MAAM;IACN,wEAA0D,CAAA;IAC1D,sEAAwD,CAAA;IACxD,oEAAsD,CAAA;IACtD,sEAAwD,CAAA;AAC1D,CAAC,EAZW,UAAU,KAAV,UAAU,QAYrB","sourcesContent":["/**\n * Transform input in accordance to [19.2](https://www.w3.org/TR/sparql11-query/#codepointEscape)\n * and validate unicode codepoints.\n */\nexport function sparqlCodepointEscape(input: string): string {\n const sanitizedInput = input.replaceAll(\n /\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{8})/gu,\n (_, unicode4: string, unicode8: string) => {\n if (unicode4) {\n const charCode = Number.parseInt(unicode4, 16);\n return String.fromCodePoint(charCode);\n }\n const charCode = Number.parseInt(unicode8, 16);\n if (charCode < 0xFFFF) {\n return String.fromCodePoint(charCode);\n }\n const substractedCharCode = charCode - 0x10000;\n return String.fromCodePoint(0xD800 + (substractedCharCode >> 10), 0xDC00 + (substractedCharCode & 0x3FF));\n },\n );\n // Test for invalid unicode surrogate pairs\n if (/[\\uD800-\\uDBFF](?:[^\\uDC00-\\uDFFF]|$)/u.test(sanitizedInput)) {\n throw new Error(`Invalid unicode codepoint of surrogate pair without corresponding codepoint`);\n }\n return sanitizedInput;\n}\n\nexport enum CommonIRIs {\n // XSD\n BOOLEAN = 'http://www.w3.org/2001/XMLSchema#boolean',\n INTEGER = 'http://www.w3.org/2001/XMLSchema#integer',\n DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal',\n DOUBLE = 'http://www.w3.org/2001/XMLSchema#double',\n STRING = 'http://www.w3.org/2001/XMLSchema#string',\n // RDF\n FIRST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first',\n REST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest',\n NIL = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil',\n TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type',\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CACrC,2CAA2C,EAC3C,CAAC,CAAC,EAAE,QAAgB,EAAE,QAAgB,EAAE,EAAE;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/C,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,mBAAmB,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC/C,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC;IAC5G,CAAC,CACF,CAAC;IACF,2CAA2C;IAC3C,IAAI,wCAAwC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAN,IAAY,UAYX;AAZD,WAAY,UAAU;IACpB,MAAM;IACN,kEAAoD,CAAA;IACpD,kEAAoD,CAAA;IACpD,kEAAoD,CAAA;IACpD,gEAAkD,CAAA;IAClD,gEAAkD,CAAA;IAClD,MAAM;IACN,wEAA0D,CAAA;IAC1D,sEAAwD,CAAA;IACxD,oEAAsD,CAAA;IACtD,sEAAwD,CAAA;AAC1D,CAAC,EAZW,UAAU,KAAV,UAAU,QAYrB;AAED,MAAM,OAAO,mBAAoB,SAAQ,kBAAiC;CAAG","sourcesContent":["import { TransformerSubType } from '@traqula/core';\nimport type { Sparql11Nodes } from './Sparql11types';\n\n/**\n * Transform input in accordance to [19.2](https://www.w3.org/TR/sparql11-query/#codepointEscape)\n * and validate unicode codepoints.\n */\nexport function sparqlCodepointEscape(input: string): string {\n const sanitizedInput = input.replaceAll(\n /\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{8})/gu,\n (_, unicode4: string, unicode8: string) => {\n if (unicode4) {\n const charCode = Number.parseInt(unicode4, 16);\n return String.fromCodePoint(charCode);\n }\n const charCode = Number.parseInt(unicode8, 16);\n if (charCode < 0xFFFF) {\n return String.fromCodePoint(charCode);\n }\n const substractedCharCode = charCode - 0x10000;\n return String.fromCodePoint(0xD800 + (substractedCharCode >> 10), 0xDC00 + (substractedCharCode & 0x3FF));\n },\n );\n // Test for invalid unicode surrogate pairs\n if (/[\\uD800-\\uDBFF](?:[^\\uDC00-\\uDFFF]|$)/u.test(sanitizedInput)) {\n throw new Error(`Invalid unicode codepoint of surrogate pair without corresponding codepoint`);\n }\n return sanitizedInput;\n}\n\nexport enum CommonIRIs {\n // XSD\n BOOLEAN = 'http://www.w3.org/2001/XMLSchema#boolean',\n INTEGER = 'http://www.w3.org/2001/XMLSchema#integer',\n DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal',\n DOUBLE = 'http://www.w3.org/2001/XMLSchema#double',\n STRING = 'http://www.w3.org/2001/XMLSchema#string',\n // RDF\n FIRST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first',\n REST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest',\n NIL = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil',\n TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type',\n}\n\nexport class TransformerSparql11 extends TransformerSubType<Sparql11Nodes> {}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Transformer } from '@traqula/core';
|
|
2
1
|
import { Factory } from '../factory';
|
|
2
|
+
import { TransformerSparql11 } from '../utils';
|
|
3
3
|
const F = new Factory();
|
|
4
|
-
const transformer = new
|
|
4
|
+
const transformer = new TransformerSparql11();
|
|
5
5
|
/**
|
|
6
6
|
* Get all 'aggregate' rules from an expression
|
|
7
7
|
*/
|
|
@@ -189,7 +189,9 @@ export function checkNote13(patterns) {
|
|
|
189
189
|
// Find variables used.
|
|
190
190
|
const variables = [];
|
|
191
191
|
// TODO: this is slow! 2.6% self execution
|
|
192
|
-
transformer.visitNodeSpecific(bgp,
|
|
192
|
+
transformer.visitNodeSpecific(bgp, {}, { term: { variable: (var_) => {
|
|
193
|
+
variables.push(var_);
|
|
194
|
+
} } });
|
|
193
195
|
if (variables.some(var_ => var_.value === pattern.variable.value)) {
|
|
194
196
|
throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);
|
|
195
197
|
}
|
|
@@ -221,12 +223,12 @@ export function updateNoReuseBlankNodeLabels(updateQuery) {
|
|
|
221
223
|
const operation = update.operation;
|
|
222
224
|
if (operation.subType === 'insertdata') {
|
|
223
225
|
const blankNodesHere = new Set();
|
|
224
|
-
transformer.visitNodeSpecific(operation,
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
226
|
+
transformer.visitNodeSpecific(operation, {}, { term: { blankNode: (blankNode) => {
|
|
227
|
+
blankNodesHere.add(blankNode.label);
|
|
228
|
+
if (blankLabelsUsedInInsertData.has(blankNode.label)) {
|
|
229
|
+
throw new Error('Detected reuse blank node across different INSERT DATA clauses');
|
|
230
|
+
}
|
|
231
|
+
} } });
|
|
230
232
|
for (const blankNode of blankNodesHere) {
|
|
231
233
|
blankLabelsUsedInInsertData.add(blankNode);
|
|
232
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { Transformer } from '@traqula/core';\nimport { Factory } from '../factory';\nimport type {\n Wildcard,\n Expression,\n ExpressionAggregate,\n Pattern,\n QuerySelect,\n TermVariable,\n SolutionModifierGroupBind,\n PatternBgp,\n Sparql11Nodes,\n Update,\n PatternBind,\n TripleCollection,\n Path,\n TripleNesting,\n Term,\n SparqlQuery,\n} from '../Sparql11types';\n\nconst F = new Factory();\nconst transformer = new Transformer<Sparql11Nodes>();\n\n/**\n * Get all 'aggregate' rules from an expression\n */\nfunction getAggregatesOfExpression(expression: Expression): ExpressionAggregate[] {\n if (F.isExpressionAggregate(expression)) {\n return [ expression ];\n }\n if (F.isExpressionOperator(expression)) {\n const aggregates: ExpressionAggregate[] = [];\n for (const arg of expression.args) {\n aggregates.push(...getAggregatesOfExpression(arg));\n }\n return aggregates;\n }\n return [];\n}\n\n/**\n * Return the variable value id of an expression if bounded\n */\nfunction getExpressionId(expression: SolutionModifierGroupBind | Expression | TermVariable): string | undefined {\n // Check if grouping\n if (F.isTerm(expression) && F.isTermVariable(expression)) {\n return expression.value;\n }\n if (F.isExpression(expression)) {\n if (F.isExpressionAggregate(expression) && F.isTermVariable(expression.expression[0])) {\n return expression.expression[0].value;\n }\n return undefined;\n }\n return expression.variable.value;\n}\n\n/**\n * Get all variables used in an expression\n */\nfunction getVariablesFromExpression(expression: Expression, variables: Set<string>): void {\n if (F.isExpressionOperator(expression)) {\n for (const expr of expression.args) {\n getVariablesFromExpression(expr, variables);\n }\n } else if (F.isTerm(expression) && F.isTermVariable(expression)) {\n variables.add(expression.value);\n }\n}\n\nexport function queryIsGood(query: Pick<QuerySelect, 'variables' | 'solutionModifiers' | 'where'>): void {\n // NoGroupByOnWildcardSelect\n if (query.variables.length === 1 && F.isWildcard(query.variables[0])) {\n if (query.solutionModifiers.group !== undefined) {\n throw new Error('GROUP BY not allowed with wildcard');\n }\n return;\n }\n\n // CannotProjectUngroupedVars - can be skipped if `SELECT *`\n // Check for projection of ungrouped variable\n // Check can be skipped in case of wildcard select.\n const variables = <Exclude<typeof query.variables, [Wildcard]>> query.variables;\n const hasCountAggregate = variables.flatMap(\n varVal => F.isTerm(varVal) ? [] : getAggregatesOfExpression(varVal.expression),\n ).some(agg => agg.aggregation === 'count' && !agg.expression.some(arg => F.isWildcard(arg)));\n const groupBy = query.solutionModifiers.group;\n if (hasCountAggregate || groupBy) {\n // We have to check whether\n // 1. Variables used in projection are usable given the group by clause\n // 2. A selectCount will create an implicit group by clause.\n for (const selectVar of variables) {\n if (F.isTerm(selectVar)) {\n if (!groupBy || !groupBy.groupings.map(groupvar => getExpressionId(groupvar))\n .includes((getExpressionId(selectVar)))) {\n throw new Error('Variable not allowed in projection');\n }\n } else if (getAggregatesOfExpression(selectVar.expression).length === 0) {\n // Current value binding does not use aggregates\n const usedvars = new Set<string>();\n getVariablesFromExpression(selectVar.expression, usedvars);\n for (const usedvar of usedvars) {\n if (!groupBy || !groupBy.groupings.map(groupVar => getExpressionId(groupVar))\n .includes(usedvar)) {\n throw new Error(`Use of ungrouped variable in projection of operation (?${usedvar})`);\n }\n }\n }\n }\n }\n\n // NOTE 12: Check if id of each AS-selected column is not yet bound by subquery\n const subqueries = query.where.patterns.filter(pattern => pattern.type === 'query');\n if (subqueries.length > 0) {\n const selectBoundedVars = new Set<string>();\n for (const variable of variables) {\n if ('variable' in variable) {\n selectBoundedVars.add(variable.variable.value);\n }\n }\n\n // Look at in scope variables\n const vars = subqueries.flatMap<TermVariable | PatternBind | Wildcard>(sub => sub.variables)\n .map(v => F.isTerm(v) ? v.value : (F.isWildcard(v) ? '*' : v.variable.value));\n const subqueryIds = new Set(vars);\n for (const selectedVarId of selectBoundedVars) {\n if (subqueryIds.has(selectedVarId)) {\n throw new Error(`Target id of 'AS' (?${selectedVarId}) already used in subquery`);\n }\n }\n }\n}\n\nexport function findPatternBoundedVars(\n iter: SparqlQuery | Pattern | TripleNesting | TripleCollection | Path | Term | Wildcard,\n boundedVars: Set<string>,\n): void {\n if (F.isQuery(iter) || F.isUpdate(iter)) {\n if (F.isQuerySelect(iter) || F.isQueryDescribe(iter)) {\n if (iter.where && iter.variables.some(x => F.isWildcard(x))) {\n findPatternBoundedVars(iter.where, boundedVars);\n } else {\n for (const v of iter.variables) {\n findPatternBoundedVars(v, boundedVars);\n }\n }\n if (iter.solutionModifiers.group) {\n const grouping = iter.solutionModifiers.group;\n for (const g of grouping.groupings) {\n if ('variable' in g) {\n findPatternBoundedVars(g.variable, boundedVars);\n }\n }\n }\n if (iter.values?.values && iter.values.values.length > 0) {\n const values = iter.values.values;\n for (const v of Object.keys(values[0])) {\n boundedVars.add(v);\n }\n }\n }\n } else if (F.isTerm(iter)) {\n if (F.isTermVariable(iter)) {\n boundedVars.add(iter.value);\n }\n } else if (F.isTriple(iter)) {\n findPatternBoundedVars(iter.subject, boundedVars);\n findPatternBoundedVars(iter.predicate, boundedVars);\n findPatternBoundedVars(iter.object, boundedVars);\n } else if (F.isPath(iter)) {\n if (!F.isTerm(iter)) {\n for (const item of iter.items) {\n findPatternBoundedVars(item, boundedVars);\n }\n }\n } else if (F.isTripleCollection(iter) || F.isPatternBgp(iter)) {\n for (const triple of iter.triples) {\n findPatternBoundedVars(triple, boundedVars);\n }\n } else if (\n F.isPatternGroup(iter) || F.isPatternUnion(iter) || F.isPatternOptional(iter) || F.isPatternService(iter)) {\n for (const pattern of iter.patterns) {\n findPatternBoundedVars(pattern, boundedVars);\n }\n if (F.isPatternService(iter)) {\n findPatternBoundedVars(iter.name, boundedVars);\n }\n } else if (F.isPatternBind(iter)) {\n findPatternBoundedVars(iter.variable, boundedVars);\n } else if (F.isPatternValues(iter)) {\n for (const variable of Object.keys(iter.values.at(0) ?? {})) {\n boundedVars.add(variable);\n }\n } else if (F.isPatternGraph(iter)) {\n findPatternBoundedVars(iter.name, boundedVars);\n for (const pattern of iter.patterns) {\n findPatternBoundedVars(pattern, boundedVars);\n }\n }\n}\n\n/**\n * NOTE 13 and https://www.w3.org/TR/sparql11-query/#variableScope\n * > In BIND (expr AS v) requires that the variable v is not in-scope from the preceeding elements in the\n * group graph pattern in which it is used.\n */\nexport function checkNote13(patterns: Pattern[]): void {\n for (const [ index, pattern ] of patterns.entries()) {\n if (F.isPatternBind(pattern) && index > 0 && F.isPatternBgp(patterns[index - 1])) {\n const bgp = <PatternBgp> patterns[index - 1];\n // Find variables used.\n const variables: TermVariable[] = [];\n // TODO: this is slow! 2.6% self execution\n transformer.visitNodeSpecific(bgp, 'term', 'variable', var_ => variables.push(var_));\n if (variables.some(var_ => var_.value === pattern.variable.value)) {\n throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);\n }\n }\n }\n\n const boundedVars = new Set<string>();\n for (const pattern of patterns) {\n // Element can be bind, in that case, check note 13. If it is not, buildup set of bounded variables.\n if (F.isPatternBind(pattern)) {\n if (boundedVars.has(pattern.variable.value)) {\n throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);\n }\n } else {\n findPatternBoundedVars(pattern, boundedVars);\n }\n }\n}\n\n/**\n * https://www.w3.org/TR/sparql11-query/#grammarBNodes\n * > two INSERT DATA operations within a single SPARQL Update request\n */\nexport function updateNoReuseBlankNodeLabels(updateQuery: Update): void {\n const blankLabelsUsedInInsertData = new Set<string>();\n for (const update of updateQuery.updates) {\n if (!update.operation) {\n continue;\n }\n const operation = update.operation;\n if (operation.subType === 'insertdata') {\n const blankNodesHere = new Set<string>();\n transformer.visitNodeSpecific(operation, 'term', 'blankNode', (blankNode) => {\n blankNodesHere.add(blankNode.label);\n if (blankLabelsUsedInInsertData.has(blankNode.label)) {\n throw new Error('Detected reuse blank node across different INSERT DATA clauses');\n }\n });\n for (const blankNode of blankNodesHere) {\n blankLabelsUsedInInsertData.add(blankNode);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { Factory } from '../factory';\nimport type {\n Wildcard,\n Expression,\n ExpressionAggregate,\n Pattern,\n QuerySelect,\n TermVariable,\n SolutionModifierGroupBind,\n PatternBgp,\n Update,\n PatternBind,\n TripleCollection,\n Path,\n TripleNesting,\n Term,\n SparqlQuery,\n} from '../Sparql11types';\nimport { TransformerSparql11 } from '../utils';\n\nconst F = new Factory();\nconst transformer = new TransformerSparql11();\n\n/**\n * Get all 'aggregate' rules from an expression\n */\nfunction getAggregatesOfExpression(expression: Expression): ExpressionAggregate[] {\n if (F.isExpressionAggregate(expression)) {\n return [ expression ];\n }\n if (F.isExpressionOperator(expression)) {\n const aggregates: ExpressionAggregate[] = [];\n for (const arg of expression.args) {\n aggregates.push(...getAggregatesOfExpression(arg));\n }\n return aggregates;\n }\n return [];\n}\n\n/**\n * Return the variable value id of an expression if bounded\n */\nfunction getExpressionId(expression: SolutionModifierGroupBind | Expression | TermVariable): string | undefined {\n // Check if grouping\n if (F.isTerm(expression) && F.isTermVariable(expression)) {\n return expression.value;\n }\n if (F.isExpression(expression)) {\n if (F.isExpressionAggregate(expression) && F.isTermVariable(expression.expression[0])) {\n return expression.expression[0].value;\n }\n return undefined;\n }\n return expression.variable.value;\n}\n\n/**\n * Get all variables used in an expression\n */\nfunction getVariablesFromExpression(expression: Expression, variables: Set<string>): void {\n if (F.isExpressionOperator(expression)) {\n for (const expr of expression.args) {\n getVariablesFromExpression(expr, variables);\n }\n } else if (F.isTerm(expression) && F.isTermVariable(expression)) {\n variables.add(expression.value);\n }\n}\n\nexport function queryIsGood(query: Pick<QuerySelect, 'variables' | 'solutionModifiers' | 'where'>): void {\n // NoGroupByOnWildcardSelect\n if (query.variables.length === 1 && F.isWildcard(query.variables[0])) {\n if (query.solutionModifiers.group !== undefined) {\n throw new Error('GROUP BY not allowed with wildcard');\n }\n return;\n }\n\n // CannotProjectUngroupedVars - can be skipped if `SELECT *`\n // Check for projection of ungrouped variable\n // Check can be skipped in case of wildcard select.\n const variables = <Exclude<typeof query.variables, [Wildcard]>> query.variables;\n const hasCountAggregate = variables.flatMap(\n varVal => F.isTerm(varVal) ? [] : getAggregatesOfExpression(varVal.expression),\n ).some(agg => agg.aggregation === 'count' && !agg.expression.some(arg => F.isWildcard(arg)));\n const groupBy = query.solutionModifiers.group;\n if (hasCountAggregate || groupBy) {\n // We have to check whether\n // 1. Variables used in projection are usable given the group by clause\n // 2. A selectCount will create an implicit group by clause.\n for (const selectVar of variables) {\n if (F.isTerm(selectVar)) {\n if (!groupBy || !groupBy.groupings.map(groupvar => getExpressionId(groupvar))\n .includes((getExpressionId(selectVar)))) {\n throw new Error('Variable not allowed in projection');\n }\n } else if (getAggregatesOfExpression(selectVar.expression).length === 0) {\n // Current value binding does not use aggregates\n const usedvars = new Set<string>();\n getVariablesFromExpression(selectVar.expression, usedvars);\n for (const usedvar of usedvars) {\n if (!groupBy || !groupBy.groupings.map(groupVar => getExpressionId(groupVar))\n .includes(usedvar)) {\n throw new Error(`Use of ungrouped variable in projection of operation (?${usedvar})`);\n }\n }\n }\n }\n }\n\n // NOTE 12: Check if id of each AS-selected column is not yet bound by subquery\n const subqueries = query.where.patterns.filter(pattern => pattern.type === 'query');\n if (subqueries.length > 0) {\n const selectBoundedVars = new Set<string>();\n for (const variable of variables) {\n if ('variable' in variable) {\n selectBoundedVars.add(variable.variable.value);\n }\n }\n\n // Look at in scope variables\n const vars = subqueries.flatMap<TermVariable | PatternBind | Wildcard>(sub => sub.variables)\n .map(v => F.isTerm(v) ? v.value : (F.isWildcard(v) ? '*' : v.variable.value));\n const subqueryIds = new Set(vars);\n for (const selectedVarId of selectBoundedVars) {\n if (subqueryIds.has(selectedVarId)) {\n throw new Error(`Target id of 'AS' (?${selectedVarId}) already used in subquery`);\n }\n }\n }\n}\n\nexport function findPatternBoundedVars(\n iter: SparqlQuery | Pattern | TripleNesting | TripleCollection | Path | Term | Wildcard,\n boundedVars: Set<string>,\n): void {\n if (F.isQuery(iter) || F.isUpdate(iter)) {\n if (F.isQuerySelect(iter) || F.isQueryDescribe(iter)) {\n if (iter.where && iter.variables.some(x => F.isWildcard(x))) {\n findPatternBoundedVars(iter.where, boundedVars);\n } else {\n for (const v of iter.variables) {\n findPatternBoundedVars(v, boundedVars);\n }\n }\n if (iter.solutionModifiers.group) {\n const grouping = iter.solutionModifiers.group;\n for (const g of grouping.groupings) {\n if ('variable' in g) {\n findPatternBoundedVars(g.variable, boundedVars);\n }\n }\n }\n if (iter.values?.values && iter.values.values.length > 0) {\n const values = iter.values.values;\n for (const v of Object.keys(values[0])) {\n boundedVars.add(v);\n }\n }\n }\n } else if (F.isTerm(iter)) {\n if (F.isTermVariable(iter)) {\n boundedVars.add(iter.value);\n }\n } else if (F.isTriple(iter)) {\n findPatternBoundedVars(iter.subject, boundedVars);\n findPatternBoundedVars(iter.predicate, boundedVars);\n findPatternBoundedVars(iter.object, boundedVars);\n } else if (F.isPath(iter)) {\n if (!F.isTerm(iter)) {\n for (const item of iter.items) {\n findPatternBoundedVars(item, boundedVars);\n }\n }\n } else if (F.isTripleCollection(iter) || F.isPatternBgp(iter)) {\n for (const triple of iter.triples) {\n findPatternBoundedVars(triple, boundedVars);\n }\n } else if (\n F.isPatternGroup(iter) || F.isPatternUnion(iter) || F.isPatternOptional(iter) || F.isPatternService(iter)) {\n for (const pattern of iter.patterns) {\n findPatternBoundedVars(pattern, boundedVars);\n }\n if (F.isPatternService(iter)) {\n findPatternBoundedVars(iter.name, boundedVars);\n }\n } else if (F.isPatternBind(iter)) {\n findPatternBoundedVars(iter.variable, boundedVars);\n } else if (F.isPatternValues(iter)) {\n for (const variable of Object.keys(iter.values.at(0) ?? {})) {\n boundedVars.add(variable);\n }\n } else if (F.isPatternGraph(iter)) {\n findPatternBoundedVars(iter.name, boundedVars);\n for (const pattern of iter.patterns) {\n findPatternBoundedVars(pattern, boundedVars);\n }\n }\n}\n\n/**\n * NOTE 13 and https://www.w3.org/TR/sparql11-query/#variableScope\n * > In BIND (expr AS v) requires that the variable v is not in-scope from the preceeding elements in the\n * group graph pattern in which it is used.\n */\nexport function checkNote13(patterns: Pattern[]): void {\n for (const [ index, pattern ] of patterns.entries()) {\n if (F.isPatternBind(pattern) && index > 0 && F.isPatternBgp(patterns[index - 1])) {\n const bgp = <PatternBgp> patterns[index - 1];\n // Find variables used.\n const variables: TermVariable[] = [];\n // TODO: this is slow! 2.6% self execution\n transformer.visitNodeSpecific(bgp, {}, { term: { variable: (var_) => {\n variables.push(var_);\n } }});\n if (variables.some(var_ => var_.value === pattern.variable.value)) {\n throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);\n }\n }\n }\n\n const boundedVars = new Set<string>();\n for (const pattern of patterns) {\n // Element can be bind, in that case, check note 13. If it is not, buildup set of bounded variables.\n if (F.isPatternBind(pattern)) {\n if (boundedVars.has(pattern.variable.value)) {\n throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);\n }\n } else {\n findPatternBoundedVars(pattern, boundedVars);\n }\n }\n}\n\n/**\n * https://www.w3.org/TR/sparql11-query/#grammarBNodes\n * > two INSERT DATA operations within a single SPARQL Update request\n */\nexport function updateNoReuseBlankNodeLabels(updateQuery: Update): void {\n const blankLabelsUsedInInsertData = new Set<string>();\n for (const update of updateQuery.updates) {\n if (!update.operation) {\n continue;\n }\n const operation = update.operation;\n if (operation.subType === 'insertdata') {\n const blankNodesHere = new Set<string>();\n transformer.visitNodeSpecific(operation, {}, { term: { blankNode: (blankNode) => {\n blankNodesHere.add(blankNode.label);\n if (blankLabelsUsedInInsertData.has(blankNode.label)) {\n throw new Error('Detected reuse blank node across different INSERT DATA clauses');\n }\n } }});\n for (const blankNode of blankNodesHere) {\n blankLabelsUsedInInsertData.add(blankNode);\n }\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@traqula/rules-sparql-1-1",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.13",
|
|
5
5
|
"description": "TRAQULA Lexer and Grammar Rules for sparql 1.1",
|
|
6
6
|
"lsd:module": true,
|
|
7
7
|
"license": "MIT",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"build:transpile": " node \"../../node_modules/esbuild/bin/esbuild\" --format=cjs --bundle --log-level=error --outfile=lib/index.cjs lib/index.ts"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@traqula/core": "^0.0.
|
|
44
|
+
"@traqula/core": "^0.0.13",
|
|
45
45
|
"chevrotain": "^11.0.3"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@chevrotain/types": "^11.0.3"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "324ed65dcfacb6cfa31007e0d5ee43f2599b7284"
|
|
51
51
|
}
|