@traqula/rules-sparql-1-1 0.0.1-alpha.143 → 0.0.1-alpha.148

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 (52) hide show
  1. package/lib/Sparql11types.d.ts +39 -8
  2. package/lib/Sparql11types.js.map +1 -1
  3. package/lib/SparqlParser.d.ts +14 -0
  4. package/lib/SparqlParser.js +29 -0
  5. package/lib/SparqlParser.js.map +1 -0
  6. package/lib/expressionHelpers.d.ts +3 -4
  7. package/lib/expressionHelpers.js +18 -18
  8. package/lib/expressionHelpers.js.map +1 -1
  9. package/lib/grammar/builtIn.d.ts +5 -7
  10. package/lib/grammar/builtIn.js +71 -73
  11. package/lib/grammar/builtIn.js.map +1 -1
  12. package/lib/grammar/dataSetClause.d.ts +5 -6
  13. package/lib/grammar/dataSetClause.js +5 -5
  14. package/lib/grammar/dataSetClause.js.map +1 -1
  15. package/lib/grammar/expression.d.ts +15 -16
  16. package/lib/grammar/expression.js +42 -42
  17. package/lib/grammar/expression.js.map +1 -1
  18. package/lib/grammar/general.d.ts +11 -13
  19. package/lib/grammar/general.js +52 -44
  20. package/lib/grammar/general.js.map +1 -1
  21. package/lib/grammar/literals.d.ts +11 -12
  22. package/lib/grammar/literals.js +65 -32
  23. package/lib/grammar/literals.js.map +1 -1
  24. package/lib/grammar/propertyPaths.d.ts +11 -12
  25. package/lib/grammar/propertyPaths.js +16 -16
  26. package/lib/grammar/propertyPaths.js.map +1 -1
  27. package/lib/grammar/queryUnit/queryUnit.d.ts +12 -13
  28. package/lib/grammar/queryUnit/queryUnit.js +37 -38
  29. package/lib/grammar/queryUnit/queryUnit.js.map +1 -1
  30. package/lib/grammar/solutionModifier.d.ts +11 -12
  31. package/lib/grammar/solutionModifier.js +27 -27
  32. package/lib/grammar/solutionModifier.js.map +1 -1
  33. package/lib/grammar/tripleBlock.d.ts +22 -23
  34. package/lib/grammar/tripleBlock.js +53 -79
  35. package/lib/grammar/tripleBlock.js.map +1 -1
  36. package/lib/grammar/updateUnit/updateUnit.d.ts +25 -26
  37. package/lib/grammar/updateUnit/updateUnit.js +60 -61
  38. package/lib/grammar/updateUnit/updateUnit.js.map +1 -1
  39. package/lib/grammar/whereClause.d.ts +19 -20
  40. package/lib/grammar/whereClause.js +40 -40
  41. package/lib/grammar/whereClause.js.map +1 -1
  42. package/lib/index.cjs +1564 -1232
  43. package/lib/index.d.ts +1 -0
  44. package/lib/index.js +1 -0
  45. package/lib/index.js.map +1 -1
  46. package/lib/lexer/graph.d.ts +1 -1
  47. package/lib/lexer/lexer.d.ts +1 -1
  48. package/lib/lexer/terminals.d.ts +1 -1
  49. package/lib/lexer/terminals.js +2 -2
  50. package/lib/lexer/terminals.js.map +1 -1
  51. package/lib/utils.js.map +1 -1
  52. package/package.json +3 -3
@@ -1,6 +1,7 @@
1
1
  import type * as RdfJs from '@rdfjs/types';
2
- import type { BlankNode } from 'rdf-data-factory';
3
- import type { CommonIRIs } from '@traqula/core';
2
+ import type * as RDF from '@rdfjs/types';
3
+ import type { BlankNode, DataFactory } from 'rdf-data-factory';
4
+ import type { CommonIRIs, RuleDef } from '@traqula/core';
4
5
  export type GraphTerm = IriTerm | BlankTerm | LiteralTerm;
5
6
  export type Term = GraphTerm | VariableTerm;
6
7
  export type VerbA = IriTerm<CommonIRIs.TYPE>;
@@ -14,8 +15,6 @@ export type Triple = {
14
15
  predicate: IriTerm | VariableTerm | PropertyPath;
15
16
  object: Term;
16
17
  };
