@traqula/rules-sparql-1-1 0.0.1-alpha.176 → 0.0.1

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 (100) hide show
  1. package/lib/RoundTripTypes.d.ts +379 -0
  2. package/lib/RoundTripTypes.js +2 -0
  3. package/lib/RoundTripTypes.js.map +1 -0
  4. package/lib/Sparql11types.d.ts +18 -245
  5. package/lib/Sparql11types.js.map +1 -1
  6. package/lib/SparqlParser.d.ts +13 -4
  7. package/lib/SparqlParser.js +7 -4
  8. package/lib/SparqlParser.js.map +1 -1
  9. package/lib/expressionHelpers.d.ts +8 -19
  10. package/lib/expressionHelpers.js +40 -103
  11. package/lib/expressionHelpers.js.map +1 -1
  12. package/lib/factory.d.ts +447 -0
  13. package/lib/factory.js +105 -0
  14. package/lib/factory.js.map +1 -0
  15. package/lib/factoryMixins/ContextFactory.d.ts +38 -0
  16. package/lib/factoryMixins/ContextFactory.js +30 -0
  17. package/lib/factoryMixins/ContextFactory.js.map +1 -0
  18. package/lib/factoryMixins/ExpressionFactory.d.ts +60 -0
  19. package/lib/factoryMixins/ExpressionFactory.js +83 -0
  20. package/lib/factoryMixins/ExpressionFactory.js.map +1 -0
  21. package/lib/factoryMixins/GraphRefFactory.d.ts +43 -0
  22. package/lib/factoryMixins/GraphRefFactory.js +51 -0
  23. package/lib/factoryMixins/GraphRefFactory.js.map +1 -0
  24. package/lib/factoryMixins/PathFactory.d.ts +51 -0
  25. package/lib/factoryMixins/PathFactory.js +68 -0
  26. package/lib/factoryMixins/PathFactory.js.map +1 -0
  27. package/lib/factoryMixins/Patternfactory.d.ts +55 -0
  28. package/lib/factoryMixins/Patternfactory.js +98 -0
  29. package/lib/factoryMixins/Patternfactory.js.map +1 -0
  30. package/lib/factoryMixins/QueryFactory.d.ts +41 -0
  31. package/lib/factoryMixins/QueryFactory.js +43 -0
  32. package/lib/factoryMixins/QueryFactory.js.map +1 -0
  33. package/lib/factoryMixins/SolutionModifiersFactory.d.ts +43 -0
  34. package/lib/factoryMixins/SolutionModifiersFactory.js +55 -0
  35. package/lib/factoryMixins/SolutionModifiersFactory.js.map +1 -0
  36. package/lib/factoryMixins/TermFactory.d.ts +76 -0
  37. package/lib/factoryMixins/TermFactory.js +84 -0
  38. package/lib/factoryMixins/TermFactory.js.map +1 -0
  39. package/lib/factoryMixins/UpdateOperationFactory.d.ts +68 -0
  40. package/lib/factoryMixins/UpdateOperationFactory.js +126 -0
  41. package/lib/factoryMixins/UpdateOperationFactory.js.map +1 -0
  42. package/lib/factoryMixins/mixins.d.ts +14 -0
  43. package/lib/factoryMixins/mixins.js +20 -0
  44. package/lib/factoryMixins/mixins.js.map +1 -0
  45. package/lib/grammar/builtIn.d.ts +59 -59
  46. package/lib/grammar/builtIn.js +50 -57
  47. package/lib/grammar/builtIn.js.map +1 -1
  48. package/lib/grammar/dataSetClause.d.ts +22 -9
  49. package/lib/grammar/dataSetClause.js +57 -14
  50. package/lib/grammar/dataSetClause.js.map +1 -1
  51. package/lib/grammar/expression.d.ts +12 -16
  52. package/lib/grammar/expression.js +224 -296
  53. package/lib/grammar/expression.js.map +1 -1
  54. package/lib/grammar/general.d.ts +8 -8
  55. package/lib/grammar/general.js +59 -94
  56. package/lib/grammar/general.js.map +1 -1
  57. package/lib/grammar/literals.d.ts +16 -13
  58. package/lib/grammar/literals.js +161 -144
  59. package/lib/grammar/literals.js.map +1 -1
  60. package/lib/grammar/propertyPaths.d.ts +16 -12
  61. package/lib/grammar/propertyPaths.js +100 -129
  62. package/lib/grammar/propertyPaths.js.map +1 -1
  63. package/lib/grammar/queryUnit/queryUnit.d.ts +13 -17
  64. package/lib/grammar/queryUnit/queryUnit.js +195 -329
  65. package/lib/grammar/queryUnit/queryUnit.js.map +1 -1
  66. package/lib/grammar/solutionModifier.d.ts +12 -11
  67. package/lib/grammar/solutionModifier.js +125 -109
  68. package/lib/grammar/solutionModifier.js.map +1 -1
  69. package/lib/grammar/tripleBlock.d.ts +24 -33
  70. package/lib/grammar/tripleBlock.js +172 -126
  71. package/lib/grammar/tripleBlock.js.map +1 -1
  72. package/lib/grammar/updateUnit/updateUnit.d.ts +28 -33
  73. package/lib/grammar/updateUnit/updateUnit.js +282 -367
  74. package/lib/grammar/updateUnit/updateUnit.js.map +1 -1
  75. package/lib/grammar/whereClause.d.ts +20 -19
  76. package/lib/grammar/whereClause.js +232 -245
  77. package/lib/grammar/whereClause.js.map +1 -1
  78. package/lib/grammar-helpers/utils.d.ts +0 -4
  79. package/lib/grammar-helpers/utils.js +0 -37
  80. package/lib/grammar-helpers/utils.js.map +1 -1
  81. package/lib/index.cjs +3061 -2438
  82. package/lib/index.d.ts +4 -2
  83. package/lib/index.js +4 -2
  84. package/lib/index.js.map +1 -1
  85. package/lib/lexer/lexer.d.ts +4 -3
  86. package/lib/lexer/lexer.js +11 -7
  87. package/lib/lexer/lexer.js.map +1 -1
  88. package/lib/lexer/terminals.d.ts +0 -34
  89. package/lib/lexer/terminals.js +35 -37
  90. package/lib/lexer/terminals.js.map +1 -1
  91. package/lib/utils.d.ts +0 -3
  92. package/lib/utils.js +0 -6
  93. package/lib/utils.js.map +1 -1
  94. package/lib/validation/validators.d.ts +14 -0
  95. package/lib/validation/validators.js +235 -0
  96. package/lib/validation/validators.js.map +1 -0
  97. package/package.json +6 -8
  98. package/lib/Wildcard.d.ts +0 -9
  99. package/lib/Wildcard.js +0 -19
  100. package/lib/Wildcard.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Sparql11types.js","sourceRoot":"","sources":["Sparql11types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as RDF from '@rdfjs/types';\nimport type { ParserRule, GeneratorRule } from '@traqula/core';\nimport type { BlankNode, DataFactory } from 'rdf-data-factory';\nimport type { CommonIRIs } from './grammar-helpers/utils';\nimport type { Wildcard } from './Wildcard';\n\n// Make sure there cannot be a DefaultGraph in subject and object position\ntype RdfJsTerm = Term | BaseQuadTerm;\nexport type BaseQuadTerm = RDF.BaseQuad & { subject: RdfJsTerm; predicate: RdfJsTerm; object: RdfJsTerm };\nexport type GraphTerm = IriTerm | BlankTerm | LiteralTerm;\nexport type Term = GraphTerm | VariableTerm;\nexport type VerbA = IriTerm<CommonIRIs.TYPE>;\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 = RDF.Variable;\nexport type IriTerm<IRI extends string = string> = RDF.NamedNode<IRI>;\nexport type LiteralTerm = RDF.Literal;\nexport type BlankTerm = RDF.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}\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 = InsertOperation | DeleteOperation | ModifyOperation | DeleteWhereOperation;\nexport interface InsertOperation {\n updateType: 'insert';\n insert: Quads[];\n}\nexport interface DeleteOperation {\n updateType: 'delete';\n delete: Quads[];\n}\nexport interface ModifyOperation {\n updateType: 'insertdelete';\n insert: Quads[];\n delete: Quads[];\n graph?: IriTerm;\n using?: {\n default: IriTerm[];\n named: IriTerm[];\n };\n where: Pattern[];\n}\nexport interface DeleteWhereOperation {\n updateType: 'deletewhere';\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 having?: Expression[] | undefined;\n group?: Grouping[] | undefined;\n order?: Ordering[] | undefined;\n limit?: number | undefined;\n offset?: number | 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 // Can be a pattern in case of exists and not exists\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 SparqlRule<\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> = ParserRule<SparqlContext, NameType, ReturnType, ParamType>\n & GeneratorRule<undefined, NameType, ReturnType, ParamType>;\n\nexport type SparqlGrammarRule<\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> = ParserRule<SparqlContext, NameType, ReturnType, ParamType>;\n\nexport interface SparqlContext {\n /**\n * Data-factory to be used when constructing rdf primitives.\n */\n dataFactory: DataFactory<BaseQuadTerm>;\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}\n"]}
