@traqula/rules-sparql-1-1 0.0.1-alpha.137

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 (70) hide show
  1. package/LICENSE.txt +22 -0
  2. package/README.md +15 -0
  3. package/lib/Sparql11types.d.ts +246 -0
  4. package/lib/Sparql11types.js +2 -0
  5. package/lib/Sparql11types.js.map +1 -0
  6. package/lib/expressionHelpers.d.ts +55 -0
  7. package/lib/expressionHelpers.js +224 -0
  8. package/lib/expressionHelpers.js.map +1 -0
  9. package/lib/grammar/builtIn.d.ts +91 -0
  10. package/lib/grammar/builtIn.js +239 -0
  11. package/lib/grammar/builtIn.js.map +1 -0
  12. package/lib/grammar/dataSetClause.d.ts +22 -0
  13. package/lib/grammar/dataSetClause.js +37 -0
  14. package/lib/grammar/dataSetClause.js.map +1 -0
  15. package/lib/grammar/expression.d.ts +68 -0
  16. package/lib/grammar/expression.js +397 -0
  17. package/lib/grammar/expression.js.map +1 -0
  18. package/lib/grammar/general.d.ts +42 -0
  19. package/lib/grammar/general.js +161 -0
  20. package/lib/grammar/general.js.map +1 -0
  21. package/lib/grammar/index.d.ts +12 -0
  22. package/lib/grammar/index.js +13 -0
  23. package/lib/grammar/index.js.map +1 -0
  24. package/lib/grammar/literals.d.ts +53 -0
  25. package/lib/grammar/literals.js +179 -0
  26. package/lib/grammar/literals.js.map +1 -0
  27. package/lib/grammar/propertyPaths.d.ts +40 -0
  28. package/lib/grammar/propertyPaths.js +193 -0
  29. package/lib/grammar/propertyPaths.js.map +1 -0
  30. package/lib/grammar/queryUnit/queryUnit.d.ts +53 -0
  31. package/lib/grammar/queryUnit/queryUnit.js +405 -0
  32. package/lib/grammar/queryUnit/queryUnit.js.map +1 -0
  33. package/lib/grammar/solutionModifier.d.ts +44 -0
  34. package/lib/grammar/solutionModifier.js +203 -0
  35. package/lib/grammar/solutionModifier.js.map +1 -0
  36. package/lib/grammar/tripleBlock.d.ts +42 -0
  37. package/lib/grammar/tripleBlock.js +309 -0
  38. package/lib/grammar/tripleBlock.js.map +1 -0
  39. package/lib/grammar/updateUnit/updateUnit.d.ts +101 -0
  40. package/lib/grammar/updateUnit/updateUnit.js +448 -0
  41. package/lib/grammar/updateUnit/updateUnit.js.map +1 -0
  42. package/lib/grammar/whereClause.d.ts +76 -0
  43. package/lib/grammar/whereClause.js +383 -0
  44. package/lib/grammar/whereClause.js.map +1 -0
  45. package/lib/index.cjs +13088 -0
  46. package/lib/index.d.ts +5 -0
  47. package/lib/index.js +6 -0
  48. package/lib/index.js.map +1 -0
  49. package/lib/lexer/BuildinCalls.d.ts +248 -0
  50. package/lib/lexer/BuildinCalls.js +189 -0
  51. package/lib/lexer/BuildinCalls.js.map +1 -0
  52. package/lib/lexer/graph.d.ts +14 -0
  53. package/lib/lexer/graph.js +9 -0
  54. package/lib/lexer/graph.js.map +1 -0
  55. package/lib/lexer/index.d.ts +5 -0
  56. package/lib/lexer/index.js +6 -0
  57. package/lib/lexer/index.js.map +1 -0
  58. package/lib/lexer/lexer.d.ts +147 -0
  59. package/lib/lexer/lexer.js +67 -0
  60. package/lib/lexer/lexer.js.map +1 -0
  61. package/lib/lexer/symbols.d.ts +80 -0
  62. package/lib/lexer/symbols.js +30 -0
  63. package/lib/lexer/symbols.js.map +1 -0
  64. package/lib/lexer/terminals.d.ts +108 -0
  65. package/lib/lexer/terminals.js +76 -0
  66. package/lib/lexer/terminals.js.map +1 -0
  67. package/lib/utils.d.ts +3 -0
  68. package/lib/utils.js +7 -0
  69. package/lib/utils.js.map +1 -0
  70. package/package.json +45 -0
