@comunica/utils-expression-evaluator 3.2.4-alpha.47.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.
Files changed (60) hide show
  1. package/LICENSE.txt +22 -0
  2. package/README.md +102 -0
  3. package/lib/expressions/Aggregate.d.ts +9 -0
  4. package/lib/expressions/Aggregate.js +13 -0
  5. package/lib/expressions/Aggregate.js.map +1 -0
  6. package/lib/expressions/Existence.d.ts +8 -0
  7. package/lib/expressions/Existence.js +12 -0
  8. package/lib/expressions/Existence.js.map +1 -0
  9. package/lib/expressions/Expressions.d.ts +2 -0
  10. package/lib/expressions/Expressions.js +11 -0
  11. package/lib/expressions/Expressions.js.map +1 -0
  12. package/lib/expressions/Operator.d.ts +9 -0
  13. package/lib/expressions/Operator.js +14 -0
  14. package/lib/expressions/Operator.js.map +1 -0
  15. package/lib/expressions/Term.d.ts +180 -0
  16. package/lib/expressions/Term.js +348 -0
  17. package/lib/expressions/Term.js.map +1 -0
  18. package/lib/expressions/Variable.d.ts +7 -0
  19. package/lib/expressions/Variable.js +12 -0
  20. package/lib/expressions/Variable.js.map +1 -0
  21. package/lib/expressions/index.d.ts +6 -0
  22. package/lib/expressions/index.js +23 -0
  23. package/lib/expressions/index.js.map +1 -0
  24. package/lib/functions/Helpers.d.ts +81 -0
  25. package/lib/functions/Helpers.js +218 -0
  26. package/lib/functions/Helpers.js.map +1 -0
  27. package/lib/functions/OverloadTree.d.ts +45 -0
  28. package/lib/functions/OverloadTree.js +196 -0
  29. package/lib/functions/OverloadTree.js.map +1 -0
  30. package/lib/index.d.ts +12 -0
  31. package/lib/index.js +99 -0
  32. package/lib/index.js.map +1 -0
  33. package/lib/transformers/TermTransformer.d.ts +24 -0
  34. package/lib/transformers/TermTransformer.js +133 -0
  35. package/lib/transformers/TermTransformer.js.map +1 -0
  36. package/lib/util/Consts.d.ts +136 -0
  37. package/lib/util/Consts.js +171 -0
  38. package/lib/util/Consts.js.map +1 -0
  39. package/lib/util/Context.d.ts +2 -0
  40. package/lib/util/Context.js +32 -0
  41. package/lib/util/Context.js.map +1 -0
  42. package/lib/util/DateTimeHelpers.d.ts +19 -0
  43. package/lib/util/DateTimeHelpers.js +166 -0
  44. package/lib/util/DateTimeHelpers.js.map +1 -0
  45. package/lib/util/Errors.d.ts +130 -0
  46. package/lib/util/Errors.js +194 -0
  47. package/lib/util/Errors.js.map +1 -0
  48. package/lib/util/Parsing.d.ts +25 -0
  49. package/lib/util/Parsing.js +166 -0
  50. package/lib/util/Parsing.js.map +1 -0
  51. package/lib/util/Serialization.d.ts +5 -0
  52. package/lib/util/Serialization.js +54 -0
  53. package/lib/util/Serialization.js.map +1 -0
  54. package/lib/util/SpecAlgos.d.ts +4 -0
  55. package/lib/util/SpecAlgos.js +81 -0
  56. package/lib/util/SpecAlgos.js.map +1 -0
  57. package/lib/util/TypeHandling.d.ts +56 -0
  58. package/lib/util/TypeHandling.js +216 -0
  59. package/lib/util/TypeHandling.js.map +1 -0
  60. package/package.json +50 -0
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNonLexicalLiteral = exports.NonLexicalLiteral = exports.YearMonthDurationLiteral = exports.DayTimeDurationLiteral = exports.DurationLiteral = exports.DateLiteral = exports.TimeLiteral = exports.DateTimeLiteral = exports.StringLiteral = exports.LangStringLiteral = exports.BooleanLiteral = exports.DoubleLiteral = exports.FloatLiteral = exports.DecimalLiteral = exports.IntegerLiteral = exports.NumericLiteral = exports.Literal = exports.isLiteralTermExpression = exports.DefaultGraph = exports.Quad = exports.BlankNode = exports.NamedNode = exports.Term = void 0;
4
+ const types_1 = require("@comunica/types");
5
+ const C = require("../util/Consts");
6
+ const Consts_1 = require("../util/Consts");
7
+ const Err = require("../util/Errors");
8
+ const Serialization_1 = require("../util/Serialization");
9
+ const TypeHandling_1 = require("../util/TypeHandling");
10
+ class Term {
11
+ constructor() {
12
+ this.expressionType = types_1.ExpressionType.Term;
13
+ }
14
+ str() {
15
+ throw new Err.InvalidArgumentTypes([this], C.SparqlOperator.STR);
16
+ }
17
+ coerceEBV() {
18
+ throw new Err.EBVCoercionError(this);
19
+ }
20
+ }
21
+ exports.Term = Term;
22
+ // NamedNodes -----------------------------------------------------------------
23
+ class NamedNode extends Term {
24
+ constructor(value) {
25
+ super();
26
+ this.value = value;
27
+ this.termType = 'namedNode';
28
+ }
29
+ toRDF(dataFactory) {
30
+ return dataFactory.namedNode(this.value);
31
+ }
32
+ str() {
33
+ return this.value;
34
+ }
35
+ }
36
+ exports.NamedNode = NamedNode;
37
+ // BlankNodes -----------------------------------------------------------------
38
+ class BlankNode extends Term {
39
+ constructor(value) {
40
+ super();
41
+ this.termType = 'blankNode';
42
+ this.value = value;
43
+ }
44
+ toRDF(dataFactory) {
45
+ return typeof this.value === 'string' ? dataFactory.blankNode(this.value) : this.value;
46
+ }
47
+ }
48
+ exports.BlankNode = BlankNode;
49
+ // Quads -----------------------------------------------------------------
50
+ class Quad extends Term {
51
+ constructor(subject, predicate, object, graph) {
52
+ super();
53
+ this.subject = subject;
54
+ this.predicate = predicate;
55
+ this.object = object;
56
+ this.graph = graph;
57
+ this.termType = 'quad';
58
+ }
59
+ toRDF(dataFactory) {
60
+ return dataFactory.quad(this.subject.toRDF(dataFactory), this.predicate.toRDF(dataFactory), this.object.toRDF(dataFactory), this.graph.toRDF(dataFactory));
61
+ }
62
+ str() {
63
+ return `Quad: [${this.subject.str()}, ${this.predicate.str()}, ${this.object.str()}, ${this.graph.str()}]`;
64
+ }
65
+ }
66
+ exports.Quad = Quad;
67
+ class DefaultGraph extends Term {
68
+ constructor() {
69
+ super();
70
+ this.termType = 'defaultGraph';
71
+ }
72
+ toRDF(dataFactory) {
73
+ return dataFactory.defaultGraph();
74
+ }
75
+ str() {
76
+ return 'DefaultGraph';
77
+ }
78
+ }
79
+ exports.DefaultGraph = DefaultGraph;
80
+ // Literals-- -----------------------------------------------------------------
81
+ function isLiteralTermExpression(expr) {
82
+ if (expr.termType === 'literal') {
83
+ return expr;
84
+ }
85
+ return undefined;
86
+ }
87
+ exports.isLiteralTermExpression = isLiteralTermExpression;
88
+ class Literal extends Term {
89
+ /**
90
+ * @param typedValue internal representation of this literal's value
91
+ * @param dataType a string representing the datatype. Can be of type @see LiteralTypes or any URI
92
+ * @param strValue the string value of this literal. In other words, the string representing the RDF.literal value.
93
+ * @param language the language, mainly for language enabled strings like RDF_LANG_STRING
94
+ */
95
+ constructor(typedValue, dataType, strValue, language) {
96
+ super();
97
+ this.typedValue = typedValue;
98
+ this.dataType = dataType;
99
+ this.strValue = strValue;
100
+ this.language = language;
101
+ this.termType = 'literal';
102
+ }
103
+ toRDF(dataFactory) {
104
+ return dataFactory.literal(this.strValue ?? this.str(), this.language ?? dataFactory.namedNode(this.dataType));
105
+ }
106
+ str() {
107
+ return this.strValue ?? this.typedValue.toString();
108
+ }
109
+ }
110
+ exports.Literal = Literal;
111
+ class NumericLiteral extends Literal {
112
+ constructor(typedValue, dataType, strValue, language) {
113
+ super(typedValue, dataType, strValue, language);
114
+ this.typedValue = typedValue;
115
+ this.strValue = strValue;
116
+ this.language = language;
117
+ }
118
+ coerceEBV() {
119
+ return Boolean(this.typedValue);
120
+ }
121
+ toRDF(dataFactory) {
122
+ const term = super.toRDF(dataFactory);
123
+ if (!Number.isFinite(this.typedValue)) {
124
+ term.value = term.value.replace('Infinity', 'INF');
125
+ }
126
+ return term;
127
+ }
128
+ str() {
129
+ return this.strValue ??
130
+ this.specificFormatter(this.typedValue);
131
+ }
132
+ }
133
+ exports.NumericLiteral = NumericLiteral;
134
+ class IntegerLiteral extends NumericLiteral {
135
+ constructor(typedValue, dataType, strValue, language) {
136
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_INTEGER, strValue, language);
137
+ this.typedValue = typedValue;
138
+ this.strValue = strValue;
139
+ this.language = language;
140
+ }
141
+ specificFormatter(val) {
142
+ return val.toFixed(0);
143
+ }
144
+ }
145
+ exports.IntegerLiteral = IntegerLiteral;
146
+ class DecimalLiteral extends NumericLiteral {
147
+ constructor(typedValue, dataType, strValue, language) {
148
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_DECIMAL, strValue, language);
149
+ this.typedValue = typedValue;
150
+ this.strValue = strValue;
151
+ this.language = language;
152
+ }
153
+ specificFormatter(val) {
154
+ return val.toString();
155
+ }
156
+ }
157
+ exports.DecimalLiteral = DecimalLiteral;
158
+ class FloatLiteral extends NumericLiteral {
159
+ constructor(typedValue, dataType, strValue, language) {
160
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_FLOAT, strValue, language);
161
+ this.typedValue = typedValue;
162
+ this.strValue = strValue;
163
+ this.language = language;
164
+ }
165
+ specificFormatter(val) {
166
+ return val.toString();
167
+ }
168
+ }
169
+ exports.FloatLiteral = FloatLiteral;
170
+ class DoubleLiteral extends NumericLiteral {
171
+ constructor(typedValue, dataType, strValue, language) {
172
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_DOUBLE, strValue, language);
173
+ this.typedValue = typedValue;
174
+ this.strValue = strValue;
175
+ this.language = language;
176
+ }
177
+ specificFormatter(val) {
178
+ if (!Number.isFinite(val)) {
179
+ if (val > 0) {
180
+ return 'INF';
181
+ }
182
+ if (val < 0) {
183
+ return '-INF';
184
+ }
185
+ return 'NaN';
186
+ }
187
+ const jsExponential = val.toExponential();
188
+ const [jsMantisse, jsExponent] = jsExponential.split('e');
189
+ // Leading + must be removed for integer
190
+ // https://www.w3.org/TR/xmlschema-2/#integer
191
+ const exponent = jsExponent.replace(/\+/u, '');
192
+ // SPARQL test suite prefers trailing zero's
193
+ const mantisse = jsMantisse.includes('.') ?
194
+ jsMantisse :
195
+ `${jsMantisse}.0`;
196
+ return `${mantisse}E${exponent}`;
197
+ }
198
+ }
199
+ exports.DoubleLiteral = DoubleLiteral;
200
+ class BooleanLiteral extends Literal {
201
+ constructor(typedValue, strValue, dataType) {
202
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_BOOLEAN, strValue);
203
+ this.typedValue = typedValue;
204
+ this.strValue = strValue;
205
+ }
206
+ coerceEBV() {
207
+ return this.typedValue;
208
+ }
209
+ }
210
+ exports.BooleanLiteral = BooleanLiteral;
211
+ class LangStringLiteral extends Literal {
212
+ constructor(typedValue, language, dataType) {
213
+ super(typedValue, dataType ?? Consts_1.TypeURL.RDF_LANG_STRING, typedValue, language);
214
+ this.typedValue = typedValue;
215
+ this.language = language;
216
+ }
217
+ coerceEBV() {
218
+ return this.str().length > 0;
219
+ }
220
+ }
221
+ exports.LangStringLiteral = LangStringLiteral;
222
+ // https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-plain-literal
223
+ // https://www.w3.org/TR/sparql11-query/#defn_SimpleLiteral
224
+ // https://www.w3.org/TR/sparql11-query/#func-strings
225
+ // This does not include language tagged literals
226
+ class StringLiteral extends Literal {
227
+ /**
228
+ * @param typedValue
229
+ * @param dataType Should be type that implements XSD_STRING
230
+ */
231
+ constructor(typedValue, dataType) {
232
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_STRING, typedValue);
233
+ this.typedValue = typedValue;
234
+ }
235
+ coerceEBV() {
236
+ return this.str().length > 0;
237
+ }
238
+ }
239
+ exports.StringLiteral = StringLiteral;
240
+ class DateTimeLiteral extends Literal {
241
+ constructor(typedValue, strValue, dataType) {
242
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_DATE_TIME, strValue);
243
+ this.typedValue = typedValue;
244
+ this.strValue = strValue;
245
+ }
246
+ str() {
247
+ return (0, Serialization_1.serializeDateTime)(this.typedValue);
248
+ }
249
+ }
250
+ exports.DateTimeLiteral = DateTimeLiteral;
251
+ class TimeLiteral extends Literal {
252
+ constructor(typedValue, strValue, dataType) {
253
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_TIME, strValue);
254
+ this.typedValue = typedValue;
255
+ this.strValue = strValue;
256
+ }
257
+ str() {
258
+ return (0, Serialization_1.serializeTime)(this.typedValue);
259
+ }
260
+ }
261
+ exports.TimeLiteral = TimeLiteral;
262
+ class DateLiteral extends Literal {
263
+ constructor(typedValue, strValue, dataType) {
264
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_DATE, strValue);
265
+ this.typedValue = typedValue;
266
+ this.strValue = strValue;
267
+ }
268
+ str() {
269
+ return (0, Serialization_1.serializeDate)(this.typedValue);
270
+ }
271
+ }
272
+ exports.DateLiteral = DateLiteral;
273
+ class DurationLiteral extends Literal {
274
+ constructor(typedValue, strValue, dataType) {
275
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_DURATION, strValue);
276
+ this.typedValue = typedValue;
277
+ this.strValue = strValue;
278
+ }
279
+ str() {
280
+ return (0, Serialization_1.serializeDuration)(this.typedValue);
281
+ }
282
+ }
283
+ exports.DurationLiteral = DurationLiteral;
284
+ class DayTimeDurationLiteral extends DurationLiteral {
285
+ constructor(typedValue, strValue, dataType) {
286
+ super(typedValue, strValue, dataType ?? Consts_1.TypeURL.XSD_DAY_TIME_DURATION);
287
+ this.typedValue = typedValue;
288
+ this.strValue = strValue;
289
+ }
290
+ }
291
+ exports.DayTimeDurationLiteral = DayTimeDurationLiteral;
292
+ class YearMonthDurationLiteral extends Literal {
293
+ constructor(typedValue, strValue, dataType) {
294
+ super(typedValue, dataType ?? Consts_1.TypeURL.XSD_YEAR_MONTH_DURATION, strValue);
295
+ this.typedValue = typedValue;
296
+ this.strValue = strValue;
297
+ }
298
+ str() {
299
+ return (0, Serialization_1.serializeDuration)(this.typedValue, 'P0M');
300
+ }
301
+ }
302
+ exports.YearMonthDurationLiteral = YearMonthDurationLiteral;
303
+ /**
304
+ * This class is used when a literal is parsed, and it's value is
305
+ * an invalid lexical form for it's datatype. The spec defines value with
306
+ * invalid lexical form are still valid terms, and as such we can not error
307
+ * immediately. This class makes sure that the typedValue will remain undefined,
308
+ * and the category 'nonlexical'. This way, only when operators apply to the
309
+ * 'nonlexical' category, they will keep working, otherwise they will throw a
310
+ * type error.
311
+ * This seems to match the spec, except maybe for functions that accept
312
+ * non-lexical values for their datatype.
313
+ *
314
+ * See:
315
+ * - https://www.w3.org/TR/xquery/#dt-type-error
316
+ * - https://www.w3.org/TR/rdf-concepts/#section-Literal-Value
317
+ * - https://www.w3.org/TR/xquery/#dt-ebv
318
+ * - ... some other more precise thing i can't find...
319
+ */
320
+ class NonLexicalLiteral extends Literal {
321
+ constructor(typedValue, dataType, openWorldType, strValue, language) {
322
+ super({ toString: () => 'undefined' }, dataType, strValue, language);
323
+ this.openWorldType = openWorldType;
324
+ }
325
+ coerceEBV() {
326
+ const isNumericOrBool = (0, TypeHandling_1.isSubTypeOf)(this.dataType, Consts_1.TypeURL.XSD_BOOLEAN, this.openWorldType) ||
327
+ (0, TypeHandling_1.isSubTypeOf)(this.dataType, Consts_1.TypeAlias.SPARQL_NUMERIC, this.openWorldType);
328
+ if (isNumericOrBool) {
329
+ return false;
330
+ }
331
+ throw new Err.EBVCoercionError(this);
332
+ }
333
+ toRDF(dataFactory) {
334
+ return dataFactory.literal(this.str(), this.language ?? dataFactory.namedNode(this.dataType));
335
+ }
336
+ str() {
337
+ return this.strValue ?? '';
338
+ }
339
+ }
340
+ exports.NonLexicalLiteral = NonLexicalLiteral;
341
+ function isNonLexicalLiteral(lit) {
342
+ if (lit instanceof NonLexicalLiteral) {
343
+ return lit;
344
+ }
345
+ return undefined;
346
+ }
347
+ exports.isNonLexicalLiteral = isNonLexicalLiteral;
348
+ //# sourceMappingURL=Term.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Term.js","sourceRoot":"","sources":["Term.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ComunicaDataFactory,\n IDateRepresentation,\n IDateTimeRepresentation,\n IDurationRepresentation,\n ISuperTypeProvider,\n ITimeRepresentation,\n IYearMonthDurationRepresentation,\n TermExpression,\n TermType,\n} from '@comunica/types';\nimport { ExpressionType,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport * as C from '../util/Consts';\nimport { TypeAlias, TypeURL } from '../util/Consts';\n\nimport * as Err from '../util/Errors';\nimport { serializeDate, serializeDateTime, serializeDuration, serializeTime } from '../util/Serialization';\nimport { isSubTypeOf } from '../util/TypeHandling';\n\nexport abstract class Term implements TermExpression {\n public expressionType: ExpressionType.Term = ExpressionType.Term;\n public abstract termType: TermType;\n\n public abstract toRDF(dataFactory: ComunicaDataFactory): RDF.Term;\n\n public str(): string {\n throw new Err.InvalidArgumentTypes([ this ], C.SparqlOperator.STR);\n }\n\n public coerceEBV(): boolean {\n throw new Err.EBVCoercionError(this);\n }\n}\n\n// NamedNodes -----------------------------------------------------------------\nexport class NamedNode extends Term {\n public termType: TermType = 'namedNode';\n public constructor(public value: string) {\n super();\n }\n\n public toRDF(dataFactory: ComunicaDataFactory): RDF.Term {\n return dataFactory.namedNode(this.value);\n }\n\n public override str(): string {\n return this.value;\n }\n}\n\n// BlankNodes -----------------------------------------------------------------\n\nexport class BlankNode extends Term {\n public value: RDF.BlankNode | string;\n public termType: TermType = 'blankNode';\n\n public constructor(value: RDF.BlankNode | string) {\n super();\n this.value = value;\n }\n\n public toRDF(dataFactory: ComunicaDataFactory): RDF.Term {\n return typeof this.value === 'string' ? dataFactory.blankNode(this.value) : this.value;\n }\n}\n\n// Quads -----------------------------------------------------------------\nexport class Quad extends Term {\n public termType: TermType = 'quad';\n\n public constructor(\n public readonly subject: Term,\n public readonly predicate: Term,\n public readonly object: Term,\n public readonly graph: Term,\n ) {\n super();\n }\n\n public toRDF(dataFactory: ComunicaDataFactory): RDF.BaseQuad {\n return dataFactory.quad(\n <RDF.Quad_Subject> this.subject.toRDF(dataFactory),\n <RDF.Quad_Predicate> this.predicate.toRDF(dataFactory),\n <RDF.Quad_Object> this.object.toRDF(dataFactory),\n <RDF.Quad_Graph> this.graph.toRDF(dataFactory),\n );\n }\n\n public override str(): string {\n return `Quad: [${this.subject.str()}, ${this.predicate.str()}, ${this.object.str()}, ${this.graph.str()}]`;\n }\n}\n\nexport class DefaultGraph extends Term {\n public termType: TermType = 'defaultGraph';\n\n public constructor() {\n super();\n }\n\n public toRDF(dataFactory: ComunicaDataFactory): RDF.DefaultGraph {\n return dataFactory.defaultGraph();\n }\n\n public override str(): string {\n return 'DefaultGraph';\n }\n}\n\n// Literals-- -----------------------------------------------------------------\nexport function isLiteralTermExpression(expr: TermExpression): Literal<any> | undefined {\n if (expr.termType === 'literal') {\n return <Literal<any>> expr;\n }\n return undefined;\n}\n\nexport interface ISerializable {\n toString: () => string;\n}\n\nexport class Literal<T extends ISerializable> extends Term {\n public termType = <const> 'literal';\n /**\n * @param typedValue internal representation of this literal's value\n * @param dataType a string representing the datatype. Can be of type @see LiteralTypes or any URI\n * @param strValue the string value of this literal. In other words, the string representing the RDF.literal value.\n * @param language the language, mainly for language enabled strings like RDF_LANG_STRING\n */\n public constructor(\n public typedValue: T,\n public dataType: string,\n public strValue?: string,\n public language?: string,\n ) {\n super();\n }\n\n public toRDF(dataFactory: ComunicaDataFactory): RDF.Literal {\n return dataFactory.literal(\n this.strValue ?? this.str(),\n this.language ?? dataFactory.namedNode(this.dataType),\n );\n }\n\n public override str(): string {\n return this.strValue ?? this.typedValue.toString();\n }\n}\n\nexport abstract class NumericLiteral extends Literal<number> {\n protected constructor(\n public override typedValue: number,\n dataType: string,\n public override strValue?: string,\n public override language?: string,\n ) {\n super(typedValue, dataType, strValue, language);\n }\n\n protected abstract specificFormatter(val: number): string;\n\n public override coerceEBV(): boolean {\n return Boolean(this.typedValue);\n }\n\n public override toRDF(dataFactory: ComunicaDataFactory): RDF.Literal {\n const term = super.toRDF(dataFactory);\n if (!Number.isFinite(this.typedValue)) {\n term.value = term.value.replace('Infinity', 'INF');\n }\n return term;\n }\n\n public override str(): string {\n return this.strValue ??\n this.specificFormatter(this.typedValue);\n }\n}\n\nexport class IntegerLiteral extends NumericLiteral {\n public constructor(\n public override typedValue: number,\n dataType?: string,\n public override strValue?: string,\n public override language?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_INTEGER, strValue, language);\n }\n\n protected specificFormatter(val: number): string {\n return val.toFixed(0);\n }\n}\n\nexport class DecimalLiteral extends NumericLiteral {\n public constructor(\n public override typedValue: number,\n dataType?: string,\n public override strValue?: string,\n public override language?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_DECIMAL, strValue, language);\n }\n\n protected specificFormatter(val: number): string {\n return val.toString();\n }\n}\n\nexport class FloatLiteral extends NumericLiteral {\n public constructor(\n public override typedValue: number,\n dataType?: string,\n public override strValue?: string,\n public override language?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_FLOAT, strValue, language);\n }\n\n protected specificFormatter(val: number): string {\n return val.toString();\n }\n}\n\nexport class DoubleLiteral extends NumericLiteral {\n public constructor(\n public override typedValue: number,\n dataType?: string,\n public override strValue?: string,\n public override language?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_DOUBLE, strValue, language);\n }\n\n protected specificFormatter(val: number): string {\n if (!Number.isFinite(val)) {\n if (val > 0) {\n return 'INF';\n }\n if (val < 0) {\n return '-INF';\n }\n return 'NaN';\n }\n\n const jsExponential = val.toExponential();\n const [ jsMantisse, jsExponent ] = jsExponential.split('e');\n\n // Leading + must be removed for integer\n // https://www.w3.org/TR/xmlschema-2/#integer\n const exponent = jsExponent.replace(/\\+/u, '');\n\n // SPARQL test suite prefers trailing zero's\n const mantisse = jsMantisse.includes('.') ?\n jsMantisse :\n `${jsMantisse}.0`;\n\n return `${mantisse}E${exponent}`;\n }\n}\n\nexport class BooleanLiteral extends Literal<boolean> {\n public constructor(public override typedValue: boolean, public override strValue?: string, dataType?: string) {\n super(typedValue, dataType ?? TypeURL.XSD_BOOLEAN, strValue);\n }\n\n public override coerceEBV(): boolean {\n return this.typedValue;\n }\n}\n\nexport class LangStringLiteral extends Literal<string> {\n public constructor(public override typedValue: string, public override language: string, dataType?: string) {\n super(typedValue, dataType ?? TypeURL.RDF_LANG_STRING, typedValue, language);\n }\n\n public override coerceEBV(): boolean {\n return this.str().length > 0;\n }\n}\n\n// https://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-plain-literal\n// https://www.w3.org/TR/sparql11-query/#defn_SimpleLiteral\n// https://www.w3.org/TR/sparql11-query/#func-strings\n// This does not include language tagged literals\nexport class StringLiteral extends Literal<string> {\n /**\n * @param typedValue\n * @param dataType Should be type that implements XSD_STRING\n */\n public constructor(public override typedValue: string, dataType?: string) {\n super(typedValue, dataType ?? TypeURL.XSD_STRING, typedValue);\n }\n\n public override coerceEBV(): boolean {\n return this.str().length > 0;\n }\n}\n\nexport class DateTimeLiteral extends Literal<IDateTimeRepresentation> {\n public constructor(\n public override typedValue: IDateTimeRepresentation,\n public override strValue?: string,\n dataType?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_DATE_TIME, strValue);\n }\n\n public override str(): string {\n return serializeDateTime(this.typedValue);\n }\n}\n\nexport class TimeLiteral extends Literal<ITimeRepresentation> {\n public constructor(\n public override typedValue: ITimeRepresentation,\n public override strValue?: string,\n dataType?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_TIME, strValue);\n }\n\n public override str(): string {\n return serializeTime(this.typedValue);\n }\n}\n\nexport class DateLiteral extends Literal<IDateRepresentation> {\n public constructor(\n public override typedValue: IDateRepresentation,\n public override strValue?: string,\n dataType?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_DATE, strValue);\n }\n\n public override str(): string {\n return serializeDate(this.typedValue);\n }\n}\n\nexport class DurationLiteral extends Literal<Partial<IDurationRepresentation>> {\n public constructor(\n public override typedValue: Partial<IDurationRepresentation>,\n public override strValue?: string,\n dataType?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_DURATION, strValue);\n }\n\n public override str(): string {\n return serializeDuration(this.typedValue);\n }\n}\n\nexport class DayTimeDurationLiteral extends DurationLiteral {\n public constructor(\n public override typedValue: Partial<IDurationRepresentation>,\n public override strValue?: string,\n dataType?: string,\n ) {\n super(typedValue, strValue, dataType ?? TypeURL.XSD_DAY_TIME_DURATION);\n }\n}\n\nexport class YearMonthDurationLiteral extends Literal<Partial<IYearMonthDurationRepresentation>> {\n public constructor(\n public override typedValue: Partial<IYearMonthDurationRepresentation>,\n public override strValue?: string,\n dataType?: string,\n ) {\n super(typedValue, dataType ?? TypeURL.XSD_YEAR_MONTH_DURATION, strValue);\n }\n\n public override str(): string {\n return serializeDuration(this.typedValue, 'P0M');\n }\n}\n\n/**\n * This class is used when a literal is parsed, and it's value is\n * an invalid lexical form for it's datatype. The spec defines value with\n * invalid lexical form are still valid terms, and as such we can not error\n * immediately. This class makes sure that the typedValue will remain undefined,\n * and the category 'nonlexical'. This way, only when operators apply to the\n * 'nonlexical' category, they will keep working, otherwise they will throw a\n * type error.\n * This seems to match the spec, except maybe for functions that accept\n * non-lexical values for their datatype.\n *\n * See:\n * - https://www.w3.org/TR/xquery/#dt-type-error\n * - https://www.w3.org/TR/rdf-concepts/#section-Literal-Value\n * - https://www.w3.org/TR/xquery/#dt-ebv\n * - ... some other more precise thing i can't find...\n */\nexport class NonLexicalLiteral extends Literal<{ toString: () => 'undefined' }> {\n public constructor(\n typedValue: undefined,\n dataType: string,\n private readonly openWorldType: ISuperTypeProvider,\n strValue?: string,\n language?: string,\n ) {\n super({ toString: () => 'undefined' }, dataType, strValue, language);\n }\n\n public override coerceEBV(): boolean {\n const isNumericOrBool =\n isSubTypeOf(this.dataType, TypeURL.XSD_BOOLEAN, this.openWorldType) ||\n isSubTypeOf(this.dataType, TypeAlias.SPARQL_NUMERIC, this.openWorldType);\n if (isNumericOrBool) {\n return false;\n }\n throw new Err.EBVCoercionError(this);\n }\n\n public override toRDF(dataFactory: ComunicaDataFactory): RDF.Literal {\n return dataFactory.literal(\n this.str(),\n this.language ?? dataFactory.namedNode(this.dataType),\n );\n }\n\n public override str(): string {\n return this.strValue ?? '';\n }\n}\n\nexport function isNonLexicalLiteral(lit: Literal<any>): NonLexicalLiteral | undefined {\n if (lit instanceof NonLexicalLiteral) {\n return lit;\n }\n return undefined;\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { VariableExpression } from '@comunica/types';
2
+ import { ExpressionType } from '@comunica/types';
3
+ export declare class Variable implements VariableExpression {
4
+ expressionType: ExpressionType.Variable;
5
+ name: string;
6
+ constructor(name: string);
7
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Variable = void 0;
4
+ const types_1 = require("@comunica/types");
5
+ class Variable {
6
+ constructor(name) {
7
+ this.expressionType = types_1.ExpressionType.Variable;
8
+ this.name = name;
9
+ }
10
+ }
11
+ exports.Variable = Variable;
12
+ //# sourceMappingURL=Variable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Variable.js","sourceRoot":"","sources":["Variable.ts"],"names":[],"mappings":";;;AACA,2CAAiD;AAEjD,MAAa,QAAQ;IAGnB,YAAmB,IAAY;QAFxB,mBAAc,GAA4B,sBAAc,CAAC,QAAQ,CAAC;QAGvE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAND,4BAMC","sourcesContent":["import type { VariableExpression } from '@comunica/types';\nimport { ExpressionType } from '@comunica/types';\n\nexport class Variable implements VariableExpression {\n public expressionType: ExpressionType.Variable = ExpressionType.Variable;\n public name: string;\n public constructor(name: string) {\n this.name = name;\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './Expressions';
2
+ export * from './Variable';
3
+ export * from './Term';
4
+ export * from './Operator';
5
+ export * from './Aggregate';
6
+ export * from './Existence';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Expressions"), exports);
18
+ __exportStar(require("./Variable"), exports);
19
+ __exportStar(require("./Term"), exports);
20
+ __exportStar(require("./Operator"), exports);
21
+ __exportStar(require("./Aggregate"), exports);
22
+ __exportStar(require("./Existence"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B;AAC3B,8CAA4B;AAC5B,8CAA4B","sourcesContent":["export * from './Expressions';\nexport * from './Variable';\nexport * from './Term';\nexport * from './Operator';\nexport * from './Aggregate';\nexport * from './Existence';\n"]}
@@ -0,0 +1,81 @@
1
+ import type { ComunicaDataFactory, IDateTimeRepresentation, IInternalEvaluator, ImplementationFunction, ImplementationFunctionTuple, TermExpression, VariableExpression } from '@comunica/types';
2
+ import type * as RDF from '@rdfjs/types';
3
+ import type { ISerializable, Quad } from '../expressions';
4
+ import * as E from '../expressions';
5
+ import type { ArgumentType } from './OverloadTree';
6
+ import { OverloadTree } from './OverloadTree';
7
+ type Term = TermExpression;
8
+ export declare function declare(identifier: string): Builder;
9
+ export declare class Builder {
10
+ private readonly overloadTree;
11
+ private collected;
12
+ constructor(identifier: string);
13
+ collect(): OverloadTree;
14
+ private static wrapInvalidLexicalProtected;
15
+ set(argTypes: [], func: ImplementationFunctionTuple<[]>, addInvalidHandling?: boolean): Builder;
16
+ set<T1 extends TermExpression>(argTypes: [ArgumentType], func: ImplementationFunctionTuple<[T1]>, addInvalidHandling?: boolean): Builder;
17
+ set<T1 extends TermExpression, T2 extends TermExpression>(argTypes: [ArgumentType, ArgumentType], func: ImplementationFunctionTuple<[T1, T2]>, addInvalidHandling?: boolean): Builder;
18
+ set<T1 extends TermExpression, T2 extends TermExpression, T3 extends TermExpression>(argTypes: [ArgumentType, ArgumentType, ArgumentType], func: ImplementationFunctionTuple<[T1, T2, T3]>, addInvalidHandling?: boolean): Builder;
19
+ set<T1 extends TermExpression, T2 extends TermExpression, T3 extends TermExpression, T4 extends TermExpression>(argTypes: [ArgumentType, ArgumentType, ArgumentType, ArgumentType], func: ImplementationFunctionTuple<[T1, T2, T3, T4]>, addInvalidHandling?: boolean): Builder;
20
+ set(argTypes: ArgumentType[], func: ImplementationFunction, addInvalidHandling?: boolean): Builder;
21
+ copy({ from, to }: {
22
+ from: ArgumentType[];
23
+ to: ArgumentType[];
24
+ }): Builder;
25
+ onUnary<T extends Term>(type: ArgumentType, op: (expressionEvaluator: IInternalEvaluator) => (val: T) => Term, addInvalidHandling?: boolean): Builder;
26
+ onUnaryTyped<T extends ISerializable>(type: ArgumentType, op: (expressionEvaluator: IInternalEvaluator) => (val: T) => Term, addInvalidHandling?: boolean): Builder;
27
+ onBinary<L extends Term, R extends Term>(types: [ArgumentType, ArgumentType], op: (expressionEvaluator: IInternalEvaluator) => (left: L, right: R) => Term, addInvalidHandling?: boolean): Builder;
28
+ onBinaryTyped<L extends ISerializable, R extends ISerializable>(types: [ArgumentType, ArgumentType], op: (expressionEvaluator: IInternalEvaluator) => (left: L, right: R) => Term, addInvalidHandling?: boolean): Builder;
29
+ onTernaryTyped<A1 extends ISerializable, A2 extends ISerializable, A3 extends ISerializable>(types: [ArgumentType, ArgumentType, ArgumentType], op: (expressionEvaluator: IInternalEvaluator) => (a1: A1, a2: A2, a3: A3) => Term, addInvalidHandling?: boolean): Builder;
30
+ onTernary<A1 extends Term, A2 extends Term, A3 extends Term>(types: [ArgumentType, ArgumentType, ArgumentType], op: (expressionEvaluator: IInternalEvaluator) => (a1: A1, a2: A2, a3: A3) => Term, addInvalidHandling?: boolean): Builder;
31
+ onQuaternaryTyped<A1 extends ISerializable, A2 extends ISerializable, A3 extends ISerializable, A4 extends ISerializable>(types: [ArgumentType, ArgumentType, ArgumentType, ArgumentType], op: (expressionEvaluator: IInternalEvaluator) => (a1: A1, a2: A2, a3: A3, a4: A4) => Term, addInvalidHandling?: boolean): Builder;
32
+ onTerm1<T extends Term>(op: (expressionEvaluator: IInternalEvaluator) => (term: T) => Term, addInvalidHandling?: boolean): Builder;
33
+ onTerm3(op: (expressionEvaluator: IInternalEvaluator) => (t1: Term, t2: Term, t3: Term) => Term): Builder;
34
+ onQuad1(op: (expressionEvaluator: IInternalEvaluator) => (term: Term & Quad) => Term): Builder;
35
+ onLiteral1<T extends ISerializable>(op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<T>) => Term, addInvalidHandling?: boolean): Builder;
36
+ onBoolean1(op: (expressionEvaluator: IInternalEvaluator) => (lit: E.BooleanLiteral) => Term, addInvalidHandling?: boolean): Builder;
37
+ onBoolean1Typed(op: (expressionEvaluator: IInternalEvaluator) => (lit: boolean) => Term, addInvalidHandling?: boolean): Builder;
38
+ onString1(op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<string>) => Term, addInvalidHandling?: boolean): Builder;
39
+ onString1Typed(op: (expressionEvaluator: IInternalEvaluator) => (lit: string) => Term, addInvalidHandling?: boolean): Builder;
40
+ onLangString1(op: (expressionEvaluator: IInternalEvaluator) => (lit: E.LangStringLiteral) => Term, addInvalidHandling?: boolean): Builder;
41
+ onStringly1(op: (expressionEvaluator: IInternalEvaluator) => (lit: E.Literal<string>) => Term, addInvalidHandling?: boolean): Builder;
42
+ onStringly1Typed(op: (expressionEvaluator: IInternalEvaluator) => (lit: string) => Term, addInvalidHandling?: boolean): Builder;
43
+ onNumeric1(op: (expressionEvaluator: IInternalEvaluator) => (val: E.NumericLiteral) => Term, addInvalidHandling?: boolean): Builder;
44
+ onDateTime1(op: (expressionEvaluator: IInternalEvaluator) => (date: E.DateTimeLiteral) => Term, addInvalidHandling?: boolean): Builder;
45
+ /**
46
+ * We return the base types and not the provided types because we don't want to create invalid terms.
47
+ * Providing negative number to a function unary - for example should not
48
+ * return a term of type negative number having a positive value.
49
+ * @param op the numeric operator performed
50
+ * @param addInvalidHandling whether to add invalid handling,
51
+ * whether to add @param op in @see wrapInvalidLexicalProtected
52
+ */
53
+ numericConverter(op: (expressionEvaluator: IInternalEvaluator) => (val: number) => number, addInvalidHandling?: boolean): Builder;
54
+ /**
55
+ * !!! Be aware when using this function, it will create different overloads with different return types !!!
56
+ * Arithmetic operators take 2 numeric arguments, and return a single numerical
57
+ * value. The type of the return value is heavily dependent on the types of the
58
+ * input arguments. In JS everything is a double, but in SPARQL it is not.
59
+ *
60
+ * The different arguments are handled by type promotion and subtype substitution.
61
+ * The way numeric function arguments work is described here:
62
+ * https://www.w3.org/TR/xpath20/#mapping
63
+ * Above url is referenced in the sparql spec: https://www.w3.org/TR/sparql11-query/#OperatorMapping
64
+ */
65
+ arithmetic(op: (expressionEvaluator: IInternalEvaluator) => (left: number, right: number) => number, addInvalidHandling?: boolean): Builder;
66
+ numberTest(test: (expressionEvaluator: IInternalEvaluator) => (left: number, right: number) => boolean): Builder;
67
+ stringTest(test: (expressionEvaluator: IInternalEvaluator) => (left: string, right: string) => boolean, addInvalidHandling?: boolean): Builder;
68
+ booleanTest(test: (expressionEvaluator: IInternalEvaluator) => (left: boolean, right: boolean) => boolean, addInvalidHandling?: boolean): Builder;
69
+ dateTimeTest(test: (expressionEvaluator: IInternalEvaluator) => (left: IDateTimeRepresentation, right: IDateTimeRepresentation) => boolean, addInvalidHandling?: boolean): Builder;
70
+ numeric<T extends TermExpression>(op: ImplementationFunctionTuple<[T, T]>): Builder;
71
+ }
72
+ export declare function bool(val: boolean): E.BooleanLiteral;
73
+ export declare function integer(num: number): E.IntegerLiteral;
74
+ export declare function decimal(num: number): E.DecimalLiteral;
75
+ export declare function float(num: number): E.FloatLiteral;
76
+ export declare function double(num: number): E.DoubleLiteral;
77
+ export declare function string(str: string): E.StringLiteral;
78
+ export declare function langString(str: string, lang: string): E.LangStringLiteral;
79
+ export declare function dateTime(date: IDateTimeRepresentation, str: string): E.DateTimeLiteral;
80
+ export declare function expressionToVar(dataFactory: ComunicaDataFactory, variableExpression: VariableExpression): RDF.Variable;
81
+ export {};