1
+ {"version":3,"file":"Sparql11types.js","sourceRoot":"","sources":["Sparql11types.ts"],"names":[],"mappings":"","sourcesContent":["import type { GeneratorRule, ParserRule } from '@traqula/core';\nimport type { Factory } from './factory';\n\nexport type SparqlRule<\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 GenInputType = ReturnType,\n /**\n * Function arguments that can be given to convey the state of the current parse operation.\n */\n ParamType = undefined,\n> = SparqlGrammarRule<NameType, ReturnType, ParamType>\n & SparqlGeneratorRule<NameType, GenInputType, ParamType>;\n\nexport type SparqlGeneratorRule<\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> = GeneratorRule<{ factory: Factory }, NameType, ReturnType, ParamType>;\n\nexport type SparqlGrammarRule<\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> = ParserRule<SparqlContext, NameType, ReturnType, ParamType>;\n\nexport interface SparqlContext {\n /**\n * Data-factoryMixins to be used when constructing rdf primitives.\n */\n factory: Factory;\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}\n"]}
@@ -1,14 +1,23 @@
1
- import type { IriTerm, PropertyPath, SparqlContext } from './Sparql11types';
1
+ import type { Path, TermIri } from './RoundTripTypes';
2
+ import type { SparqlContext } from './Sparql11types';
2
3
  interface Parser<ParseRet> {
3
4
  queryOrUpdate: (input: string, context: SparqlContext, arg: undefined) => ParseRet;
4
- path: (input: string, context: SparqlContext, arg: undefined) => IriTerm | PropertyPath;
5
+ path: (input: string, context: SparqlContext, arg: undefined) => TermIri | Path;
5
6
  }