package/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2024–now Jitse De Smet
4
+ Comunica Association and Ghent University – imec, Belgium
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # TRAQULA Rules SPARQL 1.1
2
+
3
+ TRAQULA rules SPARQL 1.1 contains rules required for creating a parser for SPARQL 1.1.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @traqula/rules-sparql-1-1
9
+ ```
10
+
11
+ or
12
+
13
+ ```bash
14
+ yarn add @traqula/rules-sparql-1-1
15
+ ```
@@ -0,0 +1,246 @@
1
+ import type * as RdfJs from '@rdfjs/types';
2
+ import type { BlankNode } from 'rdf-data-factory';
3
+ import type { CommonIRIs } from '@traqula/core';
4
+ export type GraphTerm = IriTerm | BlankTerm | LiteralTerm;
5
+ export type Term = GraphTerm | VariableTerm;
6
+ export type VerbA = IriTerm<CommonIRIs.TYPE>;
7
+ export interface Wildcard {
8
+ readonly termType: 'Wildcard';
9
+ readonly value: '*';
10
+ equals: (other: RdfJs.Term | null | undefined) => boolean;
11
+ }
12
+ export type Triple = {
13
+ subject: Term;
14
+ predicate: IriTerm | VariableTerm | PropertyPath;
15
+ object: Term;
16
+ };
17
+ export type TripleCreatorS = (part: Pick<Triple, 'subject'>) => Triple;
18
+ export type TripleCreatorSP = (part: Pick<Triple, 'subject' | 'predicate'>) => Triple;
19
+ export interface IGraphNode {
20
+ node: ITriplesNode['node'] | Term;
21
+ triples: Triple[];
22
+ }
23
+ export interface ITriplesNode {
24
+ node: IriTerm | BlankNode;
25
+ triples: Triple[];
26
+ }
27
+ export type Pattern = BgpPattern | BlockPattern | FilterPattern | BindPattern | ValuesPattern | Omit<SelectQuery, 'prefixes'>;
28
+ export type Expression = OperationExpression | FunctionCallExpression | AggregateExpression | Expression[] | IriTerm | VariableTerm | LiteralTerm;
29
+ export interface FunctionCallExpression extends BaseExpression {
30
+ type: 'functionCall';
31
+ function: IriTerm;
32
+ args: Expression[];
33
+ }
34
+ /**
35
+ * Basic Graph Pattern
36
+ */
37
+ export interface BgpPattern {
38
+ type: 'bgp';
39
+ triples: Triple[];
40
+ }
41
+ export interface GraphQuads {
42
+ type: 'graph';
43
+ name: IriTerm | VariableTerm;
44
+ triples: Triple[];
45
+ }
46
+ export interface SparqlParser {
47
+ parse: (query: string) => SparqlQuery;
48
+ _resetBlanks: () => void;
49
+ }
50
+ export type VariableTerm = RdfJs.Variable;
51
+ export type IriTerm<IRI extends string = string> = RdfJs.NamedNode<IRI>;
52
+ export type LiteralTerm = RdfJs.Literal;
53
+ export type BlankTerm = RdfJs.BlankNode;
54
+ export type PropertyPath = NegatedPropertySet | {
55
+ type: 'path';
56
+ pathType: '|' | '/' | '^' | '+' | '*' | '?';
57
+ items: (IriTerm | PropertyPath)[];
58
+ };
59
+ export type SparqlQuery = Query | Update | Pick<Update, 'base' | 'prefixes'>;
60
+ export type Query = SelectQuery | ConstructQuery | AskQuery | DescribeQuery;
61
+ export interface SelectQuery extends BaseQuery {
62
+ queryType: 'SELECT';
63
+ variables: Variable[] | [Wildcard];
64
+ distinct?: true | undefined;
65
+ reduced?: true | undefined;
66
+ group?: Grouping[] | undefined;
67
+ having?: Expression[] | undefined;
68
+ order?: Ordering[] | undefined;
69
+ limit?: number | undefined;
70
+ offset?: number | undefined;
71
+ }
72
+ export interface Grouping {
73
+ expression: Expression;
74
+ variable?: VariableTerm;
75
+ }
76
+ export interface Ordering {
77
+ expression: Expression;
78
+ descending?: true | undefined;
79
+ }
80
+ export interface ConstructQuery extends BaseQuery {
81
+ queryType: 'CONSTRUCT';
82
+ template?: Triple[] | undefined;
83
+ }
84
+ export interface AskQuery extends BaseQuery {
85
+ queryType: 'ASK';
86
+ }
87
+ export interface DescribeQuery extends BaseQuery {
88
+ queryType: 'DESCRIBE';
89
+ variables: (VariableTerm | IriTerm)[] | [Wildcard];
90
+ }
91
+ export interface Update {
92
+ type: 'update';
93
+ base?: string | undefined;
94
+ prefixes: Record<string, string>;
95
+ updates: UpdateOperation[];
96
+ }
97
+ export type UpdateOperation = InsertDeleteOperation | ManagementOperation;
98
+ export type InsertDeleteOperation = {
99
+ updateType: 'insert';
100
+ graph?: GraphOrDefault;
101
+ insert: Quads[];
102
+ } | {
103
+ updateType: 'delete';
104
+ graph?: GraphOrDefault;
105
+ delete: Quads[];
106
+ } | {
107
+ updateType: 'insertdelete';
108
+ graph?: IriTerm;
109
+ insert: Quads[];
110
+ delete: Quads[];
111
+ using?: {
112
+ default: IriTerm[];
113
+ named: IriTerm[];
114
+ };
115
+ where: Pattern[];
116
+ } | {
117
+ updateType: 'deletewhere';
118
+ graph?: GraphOrDefault;
119
+ delete: Quads[];
120
+ };
121
+ export type Quads = BgpPattern | GraphQuads;
122
+ export type ManagementOperation = CopyMoveAddOperation | LoadOperation | CreateOperation | ClearDropOperation;
123
+ export interface CopyMoveAddOperation {
124
+ type: 'copy' | 'move' | 'add';
125
+ silent: boolean;
126
+ source: GraphOrDefault;
127
+ destination: GraphOrDefault;
128
+ }
129
+ export interface LoadOperation {
130
+ type: 'load';
131
+ silent: boolean;
132
+ source: IriTerm;
133
+ destination?: IriTerm;
134
+ }
135
+ export interface CreateOperation {
136
+ type: 'create';
137
+ silent: boolean;
138
+ graph: GraphOrDefault;
139
+ }
140
+ export interface ClearDropOperation {
141
+ type: 'clear' | 'drop';
142
+ silent: boolean;
143
+ graph: GraphReference;
144
+ }
145
+ export interface GraphOrDefault {
146
+ type?: 'graph';
147
+ name?: IriTerm | undefined;
148
+ default?: true | undefined;
149
+ }
150
+ export interface GraphReference extends GraphOrDefault {
151
+ named?: true | undefined;
152
+ all?: true | undefined;
153
+ }
154
+ /**
155
+ * Examples: '?var', '*',
156
+ * SELECT (?a as ?b) ... ==> { expression: '?a', variable: '?b' }
157
+ */
158
+ export type Variable = VariableExpression | VariableTerm;
159
+ export interface VariableExpression {
160
+ expression: Expression;
161
+ variable: VariableTerm;
162
+ }
163
+ export interface BaseQuery {
164
+ type: 'query';
165
+ base?: string | undefined;
166
+ prefixes: Record<string, string>;
167
+ from?: {
168
+ default: IriTerm[];
169
+ named: IriTerm[];
170
+ } | undefined;
171
+ where?: Pattern[] | undefined;
172
+ values?: ValuePatternRow[] | undefined;
173
+ }
174
+ export type IriTermOrElt = IriTerm | {
175
+ type: 'path';
176
+ pathType: '^';
177
+ items: [IriTerm];
178
+ };
179
+ export interface NegatedPropertySet {
180
+ type: 'path';
181
+ pathType: '!';
182
+ items: IriTermOrElt[] | [
183
+ {
184
+ type: 'path';
185
+ pathType: '|';
186
+ items: (IriTermOrElt)[];
187
+ }
188
+ ];
189
+ }
190
+ export interface GroupPattern {
191
+ type: 'group';
192
+ patterns: Pattern[];
193
+ }
194
+ export interface GraphPattern {
195
+ type: 'graph';
196
+ name: IriTerm | VariableTerm;
197
+ patterns: Pattern[];
198
+ }
199
+ export interface MinusPattern {
200
+ type: 'minus';
201
+ patterns: Pattern[];
202
+ }
203
+ export interface ServicePattern {
204
+ type: 'service';
205
+ name: IriTerm | VariableTerm;
206
+ silent: boolean;
207
+ patterns: Pattern[];
208
+ }
209
+ export type BlockPattern = OptionalPattern | UnionPattern | GroupPattern | GraphPattern | MinusPattern | ServicePattern;
210
+ export interface OptionalPattern {
211
+ type: 'optional';
212
+ patterns: Pattern[];
213
+ }
214
+ export interface UnionPattern {
215
+ type: 'union';
216
+ patterns: Pattern[];
217
+ }
218
+ export type ValuePatternRow = Record<string, IriTerm | BlankTerm | LiteralTerm | undefined>;
219
+ export interface FilterPattern {
220
+ type: 'filter';
221
+ expression: Expression;
222
+ }
223
+ export interface BindPattern {
224
+ type: 'bind';
225
+ expression: Expression;
226
+ variable: VariableTerm;
227
+ }
228
+ export interface ValuesPattern {
229
+ type: 'values';
230
+ values: ValuePatternRow[];
231
+ }
232
+ export interface BaseExpression {
233
+ type: string;
234
+ distinct?: boolean | undefined;
235
+ }
236
+ export interface OperationExpression extends BaseExpression {
237
+ type: 'operation';
238
+ operator: string;
239
+ args: (Expression | Pattern)[];
240
+ }
241
+ export interface AggregateExpression extends BaseExpression {
242
+ type: 'aggregate';
243
+ expression: Expression | Wildcard;
244
+ aggregation: string;
245
+ separator?: string | undefined;
246
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Sparql11types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sparql11types.js","sourceRoot":"","sources":["Sparql11types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as RdfJs from '@rdfjs/types';\nimport type { BlankNode } from 'rdf-data-factory';\nimport type { CommonIRIs } from '@traqula/core';\n\nexport type GraphTerm = IriTerm | BlankTerm | LiteralTerm;\nexport type Term = GraphTerm | VariableTerm;\nexport type VerbA = IriTerm<CommonIRIs.TYPE>;\n\nexport interface Wildcard {\n readonly termType: 'Wildcard';\n readonly value: '*';\n equals: (other: RdfJs.Term | null | undefined) => boolean;\n}\n\nexport type Triple = {\n subject: Term;\n predicate: IriTerm | VariableTerm | PropertyPath;\n object: Term;\n};\n\nexport type TripleCreatorS = (part: Pick<Triple, 'subject'>) => Triple;\nexport type TripleCreatorSP = (part: Pick<Triple, 'subject' | 'predicate'>) => Triple;\n\nexport interface IGraphNode {\n node: ITriplesNode['node'] | Term;\n triples: Triple[];\n}\n\nexport interface ITriplesNode {\n node: IriTerm | BlankNode;\n triples: Triple[];\n}\n\nexport type Pattern =\n | BgpPattern\n | BlockPattern\n | FilterPattern\n | BindPattern\n | ValuesPattern\n | Omit<SelectQuery, 'prefixes'>;\n\nexport type Expression =\n | OperationExpression\n | FunctionCallExpression\n | AggregateExpression\n // Used in `IN` operator\n | Expression[]\n | IriTerm\n | VariableTerm\n | LiteralTerm;\n\nexport interface FunctionCallExpression extends BaseExpression {\n type: 'functionCall';\n function: IriTerm;\n args: Expression[];\n}\n\n/**\n * Basic Graph Pattern\n */\nexport interface BgpPattern {\n type: 'bgp';\n triples: Triple[];\n}\n\nexport interface GraphQuads {\n type: 'graph';\n name: IriTerm | VariableTerm;\n triples: Triple[];\n}\n\n// Copied types\nexport interface SparqlParser {\n parse: (query: string) => SparqlQuery;\n _resetBlanks: () => void;\n}\n\nexport type VariableTerm = RdfJs.Variable;\nexport type IriTerm<IRI extends string = string> = RdfJs.NamedNode<IRI>;\nexport type LiteralTerm = RdfJs.Literal;\nexport type BlankTerm = RdfJs.BlankNode;\n\nexport type PropertyPath = NegatedPropertySet | {\n type: 'path';\n pathType: '|' | '/' | '^' | '+' | '*' | '?';\n items: (IriTerm | PropertyPath)[];\n};\n\nexport type SparqlQuery = Query | Update | Pick<Update, 'base' | 'prefixes'>;\n\nexport type Query = SelectQuery | ConstructQuery | AskQuery | DescribeQuery;\n\nexport interface SelectQuery extends BaseQuery {\n queryType: 'SELECT';\n variables: Variable[] | [Wildcard];\n distinct?: true | undefined;\n reduced?: true | undefined;\n group?: Grouping[] | undefined;\n having?: Expression[] | undefined;\n order?: Ordering[] | undefined;\n limit?: number | undefined;\n offset?: number | undefined;\n}\n\nexport interface Grouping {\n expression: Expression;\n variable?: VariableTerm;\n}\n\nexport interface Ordering {\n expression: Expression;\n descending?: true | undefined;\n}\n\nexport interface ConstructQuery extends BaseQuery {\n queryType: 'CONSTRUCT';\n template?: Triple[] | undefined;\n}\n\nexport interface AskQuery extends BaseQuery {\n queryType: 'ASK';\n}\n\nexport interface DescribeQuery extends BaseQuery {\n queryType: 'DESCRIBE';\n variables: (VariableTerm | IriTerm)[] | [Wildcard];\n}\n\nexport interface Update {\n type: 'update';\n base?: string | undefined;\n prefixes: Record<string, string>;\n updates: UpdateOperation[];\n}\n\nexport type UpdateOperation = InsertDeleteOperation | ManagementOperation;\n\nexport type InsertDeleteOperation =\n | {\n updateType: 'insert';\n graph?: GraphOrDefault;\n insert: Quads[];\n }\n | {\n updateType: 'delete';\n graph?: GraphOrDefault;\n delete: Quads[];\n }\n | {\n updateType: 'insertdelete';\n graph?: IriTerm;\n insert: Quads[];\n delete: Quads[];\n using?: {\n default: IriTerm[];\n named: IriTerm[];\n };\n where: Pattern[];\n }\n | {\n updateType: 'deletewhere';\n graph?: GraphOrDefault;\n delete: Quads[];\n };\n\nexport type Quads = BgpPattern | GraphQuads;\n\nexport type ManagementOperation =\n | CopyMoveAddOperation\n | LoadOperation\n | CreateOperation\n | ClearDropOperation;\n\nexport interface CopyMoveAddOperation {\n type: 'copy' | 'move' | 'add';\n silent: boolean;\n source: GraphOrDefault;\n destination: GraphOrDefault;\n}\n\nexport interface LoadOperation {\n type: 'load';\n silent: boolean;\n source: IriTerm;\n destination?: IriTerm;\n}\n\nexport interface CreateOperation {\n type: 'create';\n silent: boolean;\n graph: GraphOrDefault;\n}\n\nexport interface ClearDropOperation {\n type: 'clear' | 'drop';\n silent: boolean;\n graph: GraphReference;\n}\n\nexport interface GraphOrDefault {\n type?: 'graph';\n name?: IriTerm | undefined;\n default?: true | undefined;\n}\n\nexport interface GraphReference extends GraphOrDefault {\n named?: true | undefined;\n all?: true | undefined;\n}\n\n/**\n * Examples: '?var', '*',\n * SELECT (?a as ?b) ... ==> { expression: '?a', variable: '?b' }\n */\nexport type Variable = VariableExpression | VariableTerm;\n\nexport interface VariableExpression {\n expression: Expression;\n variable: VariableTerm;\n}\n\nexport interface BaseQuery {\n type: 'query';\n base?: string | undefined;\n prefixes: Record<string, string>;\n from?:\n | {\n default: IriTerm[];\n named: IriTerm[];\n }\n | undefined;\n where?: Pattern[] | undefined;\n values?: ValuePatternRow[] | undefined;\n}\n\nexport type IriTermOrElt = IriTerm | {\n type: 'path';\n pathType: '^';\n items: [IriTerm];\n};\n\nexport interface NegatedPropertySet {\n type: 'path';\n pathType: '!';\n items: IriTermOrElt[] | [{\n type: 'path';\n pathType: '|';\n items: (IriTermOrElt)[];\n }];\n}\n\nexport interface GroupPattern {\n type: 'group';\n patterns: Pattern[];\n}\n\nexport interface GraphPattern {\n type: 'graph';\n name: IriTerm | VariableTerm;\n patterns: Pattern[];\n}\n\nexport interface MinusPattern {\n type: 'minus';\n patterns: Pattern[];\n}\n\nexport interface ServicePattern {\n type: 'service';\n name: IriTerm | VariableTerm;\n silent: boolean;\n patterns: Pattern[];\n}\n\nexport type BlockPattern =\n | OptionalPattern\n | UnionPattern\n | GroupPattern\n | GraphPattern\n | MinusPattern\n | ServicePattern;\n\nexport interface OptionalPattern {\n type: 'optional';\n patterns: Pattern[];\n}\n\nexport interface UnionPattern {\n type: 'union';\n patterns: Pattern[];\n}\n\nexport type ValuePatternRow = Record<string, IriTerm | BlankTerm | LiteralTerm | undefined>;\n\nexport interface FilterPattern {\n type: 'filter';\n expression: Expression;\n}\n\nexport interface BindPattern {\n type: 'bind';\n expression: Expression;\n variable: VariableTerm;\n}\n\nexport interface ValuesPattern {\n type: 'values';\n values: ValuePatternRow[];\n}\n\nexport interface BaseExpression {\n type: string;\n distinct?: boolean | undefined;\n}\n\nexport interface OperationExpression extends BaseExpression {\n type: 'operation';\n operator: string;\n args: (Expression | Pattern)[];\n}\n\nexport interface AggregateExpression extends BaseExpression {\n type: 'aggregate';\n expression: Expression | Wildcard;\n aggregation: string;\n separator?: string | undefined;\n}\n"]}
@@ -0,0 +1,55 @@
1
+ import type { TokenType } from 'chevrotain';
2
+ import { Wildcard } from '@traqula/core';
3
+ import type { RuleDef } from '@traqula/core';
4
+ import type { Expression, Pattern, VariableTerm } from './Sparql11types';
5
+ export interface IExpressionFunctionX<U extends (Expression | Pattern)[]> {
6
+ type: 'operation';
7
+ operator: string;
8
+ args: U;
9
+ }
10
+ export type RuleDefExpressionFunctionX<T extends string, U extends (Expression | Pattern)[]> = RuleDef<T, IExpressionFunctionX<U>>;
11
+ export declare function funcExpr1<T extends string>(func: TokenType & {
12
+ name: T;
13
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]>;
14
+ export declare function funcExpr2<T extends string>(func: TokenType & {
15
+ name: T;
16
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression]>;
17
+ export declare function funcExpr3<T extends string>(func: TokenType & {
18
+ name: T;
19
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression, Expression]>;
20
+ export declare function funcVar1<T extends string>(func: TokenType & {
21
+ name: T;
22
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [VariableTerm]>;
23
+ export declare function funcExprOrNil1<T extends string>(func: TokenType & {
24
+ name: T;
25
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [] | [Expression]>;
26
+ export declare function funcNil1<T extends string>(func: TokenType & {
27
+ name: T;
28
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, []>;
29
+ export declare function funcExprList1<T extends string>(func: TokenType & {
30
+ name: T;
31
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, Expression[]>;
32
+ export declare function funcExpr2or3<T extends string>(func: TokenType & {
33
+ name: T;
34
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression] | [Expression, Expression, Expression]>;
35
+ export declare function funcExpr3or4<T extends string>(func: TokenType & {
36
+ name: T;
37
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [
38
+ Expression,
39
+ Expression,
40
+ Expression
41
+ ] | [Expression, Expression, Expression, Expression]>;
42
+ export declare function funcGroupGraphPattern<T extends string>(func: TokenType & {
43
+ name: T;
44
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, Pattern[]>;
45
+ export interface IExpressionAggregator {
46
+ type: 'aggregate';
47
+ distinct: boolean;
48
+ expression: Expression | Wildcard;
49
+ aggregation: string;
50
+ separator?: string;
51
+ }
52
+ export type RuleDefExpressionAggregatorX<T extends string> = RuleDef<T, IExpressionAggregator>;
53
+ export declare function baseAggregateFunc<T extends string>(func: TokenType & {
54
+ name: T;
55
+ }): RuleDefExpressionAggregatorX<Uncapitalize<T>>;
@@ -0,0 +1,224 @@
1
+ import * as l from './lexer';
2
+ import { Wildcard } from '@traqula/core';
3
+ import { expression, expressionList } from './grammar/expression';
4
+ import { var_ } from './grammar/general';
5
+ import { groupGraphPattern } from './grammar/whereClause';
6
+ import { unCapitalize } from '@traqula/core';
7
+ import { deGroupSingle } from './utils';
8
+ function formatOperator(operator) {
9
+ return operator.toLowerCase().replaceAll(' ', '');
10
+ }
11
+ export function funcExpr1(func) {
12
+ return {
13
+ name: unCapitalize(func.name),
14
+ impl: ({ SUBRULE, CONSUME }) => () => {
15
+ const operator = CONSUME(func);
16
+ CONSUME(l.symbols.LParen);
17
+ const arg = SUBRULE(expression);
18
+ CONSUME(l.symbols.RParen);
19
+ return {
20
+ type: 'operation',
21
+ operator: formatOperator(operator.image),
22
+ args: [arg],
23
+ };
24
+ },
25
+ };
26
+ }
27
+ export function funcExpr2(func) {
28
+ return {
29
+ name: unCapitalize(func.name),
30
+ impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {
31
+ const operator = CONSUME(func);
32
+ CONSUME(l.symbols.LParen);
33
+ const arg1 = SUBRULE1(expression);
34
+ CONSUME(l.symbols.comma);
35
+ const arg2 = SUBRULE2(expression);
36
+ CONSUME(l.symbols.RParen);
37
+ return {
38
+ type: 'operation',
39
+ operator: formatOperator(operator.image),
40
+ args: [arg1, arg2],
41
+ };
42
+ },
43
+ };
44
+ }
45
+ export function funcExpr3(func) {
46
+ return {
47
+ name: unCapitalize(func.name),
48
+ impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {
49
+ const operator = CONSUME(func);
50
+ CONSUME(l.symbols.LParen);
51
+ const arg1 = SUBRULE1(expression);
52
+ CONSUME1(l.symbols.comma);
53
+ const arg2 = SUBRULE2(expression);
54
+ CONSUME2(l.symbols.comma);
55
+ const arg3 = SUBRULE3(expression);
56
+ CONSUME(l.symbols.RParen);
57
+ return {
58
+ type: 'operation',
59
+ operator: formatOperator(operator.image),
60
+ args: [arg1, arg2, arg3],
61
+ };
62
+ },
63
+ };
64
+ }
65
+ export function funcVar1(func) {
66
+ return {
67
+ name: unCapitalize(func.name),
68
+ impl: ({ SUBRULE, CONSUME }) => () => {
69
+ const operator = CONSUME(func);
70
+ CONSUME(l.symbols.LParen);
71
+ const arg = SUBRULE(var_);
72
+ CONSUME(l.symbols.RParen);
73
+ return {
74
+ type: 'operation',
75
+ operator: formatOperator(operator.image),
76
+ args: [arg],
77
+ };
78
+ },
79
+ };
80
+ }
81
+ export function funcExprOrNil1(func) {
82
+ return {
83
+ name: unCapitalize(func.name),
84
+ impl: ({ CONSUME, OR, SUBRULE }) => () => {
85
+ const operator = CONSUME(func);
86
+ const args = OR([
87
+ {
88
+ ALT: () => {
89
+ CONSUME(l.symbols.LParen);
90
+ const arg = SUBRULE(expression);
91
+ CONSUME(l.symbols.RParen);
92
+ return [arg];
93
+ },
94
+ },
95
+ {
96
+ ALT: () => {
97
+ CONSUME(l.terminals.nil);
98
+ return [];
99
+ },
100
+ },
101
+ ]);
102
+ return {
103
+ type: 'operation',
104
+ operator: formatOperator(operator.image),
105
+ args,
106
+ };
107
+ },
108
+ };
109
+ }
110
+ export function funcNil1(func) {
111
+ return {
112
+ name: unCapitalize(func.name),
113
+ impl: ({ CONSUME }) => () => {
114
+ const operator = CONSUME(func);
115
+ CONSUME(l.terminals.nil);
116
+ return {
117
+ type: 'operation',
118
+ operator: formatOperator(operator.image),
119
+ args: [],
120
+ };
121
+ },
122
+ };
123
+ }
124
+ export function funcExprList1(func) {
125
+ return {
126
+ name: unCapitalize(func.name),
127
+ impl: ({ CONSUME, SUBRULE }) => () => {
128
+ const operator = CONSUME(func);
129
+ const args = SUBRULE(expressionList);
130
+ return {
131
+ type: 'operation',
132
+ operator: formatOperator(operator.image),
133
+ args,
134
+ };
135
+ },
136
+ };
137
+ }
138
+ export function funcExpr2or3(func) {
139
+ return {
140
+ name: unCapitalize(func.name),
141
+ impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {
142
+ const operator = CONSUME(func);
143
+ CONSUME(l.symbols.LParen);
144
+ const arg1 = SUBRULE1(expression);
145
+ CONSUME1(l.symbols.comma);
146
+ const arg2 = SUBRULE2(expression);
147
+ const arg3 = OPTION(() => {
148
+ CONSUME2(l.symbols.comma);
149
+ return SUBRULE3(expression);
150
+ });
151
+ CONSUME(l.symbols.RParen);
152
+ return {
153
+ type: 'operation',
154
+ operator: formatOperator(operator.image),
155
+ args: arg3 ? [arg1, arg2, arg3] : [arg1, arg2],
156
+ };
157
+ },
158
+ };
159
+ }
160
+ export function funcExpr3or4(func) {
161
+ return {
162
+ name: unCapitalize(func.name),
163
+ impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {
164
+ const operator = CONSUME(func);
165
+ CONSUME(l.symbols.LParen);
166
+ const arg1 = SUBRULE1(expression);
167
+ CONSUME1(l.symbols.comma);
168
+ const arg2 = SUBRULE2(expression);
169
+ CONSUME2(l.symbols.comma);
170
+ const arg3 = SUBRULE3(expression);
171
+ const arg4 = OPTION(() => {
172
+ CONSUME3(l.symbols.comma);
173
+ return SUBRULE4(expression);
174
+ });
175
+ CONSUME(l.symbols.RParen);
176
+ return {
177
+ type: 'operation',
178
+ operator: formatOperator(operator.image),
179
+ args: arg4 ? [arg1, arg2, arg3, arg4] : [arg1, arg2, arg3],
180
+ };
181
+ },
182
+ };
183
+ }
184
+ export function funcGroupGraphPattern(func) {
185
+ return {
186
+ name: unCapitalize(func.name),
187
+ impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
188
+ const operator = CONSUME(func);
189
+ const group = SUBRULE(groupGraphPattern);
190
+ return ACTION(() => ({
191
+ type: 'operation',
192
+ operator: formatOperator(operator.image),
193
+ args: [deGroupSingle(group)],
194
+ }));
195
+ },
196
+ };
197
+ }
198
+ export function baseAggregateFunc(func) {
199
+ return {
200
+ name: unCapitalize(func.name),
201
+ impl: ({ CONSUME, SUBRULE, OPTION, OR }) => () => {
202
+ const operator = CONSUME(func);
203
+ CONSUME(l.symbols.LParen);
204
+ const distinct = OPTION(() => CONSUME(l.distinct));
205
+ const expressionVal = OR([
206
+ {
207
+ ALT: () => {
208
+ CONSUME(l.symbols.star);
209
+ return new Wildcard();
210
+ },
211
+ },
212
+ { ALT: () => SUBRULE(expression) },
213
+ ]);
214
+ CONSUME(l.symbols.RParen);
215
+ return {
216
+ type: 'aggregate',
217
+ aggregation: operator.image.toLowerCase(),
218
+ expression: expressionVal,
219
+ distinct: Boolean(distinct),
220
+ };
221
+ },
222
+ };
223
+ }
224
+ //# sourceMappingURL=expressionHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressionHelpers.js","sourceRoot":"","sources":["expressionHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TokenType } from 'chevrotain';\nimport * as l from './lexer';\nimport { Wildcard } from '@traqula/core';\nimport type { RuleDef } from '@traqula/core';\nimport { expression, expressionList } from './grammar/expression';\nimport { var_ } from './grammar/general';\nimport type { Expression, Pattern, VariableTerm } from './Sparql11types';\nimport { groupGraphPattern } from './grammar/whereClause';\nimport { unCapitalize } from '@traqula/core';\nimport { deGroupSingle } from './utils';\n\nexport interface IExpressionFunctionX<U extends (Expression | Pattern)[]> {\n type: 'operation';\n operator: string;\n args: U;\n}\n\nexport type RuleDefExpressionFunctionX<T extends string, U extends (Expression | Pattern)[]>\n = RuleDef<T, IExpressionFunctionX<U>>;\n\nfunction formatOperator(operator: string): string {\n return operator.toLowerCase().replaceAll(' ', '');\n}\n\nexport function funcExpr1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg ],\n };\n },\n };\n}\n\nexport function funcExpr2<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg1, arg2 ],\n };\n },\n };\n}\n\nexport function funcExpr3<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg1, arg2, arg3 ],\n };\n },\n };\n}\n\nexport function funcVar1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [VariableTerm]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(var_);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg ],\n };\n },\n };\n}\n\nexport function funcExprOrNil1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [] | [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, OR, SUBRULE }) => () => {\n const operator = CONSUME(func);\n const args = OR<[] | [Expression]>([\n {\n ALT: () => {\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression);\n CONSUME(l.symbols.RParen);\n return [ arg ];\n },\n },\n {\n ALT: () => {\n CONSUME(l.terminals.nil);\n return [];\n },\n },\n ]);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args,\n };\n },\n };\n}\n\nexport function funcNil1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, []> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.terminals.nil);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [],\n };\n },\n };\n}\n\nexport function funcExprList1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, Expression[]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE }) => () => {\n const operator = CONSUME(func);\n const args = SUBRULE(expressionList);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args,\n };\n },\n };\n}\n\nexport function funcExpr2or3<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression] | [Expression, Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n const arg3 = OPTION(() => {\n CONSUME2(l.symbols.comma);\n return SUBRULE3(expression);\n });\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: arg3 ? [ arg1, arg2, arg3 ] : [ arg1, arg2 ],\n };\n },\n };\n}\n\nexport function funcExpr3or4<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<\n Uncapitalize<T>,\n [Expression, Expression, Expression] | [Expression, Expression, Expression, Expression]\n > {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression);\n const arg4 = OPTION(() => {\n CONSUME3(l.symbols.comma);\n return SUBRULE4(expression);\n });\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: arg4 ? [ arg1, arg2, arg3, arg4 ] : [ arg1, arg2, arg3 ],\n };\n },\n };\n}\n\nexport function funcGroupGraphPattern<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<\n Uncapitalize<T>,\n Pattern[]\n > {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n const group = SUBRULE(groupGraphPattern);\n return ACTION(() => ({\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ deGroupSingle(group) ],\n }));\n },\n };\n}\n\nexport interface IExpressionAggregator {\n type: 'aggregate';\n distinct: boolean;\n expression: Expression | Wildcard;\n aggregation: string;\n separator?: string;\n}\n\nexport type RuleDefExpressionAggregatorX<T extends string> = RuleDef<T, IExpressionAggregator>;\n\nexport function baseAggregateFunc<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionAggregatorX<Uncapitalize<T>> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE, OPTION, OR }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const distinct = OPTION(() => CONSUME(l.distinct));\n const expressionVal = OR<Expression | Wildcard>([\n {\n ALT: () => {\n CONSUME(l.symbols.star);\n return new Wildcard();\n },\n },\n { ALT: () => SUBRULE(expression) },\n ]);\n CONSUME(l.symbols.RParen);\n return {\n type: 'aggregate',\n aggregation: operator.image.toLowerCase(),\n expression: expressionVal,\n distinct: Boolean(distinct),\n };\n },\n };\n}\n"]}