@traqula/rules-sparql-1-1 1.1.1 → 1.1.3
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/dist/cjs/lib/index.js +3 -1
- package/dist/cjs/lib/index.js.map +1 -1
- package/dist/cjs/lib/lexer/lexerPatterns.js +4 -3
- package/dist/cjs/lib/lexer/lexerPatterns.js.map +1 -1
- package/dist/cjs/lib/validation/validators.js +3 -0
- package/dist/cjs/lib/validation/validators.js.map +1 -1
- package/dist/esm/lib/index.d.ts +1 -0
- package/dist/esm/lib/index.js +2 -0
- package/dist/esm/lib/index.js.map +1 -1
- package/dist/esm/lib/lexer/lexerPatterns.js +4 -3
- package/dist/esm/lib/lexer/lexerPatterns.js.map +1 -1
- package/dist/esm/lib/validation/validators.d.ts +13 -1
- package/dist/esm/lib/validation/validators.js +3 -3
- package/dist/esm/lib/validation/validators.js.map +1 -1
- package/package.json +3 -3
package/dist/cjs/lib/index.js
CHANGED
|
@@ -36,7 +36,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.lex = exports.gram = void 0;
|
|
39
|
+
exports.validation = exports.lex = exports.gram = void 0;
|
|
40
40
|
exports.gram = __importStar(require("./grammar/index.js"));
|
|
41
41
|
exports.lex = __importStar(require("./lexer/index.js"));
|
|
42
42
|
__exportStar(require("./expressionHelpers.js"), exports);
|
|
@@ -44,6 +44,8 @@ __exportStar(require("./Sparql11types.js"), exports);
|
|
|
44
44
|
__exportStar(require("./MinimalSparqlParser.js"), exports);
|
|
45
45
|
__exportStar(require("./sparql11HelperTypes.js"), exports);
|
|
46
46
|
__exportStar(require("./astFactory.js"), exports);
|
|
47
|
+
// TODO: deprecate this export
|
|
47
48
|
__exportStar(require("./validation/validators.js"), exports);
|
|
49
|
+
exports.validation = __importStar(require("./validation/validators.js"));
|
|
48
50
|
__exportStar(require("./utils.js"), exports);
|
|
49
51
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA2C;AAC3C,wDAAwC;AACxC,yDAAuC;AACvC,qDAAmC;AACnC,2DAAyC;AACzC,2DAAyC;AACzC,kDAAgC;AAChC,6DAA2C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA2C;AAC3C,wDAAwC;AACxC,yDAAuC;AACvC,qDAAmC;AACnC,2DAAyC;AACzC,2DAAyC;AACzC,kDAAgC;AAChC,8BAA8B;AAC9B,6DAA2C;AAE3C,yEAAyD;AACzD,6CAA2B","sourcesContent":["export * as gram from './grammar/index.js';\nexport * as lex from './lexer/index.js';\nexport * from './expressionHelpers.js';\nexport * from './Sparql11types.js';\nexport * from './MinimalSparqlParser.js';\nexport * from './sparql11HelperTypes.js';\nexport * from './astFactory.js';\n// TODO: deprecate this export\nexport * from './validation/validators.js';\n\nexport * as validation from './validation/validators.js';\nexport * from './utils.js';\n"]}
|
|
@@ -28,7 +28,7 @@ exports.doublePositivePattern = new RegExp(`\\+${exports.doublePattern.source}`)
|
|
|
28
28
|
exports.integerNegativePattern = new RegExp(`-${exports.integerPattern.source}`);
|
|
29
29
|
exports.decimalNegativePattern = new RegExp(`-${exports.decimalPattern.source}`);
|
|
30
30
|
exports.doubleNegativePattern = new RegExp(`-${exports.doublePattern.source}`);
|
|
31
|
-
exports.echarPattern = /\\[
|
|
31
|
+
exports.echarPattern = /\\["'\\bfnrt]/;
|
|
32
32
|
exports.stringLiteral1Pattern = new RegExp(`'(([^\\u0027\\u005C\\u000A\u000D])|(${exports.echarPattern.source}))*'`);
|
|
33
33
|
exports.stringLiteral2Pattern = new RegExp(`"(([^\\u0022\\u005C\\u000A\\u000D])|(${exports.echarPattern.source}))*"`);
|
|
34
34
|
exports.stringLiteralLong1Pattern = new RegExp(`'''(('|(''))?([^'\\\\]|(${exports.echarPattern.source})))*'''`);
|
|
@@ -36,6 +36,7 @@ exports.stringLiteralLong2Pattern = new RegExp(`"""(("|(""))?([^"\\\\]|(${export
|
|
|
36
36
|
exports.wsPattern = /[\u0009\u000A\u000D ]/;
|
|
37
37
|
exports.nilPattern = new RegExp(`\\((${exports.wsPattern.source})*\\)`);
|
|
38
38
|
exports.anonPattern = new RegExp(`\\[(${exports.wsPattern.source})*\\]`);
|
|
39
|
-
exports.commentPattern = /#[^\n]
|
|
40
|
-
|
|
39
|
+
exports.commentPattern = /#[^\n]*/;
|
|
40
|
+
// Need to ensure the blank closes
|
|
41
|
+
exports.atLeastOneBlankPattern = new RegExp(`((${exports.wsPattern.source}+)|(${exports.commentPattern.source}\n))+`);
|
|
41
42
|
//# sourceMappingURL=lexerPatterns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexerPatterns.js","sourceRoot":"","sources":["../../../../lib/lexer/lexerPatterns.ts"],"names":[],"mappings":";AAAA,kGAAkG;;;AAErF,QAAA,kBAAkB,GAAG,uLAAuL,CAAC;AAC7M,QAAA,eAAe,GAAG,IAAI,MAAM,CAAC,GAAG,0BAAkB,CAAC,MAAM,IAAI,CAAC,CAAC;AAC/D,QAAA,cAAc,GAAG,IAAI,MAAM,CAAC,KAAK,uBAAe,CAAC,MAAM,aAAa,uBAAe,CAAC,MAAM,8CAA8C,CAAC,CAAC;AAC1I,QAAA,aAAa,GAAG,iCAAiC,CAAC;AAClD,QAAA,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,uBAAe,CAAC,MAAM,4CAA4C,CAAC,CAAC;AACpG,QAAA,eAAe,GAAG,IAAI,MAAM,CAAC,IAAI,0BAAkB,CAAC,MAAM,OAAO,sBAAc,CAAC,MAAM,WAAW,sBAAc,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7H,QAAA,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,uBAAe,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7D,QAAA,cAAc,GAAG,gBAAgB,CAAC;AAClC,QAAA,iBAAiB,GAAG,4BAA4B,CAAC;AACjD,QAAA,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,sBAAc,CAAC,MAAM,MAAM,yBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,QAAA,cAAc,GAAG,IAAI,MAAM,CAAC,KAAK,uBAAe,CAAC,MAAM,cAAc,kBAAU,CAAC,MAAM,QAAQ,sBAAc,CAAC,MAAM,YAAY,kBAAU,CAAC,MAAM,QAAQ,sBAAc,CAAC,MAAM,QAAQ,kBAAU,CAAC,MAAM,MAAM,CAAC,CAAC;AAC9M,QAAA,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,sBAAc,CAAC,MAAM,KAAK,sBAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,QAAA,qBAAqB,GAAG,IAAI,MAAM,CAAC,OAAO,uBAAe,CAAC,MAAM,cAAc,sBAAc,CAAC,MAAM,WAAW,sBAAc,CAAC,MAAM,KAAK,CAAC,CAAC;AAC1I,QAAA,WAAW,GAAG,IAAI,MAAM,CAAC,OAAO,sBAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,QAAA,WAAW,GAAG,IAAI,MAAM,CAAC,OAAO,sBAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1D,QAAA,cAAc,GAAG,2BAA2B,CAAC;AAC7C,QAAA,cAAc,GAAG,KAAK,CAAC;AACvB,QAAA,cAAc,GAAG,UAAU,CAAC;AAC5B,QAAA,eAAe,GAAG,cAAc,CAAC;AACjC,QAAA,aAAa,GAAG,IAAI,MAAM,CAAC,oBAAoB,uBAAe,CAAC,MAAM,iBAAiB,uBAAe,CAAC,MAAM,cAAc,uBAAe,CAAC,MAAM,IAAI,CAAC,CAAC;AACtJ,QAAA,sBAAsB,GAAG,IAAI,MAAM,CAAC,MAAM,sBAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,QAAA,sBAAsB,GAAG,IAAI,MAAM,CAAC,MAAM,sBAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACnE,QAAA,qBAAqB,GAAG,IAAI,MAAM,CAAC,MAAM,qBAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AACjE,QAAA,sBAAsB,GAAG,IAAI,MAAM,CAAC,IAAI,sBAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACjE,QAAA,sBAAsB,GAAG,IAAI,MAAM,CAAC,IAAI,sBAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACjE,QAAA,qBAAqB,GAAG,IAAI,MAAM,CAAC,IAAI,qBAAa,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/D,QAAA,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"lexerPatterns.js","sourceRoot":"","sources":["../../../../lib/lexer/lexerPatterns.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable require-unicode-regexp,no-misleading-character-class,max-len,no-control-regex */\n\nexport const pnCharsBasePattern = /[A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF]/;\nexport const pnCharsUPattern = new RegExp(`${pnCharsBasePattern.source}|_`);\nexport const varNamePattern = new RegExp(`((${pnCharsUPattern.source})|[0-9])((${pnCharsUPattern.source})|[0-9]|[\\u00B7\\u0300-\\u036F\\u203F-\\u2040])*`);\nexport const iriRefPattern = /<([^\\u0000-\\u0020\"<>\\\\^`{|}])*>/;\nexport const pnCharsPattern = new RegExp(`(${pnCharsUPattern.source})|[\\\\-0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]`);\nexport const pnPrefixPattern = new RegExp(`(${pnCharsBasePattern.source})(((${pnCharsPattern.source})|\\\\.)*(${pnCharsPattern.source}))?`);\nexport const pNameNsPattern = new RegExp(`(${pnPrefixPattern.source})?:`);\nexport const percentPattern = /%[\\dA-Fa-f]{2}/;\nexport const pnLocalEscPattern = /\\\\[!#$%&'()*+,./;=?@\\\\_~-]/;\nexport const plxPattern = new RegExp(`(${percentPattern.source})|(${pnLocalEscPattern.source})`);\nexport const pnLocalPattern = new RegExp(`((${pnCharsUPattern.source})|:|[0-9]|(${plxPattern.source}))(((${pnCharsPattern.source})|\\\\.|:|(${plxPattern.source}))*((${pnCharsPattern.source})|:|(${plxPattern.source})))?`);\nexport const pNameLnPattern = new RegExp(`(${pNameNsPattern.source})(${pnLocalPattern.source})`);\nexport const blankNodeLabelPattern = new RegExp(`_:((${pnCharsUPattern.source})|[0-9])(((${pnCharsPattern.source})|\\\\.)*(${pnCharsPattern.source}))?`);\nexport const var1Pattern = new RegExp(`\\\\?(${varNamePattern.source})`);\nexport const var2Pattern = new RegExp(`\\\\$(${varNamePattern.source})`);\nexport const langTagPattern = /@[A-Za-z]+(-[\\dA-Za-z]+)*/;\nexport const integerPattern = /\\d+/;\nexport const decimalPattern = /\\d+\\.\\d+/;\nexport const exponentPattern = /[Ee][+-]?\\d+/;\nexport const doublePattern = new RegExp(`([0-9]+\\\\.[0-9]*(${exponentPattern.source}))|(\\\\.[0-9]+(${exponentPattern.source}))|([0-9]+(${exponentPattern.source}))`);\nexport const integerPositivePattern = new RegExp(`\\\\+${integerPattern.source}`);\nexport const decimalPositivePattern = new RegExp(`\\\\+${decimalPattern.source}`);\nexport const doublePositivePattern = new RegExp(`\\\\+${doublePattern.source}`);\nexport const integerNegativePattern = new RegExp(`-${integerPattern.source}`);\nexport const decimalNegativePattern = new RegExp(`-${decimalPattern.source}`);\nexport const doubleNegativePattern = new RegExp(`-${doublePattern.source}`);\nexport const echarPattern = /\\\\[\"'\\\\bfnrt]/;\nexport const stringLiteral1Pattern = new RegExp(`'(([^\\\\u0027\\\\u005C\\\\u000A\\u000D])|(${echarPattern.source}))*'`);\nexport const stringLiteral2Pattern = new RegExp(`\"(([^\\\\u0022\\\\u005C\\\\u000A\\\\u000D])|(${echarPattern.source}))*\"`);\nexport const stringLiteralLong1Pattern = new RegExp(`'''(('|(''))?([^'\\\\\\\\]|(${echarPattern.source})))*'''`);\nexport const stringLiteralLong2Pattern = new RegExp(`\"\"\"((\"|(\"\"))?([^\"\\\\\\\\]|(${echarPattern.source})))*\"\"\"`);\nexport const wsPattern = /[\\u0009\\u000A\\u000D ]/;\nexport const nilPattern = new RegExp(`\\\\((${wsPattern.source})*\\\\)`);\nexport const anonPattern = new RegExp(`\\\\[(${wsPattern.source})*\\\\]`);\nexport const commentPattern = /#[^\\n]*/;\n// Need to ensure the blank closes\nexport const atLeastOneBlankPattern = new RegExp(`((${wsPattern.source}+)|(${commentPattern.source}\\n))+`);\n"]}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAggregatesOfExpression = getAggregatesOfExpression;
|
|
4
|
+
exports.getExpressionId = getExpressionId;
|
|
5
|
+
exports.getVariablesFromExpression = getVariablesFromExpression;
|
|
3
6
|
exports.queryProjectionIsGood = queryProjectionIsGood;
|
|
4
7
|
exports.findPatternBoundedVars = findPatternBoundedVars;
|
|
5
8
|
exports.checkNote13 = checkNote13;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../lib/validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { AstFactory } from '../astFactory.js';\nimport type {\n Wildcard,\n Expression,\n ExpressionAggregate,\n Pattern,\n QuerySelect,\n TermVariable,\n SolutionModifierGroupBind,\n Update,\n PatternBind,\n Sparql11Nodes,\n} from '../Sparql11types.js';\nimport { AstTransformer } from '../utils.js';\n\nconst F = new AstFactory();\nconst transformer = new AstTransformer();\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\n/**\n * Verify that the projected variables (select head) are allowed:\n * - no group-by on select *\n * - if group-by, selected variables need to be collected by the group-by\n * - 'select ?var as ?other', ?other cannot be in scope\n */\nexport function queryProjectionIsGood(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 op: Sparql11Nodes | undefined | (Sparql11Nodes | undefined)[],\n boundedVars: Set<string>,\n): void {\n function recurse(x: Parameters<(typeof findPatternBoundedVars)>[0]): void {\n findPatternBoundedVars(x, boundedVars);\n }\n if (op === undefined) {\n return;\n }\n if (Array.isArray(op)) {\n for (const iter of op) {\n recurse(iter);\n }\n } else if (F.isQuery(op)) {\n if (F.isQuerySelect(op) || F.isQueryDescribe(op)) {\n recurse([\n ...(op.variables.some(x => F.isWildcard(x)) ? [ op.where ] : op.variables),\n op.solutionModifiers.group,\n op.values,\n ]);\n } else {\n recurse(op.solutionModifiers.group);\n }\n } else if (F.isTriple(op)) {\n recurse([ op.subject, op.predicate, op.object ]);\n } else if (F.isPathPure(op)) {\n recurse(op.items);\n } else if (F.isTripleCollection(op)) {\n recurse([ op.identifier, ...op.triples ]);\n } else if (F.isSolutionModifierGroup(op)) {\n recurse(op.groupings.filter(g => 'variable' in g).map(x => x.variable));\n } else if (F.isSolutionModifierHaving(op)) {\n recurse(op.having);\n } else if (F.isSolutionModifierOrder(op)) {\n recurse(op.orderDefs.map(x => x.expression));\n } else if (F.isPatternValues(op)) {\n for (const v of Object.keys(op.values.at(0) ?? {})) {\n boundedVars.add(v);\n }\n } else if (F.isPatternBgp(op)) {\n recurse(op.triples);\n } else if (F.isPatternGroup(op) || F.isPatternUnion(op) || F.isPatternOptional(op)) {\n recurse(op.patterns);\n } else if (F.isPatternService(op) || F.isPatternGraph(op)) {\n recurse([ op.name, ...op.patterns ]);\n } else if (F.isPatternBind(op)) {\n recurse(op.variable);\n } else if (F.isTermVariable(op)) {\n boundedVars.add(op.value);\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 = 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: { visitor: (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: { visitor: (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":["../../../../lib/validation/validators.ts"],"names":[],"mappings":";;AAqBA,8DAYC;AAKD,0CAYC;AAKD,gEAQC;AAQD,sDA6DC;AAED,wDAmDC;AAOD,kCA2BC;AAMD,oEAoBC;AArPD,oDAA8C;AAa9C,0CAA6C;AAE7C,MAAM,CAAC,GAAG,IAAI,0BAAU,EAAE,CAAC;AAC3B,MAAM,WAAW,GAAG,IAAI,yBAAc,EAAE,CAAC;AAEzC;;GAEG;AACH,SAAgB,yBAAyB,CAAC,UAAsB;IAC9D,IAAI,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,CAAE,UAAU,CAAE,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,MAAM,UAAU,GAA0B,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,UAAiE;IAC/F,oBAAoB;IACpB,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CAAC,UAAsB,EAAE,SAAsB;IACvF,IAAI,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACnC,0BAA0B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,KAAqE;IACzG,4BAA4B;IAC5B,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;IACT,CAAC;IAED,4DAA4D;IAC5D,6CAA6C;IAC7C,mDAAmD;IACnD,MAAM,SAAS,GAAiD,KAAK,CAAC,SAAS,CAAC;IAChF,MAAM,iBAAiB,GAAG,SAAS,CAAC,OAAO,CACzC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,CAAC,CAC/E,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC9C,IAAI,iBAAiB,IAAI,OAAO,EAAE,CAAC;QACjC,2BAA2B;QAC3B,wEAAwE;QACxE,6DAA6D;QAC7D,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;qBAC1E,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;iBAAM,IAAI,yBAAyB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxE,gDAAgD;gBAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;gBACnC,0BAA0B,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;yBAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,0DAA0D,OAAO,GAAG,CAAC,CAAC;oBACxF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACpF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;gBAC3B,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAwC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC;aACzF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAChF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,4BAA4B,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB,CACpC,EAA6D,EAC7D,WAAwB;IAExB,SAAS,OAAO,CAAC,CAAiD;QAChE,sBAAsB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC;gBACN,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC1E,EAAE,CAAC,iBAAiB,CAAC,KAAK;gBAC1B,EAAE,CAAC,MAAM;aACV,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAE,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;SAAM,IAAI,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,CAAE,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAE,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,CAAC,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,CAAC,CAAC,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,CAAC,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACnD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;QACnF,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,CAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAE,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAChC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,QAAmB;IAC7C,KAAK,MAAM,CAAE,KAAK,EAAE,OAAO,CAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAChC,uBAAuB;YACvB,MAAM,SAAS,GAAmB,EAAE,CAAC;YACrC,0CAA0C;YAC1C,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;4BAC7E,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvB,CAAC,EAAE,EAAC,EAAC,CAAC,CAAC;YACP,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,oGAAoG;QACpG,IAAI,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,4BAA4B,CAAC,WAAmB;IAC9D,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAU,CAAC;IACtD,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,SAAS,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;YACzC,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE;4BACzF,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BACpC,IAAI,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gCACrD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;4BACpF,CAAC;wBACH,CAAC,EAAE,EAAC,EAAC,CAAC,CAAC;YACP,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;gBACvC,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { AstFactory } from '../astFactory.js';\nimport type {\n Wildcard,\n Expression,\n ExpressionAggregate,\n Pattern,\n QuerySelect,\n TermVariable,\n SolutionModifierGroupBind,\n Update,\n PatternBind,\n Sparql11Nodes,\n} from '../Sparql11types.js';\nimport { AstTransformer } from '../utils.js';\n\nconst F = new AstFactory();\nconst transformer = new AstTransformer();\n\n/**\n * Get all 'aggregate' rules from an expression\n */\nexport function 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 */\nexport function 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 */\nexport function 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\n/**\n * Verify that the projected variables (select head) are allowed:\n * - no group-by on select *\n * - if group-by, selected variables need to be collected by the group-by\n * - 'select ?var as ?other', ?other cannot be in scope\n */\nexport function queryProjectionIsGood(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 op: Sparql11Nodes | undefined | (Sparql11Nodes | undefined)[],\n boundedVars: Set<string>,\n): void {\n function recurse(x: Parameters<(typeof findPatternBoundedVars)>[0]): void {\n findPatternBoundedVars(x, boundedVars);\n }\n if (op === undefined) {\n return;\n }\n if (Array.isArray(op)) {\n for (const iter of op) {\n recurse(iter);\n }\n } else if (F.isQuery(op)) {\n if (F.isQuerySelect(op) || F.isQueryDescribe(op)) {\n recurse([\n ...(op.variables.some(x => F.isWildcard(x)) ? [ op.where ] : op.variables),\n op.solutionModifiers.group,\n op.values,\n ]);\n } else {\n recurse(op.solutionModifiers.group);\n }\n } else if (F.isTriple(op)) {\n recurse([ op.subject, op.predicate, op.object ]);\n } else if (F.isPathPure(op)) {\n recurse(op.items);\n } else if (F.isTripleCollection(op)) {\n recurse([ op.identifier, ...op.triples ]);\n } else if (F.isSolutionModifierGroup(op)) {\n recurse(op.groupings.filter(g => 'variable' in g).map(x => x.variable));\n } else if (F.isSolutionModifierHaving(op)) {\n recurse(op.having);\n } else if (F.isSolutionModifierOrder(op)) {\n recurse(op.orderDefs.map(x => x.expression));\n } else if (F.isPatternValues(op)) {\n for (const v of Object.keys(op.values.at(0) ?? {})) {\n boundedVars.add(v);\n }\n } else if (F.isPatternBgp(op)) {\n recurse(op.triples);\n } else if (F.isPatternGroup(op) || F.isPatternUnion(op) || F.isPatternOptional(op)) {\n recurse(op.patterns);\n } else if (F.isPatternService(op) || F.isPatternGraph(op)) {\n recurse([ op.name, ...op.patterns ]);\n } else if (F.isPatternBind(op)) {\n recurse(op.variable);\n } else if (F.isTermVariable(op)) {\n boundedVars.add(op.value);\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 = 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: { visitor: (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: { visitor: (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/dist/esm/lib/index.d.ts
CHANGED
package/dist/esm/lib/index.js
CHANGED
|
@@ -5,6 +5,8 @@ export * from './Sparql11types.js';
|
|
|
5
5
|
export * from './MinimalSparqlParser.js';
|
|
6
6
|
export * from './sparql11HelperTypes.js';
|
|
7
7
|
export * from './astFactory.js';
|
|
8
|
+
// TODO: deprecate this export
|
|
8
9
|
export * from './validation/validators.js';
|
|
10
|
+
export * as validation from './validation/validators.js';
|
|
9
11
|
export * from './utils.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,8BAA8B;AAC9B,cAAc,4BAA4B,CAAC;AAE3C,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AACzD,cAAc,YAAY,CAAC","sourcesContent":["export * as gram from './grammar/index.js';\nexport * as lex from './lexer/index.js';\nexport * from './expressionHelpers.js';\nexport * from './Sparql11types.js';\nexport * from './MinimalSparqlParser.js';\nexport * from './sparql11HelperTypes.js';\nexport * from './astFactory.js';\n// TODO: deprecate this export\nexport * from './validation/validators.js';\n\nexport * as validation from './validation/validators.js';\nexport * from './utils.js';\n"]}
|
|
@@ -25,7 +25,7 @@ export const doublePositivePattern = new RegExp(`\\+${doublePattern.source}`);
|
|
|
25
25
|
export const integerNegativePattern = new RegExp(`-${integerPattern.source}`);
|
|
26
26
|
export const decimalNegativePattern = new RegExp(`-${decimalPattern.source}`);
|
|
27
27
|
export const doubleNegativePattern = new RegExp(`-${doublePattern.source}`);
|
|
28
|
-
export const echarPattern = /\\[
|
|
28
|
+
export const echarPattern = /\\["'\\bfnrt]/;
|
|
29
29
|
export const stringLiteral1Pattern = new RegExp(`'(([^\\u0027\\u005C\\u000A\u000D])|(${echarPattern.source}))*'`);
|
|
30
30
|
export const stringLiteral2Pattern = new RegExp(`"(([^\\u0022\\u005C\\u000A\\u000D])|(${echarPattern.source}))*"`);
|
|
31
31
|
export const stringLiteralLong1Pattern = new RegExp(`'''(('|(''))?([^'\\\\]|(${echarPattern.source})))*'''`);
|
|
@@ -33,6 +33,7 @@ export const stringLiteralLong2Pattern = new RegExp(`"""(("|(""))?([^"\\\\]|(${e
|
|
|
33
33
|
export const wsPattern = /[\u0009\u000A\u000D ]/;
|
|
34
34
|
export const nilPattern = new RegExp(`\\((${wsPattern.source})*\\)`);
|
|
35
35
|
export const anonPattern = new RegExp(`\\[(${wsPattern.source})*\\]`);
|
|
36
|
-
export const commentPattern = /#[^\n]
|
|
37
|
-
|
|
36
|
+
export const commentPattern = /#[^\n]*/;
|
|
37
|
+
// Need to ensure the blank closes
|
|
38
|
+
export const atLeastOneBlankPattern = new RegExp(`((${wsPattern.source}+)|(${commentPattern.source}\n))+`);
|
|
38
39
|
//# sourceMappingURL=lexerPatterns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexerPatterns.js","sourceRoot":"","sources":["../../../../lib/lexer/lexerPatterns.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lexerPatterns.js","sourceRoot":"","sources":["../../../../lib/lexer/lexerPatterns.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable require-unicode-regexp,no-misleading-character-class,max-len,no-control-regex */\n\nexport const pnCharsBasePattern = /[A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF]/;\nexport const pnCharsUPattern = new RegExp(`${pnCharsBasePattern.source}|_`);\nexport const varNamePattern = new RegExp(`((${pnCharsUPattern.source})|[0-9])((${pnCharsUPattern.source})|[0-9]|[\\u00B7\\u0300-\\u036F\\u203F-\\u2040])*`);\nexport const iriRefPattern = /<([^\\u0000-\\u0020\"<>\\\\^`{|}])*>/;\nexport const pnCharsPattern = new RegExp(`(${pnCharsUPattern.source})|[\\\\-0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]`);\nexport const pnPrefixPattern = new RegExp(`(${pnCharsBasePattern.source})(((${pnCharsPattern.source})|\\\\.)*(${pnCharsPattern.source}))?`);\nexport const pNameNsPattern = new RegExp(`(${pnPrefixPattern.source})?:`);\nexport const percentPattern = /%[\\dA-Fa-f]{2}/;\nexport const pnLocalEscPattern = /\\\\[!#$%&'()*+,./;=?@\\\\_~-]/;\nexport const plxPattern = new RegExp(`(${percentPattern.source})|(${pnLocalEscPattern.source})`);\nexport const pnLocalPattern = new RegExp(`((${pnCharsUPattern.source})|:|[0-9]|(${plxPattern.source}))(((${pnCharsPattern.source})|\\\\.|:|(${plxPattern.source}))*((${pnCharsPattern.source})|:|(${plxPattern.source})))?`);\nexport const pNameLnPattern = new RegExp(`(${pNameNsPattern.source})(${pnLocalPattern.source})`);\nexport const blankNodeLabelPattern = new RegExp(`_:((${pnCharsUPattern.source})|[0-9])(((${pnCharsPattern.source})|\\\\.)*(${pnCharsPattern.source}))?`);\nexport const var1Pattern = new RegExp(`\\\\?(${varNamePattern.source})`);\nexport const var2Pattern = new RegExp(`\\\\$(${varNamePattern.source})`);\nexport const langTagPattern = /@[A-Za-z]+(-[\\dA-Za-z]+)*/;\nexport const integerPattern = /\\d+/;\nexport const decimalPattern = /\\d+\\.\\d+/;\nexport const exponentPattern = /[Ee][+-]?\\d+/;\nexport const doublePattern = new RegExp(`([0-9]+\\\\.[0-9]*(${exponentPattern.source}))|(\\\\.[0-9]+(${exponentPattern.source}))|([0-9]+(${exponentPattern.source}))`);\nexport const integerPositivePattern = new RegExp(`\\\\+${integerPattern.source}`);\nexport const decimalPositivePattern = new RegExp(`\\\\+${decimalPattern.source}`);\nexport const doublePositivePattern = new RegExp(`\\\\+${doublePattern.source}`);\nexport const integerNegativePattern = new RegExp(`-${integerPattern.source}`);\nexport const decimalNegativePattern = new RegExp(`-${decimalPattern.source}`);\nexport const doubleNegativePattern = new RegExp(`-${doublePattern.source}`);\nexport const echarPattern = /\\\\[\"'\\\\bfnrt]/;\nexport const stringLiteral1Pattern = new RegExp(`'(([^\\\\u0027\\\\u005C\\\\u000A\\u000D])|(${echarPattern.source}))*'`);\nexport const stringLiteral2Pattern = new RegExp(`\"(([^\\\\u0022\\\\u005C\\\\u000A\\\\u000D])|(${echarPattern.source}))*\"`);\nexport const stringLiteralLong1Pattern = new RegExp(`'''(('|(''))?([^'\\\\\\\\]|(${echarPattern.source})))*'''`);\nexport const stringLiteralLong2Pattern = new RegExp(`\"\"\"((\"|(\"\"))?([^\"\\\\\\\\]|(${echarPattern.source})))*\"\"\"`);\nexport const wsPattern = /[\\u0009\\u000A\\u000D ]/;\nexport const nilPattern = new RegExp(`\\\\((${wsPattern.source})*\\\\)`);\nexport const anonPattern = new RegExp(`\\\\[(${wsPattern.source})*\\\\]`);\nexport const commentPattern = /#[^\\n]*/;\n// Need to ensure the blank closes\nexport const atLeastOneBlankPattern = new RegExp(`((${wsPattern.source}+)|(${commentPattern.source}\\n))+`);\n"]}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import type { Pattern, QuerySelect, Update, Sparql11Nodes } from '../Sparql11types.js';
|
|
1
|
+
import type { Expression, ExpressionAggregate, Pattern, QuerySelect, TermVariable, SolutionModifierGroupBind, Update, Sparql11Nodes } from '../Sparql11types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get all 'aggregate' rules from an expression
|
|
4
|
+
*/
|
|
5
|
+
export declare function getAggregatesOfExpression(expression: Expression): ExpressionAggregate[];
|
|
6
|
+
/**
|
|
7
|
+
* Return the variable value id of an expression if bounded
|
|
8
|
+
*/
|
|
9
|
+
export declare function getExpressionId(expression: SolutionModifierGroupBind | Expression | TermVariable): string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Get all variables used in an expression
|
|
12
|
+
*/
|
|
13
|
+
export declare function getVariablesFromExpression(expression: Expression, variables: Set<string>): void;
|
|
2
14
|
/**
|
|
3
15
|
* Verify that the projected variables (select head) are allowed:
|
|
4
16
|
* - no group-by on select *
|
|
@@ -5,7 +5,7 @@ const transformer = new AstTransformer();
|
|
|
5
5
|
/**
|
|
6
6
|
* Get all 'aggregate' rules from an expression
|
|
7
7
|
*/
|
|
8
|
-
function getAggregatesOfExpression(expression) {
|
|
8
|
+
export function getAggregatesOfExpression(expression) {
|
|
9
9
|
if (F.isExpressionAggregate(expression)) {
|
|
10
10
|
return [expression];
|
|
11
11
|
}
|
|
@@ -21,7 +21,7 @@ function getAggregatesOfExpression(expression) {
|
|
|
21
21
|
/**
|
|
22
22
|
* Return the variable value id of an expression if bounded
|
|
23
23
|
*/
|
|
24
|
-
function getExpressionId(expression) {
|
|
24
|
+
export function getExpressionId(expression) {
|
|
25
25
|
// Check if grouping
|
|
26
26
|
if (F.isTerm(expression) && F.isTermVariable(expression)) {
|
|
27
27
|
return expression.value;
|
|
@@ -37,7 +37,7 @@ function getExpressionId(expression) {
|
|
|
37
37
|
/**
|
|
38
38
|
* Get all variables used in an expression
|
|
39
39
|
*/
|
|
40
|
-
function getVariablesFromExpression(expression, variables) {
|
|
40
|
+
export function getVariablesFromExpression(expression, variables) {
|
|
41
41
|
if (F.isExpressionOperator(expression)) {
|
|
42
42
|
for (const expr of expression.args) {
|
|
43
43
|
getVariablesFromExpression(expr, variables);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../lib/validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { AstFactory } from '../astFactory.js';\nimport type {\n Wildcard,\n Expression,\n ExpressionAggregate,\n Pattern,\n QuerySelect,\n TermVariable,\n SolutionModifierGroupBind,\n Update,\n PatternBind,\n Sparql11Nodes,\n} from '../Sparql11types.js';\nimport { AstTransformer } from '../utils.js';\n\nconst F = new AstFactory();\nconst transformer = new AstTransformer();\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\n/**\n * Verify that the projected variables (select head) are allowed:\n * - no group-by on select *\n * - if group-by, selected variables need to be collected by the group-by\n * - 'select ?var as ?other', ?other cannot be in scope\n */\nexport function queryProjectionIsGood(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 op: Sparql11Nodes | undefined | (Sparql11Nodes | undefined)[],\n boundedVars: Set<string>,\n): void {\n function recurse(x: Parameters<(typeof findPatternBoundedVars)>[0]): void {\n findPatternBoundedVars(x, boundedVars);\n }\n if (op === undefined) {\n return;\n }\n if (Array.isArray(op)) {\n for (const iter of op) {\n recurse(iter);\n }\n } else if (F.isQuery(op)) {\n if (F.isQuerySelect(op) || F.isQueryDescribe(op)) {\n recurse([\n ...(op.variables.some(x => F.isWildcard(x)) ? [ op.where ] : op.variables),\n op.solutionModifiers.group,\n op.values,\n ]);\n } else {\n recurse(op.solutionModifiers.group);\n }\n } else if (F.isTriple(op)) {\n recurse([ op.subject, op.predicate, op.object ]);\n } else if (F.isPathPure(op)) {\n recurse(op.items);\n } else if (F.isTripleCollection(op)) {\n recurse([ op.identifier, ...op.triples ]);\n } else if (F.isSolutionModifierGroup(op)) {\n recurse(op.groupings.filter(g => 'variable' in g).map(x => x.variable));\n } else if (F.isSolutionModifierHaving(op)) {\n recurse(op.having);\n } else if (F.isSolutionModifierOrder(op)) {\n recurse(op.orderDefs.map(x => x.expression));\n } else if (F.isPatternValues(op)) {\n for (const v of Object.keys(op.values.at(0) ?? {})) {\n boundedVars.add(v);\n }\n } else if (F.isPatternBgp(op)) {\n recurse(op.triples);\n } else if (F.isPatternGroup(op) || F.isPatternUnion(op) || F.isPatternOptional(op)) {\n recurse(op.patterns);\n } else if (F.isPatternService(op) || F.isPatternGraph(op)) {\n recurse([ op.name, ...op.patterns ]);\n } else if (F.isPatternBind(op)) {\n recurse(op.variable);\n } else if (F.isTermVariable(op)) {\n boundedVars.add(op.value);\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 = 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: { visitor: (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: { visitor: (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":["../../../../lib/validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { AstFactory } from '../astFactory.js';\nimport type {\n Wildcard,\n Expression,\n ExpressionAggregate,\n Pattern,\n QuerySelect,\n TermVariable,\n SolutionModifierGroupBind,\n Update,\n PatternBind,\n Sparql11Nodes,\n} from '../Sparql11types.js';\nimport { AstTransformer } from '../utils.js';\n\nconst F = new AstFactory();\nconst transformer = new AstTransformer();\n\n/**\n * Get all 'aggregate' rules from an expression\n */\nexport function 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 */\nexport function 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 */\nexport function 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\n/**\n * Verify that the projected variables (select head) are allowed:\n * - no group-by on select *\n * - if group-by, selected variables need to be collected by the group-by\n * - 'select ?var as ?other', ?other cannot be in scope\n */\nexport function queryProjectionIsGood(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 op: Sparql11Nodes | undefined | (Sparql11Nodes | undefined)[],\n boundedVars: Set<string>,\n): void {\n function recurse(x: Parameters<(typeof findPatternBoundedVars)>[0]): void {\n findPatternBoundedVars(x, boundedVars);\n }\n if (op === undefined) {\n return;\n }\n if (Array.isArray(op)) {\n for (const iter of op) {\n recurse(iter);\n }\n } else if (F.isQuery(op)) {\n if (F.isQuerySelect(op) || F.isQueryDescribe(op)) {\n recurse([\n ...(op.variables.some(x => F.isWildcard(x)) ? [ op.where ] : op.variables),\n op.solutionModifiers.group,\n op.values,\n ]);\n } else {\n recurse(op.solutionModifiers.group);\n }\n } else if (F.isTriple(op)) {\n recurse([ op.subject, op.predicate, op.object ]);\n } else if (F.isPathPure(op)) {\n recurse(op.items);\n } else if (F.isTripleCollection(op)) {\n recurse([ op.identifier, ...op.triples ]);\n } else if (F.isSolutionModifierGroup(op)) {\n recurse(op.groupings.filter(g => 'variable' in g).map(x => x.variable));\n } else if (F.isSolutionModifierHaving(op)) {\n recurse(op.having);\n } else if (F.isSolutionModifierOrder(op)) {\n recurse(op.orderDefs.map(x => x.expression));\n } else if (F.isPatternValues(op)) {\n for (const v of Object.keys(op.values.at(0) ?? {})) {\n boundedVars.add(v);\n }\n } else if (F.isPatternBgp(op)) {\n recurse(op.triples);\n } else if (F.isPatternGroup(op) || F.isPatternUnion(op) || F.isPatternOptional(op)) {\n recurse(op.patterns);\n } else if (F.isPatternService(op) || F.isPatternGraph(op)) {\n recurse([ op.name, ...op.patterns ]);\n } else if (F.isPatternBind(op)) {\n recurse(op.variable);\n } else if (F.isTermVariable(op)) {\n boundedVars.add(op.value);\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 = 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: { visitor: (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: { visitor: (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": "1.1.
|
|
4
|
+
"version": "1.1.3",
|
|
5
5
|
"description": "TRAQULA Lexer and Grammar Rules for sparql 1.1",
|
|
6
6
|
"lsd:module": true,
|
|
7
7
|
"license": "MIT",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@traqula/chevrotain": "^1.1.0",
|
|
45
|
-
"@traqula/core": "^1.1.
|
|
45
|
+
"@traqula/core": "^1.1.3"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "9f3269bc699a2990f2948c78883dabdac6908f26"
|
|
48
48
|
}
|