7
+ export declare function completeParseContext(context: Partial<SparqlContext & {
8
+ origSource: string;
9
+ offset?: number;
10
+ }>): SparqlContext & {
11
+ origSource: string;
12
+ offset?: number;
13
+ };
6
14
  export declare class SparqlParser<ParseRet> {
7
15
  private readonly parser;
8
16
  constructor(parser: Parser<ParseRet>);
17
+ private readonly F;
9
18
  parse(query: string, context?: Partial<SparqlContext>): ParseRet;
10
- parsePath(query: string, context?: Partial<SparqlContext>): (PropertyPath & {
19
+ parsePath(query: string, context?: Partial<SparqlContext>): (Path & {
11
20
  prefixes: object;
12
- }) | IriTerm;
21
+ }) | TermIri;
13
22
  }
14
23
  export {};
@@ -1,9 +1,11 @@
1
- import { DataFactory } from 'rdf-data-factory';
2
- function completeParseContext(context) {
1
+ import { Factory } from './factory';
2
+ export function completeParseContext(context) {
3
3
  return {
4
- dataFactory: context.dataFactory ?? new DataFactory({ blankNodePrefix: 'g_' }),
4
+ factory: context.factory ?? new Factory(),
5
5
  baseIRI: context.baseIRI,
6
6
  prefixes: { ...context.prefixes },
7
+ origSource: context.origSource ?? '',
8
+ offset: context.offset,
7
9
  parseMode: context.parseMode ? new Set(context.parseMode) : new Set(['canParseVars', 'canCreateBlankNodes']),
8
10
  skipValidation: context.skipValidation ?? false,
9
11
  };
@@ -11,13 +13,14 @@ function completeParseContext(context) {
11
13
  export class SparqlParser {
12
14
  constructor(parser) {
13
15
  this.parser = parser;
16
+ this.F = new Factory();
14
17
  }
15
18
  parse(query, context = {}) {
16
19
  return this.parser.queryOrUpdate(query, completeParseContext(context), undefined);
17
20
  }
18
21
  parsePath(query, context = {}) {
19
22
  const result = this.parser.path(query, completeParseContext(context), undefined);
20
- if ('type' in result) {
23
+ if (this.F.isPathPure(result)) {
21
24
  return {
22
25
  ...result,
23
26
  prefixes: {},
@@ -1 +1 @@
1
- {"version":3,"file":"SparqlParser.js","sourceRoot":"","sources":["SparqlParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,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,YAAoC,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;IAAG,CAAC;IAEzD,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;QAElE,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 type { 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 readonly 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> = {}):\n (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
+ {"version":3,"file":"SparqlParser.js","sourceRoot":"","sources":["SparqlParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,MAAM,UAAU,oBAAoB,CAClC,OAAyE;IAEzE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,OAAO,EAAE;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,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,YAAoC,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;QAC3C,MAAC,GAAG,IAAI,OAAO,EAAE,CAAC;IAD4B,CAAC;IAGzD,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;QAElE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { Factory } from './factory';\nimport type { Path, TermIri } from './RoundTripTypes';\nimport type { SparqlContext } from './Sparql11types';\n\ninterface Parser<ParseRet> {\n queryOrUpdate: (input: string, context: SparqlContext, arg: undefined) => ParseRet;\n path: (input: string, context: SparqlContext, arg: undefined) => TermIri | Path;\n}\n\nexport function completeParseContext(\n context: Partial<SparqlContext & { origSource: string; offset?: number }>,\n): SparqlContext & { origSource: string; offset?: number } {\n return {\n factory: context.factory ?? new Factory(),\n baseIRI: context.baseIRI,\n prefixes: { ...context.prefixes },\n origSource: context.origSource ?? '',\n offset: context.offset,\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 readonly parser: Parser<ParseRet>) {}\n private readonly F = new Factory();\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> = {}):\n (Path & { prefixes: object }) | TermIri {\n const result = this.parser.path(query, completeParseContext(context), undefined);\n if (this.F.isPathPure(result)) {\n return {\n ...result,\n prefixes: {},\n };\n }\n return result;\n }\n}\n"]}
@@ -1,12 +1,10 @@
1
1
  import type { TokenType } from 'chevrotain';
2
- import type { Expression, OperationExpression, Pattern, SparqlGrammarRule, VariableTerm } from './Sparql11types';
3
- import { Wildcard } from './Wildcard';
4
- export interface IExpressionFunctionX<U extends Expression[] | [Pattern]> extends OperationExpression {
5
- type: 'operation';
6
- operator: string;
2
+ import type { Expression, ExpressionAggregateDefault, ExpressionOperation, ExpressionPatternOperation, TermVariable } from './RoundTripTypes';
3
+ import type { SparqlGrammarRule } from './Sparql11types';
4
+ export type ExpressionFunctionX<U extends Expression[]> = ExpressionOperation & {
7
5
  args: U;
8
- }
9
- export type RuleDefExpressionFunctionX<T extends string, U extends Expression[] | [Pattern]> = SparqlGrammarRule<T, IExpressionFunctionX<U>>;
6
+ };
7
+ export type RuleDefExpressionFunctionX<T extends string, U extends Expression[]> = SparqlGrammarRule<T, ExpressionFunctionX<U>>;
10
8
  export declare function funcExpr1<T extends string>(func: TokenType & {
11
9
  name: T;
12
10
  }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]>;
@@ -18,7 +16,7 @@ export declare function funcExpr3<T extends string>(func: TokenType & {
18
16
  }): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression, Expression]>;
19
17
  export declare function funcVar1<T extends string>(func: TokenType & {
20
18
  name: T;
21
- }): RuleDefExpressionFunctionX<Uncapitalize<T>, [VariableTerm]>;
19
+ }): RuleDefExpressionFunctionX<Uncapitalize<T>, [TermVariable]>;
22
20
  export declare function funcExprOrNil1<T extends string>(func: TokenType & {
23
21
  name: T;
24
22
  }): RuleDefExpressionFunctionX<Uncapitalize<T>, [] | [Expression]>;
@@ -40,17 +38,8 @@ export declare function funcExpr3or4<T extends string>(func: TokenType & {
40
38
  ] | [Expression, Expression, Expression, Expression]>;
41
39
  export declare function funcGroupGraphPattern<T extends string>(func: TokenType & {
42
40
  name: T;
43
- }): RuleDefExpressionFunctionX<Uncapitalize<T>, [
44
- Pattern
45
- ]>;
46
- export interface IExpressionAggregator {
47
- type: 'aggregate';
48
- distinct: boolean;
49
- expression: Expression | Wildcard;
50
- aggregation: string;
51
- separator?: string;
52
- }
53
- export type RuleDefExpressionAggregatorX<T extends string> = SparqlGrammarRule<T, IExpressionAggregator>;
41
+ }): SparqlGrammarRule<Uncapitalize<T>, ExpressionPatternOperation>;
42
+ export type RuleDefExpressionAggregatorX<T extends string> = SparqlGrammarRule<T, ExpressionAggregateDefault>;
54
43
  export declare function baseAggregateFunc<T extends string>(func: TokenType & {
55
44
  name: T;
56
45
  }): RuleDefExpressionAggregatorX<Uncapitalize<T>>;
@@ -1,51 +1,38 @@
1
1
  import { unCapitalize } from '@traqula/core';
2
+ import { var_ } from './grammar';
2
3
  import { expression, expressionList } from './grammar/expression';
3
- import { var_ } from './grammar/general';
4
4
  import { groupGraphPattern } from './grammar/whereClause';
5
5
  import * as l from './lexer';
6
- import { deGroupSingle } from './utils';
7
- import { Wildcard } from './Wildcard';
8
- function formatOperator(operator) {
9
- return operator.toLowerCase().replaceAll(' ', '');
10
- }
11
6
  export function funcExpr1(func) {
12
7
  return {
13
8
  name: unCapitalize(func.name),
14
- impl: ({ SUBRULE, CONSUME }) => () => {
9
+ impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
15
10
  const operator = CONSUME(func);
16
11
  CONSUME(l.symbols.LParen);
17
12
  const arg = SUBRULE(expression, undefined);
18
- CONSUME(l.symbols.RParen);
19
- return {
20
- type: 'operation',
21
- operator: formatOperator(operator.image),
22
- args: [arg],
23
- };
13
+ const close = CONSUME(l.symbols.RParen);
14
+ return ACTION(() => C.factory.expressionOperation(operator.image, [arg], C.factory.sourceLocation(operator, close)));
24
15
  },
25
16
  };
26
17
  }
27
18
  export function funcExpr2(func) {
28
19
  return {
29
20
  name: unCapitalize(func.name),
30
- impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {
21
+ impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2 }) => (C) => {
31
22
  const operator = CONSUME(func);
32
23
  CONSUME(l.symbols.LParen);
33
24
  const arg1 = SUBRULE1(expression, undefined);
34
25
  CONSUME(l.symbols.comma);
35
26
  const arg2 = SUBRULE2(expression, undefined);
36
- CONSUME(l.symbols.RParen);
37
- return {
38
- type: 'operation',
39
- operator: formatOperator(operator.image),
40
- args: [arg1, arg2],
41
- };
27
+ const close = CONSUME(l.symbols.RParen);
28
+ return ACTION(() => C.factory.expressionOperation(operator.image, [arg1, arg2], C.factory.sourceLocation(operator, close)));
42
29
  },
43
30
  };
44
31
  }
45
32
  export function funcExpr3(func) {
46
33
  return {
47
34
  name: unCapitalize(func.name),
48
- impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {
35
+ impl: ({ ACTION, CONSUME, CONSUME1, CONSUME2, SUBRULE1, SUBRULE2, SUBRULE3 }) => (C) => {
49
36
  const operator = CONSUME(func);
50
37
  CONSUME(l.symbols.LParen);
51
38
  const arg1 = SUBRULE1(expression, undefined);
@@ -53,92 +40,67 @@ export function funcExpr3(func) {
53
40
  const arg2 = SUBRULE2(expression, undefined);
54
41
  CONSUME2(l.symbols.comma);
55
42
  const arg3 = SUBRULE3(expression, undefined);
56
- CONSUME(l.symbols.RParen);
57
- return {
58
- type: 'operation',
59
- operator: formatOperator(operator.image),
60
- args: [arg1, arg2, arg3],
61
- };
43
+ const close = CONSUME(l.symbols.RParen);
44
+ return ACTION(() => C.factory.expressionOperation(operator.image, [arg1, arg2, arg3], C.factory.sourceLocation(operator, close)));
62
45
  },
63
46
  };
64
47
  }
65
48
  export function funcVar1(func) {
66
49
  return {
67
50
  name: unCapitalize(func.name),
68
- impl: ({ SUBRULE, CONSUME }) => () => {
51
+ impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
69
52
  const operator = CONSUME(func);
70
53
  CONSUME(l.symbols.LParen);
71
54
  const arg = SUBRULE(var_, undefined);
72
- CONSUME(l.symbols.RParen);
73
- return {
74
- type: 'operation',
75
- operator: formatOperator(operator.image),
76
- args: [arg],
77
- };
55
+ const close = CONSUME(l.symbols.RParen);
56
+ return ACTION(() => C.factory.expressionOperation(operator.image, [arg], C.factory.sourceLocation(operator, close)));
78
57
  },
79
58
  };
80
59
  }
81
60
  export function funcExprOrNil1(func) {
82
61
  return {
83
62
  name: unCapitalize(func.name),
84
- impl: ({ CONSUME, OR, SUBRULE }) => () => {
63
+ impl: ({ ACTION, CONSUME, OR, SUBRULE }) => (C) => {
85
64
  const operator = CONSUME(func);
86
- const args = OR([
87
- {
88
- ALT: () => {
65
+ return OR([
66
+ { ALT: () => {
89
67
  CONSUME(l.symbols.LParen);
90
68
  const arg = SUBRULE(expression, undefined);
91
- CONSUME(l.symbols.RParen);
92
- return [arg];
93
- },
94
- },
95
- {
96
- ALT: () => {
97
- CONSUME(l.terminals.nil);
98
- return [];
99
- },
100
- },
69
+ const close = CONSUME(l.symbols.RParen);
70
+ return ACTION(() => C.factory.expressionOperation(operator.image, [arg], C.factory.sourceLocation(operator, close)));
71
+ } },
72
+ { ALT: () => {
73
+ const nil = CONSUME(l.terminals.nil);
74
+ return ACTION(() => C.factory.expressionOperation(operator.image, [], C.factory.sourceLocation(operator, nil)));
75
+ } },
101
76
  ]);
102
- return {
103
- type: 'operation',
104
- operator: formatOperator(operator.image),
105
- args,
106
- };
107
77
  },
108
78
  };
109
79
  }
110
80
  export function funcNil1(func) {
111
81
  return {
112
82
  name: unCapitalize(func.name),
113
- impl: ({ CONSUME }) => () => {
83
+ impl: ({ ACTION, CONSUME }) => (C) => {
114
84
  const operator = CONSUME(func);
115
- CONSUME(l.terminals.nil);
116
- return {
117
- type: 'operation',
118
- operator: formatOperator(operator.image),
119
- args: [],
120
- };
85
+ const nil = CONSUME(l.terminals.nil);
86
+ return ACTION(() => C.factory.expressionOperation(operator.image, [], C.factory.sourceLocation(operator, nil)));
121
87
  },
122
88
  };
123
89
  }
124
90
  export function funcExprList1(func) {
125
91
  return {
126
92
  name: unCapitalize(func.name),
127
- impl: ({ CONSUME, SUBRULE }) => () => {
93
+ impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {
128
94
  const operator = CONSUME(func);
129
95
  const args = SUBRULE(expressionList, undefined);
130
- return {
131
- type: 'operation',
132
- operator: formatOperator(operator.image),
133
- args,
134
- };
96
+ return ACTION(() => C.factory.expressionOperation(operator.image, args.val, C.factory.sourceLocation(operator, args)));
135
97
  },
136
98
  };
137
99
  }
138
100
  export function funcExpr2or3(func) {
139
101
  return {
140
102
  name: unCapitalize(func.name),
141
- impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {
103
+ impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => (C) => {
142
104
  const operator = CONSUME(func);
143
105
  CONSUME(l.symbols.LParen);
144
106
  const arg1 = SUBRULE1(expression, undefined);
@@ -148,19 +110,15 @@ export function funcExpr2or3(func) {
148
110
  CONSUME2(l.symbols.comma);
149
111
  return SUBRULE3(expression, undefined);
150
112
  });
151
- CONSUME(l.symbols.RParen);
152
- return {
153
- type: 'operation',
154
- operator: formatOperator(operator.image),
155
- args: arg3 ? [arg1, arg2, arg3] : [arg1, arg2],
156
- };
113
+ const close = CONSUME(l.symbols.RParen);
114
+ return ACTION(() => C.factory.expressionOperation(operator.image, arg3 ? [arg1, arg2, arg3] : [arg1, arg2], C.factory.sourceLocation(operator, close)));
157
115
  },
158
116
  };
159
117
  }
160
118
  export function funcExpr3or4(func) {
161
119
  return {
162
120
  name: unCapitalize(func.name),
163
- impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {
121
+ impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, SUBRULE4, CONSUME1, OPTION, CONSUME2, CONSUME3, }) => (C) => {
164
122
  const operator = CONSUME(func);
165
123
  CONSUME(l.symbols.LParen);
166
124
  const arg1 = SUBRULE1(expression, undefined);
@@ -172,52 +130,31 @@ export function funcExpr3or4(func) {
172
130
  CONSUME3(l.symbols.comma);
173
131
  return SUBRULE4(expression, undefined);
174
132
  });
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
- };
133
+ const close = CONSUME(l.symbols.RParen);
134
+ return ACTION(() => C.factory.expressionOperation(operator.image, arg4 ? [arg1, arg2, arg3, arg4] : [arg1, arg2, arg3], C.factory.sourceLocation(operator, close)));
181
135
  },
182
136
  };
183
137
  }
184
138
  export function funcGroupGraphPattern(func) {
185
139
  return {
186
140
  name: unCapitalize(func.name),
187
- impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
141
+ impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
188
142
  const operator = CONSUME(func);
189
143
  const group = SUBRULE(groupGraphPattern, undefined);
190
- return ACTION(() => ({
191
- type: 'operation',
192
- operator: formatOperator(operator.image),
193
- args: [deGroupSingle(group)],
194
- }));
144
+ return ACTION(() => C.factory.expressionPatternOperation(operator.image, group, C.factory.sourceLocation(operator, group)));
195
145
  },
196
146
  };
197
147
  }
198
148
  export function baseAggregateFunc(func) {
199
149
  return {
200
150
  name: unCapitalize(func.name),
201
- impl: ({ CONSUME, SUBRULE, OPTION, OR }) => () => {
151
+ impl: ({ ACTION, CONSUME, SUBRULE, OPTION }) => (C) => {
202
152
  const operator = CONSUME(func);
203
153
  CONSUME(l.symbols.LParen);
204
154
  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, undefined) },
213
- ]);
214
- CONSUME(l.symbols.RParen);
215
- return {
216
- type: 'aggregate',
217
- aggregation: operator.image.toLowerCase(),
218
- expression: expressionVal,
219
- distinct: Boolean(distinct),
220
- };
155
+ const expr1 = SUBRULE(expression, undefined);
156
+ const close = CONSUME(l.symbols.RParen);
157
+ return ACTION(() => C.factory.aggregate(operator.image, distinct !== undefined, expr1, undefined, C.factory.sourceLocation(operator, close)));
221
158
  },
222
159
  };
223
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"expressionHelpers.js","sourceRoot":"","sources":["expressionHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { unCapitalize } from '@traqula/core';\nimport type { TokenType } from 'chevrotain';\nimport { expression, expressionList } from './grammar/expression';\nimport { var_ } from './grammar/general';\nimport { groupGraphPattern } from './grammar/whereClause';\nimport * as l from './lexer';\nimport type { Expression, OperationExpression, Pattern, SparqlGrammarRule, VariableTerm } from './Sparql11types';\nimport { deGroupSingle } from './utils';\nimport { Wildcard } from './Wildcard';\n\nexport interface IExpressionFunctionX<U extends Expression[] | [Pattern]> extends OperationExpression {\n type: 'operation';\n operator: string;\n args: U;\n}\n\nexport type RuleDefExpressionFunctionX<T extends string, U extends Expression[] | [Pattern]>\n = SparqlGrammarRule<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> = SparqlGrammarRule<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
+ {"version":3,"file":"expressionHelpers.js","sourceRoot":"","sources":["expressionHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { unCapitalize } from '@traqula/core';\nimport type { TokenType } from 'chevrotain';\nimport { var_ } from './grammar';\nimport { expression, expressionList } from './grammar/expression';\nimport { groupGraphPattern } from './grammar/whereClause';\nimport * as l from './lexer';\nimport type {\n Expression,\n ExpressionAggregateDefault,\n ExpressionOperation,\n ExpressionPatternOperation,\n TermVariable,\n} from './RoundTripTypes';\nimport type { SparqlGrammarRule } from './Sparql11types';\n\nexport type ExpressionFunctionX<U extends Expression[]> = ExpressionOperation & {\n args: U;\n};\n\nexport type RuleDefExpressionFunctionX<T extends string, U extends Expression[]>\n = SparqlGrammarRule<T, ExpressionFunctionX<U>>;\n\nexport function funcExpr1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression, undefined);\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [ arg ], C.factory.sourceLocation(operator, close)));\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: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2 }) => (C) => {\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 const close = CONSUME(l.symbols.RParen);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [ arg1, arg2 ], C.factory.sourceLocation(operator, close)));\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: ({ ACTION, CONSUME, CONSUME1, CONSUME2, SUBRULE1, SUBRULE2, SUBRULE3 }) => (C) => {\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 close = CONSUME(l.symbols.RParen);\n\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [ arg1, arg2, arg3 ], C.factory.sourceLocation(operator, close)));\n },\n };\n}\n\nexport function funcVar1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [TermVariable]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(var_, undefined);\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [ arg ], C.factory.sourceLocation(operator, close)));\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: ({ ACTION, CONSUME, OR, SUBRULE }) => (C) => {\n const operator = CONSUME(func);\n return OR<ExpressionFunctionX<[] | [Expression]>>([\n { ALT: () => {\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression, undefined);\n const close = CONSUME(l.symbols.RParen);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [ arg ], C.factory.sourceLocation(operator, close)));\n } },\n { ALT: () => {\n const nil = CONSUME(l.terminals.nil);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [], C.factory.sourceLocation(operator, nil)));\n } },\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: ({ ACTION, CONSUME }) => (C) => {\n const operator = CONSUME(func);\n const nil = CONSUME(l.terminals.nil);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, [], C.factory.sourceLocation(operator, nil)));\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: ({ ACTION, CONSUME, SUBRULE }) => (C) => {\n const operator = CONSUME(func);\n const args = SUBRULE(expressionList, undefined);\n return ACTION(() =>\n C.factory.expressionOperation(operator.image, args.val, C.factory.sourceLocation(operator, args)));\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: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) =>\n (C) => {\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 const close = CONSUME(l.symbols.RParen);\n return ACTION(() => C.factory.expressionOperation(\n operator.image,\n arg3 ? <const> [ arg1, arg2, arg3 ] : <const> [ arg1, arg2 ],\n C.factory.sourceLocation(operator, close),\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: ({\n ACTION,\n CONSUME,\n SUBRULE1,\n SUBRULE2,\n SUBRULE3,\n SUBRULE4,\n CONSUME1,\n OPTION,\n CONSUME2,\n CONSUME3,\n }) =>\n (C) => {\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 const close = CONSUME(l.symbols.RParen);\n return ACTION(() => C.factory.expressionOperation(\n operator.image,\n arg4 ? <const> [ arg1, arg2, arg3, arg4 ] : <const> [ arg1, arg2, arg3 ],\n C.factory.sourceLocation(operator, close),\n ));\n },\n };\n}\n\nexport function funcGroupGraphPattern<T extends string>(func: TokenType & { name: T }):\nSparqlGrammarRule<Uncapitalize<T>, ExpressionPatternOperation> {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {\n const operator = CONSUME(func);\n const group = SUBRULE(groupGraphPattern, undefined);\n return ACTION(() => C.factory.expressionPatternOperation(\n operator.image,\n group,\n C.factory.sourceLocation(operator, group),\n ));\n },\n };\n}\n\nexport type RuleDefExpressionAggregatorX<T extends string> = SparqlGrammarRule<T, ExpressionAggregateDefault>;\n\nexport function baseAggregateFunc<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionAggregatorX<Uncapitalize<T>> {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, CONSUME, SUBRULE, OPTION }) => (C) => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const distinct = OPTION(() => CONSUME(l.distinct));\n const expr1 = SUBRULE(expression, undefined);\n const close = CONSUME(l.symbols.RParen);\n\n return ACTION(() => C.factory.aggregate(\n operator.image,\n distinct !== undefined,\n expr1,\n undefined,\n C.factory.sourceLocation(operator, close),\n ));\n },\n };\n}\n"]}