@comunica/utils-expression-evaluator 4.5.0 → 5.0.0
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/expressions/Aggregate.d.ts +1 -1
- package/lib/expressions/Aggregate.js +3 -1
- package/lib/expressions/Aggregate.js.map +1 -1
- package/lib/expressions/Existence.d.ts +1 -1
- package/lib/expressions/Existence.js +2 -1
- package/lib/expressions/Existence.js.map +1 -1
- package/lib/expressions/Expressions.d.ts +0 -0
- package/lib/expressions/Expressions.js +1 -2
- package/lib/expressions/Expressions.js.map +1 -1
- package/lib/expressions/Operator.d.ts +0 -0
- package/lib/expressions/Operator.js +4 -1
- package/lib/expressions/Operator.js.map +1 -1
- package/lib/expressions/Term.d.ts +9 -1
- package/lib/expressions/Term.js +76 -21
- package/lib/expressions/Term.js.map +1 -1
- package/lib/expressions/Variable.d.ts +0 -0
- package/lib/expressions/Variable.js +2 -1
- package/lib/expressions/Variable.js.map +1 -1
- package/lib/expressions/index.d.ts +0 -0
- package/lib/expressions/index.js +0 -0
- package/lib/expressions/index.js.map +0 -0
- package/lib/functions/Helpers.d.ts +2 -0
- package/lib/functions/Helpers.js +20 -11
- package/lib/functions/Helpers.js.map +1 -1
- package/lib/functions/OverloadTree.d.ts +0 -0
- package/lib/functions/OverloadTree.js +8 -0
- package/lib/functions/OverloadTree.js.map +1 -1
- package/lib/index.d.ts +0 -0
- package/lib/index.js +0 -0
- package/lib/index.js.map +0 -0
- package/lib/transformers/TermTransformer.d.ts +2 -2
- package/lib/transformers/TermTransformer.js +7 -3
- package/lib/transformers/TermTransformer.js.map +1 -1
- package/lib/util/Consts.d.ts +5 -0
- package/lib/util/Consts.js +7 -3
- package/lib/util/Consts.js.map +1 -1
- package/lib/util/Context.d.ts +0 -0
- package/lib/util/Context.js +1 -2
- package/lib/util/Context.js.map +1 -1
- package/lib/util/DateTimeHelpers.d.ts +0 -0
- package/lib/util/DateTimeHelpers.js +15 -16
- package/lib/util/DateTimeHelpers.js.map +1 -1
- package/lib/util/Errors.d.ts +5 -0
- package/lib/util/Errors.js +28 -2
- package/lib/util/Errors.js.map +1 -1
- package/lib/util/Parsing.d.ts +0 -1
- package/lib/util/Parsing.js +8 -11
- package/lib/util/Parsing.js.map +1 -1
- package/lib/util/Serialization.d.ts +0 -0
- package/lib/util/Serialization.js +4 -5
- package/lib/util/Serialization.js.map +1 -1
- package/lib/util/SpecAlgos.d.ts +0 -0
- package/lib/util/SpecAlgos.js +3 -4
- package/lib/util/SpecAlgos.js.map +1 -1
- package/lib/util/TypeHandling.d.ts +0 -0
- package/lib/util/TypeHandling.js +11 -10
- package/lib/util/TypeHandling.js.map +1 -1
- package/package.json +8 -8
package/lib/functions/Helpers.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.Builder = void 0;
|
|
4
|
+
exports.declare = declare;
|
|
5
|
+
exports.bool = bool;
|
|
6
|
+
exports.integer = integer;
|
|
7
|
+
exports.decimal = decimal;
|
|
8
|
+
exports.float = float;
|
|
9
|
+
exports.double = double;
|
|
10
|
+
exports.string = string;
|
|
11
|
+
exports.langString = langString;
|
|
12
|
+
exports.dirLangString = dirLangString;
|
|
13
|
+
exports.dateTime = dateTime;
|
|
14
|
+
exports.expressionToVar = expressionToVar;
|
|
4
15
|
/**
|
|
5
16
|
* These helpers provide a (albeit inflexible) DSL for writing function
|
|
6
17
|
* definitions for the SPARQL functions.
|
|
@@ -15,8 +26,9 @@ const OverloadTree_1 = require("./OverloadTree");
|
|
|
15
26
|
function declare(identifier) {
|
|
16
27
|
return new Builder(identifier);
|
|
17
28
|
}
|
|
18
|
-
exports.declare = declare;
|
|
19
29
|
class Builder {
|
|
30
|
+
overloadTree;
|
|
31
|
+
collected;
|
|
20
32
|
constructor(identifier) {
|
|
21
33
|
this.overloadTree = new OverloadTree_1.OverloadTree(identifier);
|
|
22
34
|
this.collected = false;
|
|
@@ -98,6 +110,9 @@ class Builder {
|
|
|
98
110
|
onLangString1(op, addInvalidHandling = true) {
|
|
99
111
|
return this.set([C.TypeURL.RDF_LANG_STRING], expressionEvaluator => ([lit]) => op(expressionEvaluator)(lit), addInvalidHandling);
|
|
100
112
|
}
|
|
113
|
+
onDirLangString1(op, addInvalidHandling = true) {
|
|
114
|
+
return this.set([C.TypeURL.RDF_DIR_LANG_STRING], expressionEvaluator => ([lit]) => op(expressionEvaluator)(lit), addInvalidHandling);
|
|
115
|
+
}
|
|
101
116
|
onStringly1(op, addInvalidHandling = true) {
|
|
102
117
|
return this.set([C.TypeAlias.SPARQL_STRINGLY], expressionEvaluator => ([lit]) => op(expressionEvaluator)(lit), addInvalidHandling);
|
|
103
118
|
}
|
|
@@ -182,37 +197,31 @@ exports.Builder = Builder;
|
|
|
182
197
|
function bool(val) {
|
|
183
198
|
return new E.BooleanLiteral(val);
|
|
184
199
|
}
|
|
185
|
-
exports.bool = bool;
|
|
186
200
|
function integer(num) {
|
|
187
201
|
return new E.IntegerLiteral(num);
|
|
188
202
|
}
|
|
189
|
-
exports.integer = integer;
|
|
190
203
|
function decimal(num) {
|
|
191
204
|
return new E.DecimalLiteral(num);
|
|
192
205
|
}
|
|
193
|
-
exports.decimal = decimal;
|
|
194
206
|
function float(num) {
|
|
195
207
|
return new E.FloatLiteral(num);
|
|
196
208
|
}
|
|
197
|
-
exports.float = float;
|
|
198
209
|
function double(num) {
|
|
199
210
|
return new E.DoubleLiteral(num);
|
|
200
211
|
}
|
|
201
|
-
exports.double = double;
|
|
202
212
|
function string(str) {
|
|
203
213
|
return new E.StringLiteral(str);
|
|
204
214
|
}
|
|
205
|
-
exports.string = string;
|
|
206
215
|
function langString(str, lang) {
|
|
207
216
|
return new E.LangStringLiteral(str, lang);
|
|
208
217
|
}
|
|
209
|
-
|
|
218
|
+
function dirLangString(str, lang, direction) {
|
|
219
|
+
return new E.DirLangStringLiteral(str, lang, direction);
|
|
220
|
+
}
|
|
210
221
|
function dateTime(date, str) {
|
|
211
222
|
return new E.DateTimeLiteral(date, str);
|
|
212
223
|
}
|
|
213
|
-
exports.dateTime = dateTime;
|
|
214
224
|
function expressionToVar(dataFactory, variableExpression) {
|
|
215
225
|
return dataFactory.variable(variableExpression.name.slice(1));
|
|
216
226
|
}
|
|
217
|
-
exports.expressionToVar = expressionToVar;
|
|
218
227
|
//# sourceMappingURL=Helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Helpers.js","sourceRoot":"","sources":["Helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * These helpers provide a (albeit inflexible) DSL for writing function\n * definitions for the SPARQL functions.\n */\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type {\n ComunicaDataFactory,\n IDateTimeRepresentation,\n IInternalEvaluator,\n ImplementationFunction,\n ImplementationFunctionTuple,\n TermExpression,\n VariableExpression,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { ISerializable, Literal, Quad } from '../expressions';\nimport * as E from '../expressions';\nimport { NonLexicalLiteral } from '../expressions';\nimport * as C from '../util/Consts';\nimport { TypeURL } from '../util/Consts';\nimport * as Err from '../util/Errors';\nimport type {\n ArgumentType,\n} from './OverloadTree';\nimport { OverloadTree } from './OverloadTree';\n\ntype Term = TermExpression;\n\nexport function declare(identifier: string): Builder {\n return new Builder(identifier);\n}\n\nexport class Builder {\n private readonly overloadTree: OverloadTree;\n private collected: boolean;\n\n public constructor(identifier: string) {\n this.overloadTree = new OverloadTree(identifier);\n this.collected = false;\n }\n\n public collect(): OverloadTree {\n if (this.collected) {\n // Only 1 time allowed because we can't copy a tree. (And we don't need this).\n throw new Error('Builders can only be collected once!');\n }\n this.collected = true;\n return this.overloadTree;\n }\n\n private static wrapInvalidLexicalProtected(func: ImplementationFunction): ImplementationFunction {\n return (expressionEvaluator: IInternalEvaluator) => (args: TermExpression[]) => {\n for (const [ index, arg ] of args.entries()) {\n if (arg instanceof NonLexicalLiteral) {\n throw new Err.InvalidLexicalForm(\n args[index].toRDF(expressionEvaluator.context.getSafe(KeysInitQuery.dataFactory)),\n );\n }\n }\n return func(expressionEvaluator)(args);\n };\n }\n\n public set(\n argTypes: [],\n func: ImplementationFunctionTuple<[]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<T1 extends TermExpression>(\n argTypes: [ArgumentType],\n func: ImplementationFunctionTuple<[T1]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<T1 extends TermExpression, T2 extends TermExpression>(\n argTypes: [ArgumentType, ArgumentType],\n func: ImplementationFunctionTuple<[T1, T2]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<T1 extends TermExpression, T2 extends TermExpression, T3 extends TermExpression>(\n argTypes: [ArgumentType, ArgumentType, ArgumentType],\n func: ImplementationFunctionTuple<[T1, T2, T3]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<\n T1 extends TermExpression,\n T2 extends TermExpression,\n T3 extends TermExpression,\n T4 extends TermExpression,\n >(\n argTypes: [ArgumentType, ArgumentType, ArgumentType, ArgumentType],\n func: ImplementationFunctionTuple<[T1, T2, T3, T4]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set(argTypes: ArgumentType[], func: ImplementationFunction, addInvalidHandling?: boolean): Builder;\n public set(argTypes: ArgumentType[], func: ImplementationFunction, addInvalidHandling = true): Builder {\n this.overloadTree.addOverload(argTypes, addInvalidHandling ? Builder.wrapInvalidLexicalProtected(func) : func);\n return this;\n }\n\n public copy({ from, to }: { from: ArgumentType[]; to: ArgumentType[] }): Builder {\n const impl = this.overloadTree.getImplementationExact(from);\n if (!impl) {\n throw new Err.UnexpectedError(\n 'Tried to copy implementation, but types not found',\n { from, to },\n );\n }\n return this.set(to, impl);\n }\n\n public onUnary<T extends Term>(type: ArgumentType, op: (expressionEvaluator: IInternalEvaluator) =>\n (val: T) => Term, addInvalidHandling = true): Builder {\n return this.set([ type ], expressionEvaluator =>\n ([ val ]: [T]) => op(expressionEvaluator)(val), addInvalidHandling);\n }\n\n public onUnaryTyped<T extends ISerializable>(\n type: ArgumentType,\n op: (expressionEvaluator: IInternalEvaluator) => (val: T) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set([ type ], expressionEvaluator => ([ val ]: [E.Literal<T>]) =>\n op(expressionEvaluator)(val.typedValue), addInvalidHandling);\n }\n\n public onBinary<L extends Term, R extends Term>(\n types: [ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) => (left: L, right: R) => Term,\naddInvalidHandling = true,\n ):\n Builder {\n return this.set(types, expressionEvaluator =>\n ([ left, right ]: [L, R]) => op(expressionEvaluator)(left, right), addInvalidHandling);\n }\n\n public onBinaryTyped<L extends ISerializable, R extends ISerializable>(\n types: [ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) => (left: L, right: R) => Term,\naddInvalidHandling = true,\n ):\n Builder {\n return this.set(\n types,\n expressionEvaluator =>\n ([ left, right ]: [E.Literal<L>, E.Literal<R>]) => op(expressionEvaluator)(left.typedValue, right.typedValue),\n addInvalidHandling,\n );\n }\n\n public onTernaryTyped<A1 extends ISerializable, A2 extends ISerializable, A3 extends ISerializable>(\n types: [ArgumentType, ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator)\n => (a1: A1, a2: A2, a3: A3) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(types, expressionEvaluator => ([ a1, a2, a3 ]: [E.Literal<A1>, E.Literal<A2>, E.Literal<A3>]) =>\n op(expressionEvaluator)(a1.typedValue, a2.typedValue, a3.typedValue), addInvalidHandling);\n }\n\n public onTernary<A1 extends Term, A2 extends Term, A3 extends Term>(\n types: [ArgumentType, ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) =>\n (a1: A1, a2: A2, a3: A3) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(types, expressionEvaluator =>\n ([ a1, a2, a3 ]: [A1, A2, A3]) => op(expressionEvaluator)(a1, a2, a3), addInvalidHandling);\n }\n\n public onQuaternaryTyped<\n A1 extends ISerializable,\nA2 extends ISerializable,\nA3 extends ISerializable,\nA4 extends ISerializable,\n>(\n types: [ArgumentType, ArgumentType, ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) => (a1: A1, a2: A2, a3: A3, a4: A4) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(types, expressionEvaluator =>\n ([ a1, a2, a3, a4 ]: [E.Literal<A1>, E.Literal<A2>, E.Literal<A3>, E.Literal<A4>]) =>\n op(expressionEvaluator)(a1.typedValue, a2.typedValue, a3.typedValue, a4.typedValue), addInvalidHandling);\n }\n\n public onTerm1<T extends Term>(\n op: (expressionEvaluator: IInternalEvaluator) =>\n (term: T) => Term,\naddInvalidHandling = false,\n ): Builder {\n return this.set(\n [ 'term' ],\n expressionEvaluator => ([ term ]: [T]) => op(expressionEvaluator)(term),\n addInvalidHandling,\n );\n }\n\n public onTerm3(op: (expressionEvaluator: IInternalEvaluator) => (t1: Term, t2: Term, t3: Term) => Term):\n Builder {\n return this.set(\n [ 'term', 'term', 'term' ],\n expressionEvaluator => ([ t1, t2, t3 ]: [Term, Term, Term]) => op(expressionEvaluator)(t1, t2, t3),\n );\n }\n\n public onQuad1(op: (expressionEvaluator: IInternalEvaluator) => (term: Term & Quad) => Term): Builder {\n return this.set([ 'quad' ], expressionEvaluator => ([ term ]: [Term & Quad]) => op(expressionEvaluator)(term));\n }\n\n public onLiteral1<T extends ISerializable>(\n op: (expressionEvaluator: IInternalEvaluator) =>\n (lit: E.Literal<T>) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ 'literal' ],\n expressionEvaluator => ([ term ]: [E.Literal<T>]) => op(expressionEvaluator)(term),\n addInvalidHandling,\n );\n }\n\n public onBoolean1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.BooleanLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_BOOLEAN ],\n expressionEvaluator => ([ lit ]: [E.BooleanLiteral]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onBoolean1Typed(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: boolean) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_BOOLEAN ],\n expressionEvaluator => ([ lit ]: [E.BooleanLiteral]) => op(expressionEvaluator)(lit.typedValue),\n addInvalidHandling,\n );\n }\n\n public onString1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<string>) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_STRING ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onString1Typed(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: string) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_STRING ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit.typedValue),\n addInvalidHandling,\n );\n }\n\n public onLangString1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.LangStringLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.RDF_LANG_STRING ],\n expressionEvaluator => ([ lit ]: [E.LangStringLiteral]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onStringly1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<string>) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeAlias.SPARQL_STRINGLY ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onStringly1Typed(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: string) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeAlias.SPARQL_STRINGLY ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit.typedValue),\n addInvalidHandling,\n );\n }\n\n public onNumeric1(\n op: (expressionEvaluator: IInternalEvaluator) => (val: E.NumericLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeAlias.SPARQL_NUMERIC ],\n expressionEvaluator => ([ val ]: [E.NumericLiteral]) => op(expressionEvaluator)(val),\n addInvalidHandling,\n );\n }\n\n public onDateTime1(\n op: (expressionEvaluator: IInternalEvaluator) => (date: E.DateTimeLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_DATE_TIME ],\n expressionEvaluator => ([ val ]: [E.DateTimeLiteral]) => op(expressionEvaluator)(val),\n addInvalidHandling,\n );\n }\n\n /**\n * We return the base types and not the provided types because we don't want to create invalid terms.\n * Providing negative number to a function unary - for example should not\n * return a term of type negative number having a positive value.\n * @param op the numeric operator performed\n * @param addInvalidHandling whether to add invalid handling,\n * whether to add @param op in @see wrapInvalidLexicalProtected\n */\n public numericConverter(\n op: (expressionEvaluator: IInternalEvaluator) => (val: number) => number,\naddInvalidHandling = true,\n ): Builder {\n const evalHelper = (expressionEvaluator: IInternalEvaluator) => (arg: Term): number =>\n op(expressionEvaluator)((<Literal<number>>arg).typedValue);\n return this.onUnary(TypeURL.XSD_INTEGER, expressionEvaluator => arg =>\n integer(evalHelper(expressionEvaluator)(arg)), addInvalidHandling)\n .onUnary(TypeURL.XSD_DECIMAL, expressionEvaluator => arg =>\n decimal(evalHelper(expressionEvaluator)(arg)), addInvalidHandling)\n .onUnary(TypeURL.XSD_FLOAT, expressionEvaluator => arg =>\n float(evalHelper(expressionEvaluator)(arg)), addInvalidHandling)\n .onUnary(TypeURL.XSD_DOUBLE, expressionEvaluator => arg =>\n double(evalHelper(expressionEvaluator)(arg)), addInvalidHandling);\n }\n\n /**\n * !!! Be aware when using this function, it will create different overloads with different return types !!!\n * Arithmetic operators take 2 numeric arguments, and return a single numerical\n * value. The type of the return value is heavily dependent on the types of the\n * input arguments. In JS everything is a double, but in SPARQL it is not.\n *\n * The different arguments are handled by type promotion and subtype substitution.\n * The way numeric function arguments work is described here:\n * https://www.w3.org/TR/xpath20/#mapping\n * Above url is referenced in the sparql spec: https://www.w3.org/TR/sparql11-query/#OperatorMapping\n */\n public arithmetic(\n op: (expressionEvaluator: IInternalEvaluator) => (left: number, right: number) => number,\naddInvalidHandling = true,\n ): Builder {\n const evalHelper = (expressionEvaluator: IInternalEvaluator) => (left: Term, right: Term): number =>\n op(expressionEvaluator)((<Literal<number>>left).typedValue, (<Literal<number>>right).typedValue);\n return this.onBinary([ TypeURL.XSD_INTEGER, TypeURL.XSD_INTEGER ], expressionEvaluator => (left, right) =>\n integer(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling)\n .onBinary([ TypeURL.XSD_DECIMAL, TypeURL.XSD_DECIMAL ], expressionEvaluator => (left, right) =>\n decimal(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling)\n .onBinary([ TypeURL.XSD_FLOAT, TypeURL.XSD_FLOAT ], expressionEvaluator => (left, right) =>\n float(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling)\n .onBinary([ TypeURL.XSD_DOUBLE, TypeURL.XSD_DOUBLE ], expressionEvaluator => (left, right) =>\n double(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling);\n }\n\n public numberTest(\n test: (expressionEvaluator: IInternalEvaluator) => (left: number, right: number) => boolean,\n ): Builder {\n return this.numeric(expressionEvaluator => ([ left, right ]: E.NumericLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n });\n }\n\n public stringTest(\n test: (expressionEvaluator: IInternalEvaluator) => (left: string, right: string) => boolean,\naddInvalidHandling = true,\n ): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_STRING, C.TypeURL.XSD_STRING ],\n expressionEvaluator => ([ left, right ]: E.StringLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n },\n addInvalidHandling,\n );\n }\n\n public booleanTest(\n test: (expressionEvaluator: IInternalEvaluator) => (left: boolean, right: boolean) => boolean,\naddInvalidHandling = true,\n ): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_BOOLEAN, C.TypeURL.XSD_BOOLEAN ],\n expressionEvaluator => ([ left, right ]: E.BooleanLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n },\n addInvalidHandling,\n );\n }\n\n public dateTimeTest(test: (expressionEvaluator: IInternalEvaluator)\n => (left: IDateTimeRepresentation, right: IDateTimeRepresentation) => boolean, addInvalidHandling = true): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_DATE_TIME, C.TypeURL.XSD_DATE_TIME ],\n expressionEvaluator => ([ left, right ]: E.DateTimeLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n },\n addInvalidHandling,\n );\n }\n\n public numeric<T extends TermExpression>(op: ImplementationFunctionTuple<[T, T]>): Builder {\n return this.set([ C.TypeAlias.SPARQL_NUMERIC, C.TypeAlias.SPARQL_NUMERIC ], op);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Literal Construction helpers\n// ----------------------------------------------------------------------------\n\nexport function bool(val: boolean): E.BooleanLiteral {\n return new E.BooleanLiteral(val);\n}\n\nexport function integer(num: number): E.IntegerLiteral {\n return new E.IntegerLiteral(num);\n}\n\nexport function decimal(num: number): E.DecimalLiteral {\n return new E.DecimalLiteral(num);\n}\n\nexport function float(num: number): E.FloatLiteral {\n return new E.FloatLiteral(num);\n}\n\nexport function double(num: number): E.DoubleLiteral {\n return new E.DoubleLiteral(num);\n}\n\nexport function string(str: string): E.StringLiteral {\n return new E.StringLiteral(str);\n}\n\nexport function langString(str: string, lang: string): E.LangStringLiteral {\n return new E.LangStringLiteral(str, lang);\n}\n\nexport function dateTime(date: IDateTimeRepresentation, str: string): E.DateTimeLiteral {\n return new E.DateTimeLiteral(date, str);\n}\n\nexport function expressionToVar(\n dataFactory: ComunicaDataFactory,\n variableExpression: VariableExpression,\n): RDF.Variable {\n return dataFactory.variable(variableExpression.name.slice(1));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Helpers.js","sourceRoot":"","sources":["Helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * These helpers provide a (albeit inflexible) DSL for writing function\n * definitions for the SPARQL functions.\n */\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type {\n ComunicaDataFactory,\n IDateTimeRepresentation,\n IInternalEvaluator,\n ImplementationFunction,\n ImplementationFunctionTuple,\n TermExpression,\n VariableExpression,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { ISerializable, Literal, Quad } from '../expressions';\nimport * as E from '../expressions';\nimport { NonLexicalLiteral } from '../expressions';\nimport * as C from '../util/Consts';\nimport { TypeURL } from '../util/Consts';\nimport * as Err from '../util/Errors';\nimport type {\n ArgumentType,\n} from './OverloadTree';\nimport { OverloadTree } from './OverloadTree';\n\ntype Term = TermExpression;\n\nexport function declare(identifier: string): Builder {\n return new Builder(identifier);\n}\n\nexport class Builder {\n private readonly overloadTree: OverloadTree;\n private collected: boolean;\n\n public constructor(identifier: string) {\n this.overloadTree = new OverloadTree(identifier);\n this.collected = false;\n }\n\n public collect(): OverloadTree {\n if (this.collected) {\n // Only 1 time allowed because we can't copy a tree. (And we don't need this).\n throw new Error('Builders can only be collected once!');\n }\n this.collected = true;\n return this.overloadTree;\n }\n\n private static wrapInvalidLexicalProtected(func: ImplementationFunction): ImplementationFunction {\n return (expressionEvaluator: IInternalEvaluator) => (args: TermExpression[]) => {\n for (const [ index, arg ] of args.entries()) {\n if (arg instanceof NonLexicalLiteral) {\n throw new Err.InvalidLexicalForm(\n args[index].toRDF(expressionEvaluator.context.getSafe(KeysInitQuery.dataFactory)),\n );\n }\n }\n return func(expressionEvaluator)(args);\n };\n }\n\n public set(\n argTypes: [],\n func: ImplementationFunctionTuple<[]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<T1 extends TermExpression>(\n argTypes: [ArgumentType],\n func: ImplementationFunctionTuple<[T1]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<T1 extends TermExpression, T2 extends TermExpression>(\n argTypes: [ArgumentType, ArgumentType],\n func: ImplementationFunctionTuple<[T1, T2]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<T1 extends TermExpression, T2 extends TermExpression, T3 extends TermExpression>(\n argTypes: [ArgumentType, ArgumentType, ArgumentType],\n func: ImplementationFunctionTuple<[T1, T2, T3]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set<\n T1 extends TermExpression,\n T2 extends TermExpression,\n T3 extends TermExpression,\n T4 extends TermExpression,\n >(\n argTypes: [ArgumentType, ArgumentType, ArgumentType, ArgumentType],\n func: ImplementationFunctionTuple<[T1, T2, T3, T4]>,\n addInvalidHandling?: boolean,\n ): Builder;\n public set(argTypes: ArgumentType[], func: ImplementationFunction, addInvalidHandling?: boolean): Builder;\n public set(argTypes: ArgumentType[], func: ImplementationFunction, addInvalidHandling = true): Builder {\n this.overloadTree.addOverload(argTypes, addInvalidHandling ? Builder.wrapInvalidLexicalProtected(func) : func);\n return this;\n }\n\n public copy({ from, to }: { from: ArgumentType[]; to: ArgumentType[] }): Builder {\n const impl = this.overloadTree.getImplementationExact(from);\n if (!impl) {\n throw new Err.UnexpectedError(\n 'Tried to copy implementation, but types not found',\n { from, to },\n );\n }\n return this.set(to, impl);\n }\n\n public onUnary<T extends Term>(type: ArgumentType, op: (expressionEvaluator: IInternalEvaluator) =>\n (val: T) => Term, addInvalidHandling = true): Builder {\n return this.set([ type ], expressionEvaluator =>\n ([ val ]: [T]) => op(expressionEvaluator)(val), addInvalidHandling);\n }\n\n public onUnaryTyped<T extends ISerializable>(\n type: ArgumentType,\n op: (expressionEvaluator: IInternalEvaluator) => (val: T) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set([ type ], expressionEvaluator => ([ val ]: [E.Literal<T>]) =>\n op(expressionEvaluator)(val.typedValue), addInvalidHandling);\n }\n\n public onBinary<L extends Term, R extends Term>(\n types: [ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) => (left: L, right: R) => Term,\naddInvalidHandling = true,\n ):\n Builder {\n return this.set(types, expressionEvaluator =>\n ([ left, right ]: [L, R]) => op(expressionEvaluator)(left, right), addInvalidHandling);\n }\n\n public onBinaryTyped<L extends ISerializable, R extends ISerializable>(\n types: [ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) => (left: L, right: R) => Term,\naddInvalidHandling = true,\n ):\n Builder {\n return this.set(\n types,\n expressionEvaluator =>\n ([ left, right ]: [E.Literal<L>, E.Literal<R>]) => op(expressionEvaluator)(left.typedValue, right.typedValue),\n addInvalidHandling,\n );\n }\n\n public onTernaryTyped<A1 extends ISerializable, A2 extends ISerializable, A3 extends ISerializable>(\n types: [ArgumentType, ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator)\n => (a1: A1, a2: A2, a3: A3) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(types, expressionEvaluator => ([ a1, a2, a3 ]: [E.Literal<A1>, E.Literal<A2>, E.Literal<A3>]) =>\n op(expressionEvaluator)(a1.typedValue, a2.typedValue, a3.typedValue), addInvalidHandling);\n }\n\n public onTernary<A1 extends Term, A2 extends Term, A3 extends Term>(\n types: [ArgumentType, ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) =>\n (a1: A1, a2: A2, a3: A3) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(types, expressionEvaluator =>\n ([ a1, a2, a3 ]: [A1, A2, A3]) => op(expressionEvaluator)(a1, a2, a3), addInvalidHandling);\n }\n\n public onQuaternaryTyped<\n A1 extends ISerializable,\nA2 extends ISerializable,\nA3 extends ISerializable,\nA4 extends ISerializable,\n>(\n types: [ArgumentType, ArgumentType, ArgumentType, ArgumentType],\n op: (expressionEvaluator: IInternalEvaluator) => (a1: A1, a2: A2, a3: A3, a4: A4) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(types, expressionEvaluator =>\n ([ a1, a2, a3, a4 ]: [E.Literal<A1>, E.Literal<A2>, E.Literal<A3>, E.Literal<A4>]) =>\n op(expressionEvaluator)(a1.typedValue, a2.typedValue, a3.typedValue, a4.typedValue), addInvalidHandling);\n }\n\n public onTerm1<T extends Term>(\n op: (expressionEvaluator: IInternalEvaluator) =>\n (term: T) => Term,\naddInvalidHandling = false,\n ): Builder {\n return this.set(\n [ 'term' ],\n expressionEvaluator => ([ term ]: [T]) => op(expressionEvaluator)(term),\n addInvalidHandling,\n );\n }\n\n public onTerm3(op: (expressionEvaluator: IInternalEvaluator) => (t1: Term, t2: Term, t3: Term) => Term):\n Builder {\n return this.set(\n [ 'term', 'term', 'term' ],\n expressionEvaluator => ([ t1, t2, t3 ]: [Term, Term, Term]) => op(expressionEvaluator)(t1, t2, t3),\n );\n }\n\n public onQuad1(op: (expressionEvaluator: IInternalEvaluator) => (term: Term & Quad) => Term): Builder {\n return this.set([ 'quad' ], expressionEvaluator => ([ term ]: [Term & Quad]) => op(expressionEvaluator)(term));\n }\n\n public onLiteral1<T extends ISerializable>(\n op: (expressionEvaluator: IInternalEvaluator) =>\n (lit: E.Literal<T>) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ 'literal' ],\n expressionEvaluator => ([ term ]: [E.Literal<T>]) => op(expressionEvaluator)(term),\n addInvalidHandling,\n );\n }\n\n public onBoolean1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.BooleanLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_BOOLEAN ],\n expressionEvaluator => ([ lit ]: [E.BooleanLiteral]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onBoolean1Typed(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: boolean) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_BOOLEAN ],\n expressionEvaluator => ([ lit ]: [E.BooleanLiteral]) => op(expressionEvaluator)(lit.typedValue),\n addInvalidHandling,\n );\n }\n\n public onString1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<string>) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_STRING ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onString1Typed(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: string) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.XSD_STRING ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit.typedValue),\n addInvalidHandling,\n );\n }\n\n public onLangString1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.LangStringLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.RDF_LANG_STRING ],\n expressionEvaluator => ([ lit ]: [E.LangStringLiteral]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onDirLangString1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.DirLangStringLiteral) => Term,\n addInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeURL.RDF_DIR_LANG_STRING ],\n expressionEvaluator => ([ lit ]: [E.DirLangStringLiteral]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onStringly1(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<string>) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeAlias.SPARQL_STRINGLY ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit),\n addInvalidHandling,\n );\n }\n\n public onStringly1Typed(\n op: (expressionEvaluator: IInternalEvaluator) => (lit: string) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeAlias.SPARQL_STRINGLY ],\n expressionEvaluator => ([ lit ]: [E.Literal<string>]) => op(expressionEvaluator)(lit.typedValue),\n addInvalidHandling,\n );\n }\n\n public onNumeric1(\n op: (expressionEvaluator: IInternalEvaluator) => (val: E.NumericLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this.set(\n [ C.TypeAlias.SPARQL_NUMERIC ],\n expressionEvaluator => ([ val ]: [E.NumericLiteral]) => op(expressionEvaluator)(val),\n addInvalidHandling,\n );\n }\n\n public onDateTime1(\n op: (expressionEvaluator: IInternalEvaluator) => (date: E.DateTimeLiteral) => Term,\naddInvalidHandling = true,\n ): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_DATE_TIME ],\n expressionEvaluator => ([ val ]: [E.DateTimeLiteral]) => op(expressionEvaluator)(val),\n addInvalidHandling,\n );\n }\n\n /**\n * We return the base types and not the provided types because we don't want to create invalid terms.\n * Providing negative number to a function unary - for example should not\n * return a term of type negative number having a positive value.\n * @param op the numeric operator performed\n * @param addInvalidHandling whether to add invalid handling,\n * whether to add @param op in @see wrapInvalidLexicalProtected\n */\n public numericConverter(\n op: (expressionEvaluator: IInternalEvaluator) => (val: number) => number,\naddInvalidHandling = true,\n ): Builder {\n const evalHelper = (expressionEvaluator: IInternalEvaluator) => (arg: Term): number =>\n op(expressionEvaluator)((<Literal<number>>arg).typedValue);\n return this.onUnary(TypeURL.XSD_INTEGER, expressionEvaluator => arg =>\n integer(evalHelper(expressionEvaluator)(arg)), addInvalidHandling)\n .onUnary(TypeURL.XSD_DECIMAL, expressionEvaluator => arg =>\n decimal(evalHelper(expressionEvaluator)(arg)), addInvalidHandling)\n .onUnary(TypeURL.XSD_FLOAT, expressionEvaluator => arg =>\n float(evalHelper(expressionEvaluator)(arg)), addInvalidHandling)\n .onUnary(TypeURL.XSD_DOUBLE, expressionEvaluator => arg =>\n double(evalHelper(expressionEvaluator)(arg)), addInvalidHandling);\n }\n\n /**\n * !!! Be aware when using this function, it will create different overloads with different return types !!!\n * Arithmetic operators take 2 numeric arguments, and return a single numerical\n * value. The type of the return value is heavily dependent on the types of the\n * input arguments. In JS everything is a double, but in SPARQL it is not.\n *\n * The different arguments are handled by type promotion and subtype substitution.\n * The way numeric function arguments work is described here:\n * https://www.w3.org/TR/xpath20/#mapping\n * Above url is referenced in the sparql spec: https://www.w3.org/TR/sparql11-query/#OperatorMapping\n */\n public arithmetic(\n op: (expressionEvaluator: IInternalEvaluator) => (left: number, right: number) => number,\naddInvalidHandling = true,\n ): Builder {\n const evalHelper = (expressionEvaluator: IInternalEvaluator) => (left: Term, right: Term): number =>\n op(expressionEvaluator)((<Literal<number>>left).typedValue, (<Literal<number>>right).typedValue);\n return this.onBinary([ TypeURL.XSD_INTEGER, TypeURL.XSD_INTEGER ], expressionEvaluator => (left, right) =>\n integer(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling)\n .onBinary([ TypeURL.XSD_DECIMAL, TypeURL.XSD_DECIMAL ], expressionEvaluator => (left, right) =>\n decimal(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling)\n .onBinary([ TypeURL.XSD_FLOAT, TypeURL.XSD_FLOAT ], expressionEvaluator => (left, right) =>\n float(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling)\n .onBinary([ TypeURL.XSD_DOUBLE, TypeURL.XSD_DOUBLE ], expressionEvaluator => (left, right) =>\n double(evalHelper(expressionEvaluator)(left, right)), addInvalidHandling);\n }\n\n public numberTest(\n test: (expressionEvaluator: IInternalEvaluator) => (left: number, right: number) => boolean,\n ): Builder {\n return this.numeric(expressionEvaluator => ([ left, right ]: E.NumericLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n });\n }\n\n public stringTest(\n test: (expressionEvaluator: IInternalEvaluator) => (left: string, right: string) => boolean,\naddInvalidHandling = true,\n ): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_STRING, C.TypeURL.XSD_STRING ],\n expressionEvaluator => ([ left, right ]: E.StringLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n },\n addInvalidHandling,\n );\n }\n\n public booleanTest(\n test: (expressionEvaluator: IInternalEvaluator) => (left: boolean, right: boolean) => boolean,\naddInvalidHandling = true,\n ): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_BOOLEAN, C.TypeURL.XSD_BOOLEAN ],\n expressionEvaluator => ([ left, right ]: E.BooleanLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n },\n addInvalidHandling,\n );\n }\n\n public dateTimeTest(test: (expressionEvaluator: IInternalEvaluator)\n => (left: IDateTimeRepresentation, right: IDateTimeRepresentation) => boolean, addInvalidHandling = true): Builder {\n return this\n .set(\n [ C.TypeURL.XSD_DATE_TIME, C.TypeURL.XSD_DATE_TIME ],\n expressionEvaluator => ([ left, right ]: E.DateTimeLiteral[]) => {\n const result = test(expressionEvaluator)(left.typedValue, right.typedValue);\n return bool(result);\n },\n addInvalidHandling,\n );\n }\n\n public numeric<T extends TermExpression>(op: ImplementationFunctionTuple<[T, T]>): Builder {\n return this.set([ C.TypeAlias.SPARQL_NUMERIC, C.TypeAlias.SPARQL_NUMERIC ], op);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Literal Construction helpers\n// ----------------------------------------------------------------------------\n\nexport function bool(val: boolean): E.BooleanLiteral {\n return new E.BooleanLiteral(val);\n}\n\nexport function integer(num: number): E.IntegerLiteral {\n return new E.IntegerLiteral(num);\n}\n\nexport function decimal(num: number): E.DecimalLiteral {\n return new E.DecimalLiteral(num);\n}\n\nexport function float(num: number): E.FloatLiteral {\n return new E.FloatLiteral(num);\n}\n\nexport function double(num: number): E.DoubleLiteral {\n return new E.DoubleLiteral(num);\n}\n\nexport function string(str: string): E.StringLiteral {\n return new E.StringLiteral(str);\n}\n\nexport function langString(str: string, lang: string): E.LangStringLiteral {\n return new E.LangStringLiteral(str, lang);\n}\n\nexport function dirLangString(str: string, lang: string, direction: 'ltr' | 'rtl'): E.DirLangStringLiteral {\n return new E.DirLangStringLiteral(str, lang, direction);\n}\n\nexport function dateTime(date: IDateTimeRepresentation, str: string): E.DateTimeLiteral {\n return new E.DateTimeLiteral(date, str);\n}\n\nexport function expressionToVar(\n dataFactory: ComunicaDataFactory,\n variableExpression: VariableExpression,\n): RDF.Variable {\n return dataFactory.variable(variableExpression.name.slice(1));\n}\n"]}
|
|
File without changes
|
|
@@ -8,6 +8,14 @@ const TypeHandling_1 = require("../util/TypeHandling");
|
|
|
8
8
|
* When adding any functionality to this class, make sure you add it to SpecialFunctions as well.
|
|
9
9
|
*/
|
|
10
10
|
class OverloadTree {
|
|
11
|
+
identifier;
|
|
12
|
+
implementation;
|
|
13
|
+
// We need this field. e.g. decimal decimal should be kept even when double double is added.
|
|
14
|
+
// We use promotion count to check priority.
|
|
15
|
+
promotionCount;
|
|
16
|
+
generalOverloads;
|
|
17
|
+
literalOverLoads;
|
|
18
|
+
depth;
|
|
11
19
|
constructor(identifier, depth) {
|
|
12
20
|
this.identifier = identifier;
|
|
13
21
|
this.implementation = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverloadTree.js","sourceRoot":"","sources":["OverloadTree.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n FunctionArgumentsCache,\n GeneralSuperTypeDict,\n IFunctionArgumentsCacheObj,\n ImplementationFunction,\n ISuperTypeProvider,\n TermExpression,\n TermType,\n} from '@comunica/types';\nimport { isLiteralTermExpression } from '../expressions';\nimport type * as C from '../util/Consts';\nimport type { OverrideType } from '../util/TypeHandling';\nimport {\n asGeneralType,\n asKnownLiteralType,\n asOverrideType,\n getSuperTypes,\n superTypeDictTable,\n typePromotion,\n} from '../util/TypeHandling';\n\n// Function and operator arguments are 'flattened' in the SPARQL spec.\n// If the argument is a literal, the datatype often also matters.\nexport type ArgumentType = 'term' | TermType | C.TypeURL | C.TypeAlias;\n\nexport type SearchStack = OverloadTree[];\n\n/**\n * Maps argument types on their specific implementation in a tree like structure.\n * When adding any functionality to this class, make sure you add it to SpecialFunctions as well.\n */\nexport class OverloadTree {\n private implementation?: ImplementationFunction | undefined;\n // We need this field. e.g. decimal decimal should be kept even when double double is added.\n // We use promotion count to check priority.\n private promotionCount?: number | undefined;\n private readonly generalOverloads: Record<'term' | TermType, OverloadTree>;\n private readonly literalOverLoads: [OverrideType, OverloadTree][];\n private readonly depth: number;\n\n public constructor(private readonly identifier: string, depth?: number) {\n this.implementation = undefined;\n this.generalOverloads = Object.create(null);\n this.literalOverLoads = [];\n this.depth = depth ?? 0;\n this.promotionCount = undefined;\n }\n\n private getSubtree(overrideType: ArgumentType): OverloadTree | undefined {\n const generalType = asGeneralType(overrideType);\n if (generalType) {\n return this.generalOverloads[generalType];\n }\n for (const [ type, overloadTree ] of this.literalOverLoads) {\n if (overrideType === type) {\n return overloadTree;\n }\n }\n return undefined;\n }\n\n /**\n * Get the implementation for the types that exactly match @param args .\n */\n public getImplementationExact(args: ArgumentType[]): ImplementationFunction | undefined {\n // eslint-disable-next-line ts/no-this-alias\n let node: OverloadTree | undefined = this;\n for (const expression of args) {\n node = node.getSubtree(expression);\n if (!node) {\n return undefined;\n }\n }\n return node.implementation;\n }\n\n /**\n * Searches in a depth first way for the best matching overload. considering this a the tree's root.\n * @param args the arguments to the function.\n * @param superTypeProvider\n * @param functionArgumentsCache\n */\n public search(\n args: TermExpression[],\n superTypeProvider: ISuperTypeProvider,\n functionArgumentsCache: FunctionArgumentsCache,\n ):\n ImplementationFunction | undefined {\n let cacheIter: IFunctionArgumentsCacheObj | undefined = functionArgumentsCache[this.identifier];\n let searchIndex = 0;\n while (searchIndex < args.length && cacheIter?.cache) {\n const term = args[searchIndex];\n const literalExpression = isLiteralTermExpression(term);\n cacheIter = cacheIter.cache[literalExpression ? literalExpression.dataType : term.termType];\n searchIndex++;\n }\n if (searchIndex === args.length && cacheIter?.func) {\n return cacheIter.func;\n }\n\n // SearchStack is a stack of all node's that need to be checked for implementation.\n // It provides an easy way to keep order in our search.\n const searchStack: { node: OverloadTree; index: number }[] = [];\n const startIndex = 0;\n if (args.length === 0) {\n return this.implementation;\n }\n // GetSubTreeWithArg return a SearchStack containing the node's that should be contacted next.\n // We also log the index since there is no other way to remember this index.\n // the provided stack should be pushed on top of our search stack since it also has it's order.\n searchStack.push(...this.getSubTreeWithArg(args[startIndex], superTypeProvider).map(node =>\n ({ node, index: startIndex + 1 })));\n while (searchStack.length > 0) {\n const { index, node } = <{ node: OverloadTree; index: number }>searchStack.pop();\n // We check the implementation because it would be possible a path is created but not implemented.\n // ex: f(double, double, double) and f(term, term). and calling f(double, double).\n if (index === args.length && node.implementation) {\n this.addToCache(functionArgumentsCache, args, node.implementation);\n return node.implementation;\n }\n searchStack.push(...node.getSubTreeWithArg(args[index], superTypeProvider).map(item =>\n ({ node: item, index: index + 1 })));\n }\n // Calling a function with one argument but finding no implementation should return no implementation.\n // Not even the one with no arguments.\n return undefined;\n }\n\n private addToCache(\n functionArgumentsCache: FunctionArgumentsCache,\n args: TermExpression[],\n func?: ImplementationFunction | undefined,\n ): void {\n function getDefault(lruCache: FunctionArgumentsCache, key: string): IFunctionArgumentsCacheObj {\n if (!(key in lruCache)) {\n lruCache[key] = {};\n }\n return lruCache[key];\n }\n let cache = getDefault(functionArgumentsCache, this.identifier);\n for (const term of args) {\n const literalExpression = isLiteralTermExpression(term);\n const key = literalExpression ? literalExpression.dataType : term.termType;\n cache.cache = cache.cache ?? {};\n cache = getDefault(cache.cache, key);\n }\n cache.func = func;\n }\n\n /**\n * Adds an overload to the tree structure considering this as the tree's root.\n * @param argumentTypes a list of argumentTypes that would need to be provided in\n * the same order to get the implementation.\n * @param func the implementation for this overload.\n */\n public addOverload(argumentTypes: ArgumentType[], func: ImplementationFunction): void {\n this._addOverload([ ...argumentTypes ], func, 0);\n }\n\n private _addOverload(argumentTypes: ArgumentType[], func: ImplementationFunction, promotionCount: number): void {\n const [ argumentType, ..._argumentTypes ] = argumentTypes;\n if (!argumentType) {\n if (this.promotionCount === undefined || promotionCount <= this.promotionCount) {\n this.promotionCount = promotionCount;\n this.implementation = func;\n }\n return;\n }\n let nextTree = this.getSubtree(argumentType);\n if (!nextTree) {\n const newNode = new OverloadTree(this.identifier, this.depth + 1);\n const generalType = asGeneralType(argumentType);\n if (generalType) {\n this.generalOverloads[generalType] = newNode;\n }\n const overrideType = asOverrideType(argumentType);\n if (overrideType) {\n this.literalOverLoads.push([ overrideType, newNode ]);\n }\n nextTree = newNode;\n }\n nextTree._addOverload(_argumentTypes, func, promotionCount);\n\n if (typePromotion[argumentType]) {\n for (const ret of typePromotion[argumentType]!) {\n this.addPromotedOverload(\n ret.typeToPromote,\n func,\n ret.conversionFunction,\n _argumentTypes,\n promotionCount,\n );\n }\n }\n }\n\n private addPromotedOverload(\n typeToPromote: OverrideType,\n func: ImplementationFunction,\n conversionFunction: (arg: TermExpression) => TermExpression,\n argumentTypes: ArgumentType[],\n promotionCount: number,\n ): void {\n let nextTree = this.getSubtree(typeToPromote);\n if (!nextTree) {\n const newNode = new OverloadTree(this.identifier, this.depth + 1);\n this.literalOverLoads.push([ typeToPromote, newNode ]);\n nextTree = newNode;\n }\n nextTree._addOverload(argumentTypes, funcConf => args => func(funcConf)([\n ...args.slice(0, this.depth),\n conversionFunction(args[this.depth]),\n ...args.slice(this.depth + 1, args.length),\n ]), promotionCount + 1);\n }\n\n /**\n * @param arg term to try and match to possible overloads of this node.\n * @param openWorldType interface allowing to discover relations between types.\n * @returns SearchStack a stack with top element the next node that should be asked for implementation or overload.\n */\n private getSubTreeWithArg(arg: TermExpression, openWorldType: ISuperTypeProvider): SearchStack {\n const res: SearchStack = [];\n const literalExpression = isLiteralTermExpression(arg);\n // These types refer to Type exported by lib/util/Consts.ts\n if (this.generalOverloads.term) {\n res.push(this.generalOverloads.term);\n }\n // TermTypes are defined in E.TermType.\n if (this.generalOverloads[arg.termType]) {\n res.push(this.generalOverloads[arg.termType]);\n }\n if (literalExpression) {\n // Defending implementation. Mainly the scary sort.\n // This function has cost O(n) + O(m * log(m)) with n = amount of overloads and m = amount of matched overloads\n // We map over each of the overloads, filter only the once that can be used (this is normally 1 or 2).\n // The sort function on an array with 1 or 2 arguments will be negligible.\n const concreteType = asKnownLiteralType(literalExpression.dataType);\n let subExtensionTable: GeneralSuperTypeDict;\n if (concreteType) {\n // Concrete dataType is known by utils-expression-evaluator.\n subExtensionTable = superTypeDictTable[concreteType];\n } else {\n // Datatype is a custom datatype\n subExtensionTable = getSuperTypes(literalExpression.dataType, openWorldType);\n }\n const matches: [number, OverloadTree][] = this.literalOverLoads.filter(([ matchType, _ ]) =>\n matchType in subExtensionTable)\n .map(([ matchType, tree ]) => [ subExtensionTable[<C.KnownLiteralTypes> matchType], tree ]);\n // eslint-disable-next-line unused-imports/no-unused-vars\n matches.sort(([ prioA, matchTypeA ], [ prioB, matchTypeB ]) => prioA - prioB);\n res.push(...matches.map(([ _, sortedType ]) => sortedType));\n }\n return res;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"OverloadTree.js","sourceRoot":"","sources":["OverloadTree.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n FunctionArgumentsCache,\n GeneralSuperTypeDict,\n IFunctionArgumentsCacheObj,\n ImplementationFunction,\n ISuperTypeProvider,\n TermExpression,\n TermType,\n} from '@comunica/types';\nimport { isLiteralTermExpression } from '../expressions';\nimport type * as C from '../util/Consts';\nimport type { OverrideType } from '../util/TypeHandling';\nimport {\n asGeneralType,\n asKnownLiteralType,\n asOverrideType,\n getSuperTypes,\n superTypeDictTable,\n typePromotion,\n} from '../util/TypeHandling';\n\n// Function and operator arguments are 'flattened' in the SPARQL spec.\n// If the argument is a literal, the datatype often also matters.\nexport type ArgumentType = 'term' | TermType | C.TypeURL | C.TypeAlias;\n\nexport type SearchStack = OverloadTree[];\n\n/**\n * Maps argument types on their specific implementation in a tree like structure.\n * When adding any functionality to this class, make sure you add it to SpecialFunctions as well.\n */\nexport class OverloadTree {\n private implementation?: ImplementationFunction | undefined;\n // We need this field. e.g. decimal decimal should be kept even when double double is added.\n // We use promotion count to check priority.\n private promotionCount?: number | undefined;\n private readonly generalOverloads: Record<'term' | TermType, OverloadTree>;\n private readonly literalOverLoads: [OverrideType, OverloadTree][];\n private readonly depth: number;\n\n public constructor(private readonly identifier: string, depth?: number) {\n this.implementation = undefined;\n this.generalOverloads = Object.create(null);\n this.literalOverLoads = [];\n this.depth = depth ?? 0;\n this.promotionCount = undefined;\n }\n\n private getSubtree(overrideType: ArgumentType): OverloadTree | undefined {\n const generalType = asGeneralType(overrideType);\n if (generalType) {\n return this.generalOverloads[generalType];\n }\n for (const [ type, overloadTree ] of this.literalOverLoads) {\n if (overrideType === type) {\n return overloadTree;\n }\n }\n return undefined;\n }\n\n /**\n * Get the implementation for the types that exactly match @param args .\n */\n public getImplementationExact(args: ArgumentType[]): ImplementationFunction | undefined {\n // eslint-disable-next-line ts/no-this-alias\n let node: OverloadTree | undefined = this;\n for (const expression of args) {\n node = node.getSubtree(expression);\n if (!node) {\n return undefined;\n }\n }\n return node.implementation;\n }\n\n /**\n * Searches in a depth first way for the best matching overload. considering this a the tree's root.\n * @param args the arguments to the function.\n * @param superTypeProvider\n * @param functionArgumentsCache\n */\n public search(\n args: TermExpression[],\n superTypeProvider: ISuperTypeProvider,\n functionArgumentsCache: FunctionArgumentsCache,\n ):\n ImplementationFunction | undefined {\n let cacheIter: IFunctionArgumentsCacheObj | undefined = functionArgumentsCache[this.identifier];\n let searchIndex = 0;\n while (searchIndex < args.length && cacheIter?.cache) {\n const term = args[searchIndex];\n const literalExpression = isLiteralTermExpression(term);\n cacheIter = cacheIter.cache[literalExpression ? literalExpression.dataType : term.termType];\n searchIndex++;\n }\n if (searchIndex === args.length && cacheIter?.func) {\n return cacheIter.func;\n }\n\n // SearchStack is a stack of all node's that need to be checked for implementation.\n // It provides an easy way to keep order in our search.\n const searchStack: { node: OverloadTree; index: number }[] = [];\n const startIndex = 0;\n if (args.length === 0) {\n return this.implementation;\n }\n // GetSubTreeWithArg return a SearchStack containing the node's that should be contacted next.\n // We also log the index since there is no other way to remember this index.\n // the provided stack should be pushed on top of our search stack since it also has it's order.\n searchStack.push(...this.getSubTreeWithArg(args[startIndex], superTypeProvider).map(node =>\n ({ node, index: startIndex + 1 })));\n while (searchStack.length > 0) {\n const { index, node } = <{ node: OverloadTree; index: number }>searchStack.pop();\n // We check the implementation because it would be possible a path is created but not implemented.\n // ex: f(double, double, double) and f(term, term). and calling f(double, double).\n if (index === args.length && node.implementation) {\n this.addToCache(functionArgumentsCache, args, node.implementation);\n return node.implementation;\n }\n searchStack.push(...node.getSubTreeWithArg(args[index], superTypeProvider).map(item =>\n ({ node: item, index: index + 1 })));\n }\n // Calling a function with one argument but finding no implementation should return no implementation.\n // Not even the one with no arguments.\n return undefined;\n }\n\n private addToCache(\n functionArgumentsCache: FunctionArgumentsCache,\n args: TermExpression[],\n func?: ImplementationFunction | undefined,\n ): void {\n function getDefault(lruCache: FunctionArgumentsCache, key: string): IFunctionArgumentsCacheObj {\n if (!(key in lruCache)) {\n lruCache[key] = {};\n }\n return lruCache[key];\n }\n let cache = getDefault(functionArgumentsCache, this.identifier);\n for (const term of args) {\n const literalExpression = isLiteralTermExpression(term);\n const key = literalExpression ? literalExpression.dataType : term.termType;\n cache.cache = cache.cache ?? {};\n cache = getDefault(cache.cache, key);\n }\n cache.func = func;\n }\n\n /**\n * Adds an overload to the tree structure considering this as the tree's root.\n * @param argumentTypes a list of argumentTypes that would need to be provided in\n * the same order to get the implementation.\n * @param func the implementation for this overload.\n */\n public addOverload(argumentTypes: ArgumentType[], func: ImplementationFunction): void {\n this._addOverload([ ...argumentTypes ], func, 0);\n }\n\n private _addOverload(argumentTypes: ArgumentType[], func: ImplementationFunction, promotionCount: number): void {\n const [ argumentType, ..._argumentTypes ] = argumentTypes;\n if (!argumentType) {\n if (this.promotionCount === undefined || promotionCount <= this.promotionCount) {\n this.promotionCount = promotionCount;\n this.implementation = func;\n }\n return;\n }\n let nextTree = this.getSubtree(argumentType);\n if (!nextTree) {\n const newNode = new OverloadTree(this.identifier, this.depth + 1);\n const generalType = asGeneralType(argumentType);\n if (generalType) {\n this.generalOverloads[generalType] = newNode;\n }\n const overrideType = asOverrideType(argumentType);\n if (overrideType) {\n this.literalOverLoads.push([ overrideType, newNode ]);\n }\n nextTree = newNode;\n }\n nextTree._addOverload(_argumentTypes, func, promotionCount);\n\n if (typePromotion[argumentType]) {\n for (const ret of typePromotion[argumentType]) {\n this.addPromotedOverload(\n ret.typeToPromote,\n func,\n ret.conversionFunction,\n _argumentTypes,\n promotionCount,\n );\n }\n }\n }\n\n private addPromotedOverload(\n typeToPromote: OverrideType,\n func: ImplementationFunction,\n conversionFunction: (arg: TermExpression) => TermExpression,\n argumentTypes: ArgumentType[],\n promotionCount: number,\n ): void {\n let nextTree = this.getSubtree(typeToPromote);\n if (!nextTree) {\n const newNode = new OverloadTree(this.identifier, this.depth + 1);\n this.literalOverLoads.push([ typeToPromote, newNode ]);\n nextTree = newNode;\n }\n nextTree._addOverload(argumentTypes, funcConf => args => func(funcConf)([\n ...args.slice(0, this.depth),\n conversionFunction(args[this.depth]),\n ...args.slice(this.depth + 1, args.length),\n ]), promotionCount + 1);\n }\n\n /**\n * @param arg term to try and match to possible overloads of this node.\n * @param openWorldType interface allowing to discover relations between types.\n * @returns SearchStack a stack with top element the next node that should be asked for implementation or overload.\n */\n private getSubTreeWithArg(arg: TermExpression, openWorldType: ISuperTypeProvider): SearchStack {\n const res: SearchStack = [];\n const literalExpression = isLiteralTermExpression(arg);\n // These types refer to Type exported by lib/util/Consts.ts\n if (this.generalOverloads.term) {\n res.push(this.generalOverloads.term);\n }\n // TermTypes are defined in E.TermType.\n if (this.generalOverloads[arg.termType]) {\n res.push(this.generalOverloads[arg.termType]);\n }\n if (literalExpression) {\n // Defending implementation. Mainly the scary sort.\n // This function has cost O(n) + O(m * log(m)) with n = amount of overloads and m = amount of matched overloads\n // We map over each of the overloads, filter only the once that can be used (this is normally 1 or 2).\n // The sort function on an array with 1 or 2 arguments will be negligible.\n const concreteType = asKnownLiteralType(literalExpression.dataType);\n let subExtensionTable: GeneralSuperTypeDict;\n if (concreteType) {\n // Concrete dataType is known by utils-expression-evaluator.\n subExtensionTable = superTypeDictTable[concreteType];\n } else {\n // Datatype is a custom datatype\n subExtensionTable = getSuperTypes(literalExpression.dataType, openWorldType);\n }\n const matches: [number, OverloadTree][] = this.literalOverLoads.filter(([ matchType, _ ]) =>\n matchType in subExtensionTable)\n .map(([ matchType, tree ]) => [ subExtensionTable[<C.KnownLiteralTypes> matchType], tree ]);\n // eslint-disable-next-line unused-imports/no-unused-vars\n matches.sort(([ prioA, matchTypeA ], [ prioB, matchTypeB ]) => prioA - prioB);\n res.push(...matches.map(([ _, sortedType ]) => sortedType));\n }\n return res;\n }\n}\n"]}
|
package/lib/index.d.ts
CHANGED
|
File without changes
|
package/lib/index.js
CHANGED
|
File without changes
|
package/lib/index.js.map
CHANGED
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Expression, ISuperTypeProvider } from '@comunica/types';
|
|
2
|
+
import { Algebra } from '@comunica/utils-algebra';
|
|
2
3
|
import type * as RDF from '@rdfjs/types';
|
|
3
|
-
import type { Algebra as Alg } from 'sparqlalgebrajs';
|
|
4
4
|
import * as E from '../expressions';
|
|
5
5
|
export interface ITermTransformer {
|
|
6
6
|
transformRDFTermUnsafe: (term: RDF.Term) => E.Term;
|
|
@@ -16,7 +16,7 @@ export declare class TermTransformer implements ITermTransformer {
|
|
|
16
16
|
* @param term RDF term to transform into internal representation of a term
|
|
17
17
|
*/
|
|
18
18
|
transformRDFTermUnsafe(term: RDF.Term): E.Term;
|
|
19
|
-
protected transformTerm(term:
|
|
19
|
+
protected transformTerm(term: Algebra.TermExpression): Expression;
|
|
20
20
|
/**
|
|
21
21
|
* @param lit the rdf literal we want to transform to an internal Literal expression.
|
|
22
22
|
*/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TermTransformer = void 0;
|
|
4
|
+
const utils_algebra_1 = require("@comunica/utils-algebra");
|
|
4
5
|
const RDFString = require("rdf-string");
|
|
5
|
-
const sparqlalgebrajs_1 = require("sparqlalgebrajs");
|
|
6
6
|
const E = require("../expressions");
|
|
7
7
|
const Consts_1 = require("../util/Consts");
|
|
8
8
|
const Err = require("../util/Errors");
|
|
@@ -11,6 +11,7 @@ const Parsing_1 = require("../util/Parsing");
|
|
|
11
11
|
const P = require("../util/Parsing");
|
|
12
12
|
const TypeHandling_1 = require("../util/TypeHandling");
|
|
13
13
|
class TermTransformer {
|
|
14
|
+
superTypeProvider;
|
|
14
15
|
constructor(superTypeProvider) {
|
|
15
16
|
this.superTypeProvider = superTypeProvider;
|
|
16
17
|
}
|
|
@@ -23,8 +24,8 @@ class TermTransformer {
|
|
|
23
24
|
transformRDFTermUnsafe(term) {
|
|
24
25
|
return this.transformTerm({
|
|
25
26
|
term,
|
|
26
|
-
type:
|
|
27
|
-
|
|
27
|
+
type: utils_algebra_1.Algebra.Types.EXPRESSION,
|
|
28
|
+
subType: utils_algebra_1.Algebra.ExpressionTypes.TERM,
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
31
|
transformTerm(term) {
|
|
@@ -68,6 +69,9 @@ class TermTransformer {
|
|
|
68
69
|
if (Consts_1.TypeURL.RDF_LANG_STRING in superTypeDict) {
|
|
69
70
|
return new E.LangStringLiteral(lit.value, lit.language);
|
|
70
71
|
}
|
|
72
|
+
if (Consts_1.TypeURL.RDF_DIR_LANG_STRING in superTypeDict) {
|
|
73
|
+
return new E.DirLangStringLiteral(lit.value, lit.language, lit.direction);
|
|
74
|
+
}
|
|
71
75
|
if (Consts_1.TypeURL.XSD_YEAR_MONTH_DURATION in superTypeDict) {
|
|
72
76
|
return new E.YearMonthDurationLiteral((0, Parsing_1.parseYearMonthDuration)(lit.value), lit.value, dataType);
|
|
73
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TermTransformer.js","sourceRoot":"","sources":["TermTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Expression, GeneralSuperTypeDict, ISuperTypeProvider } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport * as RDFString from 'rdf-string';\nimport type { Algebra as Alg } from 'sparqlalgebrajs';\nimport { Algebra } from 'sparqlalgebrajs';\nimport * as E from '../expressions';\nimport { TypeURL } from '../util/Consts';\nimport * as Err from '../util/Errors';\nimport { isExpressionError } from '../util/Errors';\nimport {\n parseDate,\n parseDateTime,\n parseDayTimeDuration,\n parseDuration,\n parseTime,\n parseYearMonthDuration,\n} from '../util/Parsing';\nimport * as P from '../util/Parsing';\nimport { getSuperTypeDict } from '../util/TypeHandling';\n\nexport interface ITermTransformer {\n transformRDFTermUnsafe: (term: RDF.Term) => E.Term;\n transformLiteral: (lit: RDF.Literal) => E.Literal<any>;\n}\n\nexport class TermTransformer implements ITermTransformer {\n public constructor(protected readonly superTypeProvider: ISuperTypeProvider) {}\n\n /**\n * Transforms an RDF term to the internal representation of a term,\n * assuming it is not a variable, which would be an expression (internally).\n *\n * @param term RDF term to transform into internal representation of a term\n */\n public transformRDFTermUnsafe(term: RDF.Term): E.Term {\n return <E.Term> this.transformTerm({\n term,\n type: Algebra.types.EXPRESSION,\n expressionType: Algebra.expressionTypes.TERM,\n });\n }\n\n protected transformTerm(term: Alg.TermExpression): Expression {\n if (!term.term) {\n throw new Err.InvalidExpression(term);\n }\n\n switch (term.term.termType) {\n case 'Variable':\n return new E.Variable(RDFString.termToString(term.term));\n case 'Literal':\n return this.transformLiteral(term.term);\n case 'NamedNode':\n return new E.NamedNode(term.term.value);\n case 'BlankNode':\n return new E.BlankNode(term.term.value);\n case 'Quad':\n return new E.Quad(\n this.transformRDFTermUnsafe(term.term.subject),\n this.transformRDFTermUnsafe(term.term.predicate),\n this.transformRDFTermUnsafe(term.term.object),\n this.transformRDFTermUnsafe(term.term.graph),\n );\n case 'DefaultGraph':\n return new E.DefaultGraph();\n }\n }\n\n /**\n * @param lit the rdf literal we want to transform to an internal Literal expression.\n */\n public transformLiteral(lit: RDF.Literal): E.Literal<any> {\n // Both here and within the switch we transform to LangStringLiteral or StringLiteral.\n // We do this when we detect a simple literal being used.\n // Original issue regarding this behaviour: https://github.com/w3c/sparql-12/issues/112\n if (!lit.datatype || [ null, undefined, '' ].includes(lit.datatype.value)) {\n return lit.language ?\n new E.LangStringLiteral(lit.value, lit.language) :\n new E.StringLiteral(lit.value);\n }\n\n const dataType = lit.datatype.value;\n const superTypeDict: GeneralSuperTypeDict = getSuperTypeDict(dataType, this.superTypeProvider);\n\n // The order of checking matters! Check most specific types first!\n try {\n if (TypeURL.XSD_STRING in superTypeDict) {\n return new E.StringLiteral(lit.value, dataType);\n }\n if (TypeURL.RDF_LANG_STRING in superTypeDict) {\n return new E.LangStringLiteral(lit.value, lit.language);\n }\n if (TypeURL.XSD_YEAR_MONTH_DURATION in superTypeDict) {\n return new E.YearMonthDurationLiteral(parseYearMonthDuration(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DAY_TIME_DURATION in superTypeDict) {\n return new E.DayTimeDurationLiteral(parseDayTimeDuration(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DURATION in superTypeDict) {\n return new E.DurationLiteral(parseDuration(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DATE_TIME in superTypeDict) {\n const dateVal: Date = new Date(lit.value);\n if (Number.isNaN(dateVal.getTime())) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n return new E.DateTimeLiteral(parseDateTime(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DATE in superTypeDict) {\n return new E.DateLiteral(parseDate(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_TIME in superTypeDict) {\n return new E.TimeLiteral(parseTime(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_BOOLEAN in superTypeDict) {\n if (lit.value !== 'true' && lit.value !== 'false' && lit.value !== '1' && lit.value !== '0') {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n return new E.BooleanLiteral(lit.value === 'true' || lit.value === '1', lit.value);\n }\n if (TypeURL.XSD_DECIMAL in superTypeDict) {\n const intVal: number | undefined = P.parseXSDDecimal(lit.value);\n if (intVal === undefined) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n if (TypeURL.XSD_INTEGER in superTypeDict) {\n return new E.IntegerLiteral(intVal, dataType, lit.value);\n }\n // If type is not an integer it's just a decimal.\n return new E.DecimalLiteral(intVal, dataType, lit.value);\n }\n const isFloat = TypeURL.XSD_FLOAT in superTypeDict;\n const isDouble = TypeURL.XSD_DOUBLE in superTypeDict;\n if (isFloat || isDouble) {\n const doubleVal: number | undefined = P.parseXSDFloat(lit.value);\n if (doubleVal === undefined) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n if (isFloat) {\n return new E.FloatLiteral(doubleVal, dataType, lit.value);\n }\n return new E.DoubleLiteral(doubleVal, dataType, lit.value);\n }\n\n return new E.Literal<string>(lit.value, dataType, lit.value);\n } catch (error: unknown) {\n if (isExpressionError(<Error> error)) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n throw error;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TermTransformer.js","sourceRoot":"","sources":["TermTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Expression, GeneralSuperTypeDict, ISuperTypeProvider } from '@comunica/types';\nimport { Algebra } from '@comunica/utils-algebra';\nimport type * as RDF from '@rdfjs/types';\nimport * as RDFString from 'rdf-string';\nimport * as E from '../expressions';\nimport { TypeURL } from '../util/Consts';\nimport * as Err from '../util/Errors';\nimport { isExpressionError } from '../util/Errors';\nimport {\n parseDate,\n parseDateTime,\n parseDayTimeDuration,\n parseDuration,\n parseTime,\n parseYearMonthDuration,\n} from '../util/Parsing';\nimport * as P from '../util/Parsing';\nimport { getSuperTypeDict } from '../util/TypeHandling';\n\nexport interface ITermTransformer {\n transformRDFTermUnsafe: (term: RDF.Term) => E.Term;\n transformLiteral: (lit: RDF.Literal) => E.Literal<any>;\n}\n\nexport class TermTransformer implements ITermTransformer {\n public constructor(protected readonly superTypeProvider: ISuperTypeProvider) {}\n\n /**\n * Transforms an RDF term to the internal representation of a term,\n * assuming it is not a variable, which would be an expression (internally).\n *\n * @param term RDF term to transform into internal representation of a term\n */\n public transformRDFTermUnsafe(term: RDF.Term): E.Term {\n return <E.Term> this.transformTerm({\n term,\n type: Algebra.Types.EXPRESSION,\n subType: Algebra.ExpressionTypes.TERM,\n });\n }\n\n protected transformTerm(term: Algebra.TermExpression): Expression {\n if (!term.term) {\n throw new Err.InvalidExpression(term);\n }\n\n switch (term.term.termType) {\n case 'Variable':\n return new E.Variable(RDFString.termToString(term.term));\n case 'Literal':\n return this.transformLiteral(term.term);\n case 'NamedNode':\n return new E.NamedNode(term.term.value);\n case 'BlankNode':\n return new E.BlankNode(term.term.value);\n case 'Quad':\n return new E.Quad(\n this.transformRDFTermUnsafe(term.term.subject),\n this.transformRDFTermUnsafe(term.term.predicate),\n this.transformRDFTermUnsafe(term.term.object),\n this.transformRDFTermUnsafe(term.term.graph),\n );\n case 'DefaultGraph':\n return new E.DefaultGraph();\n }\n }\n\n /**\n * @param lit the rdf literal we want to transform to an internal Literal expression.\n */\n public transformLiteral(lit: RDF.Literal): E.Literal<any> {\n // Both here and within the switch we transform to LangStringLiteral or StringLiteral.\n // We do this when we detect a simple literal being used.\n // Original issue regarding this behaviour: https://github.com/w3c/sparql-12/issues/112\n if (!lit.datatype || [ null, undefined, '' ].includes(lit.datatype.value)) {\n return lit.language ?\n new E.LangStringLiteral(lit.value, lit.language) :\n new E.StringLiteral(lit.value);\n }\n\n const dataType = lit.datatype.value;\n const superTypeDict: GeneralSuperTypeDict = getSuperTypeDict(dataType, this.superTypeProvider);\n\n // The order of checking matters! Check most specific types first!\n try {\n if (TypeURL.XSD_STRING in superTypeDict) {\n return new E.StringLiteral(lit.value, dataType);\n }\n if (TypeURL.RDF_LANG_STRING in superTypeDict) {\n return new E.LangStringLiteral(lit.value, lit.language);\n }\n if (TypeURL.RDF_DIR_LANG_STRING in superTypeDict) {\n return new E.DirLangStringLiteral(lit.value, lit.language, <'ltr' | 'rtl'> lit.direction);\n }\n if (TypeURL.XSD_YEAR_MONTH_DURATION in superTypeDict) {\n return new E.YearMonthDurationLiteral(parseYearMonthDuration(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DAY_TIME_DURATION in superTypeDict) {\n return new E.DayTimeDurationLiteral(parseDayTimeDuration(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DURATION in superTypeDict) {\n return new E.DurationLiteral(parseDuration(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DATE_TIME in superTypeDict) {\n const dateVal: Date = new Date(lit.value);\n if (Number.isNaN(dateVal.getTime())) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n return new E.DateTimeLiteral(parseDateTime(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_DATE in superTypeDict) {\n return new E.DateLiteral(parseDate(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_TIME in superTypeDict) {\n return new E.TimeLiteral(parseTime(lit.value), lit.value, dataType);\n }\n if (TypeURL.XSD_BOOLEAN in superTypeDict) {\n if (lit.value !== 'true' && lit.value !== 'false' && lit.value !== '1' && lit.value !== '0') {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n return new E.BooleanLiteral(lit.value === 'true' || lit.value === '1', lit.value);\n }\n if (TypeURL.XSD_DECIMAL in superTypeDict) {\n const intVal: number | undefined = P.parseXSDDecimal(lit.value);\n if (intVal === undefined) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n if (TypeURL.XSD_INTEGER in superTypeDict) {\n return new E.IntegerLiteral(intVal, dataType, lit.value);\n }\n // If type is not an integer it's just a decimal.\n return new E.DecimalLiteral(intVal, dataType, lit.value);\n }\n const isFloat = TypeURL.XSD_FLOAT in superTypeDict;\n const isDouble = TypeURL.XSD_DOUBLE in superTypeDict;\n if (isFloat || isDouble) {\n const doubleVal: number | undefined = P.parseXSDFloat(lit.value);\n if (doubleVal === undefined) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n if (isFloat) {\n return new E.FloatLiteral(doubleVal, dataType, lit.value);\n }\n return new E.DoubleLiteral(doubleVal, dataType, lit.value);\n }\n\n return new E.Literal<string>(lit.value, dataType, lit.value);\n } catch (error: unknown) {\n if (isExpressionError(<Error> error)) {\n return new E.NonLexicalLiteral(undefined, dataType, this.superTypeProvider, lit.value);\n }\n throw error;\n }\n }\n}\n"]}
|
package/lib/util/Consts.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare enum TypeURL {
|
|
|
16
16
|
XSD_ANY_URI = "http://www.w3.org/2001/XMLSchema#anyURI",
|
|
17
17
|
XSD_STRING = "http://www.w3.org/2001/XMLSchema#string",
|
|
18
18
|
RDF_LANG_STRING = "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString",
|
|
19
|
+
RDF_DIR_LANG_STRING = "http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString",
|
|
19
20
|
XSD_BOOLEAN = "http://www.w3.org/2001/XMLSchema#boolean",
|
|
20
21
|
XSD_DATE_TIME = "http://www.w3.org/2001/XMLSchema#dateTime",
|
|
21
22
|
XSD_DATE_TIME_STAMP = "http://www.w3.org/2001/XMLSchema#dateTimeStamp",
|
|
@@ -82,14 +83,18 @@ export declare enum SparqlOperator {
|
|
|
82
83
|
IS_BLANK = "isblank",
|
|
83
84
|
IS_LITERAL = "isliteral",
|
|
84
85
|
IS_NUMERIC = "isnumeric",
|
|
86
|
+
HAS_LANG = "haslang",
|
|
87
|
+
HAS_LANGDIR = "haslangdir",
|
|
85
88
|
STR = "str",
|
|
86
89
|
LANG = "lang",
|
|
90
|
+
LANGDIR = "langdir",
|
|
87
91
|
DATATYPE = "datatype",
|
|
88
92
|
IRI = "iri",
|
|
89
93
|
URI = "uri",
|
|
90
94
|
BNODE = "bnode",
|
|
91
95
|
STRDT = "strdt",
|
|
92
96
|
STRLANG = "strlang",
|
|
97
|
+
STRLANGDIR = "strlangdir",
|
|
93
98
|
UUID = "uuid",
|
|
94
99
|
STRUUID = "struuid",
|
|
95
100
|
STRLEN = "strlen",
|
package/lib/util/Consts.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SparqlOperator = exports.TypeURL = exports.
|
|
3
|
+
exports.SparqlOperator = exports.TypeURL = exports.TypeAlias = void 0;
|
|
4
|
+
exports.typedLiteral = typedLiteral;
|
|
4
5
|
const rdf_data_factory_1 = require("rdf-data-factory");
|
|
5
6
|
var TypeAlias;
|
|
6
7
|
(function (TypeAlias) {
|
|
@@ -19,12 +20,12 @@ const DF = new rdf_data_factory_1.DataFactory();
|
|
|
19
20
|
function typedLiteral(value, type) {
|
|
20
21
|
return DF.literal(value, DF.namedNode(type));
|
|
21
22
|
}
|
|
22
|
-
exports.typedLiteral = typedLiteral;
|
|
23
23
|
var TypeURL;
|
|
24
24
|
(function (TypeURL) {
|
|
25
25
|
TypeURL["XSD_ANY_URI"] = "http://www.w3.org/2001/XMLSchema#anyURI";
|
|
26
26
|
TypeURL["XSD_STRING"] = "http://www.w3.org/2001/XMLSchema#string";
|
|
27
27
|
TypeURL["RDF_LANG_STRING"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#langString";
|
|
28
|
+
TypeURL["RDF_DIR_LANG_STRING"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString";
|
|
28
29
|
TypeURL["XSD_BOOLEAN"] = "http://www.w3.org/2001/XMLSchema#boolean";
|
|
29
30
|
TypeURL["XSD_DATE_TIME"] = "http://www.w3.org/2001/XMLSchema#dateTime";
|
|
30
31
|
TypeURL["XSD_DATE_TIME_STAMP"] = "http://www.w3.org/2001/XMLSchema#dateTimeStamp";
|
|
@@ -69,7 +70,6 @@ var TypeURL;
|
|
|
69
70
|
TypeURL["XSD_DAY_TIME_DURATION"] = "http://www.w3.org/2001/XMLSchema#dayTimeDuration";
|
|
70
71
|
TypeURL["XSD_UNTYPED_ATOMIC"] = "http://www.w3.org/2001/XMLSchema#untypedAtomic";
|
|
71
72
|
})(TypeURL || (exports.TypeURL = TypeURL = {}));
|
|
72
|
-
// TODO: Remove unneeded double typing
|
|
73
73
|
var SparqlOperator;
|
|
74
74
|
(function (SparqlOperator) {
|
|
75
75
|
// Operator mapping
|
|
@@ -102,14 +102,18 @@ var SparqlOperator;
|
|
|
102
102
|
SparqlOperator["IS_BLANK"] = "isblank";
|
|
103
103
|
SparqlOperator["IS_LITERAL"] = "isliteral";
|
|
104
104
|
SparqlOperator["IS_NUMERIC"] = "isnumeric";
|
|
105
|
+
SparqlOperator["HAS_LANG"] = "haslang";
|
|
106
|
+
SparqlOperator["HAS_LANGDIR"] = "haslangdir";
|
|
105
107
|
SparqlOperator["STR"] = "str";
|
|
106
108
|
SparqlOperator["LANG"] = "lang";
|
|
109
|
+
SparqlOperator["LANGDIR"] = "langdir";
|
|
107
110
|
SparqlOperator["DATATYPE"] = "datatype";
|
|
108
111
|
SparqlOperator["IRI"] = "iri";
|
|
109
112
|
SparqlOperator["URI"] = "uri";
|
|
110
113
|
SparqlOperator["BNODE"] = "bnode";
|
|
111
114
|
SparqlOperator["STRDT"] = "strdt";
|
|
112
115
|
SparqlOperator["STRLANG"] = "strlang";
|
|
116
|
+
SparqlOperator["STRLANGDIR"] = "strlangdir";
|
|
113
117
|
SparqlOperator["UUID"] = "uuid";
|
|
114
118
|
SparqlOperator["STRUUID"] = "struuid";
|
|
115
119
|
// Functions on strings
|
package/lib/util/Consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Consts.js","sourceRoot":"","sources":["Consts.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as RDF from '@rdfjs/types';\nimport { DataFactory } from 'rdf-data-factory';\n\nexport type KnownLiteralTypes = TypeAlias | TypeURL;\n\nexport enum TypeAlias {\n // Numeric is everything defined in https://www.w3.org/TR/sparql11-query/#operandDataTypes\n SPARQL_NUMERIC = 'SPARQL_NUMERIC',\n /**\n * Stringly is everything defined in https://www.w3.org/TR/sparql11-query/#func-strings\n * In other words it is a simple literal, a plain literal with language tag, or a literal with datatype xsd:string\n * In other words, since utils-expression-evaluator transforms a simple literal to xsd_string.\n * It is RDF_LANG_STRING or XSD_STRING.\n * Reasons for this are mentioned here: w3c/sparql-12#112\n */\n SPARQL_STRINGLY = 'SPARQL_STRINGLY',\n}\n\nconst DF = new DataFactory();\n\nexport function typedLiteral(value: string, type: TypeURL): RDF.Literal {\n return DF.literal(value, DF.namedNode(type));\n}\n\nexport enum TypeURL {\n XSD_ANY_URI = 'http://www.w3.org/2001/XMLSchema#anyURI',\n XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string',\n RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString',\n\n XSD_BOOLEAN = 'http://www.w3.org/2001/XMLSchema#boolean',\n\n XSD_DATE_TIME = 'http://www.w3.org/2001/XMLSchema#dateTime',\n XSD_DATE_TIME_STAMP = 'http://www.w3.org/2001/XMLSchema#dateTimeStamp',\n XSD_DATE = 'http://www.w3.org/2001/XMLSchema#date',\n\n XSD_G_MONTH = 'http://www.w3.org/2001/XMLSchema#gMonth',\n XSD_G_MONTHDAY = 'http://www.w3.org/2001/XMLSchema#gMonthDay',\n XSD_G_YEAR = 'http://www.w3.org/2001/XMLSchema#gYear',\n XSD_G_YEAR_MONTH = 'http://www.w3.org/2001/XMLSchema#gYearMonth',\n XSD_TIME = 'http://www.w3.org/2001/XMLSchema#time',\n XSD_G_DAY = 'http://www.w3.org/2001/XMLSchema#gDay',\n\n // Numeric types\n XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal',\n XSD_FLOAT = 'http://www.w3.org/2001/XMLSchema#float',\n XSD_DOUBLE = 'http://www.w3.org/2001/XMLSchema#double',\n\n // Derived numeric types\n XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer',\n\n XSD_NON_POSITIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#nonPositiveInteger',\n XSD_NEGATIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#negativeInteger',\n\n XSD_LONG = 'http://www.w3.org/2001/XMLSchema#long',\n XSD_INT = 'http://www.w3.org/2001/XMLSchema#int',\n XSD_SHORT = 'http://www.w3.org/2001/XMLSchema#short',\n XSD_BYTE = 'http://www.w3.org/2001/XMLSchema#byte',\n\n XSD_NON_NEGATIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#nonNegativeInteger',\n XSD_POSITIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#positiveInteger',\n XSD_UNSIGNED_LONG = 'http://www.w3.org/2001/XMLSchema#unsignedLong',\n XSD_UNSIGNED_INT = 'http://www.w3.org/2001/XMLSchema#unsignedInt',\n XSD_UNSIGNED_SHORT = 'http://www.w3.org/2001/XMLSchema#unsignedShort',\n XSD_UNSIGNED_BYTE = 'http://www.w3.org/2001/XMLSchema#unsignedByte',\n\n // Derived String Type\n XSD_NORMALIZED_STRING = 'http://www.w3.org/2001/XMLSchema#normalizedString',\n XSD_TOKEN = 'http://www.w3.org/2001/XMLSchema#token',\n XSD_LANGUAGE = 'http://www.w3.org/2001/XMLSchema#language',\n XSD_NM_TOKEN = 'http://www.w3.org/2001/XMLSchema#NMTOKEN',\n\n XSD_NAME = 'http://www.w3.org/2001/XMLSchema#name',\n XSD_NC_NAME = 'http://www.w3.org/2001/XMLSchema#NCName',\n XSD_ENTITY = 'http://www.w3.org/2001/XMLSchema#ENTITY',\n XSD_ID = 'http://www.w3.org/2001/XMLSchema#ID',\n XSD_ID_REF = 'http://www.w3.org/2001/XMLSchema#IDREF',\n\n // Other types\n XSD_DURATION = 'http://www.w3.org/2001/XMLSchema#duration',\n XSD_YEAR_MONTH_DURATION = 'http://www.w3.org/2001/XMLSchema#yearMonthDuration',\n XSD_DAY_TIME_DURATION = 'http://www.w3.org/2001/XMLSchema#dayTimeDuration',\n XSD_UNTYPED_ATOMIC = 'http://www.w3.org/2001/XMLSchema#untypedAtomic',\n}\n\n// ----------------------------------------------------------------------------\n// Operators\n// ----------------------------------------------------------------------------\n\nexport type GeneralOperator = KnownOperator | string;\n\nexport type KnownOperator = SparqlOperator | NamedOperator;\n\n// TODO: Remove unneeded double typing\nexport enum SparqlOperator {\n // Operator mapping\n // https://www.w3.org/TR/sparql11-query/#OperatorMapping\n NOT = '!',\n UMINUS = 'uminus',\n UPLUS = 'uplus',\n LOGICAL_OR = '||',\n LOGICAL_AND = '&&',\n\n EQUAL = '=',\n NOT_EQUAL = '!=',\n LT = '<',\n GT = '>',\n LTE = '<=',\n GTE = '>=',\n SAME_TERM = 'sameterm',\n IN = 'in',\n NOT_IN = 'notin',\n\n MULTIPLICATION = '*',\n DIVISION = '/',\n ADDITION = '+',\n SUBTRACTION = '-',\n\n // Functional Forms\n // https://www.w3.org/TR/sparql11-query/#func-forms\n // See SpecialOperators\n\n // Functions on RDF Terms\n // https://www.w3.org/TR/sparql11-query/#func-rdfTerms\n IS_IRI = 'isiri',\n IS_URI = 'isuri',\n IS_BLANK = 'isblank',\n IS_LITERAL = 'isliteral',\n IS_NUMERIC = 'isnumeric',\n STR = 'str',\n LANG = 'lang',\n DATATYPE = 'datatype',\n IRI = 'iri',\n URI = 'uri',\n BNODE = 'bnode',\n STRDT = 'strdt',\n STRLANG = 'strlang',\n UUID = 'uuid',\n STRUUID = 'struuid',\n\n // Functions on strings\n // https://www.w3.org/TR/sparql11-query/#func-strings\n STRLEN = 'strlen',\n SUBSTR = 'substr',\n UCASE = 'ucase',\n LCASE = 'lcase',\n STRSTARTS = 'strstarts',\n STRENDS = 'strends',\n CONTAINS = 'contains',\n STRBEFORE = 'strbefore',\n STRAFTER = 'strafter',\n ENCODE_FOR_URI = 'encode_for_uri',\n CONCAT = 'concat',\n LANG_MATCHES = 'langmatches',\n REGEX = 'regex',\n REPLACE = 'replace',\n\n // Functions on numerics\n // https://www.w3.org/TR/sparql11-query/#func-numerics\n ABS = 'abs',\n ROUND = 'round',\n CEIL = 'ceil',\n FLOOR = 'floor',\n RAND = 'rand',\n\n // Functions on Dates and Times\n // https://www.w3.org/TR/sparql11-query/#func-date-time\n NOW = 'now',\n YEAR = 'year',\n MONTH = 'month',\n DAY = 'day',\n HOURS = 'hours',\n MINUTES = 'minutes',\n SECONDS = 'seconds',\n TIMEZONE = 'timezone',\n TZ = 'tz',\n // Hash functions\n // https://www.w3.org/TR/sparql11-query/#func-hash\n MD5 = 'md5',\n SHA1 = 'sha1',\n SHA256 = 'sha256',\n SHA384 = 'sha384',\n SHA512 = 'sha512',\n\n // XPath Constructor functions\n // https://www.w3.org/TR/sparql11-query/#FunctionMapping\n // See Named Operators\n\n // Functions for quoted triples\n // https://w3c.github.io/rdf-star/cg-spec/editors_draft.html#triple-function\n TRIPLE = 'triple',\n SUBJECT = 'subject',\n PREDICATE = 'predicate',\n OBJECT = 'object',\n IS_TRIPLE = 'istriple',\n\n // Functional Forms\n // https://www.w3.org/TR/sparql11-query/#func-forms\n BOUND = 'bound',\n IF = 'if',\n COALESCE = 'coalesce',\n}\n\nexport type NamedOperator =\n // XPath Constructor functions\n // https://www.w3.org/TR/sparql11-query/#FunctionMapping\n TypeURL.XSD_STRING\n | TypeURL.XSD_FLOAT\n | TypeURL.XSD_DOUBLE\n | TypeURL.XSD_DECIMAL\n | TypeURL.XSD_INTEGER\n | TypeURL.XSD_DATE_TIME\n | TypeURL.XSD_DATE\n | TypeURL.XSD_BOOLEAN\n | TypeURL.XSD_TIME\n | TypeURL.XSD_DURATION\n | TypeURL.XSD_DAY_TIME_DURATION\n | TypeURL.XSD_YEAR_MONTH_DURATION;\n"]}
|
|
1
|
+
{"version":3,"file":"Consts.js","sourceRoot":"","sources":["Consts.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as RDF from '@rdfjs/types';\nimport { DataFactory } from 'rdf-data-factory';\n\nexport type KnownLiteralTypes = TypeAlias | TypeURL;\n\nexport enum TypeAlias {\n // Numeric is everything defined in https://www.w3.org/TR/sparql11-query/#operandDataTypes\n SPARQL_NUMERIC = 'SPARQL_NUMERIC',\n /**\n * Stringly is everything defined in https://www.w3.org/TR/sparql11-query/#func-strings\n * In other words it is a simple literal, a plain literal with language tag, or a literal with datatype xsd:string\n * In other words, since utils-expression-evaluator transforms a simple literal to xsd_string.\n * It is RDF_LANG_STRING or XSD_STRING.\n * Reasons for this are mentioned here: w3c/sparql-12#112\n */\n SPARQL_STRINGLY = 'SPARQL_STRINGLY',\n}\n\nconst DF = new DataFactory();\n\nexport function typedLiteral(value: string, type: TypeURL): RDF.Literal {\n return DF.literal(value, DF.namedNode(type));\n}\n\nexport enum TypeURL {\n XSD_ANY_URI = 'http://www.w3.org/2001/XMLSchema#anyURI',\n XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string',\n RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString',\n RDF_DIR_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString',\n\n XSD_BOOLEAN = 'http://www.w3.org/2001/XMLSchema#boolean',\n\n XSD_DATE_TIME = 'http://www.w3.org/2001/XMLSchema#dateTime',\n XSD_DATE_TIME_STAMP = 'http://www.w3.org/2001/XMLSchema#dateTimeStamp',\n XSD_DATE = 'http://www.w3.org/2001/XMLSchema#date',\n\n XSD_G_MONTH = 'http://www.w3.org/2001/XMLSchema#gMonth',\n XSD_G_MONTHDAY = 'http://www.w3.org/2001/XMLSchema#gMonthDay',\n XSD_G_YEAR = 'http://www.w3.org/2001/XMLSchema#gYear',\n XSD_G_YEAR_MONTH = 'http://www.w3.org/2001/XMLSchema#gYearMonth',\n XSD_TIME = 'http://www.w3.org/2001/XMLSchema#time',\n XSD_G_DAY = 'http://www.w3.org/2001/XMLSchema#gDay',\n\n // Numeric types\n XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal',\n XSD_FLOAT = 'http://www.w3.org/2001/XMLSchema#float',\n XSD_DOUBLE = 'http://www.w3.org/2001/XMLSchema#double',\n\n // Derived numeric types\n XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer',\n\n XSD_NON_POSITIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#nonPositiveInteger',\n XSD_NEGATIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#negativeInteger',\n\n XSD_LONG = 'http://www.w3.org/2001/XMLSchema#long',\n XSD_INT = 'http://www.w3.org/2001/XMLSchema#int',\n XSD_SHORT = 'http://www.w3.org/2001/XMLSchema#short',\n XSD_BYTE = 'http://www.w3.org/2001/XMLSchema#byte',\n\n XSD_NON_NEGATIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#nonNegativeInteger',\n XSD_POSITIVE_INTEGER = 'http://www.w3.org/2001/XMLSchema#positiveInteger',\n XSD_UNSIGNED_LONG = 'http://www.w3.org/2001/XMLSchema#unsignedLong',\n XSD_UNSIGNED_INT = 'http://www.w3.org/2001/XMLSchema#unsignedInt',\n XSD_UNSIGNED_SHORT = 'http://www.w3.org/2001/XMLSchema#unsignedShort',\n XSD_UNSIGNED_BYTE = 'http://www.w3.org/2001/XMLSchema#unsignedByte',\n\n // Derived String Type\n XSD_NORMALIZED_STRING = 'http://www.w3.org/2001/XMLSchema#normalizedString',\n XSD_TOKEN = 'http://www.w3.org/2001/XMLSchema#token',\n XSD_LANGUAGE = 'http://www.w3.org/2001/XMLSchema#language',\n XSD_NM_TOKEN = 'http://www.w3.org/2001/XMLSchema#NMTOKEN',\n\n XSD_NAME = 'http://www.w3.org/2001/XMLSchema#name',\n XSD_NC_NAME = 'http://www.w3.org/2001/XMLSchema#NCName',\n XSD_ENTITY = 'http://www.w3.org/2001/XMLSchema#ENTITY',\n XSD_ID = 'http://www.w3.org/2001/XMLSchema#ID',\n XSD_ID_REF = 'http://www.w3.org/2001/XMLSchema#IDREF',\n\n // Other types\n XSD_DURATION = 'http://www.w3.org/2001/XMLSchema#duration',\n XSD_YEAR_MONTH_DURATION = 'http://www.w3.org/2001/XMLSchema#yearMonthDuration',\n XSD_DAY_TIME_DURATION = 'http://www.w3.org/2001/XMLSchema#dayTimeDuration',\n XSD_UNTYPED_ATOMIC = 'http://www.w3.org/2001/XMLSchema#untypedAtomic',\n}\n\n// ----------------------------------------------------------------------------\n// Operators\n// ----------------------------------------------------------------------------\n\nexport type GeneralOperator = KnownOperator | string;\n\nexport type KnownOperator = SparqlOperator | NamedOperator;\n\nexport enum SparqlOperator {\n // Operator mapping\n // https://www.w3.org/TR/sparql11-query/#OperatorMapping\n NOT = '!',\n UMINUS = 'uminus',\n UPLUS = 'uplus',\n LOGICAL_OR = '||',\n LOGICAL_AND = '&&',\n\n EQUAL = '=',\n NOT_EQUAL = '!=',\n LT = '<',\n GT = '>',\n LTE = '<=',\n GTE = '>=',\n SAME_TERM = 'sameterm',\n IN = 'in',\n NOT_IN = 'notin',\n\n MULTIPLICATION = '*',\n DIVISION = '/',\n ADDITION = '+',\n SUBTRACTION = '-',\n\n // Functional Forms\n // https://www.w3.org/TR/sparql11-query/#func-forms\n // See SpecialOperators\n\n // Functions on RDF Terms\n // https://www.w3.org/TR/sparql11-query/#func-rdfTerms\n IS_IRI = 'isiri',\n IS_URI = 'isuri',\n IS_BLANK = 'isblank',\n IS_LITERAL = 'isliteral',\n IS_NUMERIC = 'isnumeric',\n HAS_LANG = 'haslang',\n HAS_LANGDIR = 'haslangdir',\n STR = 'str',\n LANG = 'lang',\n LANGDIR = 'langdir',\n DATATYPE = 'datatype',\n IRI = 'iri',\n URI = 'uri',\n BNODE = 'bnode',\n STRDT = 'strdt',\n STRLANG = 'strlang',\n STRLANGDIR = 'strlangdir',\n UUID = 'uuid',\n STRUUID = 'struuid',\n\n // Functions on strings\n // https://www.w3.org/TR/sparql11-query/#func-strings\n STRLEN = 'strlen',\n SUBSTR = 'substr',\n UCASE = 'ucase',\n LCASE = 'lcase',\n STRSTARTS = 'strstarts',\n STRENDS = 'strends',\n CONTAINS = 'contains',\n STRBEFORE = 'strbefore',\n STRAFTER = 'strafter',\n ENCODE_FOR_URI = 'encode_for_uri',\n CONCAT = 'concat',\n LANG_MATCHES = 'langmatches',\n REGEX = 'regex',\n REPLACE = 'replace',\n\n // Functions on numerics\n // https://www.w3.org/TR/sparql11-query/#func-numerics\n ABS = 'abs',\n ROUND = 'round',\n CEIL = 'ceil',\n FLOOR = 'floor',\n RAND = 'rand',\n\n // Functions on Dates and Times\n // https://www.w3.org/TR/sparql11-query/#func-date-time\n NOW = 'now',\n YEAR = 'year',\n MONTH = 'month',\n DAY = 'day',\n HOURS = 'hours',\n MINUTES = 'minutes',\n SECONDS = 'seconds',\n TIMEZONE = 'timezone',\n TZ = 'tz',\n // Hash functions\n // https://www.w3.org/TR/sparql11-query/#func-hash\n MD5 = 'md5',\n SHA1 = 'sha1',\n SHA256 = 'sha256',\n SHA384 = 'sha384',\n SHA512 = 'sha512',\n\n // XPath Constructor functions\n // https://www.w3.org/TR/sparql11-query/#FunctionMapping\n // See Named Operators\n\n // Functions for quoted triples\n // https://w3c.github.io/rdf-star/cg-spec/editors_draft.html#triple-function\n TRIPLE = 'triple',\n SUBJECT = 'subject',\n PREDICATE = 'predicate',\n OBJECT = 'object',\n IS_TRIPLE = 'istriple',\n\n // Functional Forms\n // https://www.w3.org/TR/sparql11-query/#func-forms\n BOUND = 'bound',\n IF = 'if',\n COALESCE = 'coalesce',\n}\n\nexport type NamedOperator =\n // XPath Constructor functions\n // https://www.w3.org/TR/sparql11-query/#FunctionMapping\n TypeURL.XSD_STRING\n | TypeURL.XSD_FLOAT\n | TypeURL.XSD_DOUBLE\n | TypeURL.XSD_DECIMAL\n | TypeURL.XSD_INTEGER\n | TypeURL.XSD_DATE_TIME\n | TypeURL.XSD_DATE\n | TypeURL.XSD_BOOLEAN\n | TypeURL.XSD_TIME\n | TypeURL.XSD_DURATION\n | TypeURL.XSD_DAY_TIME_DURATION\n | TypeURL.XSD_YEAR_MONTH_DURATION;\n"]}
|
package/lib/util/Context.d.ts
CHANGED
|
File without changes
|
package/lib/util/Context.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepareEvaluatorActionContext =
|
|
3
|
+
exports.prepareEvaluatorActionContext = prepareEvaluatorActionContext;
|
|
4
4
|
const context_entries_1 = require("@comunica/context-entries");
|
|
5
5
|
const lru_cache_1 = require("lru-cache");
|
|
6
6
|
const DateTimeHelpers_1 = require("./DateTimeHelpers");
|
|
@@ -28,5 +28,4 @@ function prepareEvaluatorActionContext(orgContext) {
|
|
|
28
28
|
});
|
|
29
29
|
return context;
|
|
30
30
|
}
|
|
31
|
-
exports.prepareEvaluatorActionContext = prepareEvaluatorActionContext;
|
|
32
31
|
//# sourceMappingURL=Context.js.map
|