17
- export type TripleCreatorS = (part: Pick<Triple, 'subject'>) => Triple;
18
- export type TripleCreatorSP = (part: Pick<Triple, 'subject' | 'predicate'>) => Triple;
19
18
  export interface IGraphNode {
20
19
  node: ITriplesNode['node'] | Term;
21
20
  triples: Triple[];
@@ -43,10 +42,6 @@ export interface GraphQuads {
43
42
  name: IriTerm | VariableTerm;
44
43
  triples: Triple[];
45
44
  }
46
- export interface SparqlParser {
47
- parse: (query: string) => SparqlQuery;
48
- _resetBlanks: () => void;
49
- }
50
45
  export type VariableTerm = RdfJs.Variable;
51
46
  export type IriTerm<IRI extends string = string> = RdfJs.NamedNode<IRI>;
52
47
  export type LiteralTerm = RdfJs.Literal;
@@ -244,3 +239,39 @@ export interface AggregateExpression extends BaseExpression {
244
239
  aggregation: string;
245
240
  separator?: string | undefined;
246
241
  }
242
+ export type SparqlRuleDef<
243
+ /**
244
+ * Name of grammar rule, should be a strict subtype of string like 'myGrammarRule'.
245
+ */
246
+ NameType extends string = string,
247
+ /**
248
+ * Type that will be returned after a correct parse of this rule.
249
+ * This type will be the return type of calling SUBRULE with this grammar rule.
250
+ */
251
+ ReturnType = unknown,
252
+ /**
253
+ * Function arguments that can be given to convey the state of the current parse operation.
254
+ */
255
+ ParamType = undefined> = RuleDef<SparqlContext, NameType, ReturnType, ParamType>;
256
+ export interface SparqlContext {
257
+ /**
258
+ * Data-factory to be used when constructing rdf primitives.
259
+ */
260
+ dataFactory: DataFactory<RDF.BaseQuad>;
261
+ /**
262
+ * Current scoped prefixes. Used for resolving prefixed names.
263
+ */
264
+ prefixes: Record<string, string>;
265
+ /**
266
+ * The base IRI for the query. Used for resolving relative IRIs.
267
+ */
268
+ baseIRI: string | undefined;
269
+ /**
270
+ * Can be used to disable the validation that used variables in a select clause are in scope.
271
+ */
272
+ skipValidation: boolean;
273
+ /**
274
+ * Set of queryModes. Primarily used for note 8, 14.
275
+ */
276
+ parseMode: Set<'canParseVars' | 'canCreateBlankNodes' | 'inAggregate' | 'canParseAggregate' | string>;
277
+ }
@@ -1 +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"]}
1
+ {"version":3,"file":"Sparql11types.js","sourceRoot":"","sources":["Sparql11types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as RdfJs from '@rdfjs/types';\nimport type * as RDF from '@rdfjs/types';\nimport type {BlankNode, DataFactory} from 'rdf-data-factory';\nimport type {CommonIRIs, RuleDef} 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 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\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\nexport type SparqlRuleDef<\n /**\n * Name of grammar rule, should be a strict subtype of string like 'myGrammarRule'.\n */\n NameType extends string = string,\n /**\n * Type that will be returned after a correct parse of this rule.\n * This type will be the return type of calling SUBRULE with this grammar rule.\n */\n ReturnType = unknown,\n /**\n * Function arguments that can be given to convey the state of the current parse operation.\n */\n ParamType = undefined,\n> = RuleDef<SparqlContext, NameType, ReturnType, ParamType>;\n\nexport interface SparqlContext {\n /**\n * Data-factory to be used when constructing rdf primitives.\n */\n dataFactory: DataFactory<RDF.BaseQuad>;\n /**\n * Current scoped prefixes. Used for resolving prefixed names.\n */\n prefixes: Record<string, string>;\n /**\n * The base IRI for the query. Used for resolving relative IRIs.\n */\n baseIRI: string | undefined;\n /**\n * Can be used to disable the validation that used variables in a select clause are in scope.\n */\n skipValidation: boolean;\n /**\n * Set of queryModes. Primarily used for note 8, 14.\n */\n parseMode: Set<'canParseVars' | 'canCreateBlankNodes' | 'inAggregate' | 'canParseAggregate' | string>;\n}"]}
@@ -0,0 +1,14 @@
1
+ import { IriTerm, PropertyPath, SparqlContext } from "./Sparql11types";
2
+ interface Parser<ParseRet> {
3
+ queryOrUpdate: (input: string, context: SparqlContext, arg: undefined) => ParseRet;
4
+ path: (input: string, context: SparqlContext, arg: undefined) => IriTerm | PropertyPath;
5
+ }
6
+ export declare class SparqlParser<ParseRet> {
7
+ private parser;
8
+ constructor(parser: Parser<ParseRet>);
9
+ parse(query: string, context?: Partial<SparqlContext>): ParseRet;
10
+ parsePath(query: string, context?: Partial<SparqlContext>): (PropertyPath & {
11
+ prefixes: object;
12
+ }) | IriTerm;
13
+ }
14
+ export {};
@@ -0,0 +1,29 @@
1
+ import { DataFactory } from "rdf-data-factory";
2
+ function completeParseContext(context) {
3
+ return {
4
+ dataFactory: context.dataFactory ?? new DataFactory({ blankNodePrefix: 'g_' }),
5
+ baseIRI: context.baseIRI,
6
+ prefixes: { ...context.prefixes },
7
+ parseMode: context.parseMode ? new Set(context.parseMode) : new Set(['canParseVars', 'canCreateBlankNodes']),
8
+ skipValidation: context.skipValidation ?? false,
9
+ };
10
+ }
11
+ export class SparqlParser {
12
+ constructor(parser) {
13
+ this.parser = parser;
14
+ }
15
+ parse(query, context = {}) {
16
+ return this.parser.queryOrUpdate(query, completeParseContext(context), undefined);
17
+ }
18
+ parsePath(query, context = {}) {
19
+ const result = this.parser.path(query, completeParseContext(context), undefined);
20
+ if ('type' in result) {
21
+ return {
22
+ ...result,
23
+ prefixes: {},
24
+ };
25
+ }
26
+ return result;
27
+ }
28
+ }
29
+ //# sourceMappingURL=SparqlParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SparqlParser.js","sourceRoot":"","sources":["SparqlParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAQ7C,SAAS,oBAAoB,CAAC,OAA+B;IAC3D,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,WAAW,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAC9E,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAE,cAAc,EAAE,qBAAqB,CAAE,CAAC;QAC9G,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAY;IACvB,YAA2B,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;IAAI,CAAC;IAEjD,KAAK,CAAC,KAAa,EAAE,UAAkC,EAAE;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IACpF,CAAC;IAEM,SAAS,CAAC,KAAa,EAAE,UAAkC,EAAE;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import {DataFactory} from \"rdf-data-factory\";\nimport {IriTerm, PropertyPath, SparqlContext} from \"./Sparql11types\";\n\ninterface Parser<ParseRet> {\n queryOrUpdate: (input: string, context: SparqlContext, arg: undefined) => ParseRet;\n path: (input: string, context: SparqlContext, arg: undefined) => IriTerm | PropertyPath;\n}\n\nfunction completeParseContext(context: Partial<SparqlContext>): SparqlContext {\n return {\n dataFactory: context.dataFactory ?? new DataFactory({ blankNodePrefix: 'g_' }),\n baseIRI: context.baseIRI,\n prefixes: { ...context.prefixes },\n parseMode: context.parseMode ? new Set(context.parseMode) : new Set([ 'canParseVars', 'canCreateBlankNodes' ]),\n skipValidation: context.skipValidation ?? false,\n };\n}\n\nexport class SparqlParser<ParseRet> {\n public constructor(private parser: Parser<ParseRet>) { }\n\n public parse(query: string, context: Partial<SparqlContext> = {}): ParseRet {\n return this.parser.queryOrUpdate(query, completeParseContext(context), undefined);\n }\n\n public parsePath(query: string, context: Partial<SparqlContext> = {}): (PropertyPath & { prefixes: object }) | IriTerm {\n const result = this.parser.path(query, completeParseContext(context), undefined);\n if ('type' in result) {\n return {\n ...result,\n prefixes: {},\n };\n }\n return result;\n }\n}\n"]}
@@ -1,13 +1,12 @@
1
1
  import type { TokenType } from 'chevrotain';
2
2
  import { Wildcard } from '@traqula/core';
3
- import type { RuleDef } from '@traqula/core';
4
- import type { Expression, Pattern, VariableTerm } from './Sparql11types';
3
+ import type { Expression, Pattern, SparqlRuleDef, VariableTerm } from './Sparql11types';
5
4
  export interface IExpressionFunctionX<U extends (Expression | Pattern)[]> {
6
5
  type: 'operation';
7
6
  operator: string;
8
7
  args: U;
9
8
  }
10
- export type RuleDefExpressionFunctionX<T extends string, U extends (Expression | Pattern)[]> = RuleDef<T, IExpressionFunctionX<U>>;
9
+ export type RuleDefExpressionFunctionX<T extends string, U extends (Expression | Pattern)[]> = SparqlRuleDef<T, IExpressionFunctionX<U>>;
11
10
  export declare function funcExpr1<T extends string>(func: TokenType & {
12
11
  name: T;
13
12
  }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]>;
@@ -49,7 +48,7 @@ export interface IExpressionAggregator {
49
48
  aggregation: string;
50
49
  separator?: string;
51
50
  }
52
- export type RuleDefExpressionAggregatorX<T extends string> = RuleDef<T, IExpressionAggregator>;
51
+ export type RuleDefExpressionAggregatorX<T extends string> = SparqlRuleDef<T, IExpressionAggregator>;
53
52
  export declare function baseAggregateFunc<T extends string>(func: TokenType & {
54
53
  name: T;
55
54
  }): RuleDefExpressionAggregatorX<Uncapitalize<T>>;
@@ -14,7 +14,7 @@ export function funcExpr1(func) {
14
14
  impl: ({ SUBRULE, CONSUME }) => () => {
15
15
  const operator = CONSUME(func);
16
16
  CONSUME(l.symbols.LParen);
17
- const arg = SUBRULE(expression);
17
+ const arg = SUBRULE(expression, undefined);
18
18
  CONSUME(l.symbols.RParen);
19
19
  return {
20
20
  type: 'operation',
@@ -30,9 +30,9 @@ export function funcExpr2(func) {
30
30
  impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {
31
31
  const operator = CONSUME(func);
32
32
  CONSUME(l.symbols.LParen);
33
- const arg1 = SUBRULE1(expression);
33
+ const arg1 = SUBRULE1(expression, undefined);
34
34
  CONSUME(l.symbols.comma);
35
- const arg2 = SUBRULE2(expression);
35
+ const arg2 = SUBRULE2(expression, undefined);
36
36
  CONSUME(l.symbols.RParen);
37
37
  return {
38
38
  type: 'operation',
@@ -48,11 +48,11 @@ export function funcExpr3(func) {
48
48
  impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {
49
49
  const operator = CONSUME(func);
50
50
  CONSUME(l.symbols.LParen);
51
- const arg1 = SUBRULE1(expression);
51
+ const arg1 = SUBRULE1(expression, undefined);
52
52
  CONSUME1(l.symbols.comma);
53
- const arg2 = SUBRULE2(expression);
53
+ const arg2 = SUBRULE2(expression, undefined);
54
54
  CONSUME2(l.symbols.comma);
55
- const arg3 = SUBRULE3(expression);
55
+ const arg3 = SUBRULE3(expression, undefined);
56
56
  CONSUME(l.symbols.RParen);
57
57
  return {
58
58
  type: 'operation',
@@ -68,7 +68,7 @@ export function funcVar1(func) {
68
68
  impl: ({ SUBRULE, CONSUME }) => () => {
69
69
  const operator = CONSUME(func);
70
70
  CONSUME(l.symbols.LParen);
71
- const arg = SUBRULE(var_);
71
+ const arg = SUBRULE(var_, undefined);
72
72
  CONSUME(l.symbols.RParen);
73
73
  return {
74
74
  type: 'operation',
@@ -87,7 +87,7 @@ export function funcExprOrNil1(func) {
87
87
  {
88
88
  ALT: () => {
89
89
  CONSUME(l.symbols.LParen);
90
- const arg = SUBRULE(expression);
90
+ const arg = SUBRULE(expression, undefined);
91
91
  CONSUME(l.symbols.RParen);
92
92
  return [arg];
93
93
  },
@@ -126,7 +126,7 @@ export function funcExprList1(func) {
126
126
  name: unCapitalize(func.name),
127
127
  impl: ({ CONSUME, SUBRULE }) => () => {
128
128
  const operator = CONSUME(func);
129
- const args = SUBRULE(expressionList);
129
+ const args = SUBRULE(expressionList, undefined);
130
130
  return {
131
131
  type: 'operation',
132
132
  operator: formatOperator(operator.image),
@@ -141,12 +141,12 @@ export function funcExpr2or3(func) {
141
141
  impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {
142
142
  const operator = CONSUME(func);
143
143
  CONSUME(l.symbols.LParen);
144
- const arg1 = SUBRULE1(expression);
144
+ const arg1 = SUBRULE1(expression, undefined);
145
145
  CONSUME1(l.symbols.comma);
146
- const arg2 = SUBRULE2(expression);
146
+ const arg2 = SUBRULE2(expression, undefined);
147
147
  const arg3 = OPTION(() => {
148
148
  CONSUME2(l.symbols.comma);
149
- return SUBRULE3(expression);
149
+ return SUBRULE3(expression, undefined);
150
150
  });
151
151
  CONSUME(l.symbols.RParen);
152
152
  return {
@@ -163,14 +163,14 @@ export function funcExpr3or4(func) {
163
163
  impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {
164
164
  const operator = CONSUME(func);
165
165
  CONSUME(l.symbols.LParen);
166
- const arg1 = SUBRULE1(expression);
166
+ const arg1 = SUBRULE1(expression, undefined);
167
167
  CONSUME1(l.symbols.comma);
168
- const arg2 = SUBRULE2(expression);
168
+ const arg2 = SUBRULE2(expression, undefined);
169
169
  CONSUME2(l.symbols.comma);
170
- const arg3 = SUBRULE3(expression);
170
+ const arg3 = SUBRULE3(expression, undefined);
171
171
  const arg4 = OPTION(() => {
172
172
  CONSUME3(l.symbols.comma);
173
- return SUBRULE4(expression);
173
+ return SUBRULE4(expression, undefined);
174
174
  });
175
175
  CONSUME(l.symbols.RParen);
176
176
  return {
@@ -186,7 +186,7 @@ export function funcGroupGraphPattern(func) {
186
186
  name: unCapitalize(func.name),
187
187
  impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
188
188
  const operator = CONSUME(func);
189
- const group = SUBRULE(groupGraphPattern);
189
+ const group = SUBRULE(groupGraphPattern, undefined);
190
190
  return ACTION(() => ({
191
191
  type: 'operation',
192
192
  operator: formatOperator(operator.image),
@@ -209,7 +209,7 @@ export function baseAggregateFunc(func) {
209
209
  return new Wildcard();
210
210
  },
211
211
  },
212
- { ALT: () => SUBRULE(expression) },
212
+ { ALT: () => SUBRULE(expression, undefined) },
213
213
  ]);
214
214
  CONSUME(l.symbols.RParen);
215
215
  return {
@@ -1 +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"]}
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 { expression, expressionList } from './grammar/expression';\nimport { var_ } from './grammar/general';\nimport type {Expression, Pattern, SparqlRuleDef, 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 = SparqlRuleDef<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, undefined);\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, undefined);\n CONSUME(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\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, undefined);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression, undefined);\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_, undefined);\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, undefined);\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, undefined);\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, undefined);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n const arg3 = OPTION(() => {\n CONSUME2(l.symbols.comma);\n return SUBRULE3(expression, undefined);\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, undefined);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression, undefined);\n const arg4 = OPTION(() => {\n CONSUME3(l.symbols.comma);\n return SUBRULE4(expression, undefined);\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, undefined);\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> = SparqlRuleDef<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, undefined) },\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"]}
@@ -1,7 +1,7 @@
1
1
  import type { IOrAlt } from '@chevrotain/types';
2
- import type { ImplArgs, RuleDef } from '@traqula/core';
2
+ import type { ImplArgs } from '@traqula/core';
3
3
  import type { RuleDefExpressionFunctionX } from '../expressionHelpers';
4
- import type { AggregateExpression, Expression } from '../Sparql11types';
4
+ import type { AggregateExpression, Expression, SparqlRuleDef } from '../Sparql11types';
5
5
  export declare const builtInStr: RuleDefExpressionFunctionX<"builtInStr", [Expression]>;
6
6
  export declare const builtInLang: RuleDefExpressionFunctionX<"builtInLang", [Expression]>;
7
7
  export declare const builtInLangmatches: RuleDefExpressionFunctionX<"builtInLangmatches", [Expression, Expression]>;
@@ -55,7 +55,7 @@ export declare function builtInCallList(SUBRULE: ImplArgs['SUBRULE']): IOrAlt<Ex
55
55
  /**
56
56
  * [[121]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
57
57
  */
58
- export declare const builtInCall: RuleDef<'builtInCall', Expression>;
58
+ export declare const builtInCall: SparqlRuleDef<'builtInCall', Expression>;
59
59
  /**
60
60
  * [[122]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
61
61
  */
@@ -82,10 +82,8 @@ export declare const aggregateMin: import(".").RuleDefExpressionAggregatorX<"bui
82
82
  export declare const aggregateMax: import(".").RuleDefExpressionAggregatorX<"builtInMax">;
83
83
  export declare const aggregateAvg: import(".").RuleDefExpressionAggregatorX<"builtInAvg">;
84
84
  export declare const aggregateSample: import(".").RuleDefExpressionAggregatorX<"builtInSample">;
85
- export declare const aggregateGroup_concat: RuleDef<'builtInGroup_concat', AggregateExpression>;
86
- export declare const canParseAggregate: unique symbol;
87
- export declare const inAggregate: unique symbol;
85
+ export declare const aggregateGroup_concat: SparqlRuleDef<'builtInGroup_concat', AggregateExpression>;
88
86
  /**
89
87
  * [[127]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
90
88
  */
91
- export declare const aggregate: RuleDef<'aggregate', Expression>;
89
+ export declare const aggregate: SparqlRuleDef<'aggregate', Expression>;
@@ -19,7 +19,7 @@ export const builtInBnodeSparqlJs = {
19
19
  {
20
20
  ALT: () => {
21
21
  CONSUME(l.symbols.LParen);
22
- const arg = SUBRULE(expression);
22
+ const arg = SUBRULE(expression, undefined);
23
23
  CONSUME(l.symbols.RParen);
24
24
  return [arg];
25
25
  },
@@ -82,61 +82,61 @@ export const builtInIsliteral = funcExpr1(l.builtIn.isliteral);
82
82
  export const builtInIsnumeric = funcExpr1(l.builtIn.isnumeric);
83
83
  export function builtInCallList(SUBRULE) {
84
84
  return [
85
- { ALT: () => SUBRULE(aggregate) },
86
- { ALT: () => SUBRULE(builtInStr) },
87
- { ALT: () => SUBRULE(builtInLang) },
88
- { ALT: () => SUBRULE(builtInLangmatches) },
89
- { ALT: () => SUBRULE(builtInDatatype) },
90
- { ALT: () => SUBRULE(builtInBound) },
91
- { ALT: () => SUBRULE(builtInIri) },
92
- { ALT: () => SUBRULE(builtInUri) },
93
- { ALT: () => SUBRULE(builtInBnodeSparqlJs) },
94
- { ALT: () => SUBRULE(builtInRand) },
95
- { ALT: () => SUBRULE(builtInAbs) },
96
- { ALT: () => SUBRULE(builtInCeil) },
97
- { ALT: () => SUBRULE(builtInFloor) },
98
- { ALT: () => SUBRULE(builtInRound) },
99
- { ALT: () => SUBRULE(builtInConcat) },
100
- { ALT: () => SUBRULE(substringExpression) },
101
- { ALT: () => SUBRULE(builtInStrlen) },
102
- { ALT: () => SUBRULE(strReplaceExpression) },
103
- { ALT: () => SUBRULE(builtInUcase) },
104
- { ALT: () => SUBRULE(builtInLcase) },
105
- { ALT: () => SUBRULE(builtInEncode_for_uri) },
106
- { ALT: () => SUBRULE(builtInContains) },
107
- { ALT: () => SUBRULE(builtInStrstarts) },
108
- { ALT: () => SUBRULE(builtInStrends) },
109
- { ALT: () => SUBRULE(builtInStrbefore) },
110
- { ALT: () => SUBRULE(builtInStrafter) },
111
- { ALT: () => SUBRULE(builtInYear) },
112
- { ALT: () => SUBRULE(builtInMonth) },
113
- { ALT: () => SUBRULE(builtInDay) },
114
- { ALT: () => SUBRULE(builtInHours) },
115
- { ALT: () => SUBRULE(builtInMinutes) },
116
- { ALT: () => SUBRULE(builtInSeconds) },
117
- { ALT: () => SUBRULE(builtInTimezone) },
118
- { ALT: () => SUBRULE(builtInTz) },
119
- { ALT: () => SUBRULE(builtInNow) },
120
- { ALT: () => SUBRULE(builtInUuid) },
121
- { ALT: () => SUBRULE(builtInStruuid) },
122
- { ALT: () => SUBRULE(builtInMd5) },
123
- { ALT: () => SUBRULE(builtInSha1) },
124
- { ALT: () => SUBRULE(builtInSha256) },
125
- { ALT: () => SUBRULE(builtInSha384) },
126
- { ALT: () => SUBRULE(builtInSha512) },
127
- { ALT: () => SUBRULE(builtInCoalesce) },
128
- { ALT: () => SUBRULE(builtInIf) },
129
- { ALT: () => SUBRULE(builtInStrlang) },
130
- { ALT: () => SUBRULE(builtInStrdt) },
131
- { ALT: () => SUBRULE(builtInSameterm) },
132
- { ALT: () => SUBRULE(builtInIsiri) },
133
- { ALT: () => SUBRULE(builtInIsuri) },
134
- { ALT: () => SUBRULE(builtInIsblank) },
135
- { ALT: () => SUBRULE(builtInIsliteral) },
136
- { ALT: () => SUBRULE(builtInIsnumeric) },
137
- { ALT: () => SUBRULE(regexExpression) },
138
- { ALT: () => SUBRULE(existsFunc) },
139
- { ALT: () => SUBRULE(notExistsFunc) },
85
+ { ALT: () => SUBRULE(aggregate, undefined) },
86
+ { ALT: () => SUBRULE(builtInStr, undefined) },
87
+ { ALT: () => SUBRULE(builtInLang, undefined) },
88
+ { ALT: () => SUBRULE(builtInLangmatches, undefined) },
89
+ { ALT: () => SUBRULE(builtInDatatype, undefined) },
90
+ { ALT: () => SUBRULE(builtInBound, undefined) },
91
+ { ALT: () => SUBRULE(builtInIri, undefined) },
92
+ { ALT: () => SUBRULE(builtInUri, undefined) },
93
+ { ALT: () => SUBRULE(builtInBnodeSparqlJs, undefined) },
94
+ { ALT: () => SUBRULE(builtInRand, undefined) },
95
+ { ALT: () => SUBRULE(builtInAbs, undefined) },
96
+ { ALT: () => SUBRULE(builtInCeil, undefined) },
97
+ { ALT: () => SUBRULE(builtInFloor, undefined) },
98
+ { ALT: () => SUBRULE(builtInRound, undefined) },
99
+ { ALT: () => SUBRULE(builtInConcat, undefined) },
100
+ { ALT: () => SUBRULE(substringExpression, undefined) },
101
+ { ALT: () => SUBRULE(builtInStrlen, undefined) },
102
+ { ALT: () => SUBRULE(strReplaceExpression, undefined) },
103
+ { ALT: () => SUBRULE(builtInUcase, undefined) },
104
+ { ALT: () => SUBRULE(builtInLcase, undefined) },
105
+ { ALT: () => SUBRULE(builtInEncode_for_uri, undefined) },
106
+ { ALT: () => SUBRULE(builtInContains, undefined) },
107
+ { ALT: () => SUBRULE(builtInStrstarts, undefined) },
108
+ { ALT: () => SUBRULE(builtInStrends, undefined) },
109
+ { ALT: () => SUBRULE(builtInStrbefore, undefined) },
110
+ { ALT: () => SUBRULE(builtInStrafter, undefined) },
111
+ { ALT: () => SUBRULE(builtInYear, undefined) },
112
+ { ALT: () => SUBRULE(builtInMonth, undefined) },
113
+ { ALT: () => SUBRULE(builtInDay, undefined) },
114
+ { ALT: () => SUBRULE(builtInHours, undefined) },
115
+ { ALT: () => SUBRULE(builtInMinutes, undefined) },
116
+ { ALT: () => SUBRULE(builtInSeconds, undefined) },
117
+ { ALT: () => SUBRULE(builtInTimezone, undefined) },
118
+ { ALT: () => SUBRULE(builtInTz, undefined) },
119
+ { ALT: () => SUBRULE(builtInNow, undefined) },
120
+ { ALT: () => SUBRULE(builtInUuid, undefined) },
121
+ { ALT: () => SUBRULE(builtInStruuid, undefined) },
122
+ { ALT: () => SUBRULE(builtInMd5, undefined) },
123
+ { ALT: () => SUBRULE(builtInSha1, undefined) },
124
+ { ALT: () => SUBRULE(builtInSha256, undefined) },
125
+ { ALT: () => SUBRULE(builtInSha384, undefined) },
126
+ { ALT: () => SUBRULE(builtInSha512, undefined) },
127
+ { ALT: () => SUBRULE(builtInCoalesce, undefined) },
128
+ { ALT: () => SUBRULE(builtInIf, undefined) },
129
+ { ALT: () => SUBRULE(builtInStrlang, undefined) },
130
+ { ALT: () => SUBRULE(builtInStrdt, undefined) },
131
+ { ALT: () => SUBRULE(builtInSameterm, undefined) },
132
+ { ALT: () => SUBRULE(builtInIsiri, undefined) },
133
+ { ALT: () => SUBRULE(builtInIsuri, undefined) },
134
+ { ALT: () => SUBRULE(builtInIsblank, undefined) },
135
+ { ALT: () => SUBRULE(builtInIsliteral, undefined) },
136
+ { ALT: () => SUBRULE(builtInIsnumeric, undefined) },
137
+ { ALT: () => SUBRULE(regexExpression, undefined) },
138
+ { ALT: () => SUBRULE(existsFunc, undefined) },
139
+ { ALT: () => SUBRULE(notExistsFunc, undefined) },
140
140
  ];
141
141
  }
142
142
  /**
@@ -186,12 +186,12 @@ export const aggregateGroup_concat = {
186
186
  CONSUME(l.builtIn.groupConcat);
187
187
  CONSUME(l.symbols.LParen);
188
188
  const distinct = OPTION1(() => CONSUME(l.distinct));
189
- const expr = SUBRULE(expression);
189
+ const expr = SUBRULE(expression, undefined);
190
190
  const separator = OPTION2(() => {
191
191
  CONSUME(l.symbols.semi);
192
192
  CONSUME(l.separator);
193
193
  CONSUME(l.symbols.equal);
194
- return SUBRULE(string);
194
+ return SUBRULE(string, undefined);
195
195
  }) ?? ' ';
196
196
  CONSUME(l.symbols.RParen);
197
197
  return {
@@ -203,33 +203,31 @@ export const aggregateGroup_concat = {
203
203
  };
204
204
  },
205
205
  };
206
- export const canParseAggregate = Symbol('canParseAggregate');
207
- export const inAggregate = Symbol('inAggregate');
208
206
  /**
209
207
  * [[127]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
210
208
  */
211
209
  export const aggregate = {
212
210
  name: 'aggregate',
213
- impl: ({ ACTION, SUBRULE, OR, context }) => () => {
211
+ impl: ({ ACTION, SUBRULE, OR }) => (C) => {
214
212
  // https://www.w3.org/2013/sparql-errata#errata-query-5 - Or note 15 in SPARQL1.2 spec
215
213
  // An aggregate function is not allowed within an aggregate function.
216
- const wasInAggregate = context.parseMode.has(inAggregate);
217
- ACTION(() => context.parseMode.add(inAggregate));
214
+ const wasInAggregate = ACTION(() => C.parseMode.has('inAggregate'));
215
+ ACTION(() => C.parseMode.add('inAggregate'));
218
216
  const result = OR([
219
- { ALT: () => SUBRULE(aggregateCount) },
220
- { ALT: () => SUBRULE(aggregateSum) },
221
- { ALT: () => SUBRULE(aggregateMin) },
222
- { ALT: () => SUBRULE(aggregateMax) },
223
- { ALT: () => SUBRULE(aggregateAvg) },
224
- { ALT: () => SUBRULE(aggregateSample) },
225
- { ALT: () => SUBRULE(aggregateGroup_concat) },
217
+ { ALT: () => SUBRULE(aggregateCount, undefined) },
218
+ { ALT: () => SUBRULE(aggregateSum, undefined) },
219
+ { ALT: () => SUBRULE(aggregateMin, undefined) },
220
+ { ALT: () => SUBRULE(aggregateMax, undefined) },
221
+ { ALT: () => SUBRULE(aggregateAvg, undefined) },
222
+ { ALT: () => SUBRULE(aggregateSample, undefined) },
223
+ { ALT: () => SUBRULE(aggregateGroup_concat, undefined) },
226
224
  ]);
227
- ACTION(() => !wasInAggregate && context.parseMode.delete(inAggregate));
225
+ ACTION(() => !wasInAggregate && C.parseMode.delete('inAggregate'));
228
226
  ACTION(() => {
229
- if (!context.parseMode.has(canParseAggregate)) {
227
+ if (!C.parseMode.has('canParseAggregate')) {
230
228
  throw new Error('Aggregates are only allowed in SELECT, HAVING, and ORDER BY clauses.');
231
229
  }
232
- if (context.parseMode.has(inAggregate)) {
230
+ if (C.parseMode.has('inAggregate')) {
233
231
  throw new Error('An aggregate function is not allowed within an aggregate function.');
234
232
  }
235
233
  });