@contember/binding-common 2.0.0-alpha.18 → 2.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/development/index.cjs +2 -0
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +2 -0
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/environment/Environment.cjs.map +1 -1
- package/dist/development/src/environment/Environment.js.map +1 -1
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.cjs +3 -3
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.cjs.map +1 -1
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.js +2 -2
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.js.map +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.cjs +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.cjs.map +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.js +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.js.map +1 -1
- package/dist/development/src/queryLanguage/Parser.cjs +4 -6
- package/dist/development/src/queryLanguage/Parser.cjs.map +1 -1
- package/dist/development/src/queryLanguage/Parser.js +4 -6
- package/dist/development/src/queryLanguage/Parser.js.map +1 -1
- package/dist/development/src/queryLanguage/QueryLanguage.cjs +1 -11
- package/dist/development/src/queryLanguage/QueryLanguage.cjs.map +1 -1
- package/dist/development/src/queryLanguage/QueryLanguage.js +1 -11
- package/dist/development/src/queryLanguage/QueryLanguage.js.map +1 -1
- package/dist/development/src/treeParameters/TreeParameterMerger.cjs +1 -15
- package/dist/development/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
- package/dist/development/src/treeParameters/TreeParameterMerger.js +1 -15
- package/dist/development/src/treeParameters/TreeParameterMerger.js.map +1 -1
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.cjs +2 -2
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.cjs.map +1 -1
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.js +1 -1
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.js.map +1 -1
- package/dist/development/src/utils/whereToFilter.cjs +16 -0
- package/dist/development/src/utils/whereToFilter.cjs.map +1 -0
- package/dist/development/src/utils/whereToFilter.js +16 -0
- package/dist/development/src/utils/whereToFilter.js.map +1 -0
- package/dist/production/index.cjs +2 -0
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +2 -0
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/environment/Environment.cjs.map +1 -1
- package/dist/production/src/environment/Environment.js.map +1 -1
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.cjs +3 -3
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.cjs.map +1 -1
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.js +2 -2
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.js.map +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.cjs +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.cjs.map +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.js +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.js.map +1 -1
- package/dist/production/src/queryLanguage/Parser.cjs +4 -6
- package/dist/production/src/queryLanguage/Parser.cjs.map +1 -1
- package/dist/production/src/queryLanguage/Parser.js +4 -6
- package/dist/production/src/queryLanguage/Parser.js.map +1 -1
- package/dist/production/src/queryLanguage/QueryLanguage.cjs +1 -8
- package/dist/production/src/queryLanguage/QueryLanguage.cjs.map +1 -1
- package/dist/production/src/queryLanguage/QueryLanguage.js +1 -8
- package/dist/production/src/queryLanguage/QueryLanguage.js.map +1 -1
- package/dist/production/src/treeParameters/TreeParameterMerger.cjs +1 -15
- package/dist/production/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
- package/dist/production/src/treeParameters/TreeParameterMerger.js +1 -15
- package/dist/production/src/treeParameters/TreeParameterMerger.js.map +1 -1
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.cjs +2 -2
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.cjs.map +1 -1
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.js +1 -1
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.js.map +1 -1
- package/dist/production/src/utils/whereToFilter.cjs +16 -0
- package/dist/production/src/utils/whereToFilter.cjs.map +1 -0
- package/dist/production/src/utils/whereToFilter.js +16 -0
- package/dist/production/src/utils/whereToFilter.js.map +1 -0
- package/dist/types/environment/Environment.d.ts +1 -2
- package/dist/types/environment/Environment.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/queryLanguage/Parser.d.ts +2 -2
- package/dist/types/queryLanguage/Parser.d.ts.map +1 -1
- package/dist/types/queryLanguage/QueryLanguage.d.ts +1 -3
- package/dist/types/queryLanguage/QueryLanguage.d.ts.map +1 -1
- package/dist/types/treeParameters/TreeParameterMerger.d.ts.map +1 -1
- package/dist/types/treeParameters/helpers/wrapFilterInHasOnes.d.ts.map +1 -1
- package/dist/types/treeParameters/primitives/Filter.d.ts +2 -2
- package/dist/types/treeParameters/primitives/Filter.d.ts.map +1 -1
- package/dist/types/treeParameters/primitives/OrderBy.d.ts +2 -2
- package/dist/types/treeParameters/primitives/OrderBy.d.ts.map +1 -1
- package/dist/types/treeParameters/primitives/UniqueWhere.d.ts +2 -2
- package/dist/types/treeParameters/primitives/UniqueWhere.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types/BindingOperations.d.ts +0 -2
- package/dist/types/types/BindingOperations.d.ts.map +1 -1
- package/dist/types/utils/whereToFilter.d.ts +3 -0
- package/dist/types/utils/whereToFilter.d.ts.map +1 -0
- package/package.json +4 -4
- package/src/environment/Environment.ts +1 -2
- package/src/environment/TreeNodeEnvironmentFactory.ts +2 -2
- package/src/index.ts +1 -0
- package/src/queryLanguage/MarkerFactory.ts +1 -1
- package/src/queryLanguage/Parser.ts +8 -10
- package/src/queryLanguage/QueryLanguage.ts +0 -12
- package/src/treeParameters/TreeParameterMerger.ts +2 -17
- package/src/treeParameters/helpers/wrapFilterInHasOnes.ts +1 -1
- package/src/treeParameters/primitives/Filter.ts +2 -2
- package/src/treeParameters/primitives/OrderBy.ts +2 -2
- package/src/treeParameters/primitives/UniqueWhere.ts +2 -2
- package/src/types/BindingOperations.ts +0 -3
- package/src/utils/whereToFilter.ts +18 -0
- package/tests/cases/unit/queryLanguage/general.spec.tsx +2 -3
- package/tests/cases/unit/queryLanguage/orderBy.spec.tsx +0 -1
- package/tests/cases/unit/queryLanguage/singleRelativeField.spec.tsx +0 -1
- package/tests/cases/unit/whereToFilter.ts +24 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parser.cjs","sources":["../../../../../packages/binding-common/src/queryLanguage/Parser.ts"],"sourcesContent":["import { GraphQlBuilder, Input, Writable } from '@contember/client'\nimport { EmbeddedActionsParser, Lexer } from 'chevrotain'\nimport { Environment } from '../environment'\nimport type { EntityName, FieldName, Filter, OrderBy, UniqueWhere } from '../treeParameters'\nimport type {\n\tParsedHasManyRelation,\n\tParsedHasOneRelation,\n\tParsedQualifiedEntityList,\n\tParsedQualifiedFieldList,\n\tParsedQualifiedSingleEntity,\n\tParsedRelativeEntityList,\n\tParsedRelativeSingleEntity,\n\tParsedRelativeSingleField,\n\tParsedTaggedMap,\n\tParsedTaggedMapEntry,\n\tParsedTaggedMapLiteralValue,\n\tParsedTaggedMapVariableValue,\n\tParsedUnconstrainedQualifiedEntityList,\n\tParsedUnconstrainedQualifiedSingleEntity,\n} from './ParserResults'\nimport { CacheStore } from './CacheStore'\nimport { QueryLanguageError } from './QueryLanguageError'\nimport { tokenList, TokenRegExps, tokens } from './tokenList'\nimport { BindingError } from '../BindingError'\n\n/**\n * TODO:\n * \t- double quoted strings\n * \t- collections (objects & lists)\n * \t- collection operators (e.g. 'in', 'notIn', etc.)\n * \t- filtering toOne\n */\nclass Parser extends EmbeddedActionsParser {\n\tprivate static rawInput: string = ''\n\tprivate static lexer = new Lexer(tokenList)\n\tprivate static parser = new Parser()\n\tprivate static environment: Environment = Environment.create()\n\tprivate static cacheStore: CacheStore = new CacheStore()\n\n\tprivate qualifiedEntityList = this.RULE<ParsedQualifiedEntityList>('qualifiedEntityList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedFieldList = this.RULE<ParsedQualifiedFieldList>('qualifiedFieldList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tthis.CONSUME(tokens.Dot)\n\n\t\tconst { hasOneRelationPath, field } = this.SUBRULE(this.relativeSingleField)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfield,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedSingleEntity = this.RULE<ParsedQualifiedSingleEntity>('qualifiedSingleEntity', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\n\t\t// TODO this will probably go away once we support singleton entities\n\t\tconst where = this.SUBRULE(this.uniqueWhere)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\twhere,\n\t\t\thasOneRelationPath,\n\t\t\tfilter,\n\t\t}\n\t})\n\n\tprivate unconstrainedQualifiedEntityList = this.RULE<ParsedUnconstrainedQualifiedEntityList>(\n\t\t'unconstrainedQualifiedEntityList',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate unconstrainedQualifiedSingleEntity = this.RULE<ParsedUnconstrainedQualifiedSingleEntity>(\n\t\t'unconstrainedQualifiedSingleEntity',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate relativeSingleField = this.RULE<ParsedRelativeSingleField>('relativeSingleField', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined || last.filter !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced or filtered, which, grammatically, makes it a relation but a single field is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst field = this.ACTION(() => last.field)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\tfield,\n\t\t}\n\t})\n\n\tprivate relativeSingleEntity = this.RULE<ParsedRelativeSingleEntity>('relativeSingleEntity', () => {\n\t\tconst hasOneRelationPath: ParsedHasOneRelation[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\thasOneRelationPath.push(this.SUBRULE(this.hasOneRelation))\n\t\t\t},\n\t\t})\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate relativeEntityList = this.RULE<ParsedRelativeEntityList>('relativeEntityList', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced, which, grammatically, makes it a has-one relation but a has-many relation is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst hasManyRelation = this.ACTION(\n\t\t\t(): ParsedHasManyRelation => ({\n\t\t\t\tfield: last.field,\n\t\t\t\tfilter: last.filter,\n\t\t\t}),\n\t\t)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\thasManyRelation,\n\t\t}\n\t})\n\n\tprivate hasOneRelation = this.RULE<ParsedHasOneRelation>('hasOneRelation', () => {\n\t\tconst fieldName = this.SUBRULE(this.fieldName)\n\t\tconst reducedBy = this.OPTION(() => this.SUBRULE(this.uniqueWhere))\n\t\tconst filter = this.OPTION1(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst hasOneRelation: ParsedHasOneRelation = {\n\t\t\tfield: fieldName,\n\t\t\tfilter,\n\t\t\treducedBy,\n\t\t}\n\n\t\treturn hasOneRelation\n\t})\n\n\tprivate nonUniqueWhere: () => Filter = this.RULE('nonUniqueWhere', () => {\n\t\tconst cnfWhere: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE(() => {\n\t\t\tthis.CONSUME(tokens.LeftBracket)\n\n\t\t\tcnfWhere.push(this.SUBRULE(this.disjunction))\n\n\t\t\tthis.CONSUME(tokens.RightBracket)\n\t\t})\n\t\tif (cnfWhere.length === 1) {\n\t\t\treturn cnfWhere[0]\n\t\t}\n\t\treturn {\n\t\t\tand: cnfWhere,\n\t\t}\n\t})\n\n\tprivate disjunction: () => Filter = this.RULE('disjunction', () => {\n\t\tconst conjunctions: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Or,\n\t\t\tDEF: () => {\n\t\t\t\tconjunctions.push(this.SUBRULE(this.conjunction))\n\t\t\t},\n\t\t})\n\t\tif (conjunctions.length === 1) {\n\t\t\treturn conjunctions[0]\n\t\t}\n\t\treturn {\n\t\t\tor: conjunctions,\n\t\t}\n\t})\n\n\tprivate conjunction: () => Filter = this.RULE('conjunction', () => {\n\t\tconst negations: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.And,\n\t\t\tDEF: () => {\n\t\t\t\tnegations.push(this.SUBRULE(this.negation))\n\t\t\t},\n\t\t})\n\t\tif (negations.length === 1) {\n\t\t\treturn negations[0]\n\t\t}\n\t\treturn {\n\t\t\tand: negations,\n\t\t}\n\t})\n\n\t// TODO this is to naïve and needs rewriting\n\tprivate negation: () => Filter = this.RULE('negation', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Not)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnot: this.SUBRULE(this.filterGroup),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\treturn this.SUBRULE1(this.filterGroup)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterGroup: () => Filter = this.RULE('filterGroup', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\t\t\t\tconst subFilter = this.SUBRULE(this.disjunction)\n\t\t\t\t\tthis.CONSUME1(tokens.RightParenthesis)\n\t\t\t\t\treturn subFilter\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.filterAtom),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterAtom: () => Filter = this.RULE('filterAtom', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (typeof variable !== 'object' || variable instanceof GraphQlBuilder.GraphQlLiteral) {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`Invalid filter value '${JSON.stringify(variable)}'`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.fieldWhere),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldWhere: () => Parser.AST.FieldWhere = this.RULE('fieldWhere', () => {\n\t\tconst fields: { name: FieldName; modifier?: string }[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\tfields.push(this.SUBRULE(this.fieldIdentifierWithOptionalModifier))\n\t\t\t},\n\t\t})\n\n\t\tconst createFieldWhere = (value: Parser.AST.Condition | Parser.AST.FieldWhere): Parser.AST.FieldWhere => {\n\t\t\treturn this.ACTION(() => {\n\t\t\t\tlet val = value\n\t\t\t\tfor (let i = fields.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst field = fields[i]\n\t\t\t\t\tif (field.modifier === 'none') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (field.modifier === 'all') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: { not: val },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!field.modifier || field.modifier === 'some') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new QueryLanguageError(`Unknown modifier '${field.modifier}', expected 'none', 'some' or 'all'`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn val as Parser.AST.FieldWhere\n\t\t\t})\n\t\t}\n\n\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst condition = this.SUBRULE(this.condition)\n\t\t\t\t\treturn createFieldWhere(condition)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst subWhere = this.SUBRULE(this.nonUniqueWhere)\n\t\t\t\t\treturn createFieldWhere(subWhere)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate condition: () => Parser.AST.Condition = this.RULE('condition', () => {\n\t\tconst operator = this.SUBRULE(this.conditionOperator)\n\t\tconst columnValue = this.SUBRULE(this.columnValue)\n\t\tconst condition: Writable<Parser.AST.Condition> = {}\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (columnValue === null) {\n\t\t\t\tif (operator === 'eq') {\n\t\t\t\t\tcondition.null = true\n\t\t\t\t} else if (operator === 'notEq') {\n\t\t\t\t\tcondition.null = false\n\t\t\t\t} else {\n\t\t\t\t\tthrow new QueryLanguageError(`The null keyword as a right hand operand can only be tested for (in)equality.`)\n\t\t\t\t}\n\t\t\t\treturn condition\n\t\t\t}\n\t\t\tcondition[operator] = columnValue\n\n\t\t\treturn condition\n\t\t})\n\t})\n\n\tprivate conditionOperator: () => Parser.AST.ConditionOperator = this.RULE<Parser.AST.ConditionOperator>(\n\t\t'conditionOperator',\n\t\t() => {\n\t\t\treturn this.OR([\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\t\t\treturn 'eq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.NotEquals)\n\t\t\t\t\t\treturn 'notEq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerThan)\n\t\t\t\t\t\treturn 'lt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerEqual)\n\t\t\t\t\t\treturn 'lte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterThan)\n\t\t\t\t\t\treturn 'gt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterEqual)\n\t\t\t\t\t\treturn 'gte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t},\n\t)\n\n\tprivate columnValue: () => Parser.AST.ColumnValue = this.RULE<Parser.AST.ColumnValue>('columnValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Null)\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.True)\n\t\t\t\t\treturn true\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.False)\n\t\t\t\t\treturn false\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.primaryValue),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate uniqueWhere = this.RULE('uniqueWhere', () => {\n\t\tconst where: Writable<UniqueWhere> = {}\n\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst nestedFields: string[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tnestedFields.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\tconst primaryValue = this.SUBRULE<Input.PrimaryValue<GraphQlBuilder.GraphQlLiteral>>(this.primaryValue)\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet nestedWhere = where\n\t\t\t\t\tfor (let i = 0, len = nestedFields.length; i < len; i++) {\n\t\t\t\t\t\tconst nestedField = nestedFields[i]\n\n\t\t\t\t\t\tconst isLast = len - 1 === i\n\n\t\t\t\t\t\tif (isLast) {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tthrow new QueryLanguageError(`Duplicate '${nestedFields.slice(0, i + 1).join('.')}' field`)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnestedWhere[nestedField] = primaryValue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tconst existingWhere = nestedWhere[nestedField]\n\n\t\t\t\t\t\t\t\tif (typeof existingWhere === 'object' && !(existingWhere instanceof GraphQlBuilder.GraphQlLiteral)) {\n\t\t\t\t\t\t\t\t\tnestedWhere = existingWhere\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t\t\t\t`Malformed expression: cannot simultaneously treat the '${nestedFields\n\t\t\t\t\t\t\t\t\t\t\t.slice(0, i + 1)\n\t\t\t\t\t\t\t\t\t\t\t.join('.')}' ` + `field as a scalar as well as a relation.`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst newWhere = {}\n\t\t\t\t\t\t\t\tnestedWhere[nestedField] = newWhere\n\t\t\t\t\t\t\t\tnestedWhere = newWhere\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn where\n\t})\n\n\tprivate orderBy: () => Input.OrderBy<`${Input.OrderDirection}`>[] = this.RULE<\n\t\tInput.OrderBy<`${Input.OrderDirection}`>[]\n\t>('orderBy', () => {\n\t\tconst order: Input.OrderBy<`${Input.OrderDirection}`>[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst fieldNames: FieldName[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tfieldNames.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst literal = this.OPTION(() => this.SUBRULE1(this.identifier))\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet orderDirection: `${Input.OrderDirection}`\n\t\t\t\t\tif (literal) {\n\t\t\t\t\t\tif (literal !== 'asc' && literal !== 'desc' && literal !== 'ascNullsFirst' && literal !== 'descNullsLast') {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The only valid order directions are 'asc', 'desc', 'ascNullsFirst' and 'descNullsLast'.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\torderDirection = literal\n\t\t\t\t\t} else {\n\t\t\t\t\t\torderDirection = 'asc'\n\t\t\t\t\t}\n\t\t\t\t\tlet orderBy: Input.FieldOrderBy<`${Input.OrderDirection}`> = orderDirection\n\n\t\t\t\t\tfor (let i = fieldNames.length - 1; i >= 0; i--) {\n\t\t\t\t\t\torderBy = { [fieldNames[i]]: orderBy }\n\t\t\t\t\t}\n\t\t\t\t\torder.push(orderBy as Input.OrderBy<`${Input.OrderDirection}`>)\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\treturn order\n\t})\n\n\tprivate taggedMap: () => ParsedTaggedMap = this.RULE<ParsedTaggedMap>('taggedMap', () => {\n\t\tconst name = this.SUBRULE(this.pageName)\n\t\treturn {\n\t\t\tname,\n\t\t\tentries: this.OPTION(() => this.SUBRULE(this.taggedMapEntries)) ?? [],\n\t\t}\n\t})\n\n\tprivate taggedMapEntries: () => ParsedTaggedMapEntry[] = this.RULE<ParsedTaggedMapEntry[]>('taggedMapEntries', () => {\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tconst entries: ParsedTaggedMapEntry[] = []\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => entries.push(this.SUBRULE(this.taggedMapEntry)),\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn entries\n\t})\n\n\tprivate taggedMapEntry: () => ParsedTaggedMapEntry = this.RULE<ParsedTaggedMapEntry>('taggedMapEntry', () => {\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\t\tthis.CONSUME1(tokens.Colon)\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapLiteralValue),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapVariableValue),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\tkey: variableName,\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapLiteralValue: () => ParsedTaggedMapLiteralValue = this.RULE<ParsedTaggedMapLiteralValue>('taggedMapLiteralValue', () => {\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\ttype: 'literal',\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapVariableValue: () => ParsedTaggedMapVariableValue = this.RULE<ParsedTaggedMapVariableValue>('taggedMapVariableValue', () => {\n\t\tconst start = this.CONSUME(tokens.DollarSign)\n\t\tthis.SUBRULE(this.relativeSingleField)\n\t\tconst end = this.LA(0)\n\t\tconst field = this.input.slice(this.input.indexOf(start) + 1, this.input.indexOf(end) + 1).map(it => it.image).join('')\n\n\t\treturn {\n\t\t\ttype: 'variable',\n\t\t\tvalue: field,\n\t\t}\n\t})\n\n\n\tprivate fieldName: () => FieldName = this.RULE<FieldName>('fieldName', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.fieldIdentifier),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate primaryValue = this.RULE<Input.PrimaryValue<GraphQlBuilder.GraphQlLiteral>>('primaryValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.identifier),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variableValue = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof variableValue === 'string' ||\n\t\t\t\t\t\t\ttypeof variableValue === 'number' ||\n\t\t\t\t\t\t\tvariableValue instanceof GraphQlBuilder.GraphQlLiteral\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn variableValue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t`A variable can resolve to a literal, string or a number, not ${typeof variableValue}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldIdentifierWithOptionalModifier: () => { name: FieldName; modifier?: string } = this.RULE('fieldIdentifierWithOptionalModifier', () => {\n\t\tconst fieldIdentifier = this.SUBRULE1(this.fieldIdentifier)\n\t\tconst modifier = this.OPTION(() => {\n\t\t\tthis.CONSUME(tokens.Colon)\n\t\t\treturn this.SUBRULE(this.identifier)\n\t\t})\n\t\treturn { name: fieldIdentifier, modifier }\n\t})\n\n\tprivate fieldIdentifier: () => FieldName = this.RULE('fieldIdentifier', () => {\n\t\treturn this.SUBRULE(this.identifier)\n\t\t// return this.OR([\n\t\t// \t{\n\t\t// \t\tALT: () => this.SUBRULE(this.identifier),\n\t\t// \t},\n\t\t// \t{\n\t\t// \t\tALT: () => {\n\t\t// \t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t// \t\t\treturn this.ACTION(() => {\n\t\t// \t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.identifier.test(variable)) {\n\t\t// \t\t\t\t\tthrow new QueryLanguageError(`The value \\$${variable} is not a valid field identifier.`)\n\t\t// \t\t\t\t}\n\t\t// \t\t\t\treturn variable\n\t\t// \t\t\t})\n\t\t// \t\t},\n\t\t// \t},\n\t\t// ])\n\t})\n\n\tprivate identifier: () => string = this.RULE('identifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.Identifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// TODO this is a temporary hack to allow for literals that start with an uppercase letter… 🙈\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate pageName: () => string = this.RULE('pageName', () => {\n\t\tconst parts: string[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Slash,\n\t\t\tDEF: () => parts.push(this.CONSUME(tokens.Identifier).image),\n\t\t})\n\n\t\treturn parts.join('/')\n\t})\n\n\tprivate entityIdentifier: () => EntityName = this.RULE('entityIdentifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.entityIdentifier.test(variable)) {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The value of the variable \\$${variable} is not a valid entity identifier.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate string = this.RULE('string', () => {\n\t\tconst image = this.CONSUME(tokens.StringLiteral).image\n\t\treturn image\n\t\t\t.substring(1, image.length - 1)\n\t\t\t.replace(\"\\\\'\", \"'\")\n\t\t\t.replace(`\\\\\"`, `\"`)\n\t\t\t.replace('\\\\b', '\\b')\n\t\t\t.replace('\\\\f', '\\f')\n\t\t\t.replace('\\\\n', '\\n')\n\t\t\t.replace('\\\\r', '\\r')\n\t\t\t.replace('\\\\t', '\\t')\n\t\t\t.replace('\\\\v', '\\v')\n\t})\n\n\tprivate number = this.RULE('number', () => {\n\t\treturn parseFloat(this.CONSUME(tokens.NumberLiteral).image)\n\t})\n\n\tprivate variable = this.RULE<Environment.ResolvedValue>('variable', () => {\n\t\tthis.CONSUME(tokens.DollarSign)\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (import.meta.env.DEV && variableName === 'rootWhereAsFilter') {\n\t\t\t\tconsole.warn('$rootWhereAsFilter is deprecated, use $rootFilter')\n\t\t\t}\n\t\t\tswitch (variableName) {\n\t\t\t\tcase 'rootWhereAsFilter':\n\t\t\t\tcase 'rootFilter':\n\t\t\t\t\treturn Parser.environment.getSubTree().filter\n\t\t\t}\n\n\t\t\tif (Parser.environment.hasVariable(variableName)) {\n\t\t\t\tconst value = Parser.environment.getVariable(variableName)\n\t\t\t\treturn value instanceof GraphQlBuilder.GraphQlLiteral ? value.value : value\n\t\t\t}\n\t\t\tif (Parser.environment.hasParameter(variableName)) {\n\t\t\t\treturn Parser.environment.getParameter(variableName)\n\t\t\t}\n\t\t\tif (Parser.environment.hasDimension(variableName)) {\n\t\t\t\tconst dimensionValue = Parser.environment.getDimension(variableName)\n\t\t\t\tif (dimensionValue.length > 1) {\n\t\t\t\t\tthrow new BindingError(\n\t\t\t\t\t\t`The variable \\$${variableName} resolved to a dimension which exists but contains ${dimensionValue.length} values. It has to contain exactly one. ` +\n\t\t\t\t\t\t`Perhaps you forgot to set the 'maxItems' prop of your DimensionsSwitcher?`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn dimensionValue[0]\n\t\t\t}\n\n\t\t\tthrow new QueryLanguageError(`Undefined variable \\$${variableName}.`)\n\t\t})\n\t})\n\n\tprivate constructor() {\n\t\tsuper(tokenList, { outputCst: false, maxLookahead: 1 })\n\t\tthis.performSelfAnalysis()\n\t}\n\n\tpublic static parseQueryLanguageExpression<E extends Parser.EntryPoint>(\n\t\tinput: string,\n\t\tentry: E,\n\t\tenvironment: Environment,\n\t): Parser.ParserResult[E] {\n\t\tconst cached = this.cacheStore.get(environment, entry, input)\n\n\t\tif (cached !== undefined) {\n\t\t\treturn cached\n\t\t}\n\n\t\tconst lexingResult = Parser.lexer.tokenize((Parser.rawInput = input))\n\n\t\tif (lexingResult.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to tokenize '${input}'.\\n\\n${lexingResult.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tParser.environment = environment\n\t\tParser.parser.input = lexingResult.tokens\n\n\t\tlet expression: Parser.ParserResult[keyof Parser.ParserResult]\n\n\t\tswitch (entry) {\n\t\t\tcase 'relativeSingleField':\n\t\t\t\texpression = Parser.parser.relativeSingleField()\n\t\t\t\tbreak\n\t\t\tcase 'relativeSingleEntity':\n\t\t\t\texpression = Parser.parser.relativeSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'relativeEntityList':\n\t\t\t\texpression = Parser.parser.relativeEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedEntityList':\n\t\t\t\texpression = Parser.parser.qualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedFieldList':\n\t\t\t\texpression = Parser.parser.qualifiedFieldList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.qualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedEntityList':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'uniqueWhere':\n\t\t\t\texpression = Parser.parser.uniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'filter':\n\t\t\t\texpression = Parser.parser.nonUniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'orderBy':\n\t\t\t\texpression = Parser.parser.orderBy()\n\t\t\t\tbreak\n\t\t\tcase 'taggedMap':\n\t\t\t\texpression = Parser.parser.taggedMap()\n\t\t\t\tbreak\n\t\t\tcase 'columnValue':\n\t\t\t\texpression = Parser.parser.columnValue()\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new QueryLanguageError(`Not implemented entry point '${entry}'`)\n\t\t}\n\n\t\tif (Parser.parser.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to parse '${input}'.\\n\\n${Parser.parser.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tthis.cacheStore.set(environment, entry, input, expression as Parser.ParserResult[E])\n\n\t\treturn expression as Parser.ParserResult[E]\n\t}\n}\n\nnamespace Parser {\n\texport namespace AST {\n\t\texport type FieldWhere = Input.FieldWhere<Condition>\n\n\t\texport type ColumnValue = Input.ColumnValue<GraphQlBuilder.GraphQlLiteral>\n\n\t\texport type Condition = Input.Condition<ColumnValue>\n\n\t\texport type ConditionOperator = keyof Pick<Condition, 'eq' | 'notEq' | 'lt' | 'lte' | 'gt' | 'gte'>\n\t}\n\n\texport interface ParserResult {\n\t\tqualifiedEntityList: ParsedQualifiedEntityList // E.g. Author[age < 123].son.sisters(name = 'Jane')\n\t\tqualifiedFieldList: ParsedQualifiedFieldList // E.g. Author[age < 123].son.sister.name\n\t\tqualifiedSingleEntity: ParsedQualifiedSingleEntity // E.g. Author(id = 123).son.sister\n\t\tunconstrainedQualifiedEntityList: ParsedUnconstrainedQualifiedEntityList // E.g. Author.son.sister\n\t\tunconstrainedQualifiedSingleEntity: ParsedUnconstrainedQualifiedSingleEntity // E.g. Author.son.sister\n\t\trelativeSingleField: ParsedRelativeSingleField // E.g. authors(id = 123).person.name\n\t\trelativeSingleEntity: ParsedRelativeSingleEntity // E.g. localesByLocale(locale.slug = en)\n\t\trelativeEntityList: ParsedRelativeEntityList // E.g. genres(slug = 'sciFi').authors[age < 123]\n\t\tuniqueWhere: UniqueWhere // E.g. (author.mother.id = 123)\n\t\tfilter: Filter // E.g. [author.son.age < 123]\n\t\torderBy: OrderBy // E.g. items.order asc, items.content.name asc\n\t\ttaggedMap: ParsedTaggedMap // E.g editUser(id: $entity.id, foo: 'bar')\n\t\tcolumnValue: AST.ColumnValue\n\t}\n\n\texport type EntryPoint = keyof ParserResult\n}\n\nexport { Parser }\n"],"names":["_Parser","EmbeddedActionsParser","tokenList","tokens","QueryLanguageError","GraphQlBuilder","TokenRegExps","BindingError","Lexer","Environment","CacheStore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Parser.cjs","sources":["../../../../../packages/binding-common/src/queryLanguage/Parser.ts"],"sourcesContent":["import { Input, Writable } from '@contember/client'\nimport { EmbeddedActionsParser, Lexer } from 'chevrotain'\nimport { Environment } from '../environment'\nimport type { EntityName, FieldName, Filter, OrderBy, UniqueWhere } from '../treeParameters'\nimport type {\n\tParsedHasManyRelation,\n\tParsedHasOneRelation,\n\tParsedQualifiedEntityList,\n\tParsedQualifiedFieldList,\n\tParsedQualifiedSingleEntity,\n\tParsedRelativeEntityList,\n\tParsedRelativeSingleEntity,\n\tParsedRelativeSingleField,\n\tParsedTaggedMap,\n\tParsedTaggedMapEntry,\n\tParsedTaggedMapLiteralValue,\n\tParsedTaggedMapVariableValue,\n\tParsedUnconstrainedQualifiedEntityList,\n\tParsedUnconstrainedQualifiedSingleEntity,\n} from './ParserResults'\nimport { CacheStore } from './CacheStore'\nimport { QueryLanguageError } from './QueryLanguageError'\nimport { tokenList, TokenRegExps, tokens } from './tokenList'\nimport { BindingError } from '../BindingError'\n\n/**\n * TODO:\n * \t- double quoted strings\n * \t- collections (objects & lists)\n * \t- collection operators (e.g. 'in', 'notIn', etc.)\n * \t- filtering toOne\n */\nclass Parser extends EmbeddedActionsParser {\n\tprivate static rawInput: string = ''\n\tprivate static lexer = new Lexer(tokenList)\n\tprivate static parser = new Parser()\n\tprivate static environment: Environment = Environment.create()\n\tprivate static cacheStore: CacheStore = new CacheStore()\n\n\tprivate qualifiedEntityList = this.RULE<ParsedQualifiedEntityList>('qualifiedEntityList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedFieldList = this.RULE<ParsedQualifiedFieldList>('qualifiedFieldList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tthis.CONSUME(tokens.Dot)\n\n\t\tconst { hasOneRelationPath, field } = this.SUBRULE(this.relativeSingleField)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfield,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedSingleEntity = this.RULE<ParsedQualifiedSingleEntity>('qualifiedSingleEntity', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\n\t\t// TODO this will probably go away once we support singleton entities\n\t\tconst where = this.SUBRULE(this.uniqueWhere)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\twhere,\n\t\t\thasOneRelationPath,\n\t\t\tfilter,\n\t\t}\n\t})\n\n\tprivate unconstrainedQualifiedEntityList = this.RULE<ParsedUnconstrainedQualifiedEntityList>(\n\t\t'unconstrainedQualifiedEntityList',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate unconstrainedQualifiedSingleEntity = this.RULE<ParsedUnconstrainedQualifiedSingleEntity>(\n\t\t'unconstrainedQualifiedSingleEntity',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate relativeSingleField = this.RULE<ParsedRelativeSingleField>('relativeSingleField', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined || last.filter !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced or filtered, which, grammatically, makes it a relation but a single field is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst field = this.ACTION(() => last.field)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\tfield,\n\t\t}\n\t})\n\n\tprivate relativeSingleEntity = this.RULE<ParsedRelativeSingleEntity>('relativeSingleEntity', () => {\n\t\tconst hasOneRelationPath: ParsedHasOneRelation[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\thasOneRelationPath.push(this.SUBRULE(this.hasOneRelation))\n\t\t\t},\n\t\t})\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate relativeEntityList = this.RULE<ParsedRelativeEntityList>('relativeEntityList', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced, which, grammatically, makes it a has-one relation but a has-many relation is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst hasManyRelation = this.ACTION(\n\t\t\t(): ParsedHasManyRelation => ({\n\t\t\t\tfield: last.field,\n\t\t\t\tfilter: last.filter,\n\t\t\t}),\n\t\t)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\thasManyRelation,\n\t\t}\n\t})\n\n\tprivate hasOneRelation = this.RULE<ParsedHasOneRelation>('hasOneRelation', () => {\n\t\tconst fieldName = this.SUBRULE(this.fieldName)\n\t\tconst reducedBy = this.OPTION(() => this.SUBRULE(this.uniqueWhere))\n\t\tconst filter = this.OPTION1(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst hasOneRelation: ParsedHasOneRelation = {\n\t\t\tfield: fieldName,\n\t\t\tfilter,\n\t\t\treducedBy,\n\t\t}\n\n\t\treturn hasOneRelation\n\t})\n\n\tprivate nonUniqueWhere: () => Filter = this.RULE('nonUniqueWhere', () => {\n\t\tconst cnfWhere: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE(() => {\n\t\t\tthis.CONSUME(tokens.LeftBracket)\n\n\t\t\tcnfWhere.push(this.SUBRULE(this.disjunction))\n\n\t\t\tthis.CONSUME(tokens.RightBracket)\n\t\t})\n\t\tif (cnfWhere.length === 1) {\n\t\t\treturn cnfWhere[0]\n\t\t}\n\t\treturn {\n\t\t\tand: cnfWhere,\n\t\t}\n\t})\n\n\tprivate disjunction: () => Filter = this.RULE('disjunction', () => {\n\t\tconst conjunctions: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Or,\n\t\t\tDEF: () => {\n\t\t\t\tconjunctions.push(this.SUBRULE(this.conjunction))\n\t\t\t},\n\t\t})\n\t\tif (conjunctions.length === 1) {\n\t\t\treturn conjunctions[0]\n\t\t}\n\t\treturn {\n\t\t\tor: conjunctions,\n\t\t}\n\t})\n\n\tprivate conjunction: () => Filter = this.RULE('conjunction', () => {\n\t\tconst negations: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.And,\n\t\t\tDEF: () => {\n\t\t\t\tnegations.push(this.SUBRULE(this.negation))\n\t\t\t},\n\t\t})\n\t\tif (negations.length === 1) {\n\t\t\treturn negations[0]\n\t\t}\n\t\treturn {\n\t\t\tand: negations,\n\t\t}\n\t})\n\n\t// TODO this is to naïve and needs rewriting\n\tprivate negation: () => Filter = this.RULE('negation', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Not)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnot: this.SUBRULE(this.filterGroup),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\treturn this.SUBRULE1(this.filterGroup)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterGroup: () => Filter = this.RULE('filterGroup', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\t\t\t\tconst subFilter = this.SUBRULE(this.disjunction)\n\t\t\t\t\tthis.CONSUME1(tokens.RightParenthesis)\n\t\t\t\t\treturn subFilter\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.filterAtom),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterAtom: () => Filter = this.RULE('filterAtom', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (typeof variable !== 'object') {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`Invalid filter value '${JSON.stringify(variable)}'`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.fieldWhere),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldWhere: () => Parser.AST.FieldWhere = this.RULE('fieldWhere', () => {\n\t\tconst fields: { name: FieldName; modifier?: string }[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\tfields.push(this.SUBRULE(this.fieldIdentifierWithOptionalModifier))\n\t\t\t},\n\t\t})\n\n\t\tconst createFieldWhere = (value: Parser.AST.Condition | Parser.AST.FieldWhere): Parser.AST.FieldWhere => {\n\t\t\treturn this.ACTION(() => {\n\t\t\t\tlet val = value\n\t\t\t\tfor (let i = fields.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst field = fields[i]\n\t\t\t\t\tif (field.modifier === 'none') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (field.modifier === 'all') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: { not: val },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!field.modifier || field.modifier === 'some') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new QueryLanguageError(`Unknown modifier '${field.modifier}', expected 'none', 'some' or 'all'`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn val as Parser.AST.FieldWhere\n\t\t\t})\n\t\t}\n\n\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst condition = this.SUBRULE(this.condition)\n\t\t\t\t\treturn createFieldWhere(condition)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst subWhere = this.SUBRULE(this.nonUniqueWhere)\n\t\t\t\t\treturn createFieldWhere(subWhere)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate condition: () => Parser.AST.Condition = this.RULE('condition', () => {\n\t\tconst operator = this.SUBRULE(this.conditionOperator)\n\t\tconst columnValue = this.SUBRULE(this.columnValue)\n\t\tconst condition: Writable<Parser.AST.Condition> = {}\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (columnValue === null) {\n\t\t\t\tif (operator === 'eq') {\n\t\t\t\t\tcondition.null = true\n\t\t\t\t} else if (operator === 'notEq') {\n\t\t\t\t\tcondition.null = false\n\t\t\t\t} else {\n\t\t\t\t\tthrow new QueryLanguageError(`The null keyword as a right hand operand can only be tested for (in)equality.`)\n\t\t\t\t}\n\t\t\t\treturn condition\n\t\t\t}\n\t\t\tcondition[operator] = columnValue\n\n\t\t\treturn condition\n\t\t})\n\t})\n\n\tprivate conditionOperator: () => Parser.AST.ConditionOperator = this.RULE<Parser.AST.ConditionOperator>(\n\t\t'conditionOperator',\n\t\t() => {\n\t\t\treturn this.OR([\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\t\t\treturn 'eq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.NotEquals)\n\t\t\t\t\t\treturn 'notEq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerThan)\n\t\t\t\t\t\treturn 'lt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerEqual)\n\t\t\t\t\t\treturn 'lte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterThan)\n\t\t\t\t\t\treturn 'gt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterEqual)\n\t\t\t\t\t\treturn 'gte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t},\n\t)\n\n\tprivate columnValue: () => Parser.AST.ColumnValue = this.RULE<Parser.AST.ColumnValue>('columnValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Null)\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.True)\n\t\t\t\t\treturn true\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.False)\n\t\t\t\t\treturn false\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.primaryValue),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate uniqueWhere = this.RULE('uniqueWhere', () => {\n\t\tconst where: Writable<UniqueWhere> = {}\n\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst nestedFields: string[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tnestedFields.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\tconst primaryValue = this.SUBRULE<Input.PrimaryValue>(this.primaryValue)\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet nestedWhere = where\n\t\t\t\t\tfor (let i = 0, len = nestedFields.length; i < len; i++) {\n\t\t\t\t\t\tconst nestedField = nestedFields[i]\n\n\t\t\t\t\t\tconst isLast = len - 1 === i\n\n\t\t\t\t\t\tif (isLast) {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tthrow new QueryLanguageError(`Duplicate '${nestedFields.slice(0, i + 1).join('.')}' field`)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnestedWhere[nestedField] = primaryValue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tconst existingWhere = nestedWhere[nestedField]\n\n\t\t\t\t\t\t\t\tif (typeof existingWhere === 'object') {\n\t\t\t\t\t\t\t\t\tnestedWhere = existingWhere\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t\t\t\t`Malformed expression: cannot simultaneously treat the '${nestedFields\n\t\t\t\t\t\t\t\t\t\t\t.slice(0, i + 1)\n\t\t\t\t\t\t\t\t\t\t\t.join('.')}' ` + `field as a scalar as well as a relation.`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst newWhere = {}\n\t\t\t\t\t\t\t\tnestedWhere[nestedField] = newWhere\n\t\t\t\t\t\t\t\tnestedWhere = newWhere\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn where\n\t})\n\n\tprivate orderBy: () => Input.OrderBy<`${Input.OrderDirection}`>[] = this.RULE<\n\t\tInput.OrderBy<`${Input.OrderDirection}`>[]\n\t>('orderBy', () => {\n\t\tconst order: Input.OrderBy<`${Input.OrderDirection}`>[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst fieldNames: FieldName[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tfieldNames.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst literal = this.OPTION(() => this.SUBRULE1(this.identifier))\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet orderDirection: `${Input.OrderDirection}`\n\t\t\t\t\tif (literal) {\n\t\t\t\t\t\tif (literal !== 'asc' && literal !== 'desc' && literal !== 'ascNullsFirst' && literal !== 'descNullsLast') {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The only valid order directions are 'asc', 'desc', 'ascNullsFirst' and 'descNullsLast'.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\torderDirection = literal\n\t\t\t\t\t} else {\n\t\t\t\t\t\torderDirection = 'asc'\n\t\t\t\t\t}\n\t\t\t\t\tlet orderBy: Input.FieldOrderBy<`${Input.OrderDirection}`> = orderDirection\n\n\t\t\t\t\tfor (let i = fieldNames.length - 1; i >= 0; i--) {\n\t\t\t\t\t\torderBy = { [fieldNames[i]]: orderBy }\n\t\t\t\t\t}\n\t\t\t\t\torder.push(orderBy as Input.OrderBy<`${Input.OrderDirection}`>)\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\treturn order\n\t})\n\n\tprivate taggedMap: () => ParsedTaggedMap = this.RULE<ParsedTaggedMap>('taggedMap', () => {\n\t\tconst name = this.SUBRULE(this.pageName)\n\t\treturn {\n\t\t\tname,\n\t\t\tentries: this.OPTION(() => this.SUBRULE(this.taggedMapEntries)) ?? [],\n\t\t}\n\t})\n\n\tprivate taggedMapEntries: () => ParsedTaggedMapEntry[] = this.RULE<ParsedTaggedMapEntry[]>('taggedMapEntries', () => {\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tconst entries: ParsedTaggedMapEntry[] = []\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => entries.push(this.SUBRULE(this.taggedMapEntry)),\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn entries\n\t})\n\n\tprivate taggedMapEntry: () => ParsedTaggedMapEntry = this.RULE<ParsedTaggedMapEntry>('taggedMapEntry', () => {\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\t\tthis.CONSUME1(tokens.Colon)\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapLiteralValue),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapVariableValue),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\tkey: variableName,\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapLiteralValue: () => ParsedTaggedMapLiteralValue = this.RULE<ParsedTaggedMapLiteralValue>('taggedMapLiteralValue', () => {\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\ttype: 'literal',\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapVariableValue: () => ParsedTaggedMapVariableValue = this.RULE<ParsedTaggedMapVariableValue>('taggedMapVariableValue', () => {\n\t\tconst start = this.CONSUME(tokens.DollarSign)\n\t\tthis.SUBRULE(this.relativeSingleField)\n\t\tconst end = this.LA(0)\n\t\tconst field = this.input.slice(this.input.indexOf(start) + 1, this.input.indexOf(end) + 1).map(it => it.image).join('')\n\n\t\treturn {\n\t\t\ttype: 'variable',\n\t\t\tvalue: field,\n\t\t}\n\t})\n\n\n\tprivate fieldName: () => FieldName = this.RULE<FieldName>('fieldName', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.fieldIdentifier),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate primaryValue = this.RULE<Input.PrimaryValue>('primaryValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.identifier),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variableValue = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof variableValue === 'string' ||\n\t\t\t\t\t\t\ttypeof variableValue === 'number'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn variableValue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t`A variable can resolve to a literal, string or a number, not ${typeof variableValue}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldIdentifierWithOptionalModifier: () => { name: FieldName; modifier?: string } = this.RULE('fieldIdentifierWithOptionalModifier', () => {\n\t\tconst fieldIdentifier = this.SUBRULE1(this.fieldIdentifier)\n\t\tconst modifier = this.OPTION(() => {\n\t\t\tthis.CONSUME(tokens.Colon)\n\t\t\treturn this.SUBRULE(this.identifier)\n\t\t})\n\t\treturn { name: fieldIdentifier, modifier }\n\t})\n\n\tprivate fieldIdentifier: () => FieldName = this.RULE('fieldIdentifier', () => {\n\t\treturn this.SUBRULE(this.identifier)\n\t\t// return this.OR([\n\t\t// \t{\n\t\t// \t\tALT: () => this.SUBRULE(this.identifier),\n\t\t// \t},\n\t\t// \t{\n\t\t// \t\tALT: () => {\n\t\t// \t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t// \t\t\treturn this.ACTION(() => {\n\t\t// \t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.identifier.test(variable)) {\n\t\t// \t\t\t\t\tthrow new QueryLanguageError(`The value \\$${variable} is not a valid field identifier.`)\n\t\t// \t\t\t\t}\n\t\t// \t\t\t\treturn variable\n\t\t// \t\t\t})\n\t\t// \t\t},\n\t\t// \t},\n\t\t// ])\n\t})\n\n\tprivate identifier: () => string = this.RULE('identifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.Identifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// TODO this is a temporary hack to allow for literals that start with an uppercase letter… 🙈\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate pageName: () => string = this.RULE('pageName', () => {\n\t\tconst parts: string[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Slash,\n\t\t\tDEF: () => parts.push(this.CONSUME(tokens.Identifier).image),\n\t\t})\n\n\t\treturn parts.join('/')\n\t})\n\n\tprivate entityIdentifier: () => EntityName = this.RULE('entityIdentifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.entityIdentifier.test(variable)) {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The value of the variable \\$${variable} is not a valid entity identifier.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate string = this.RULE('string', () => {\n\t\tconst image = this.CONSUME(tokens.StringLiteral).image\n\t\treturn image\n\t\t\t.substring(1, image.length - 1)\n\t\t\t.replace(\"\\\\'\", \"'\")\n\t\t\t.replace(`\\\\\"`, `\"`)\n\t\t\t.replace('\\\\b', '\\b')\n\t\t\t.replace('\\\\f', '\\f')\n\t\t\t.replace('\\\\n', '\\n')\n\t\t\t.replace('\\\\r', '\\r')\n\t\t\t.replace('\\\\t', '\\t')\n\t\t\t.replace('\\\\v', '\\v')\n\t})\n\n\tprivate number = this.RULE('number', () => {\n\t\treturn parseFloat(this.CONSUME(tokens.NumberLiteral).image)\n\t})\n\n\tprivate variable = this.RULE<Environment.ResolvedValue>('variable', () => {\n\t\tthis.CONSUME(tokens.DollarSign)\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (import.meta.env.DEV && variableName === 'rootWhereAsFilter') {\n\t\t\t\tconsole.warn('$rootWhereAsFilter is deprecated, use $rootFilter')\n\t\t\t}\n\t\t\tswitch (variableName) {\n\t\t\t\tcase 'rootWhereAsFilter':\n\t\t\t\tcase 'rootFilter':\n\t\t\t\t\treturn Parser.environment.getSubTree().filter\n\t\t\t}\n\n\t\t\tif (Parser.environment.hasVariable(variableName)) {\n\t\t\t\treturn Parser.environment.getVariable(variableName)\n\t\t\t}\n\t\t\tif (Parser.environment.hasParameter(variableName)) {\n\t\t\t\treturn Parser.environment.getParameter(variableName)\n\t\t\t}\n\t\t\tif (Parser.environment.hasDimension(variableName)) {\n\t\t\t\tconst dimensionValue = Parser.environment.getDimension(variableName)\n\t\t\t\tif (dimensionValue.length > 1) {\n\t\t\t\t\tthrow new BindingError(\n\t\t\t\t\t\t`The variable \\$${variableName} resolved to a dimension which exists but contains ${dimensionValue.length} values. It has to contain exactly one. ` +\n\t\t\t\t\t\t`Perhaps you forgot to set the 'maxItems' prop of your DimensionsSwitcher?`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn dimensionValue[0]\n\t\t\t}\n\n\t\t\tthrow new QueryLanguageError(`Undefined variable \\$${variableName}.`)\n\t\t})\n\t})\n\n\tprivate constructor() {\n\t\tsuper(tokenList, { outputCst: false, maxLookahead: 1 })\n\t\tthis.performSelfAnalysis()\n\t}\n\n\tpublic static parseQueryLanguageExpression<E extends Parser.EntryPoint>(\n\t\tinput: string,\n\t\tentry: E,\n\t\tenvironment: Environment,\n\t): Parser.ParserResult[E] {\n\t\tconst cached = this.cacheStore.get(environment, entry, input)\n\n\t\tif (cached !== undefined) {\n\t\t\treturn cached\n\t\t}\n\n\t\tconst lexingResult = Parser.lexer.tokenize((Parser.rawInput = input))\n\n\t\tif (lexingResult.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to tokenize '${input}'.\\n\\n${lexingResult.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tParser.environment = environment\n\t\tParser.parser.input = lexingResult.tokens\n\n\t\tlet expression: Parser.ParserResult[keyof Parser.ParserResult]\n\n\t\tswitch (entry) {\n\t\t\tcase 'relativeSingleField':\n\t\t\t\texpression = Parser.parser.relativeSingleField()\n\t\t\t\tbreak\n\t\t\tcase 'relativeSingleEntity':\n\t\t\t\texpression = Parser.parser.relativeSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'relativeEntityList':\n\t\t\t\texpression = Parser.parser.relativeEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedEntityList':\n\t\t\t\texpression = Parser.parser.qualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedFieldList':\n\t\t\t\texpression = Parser.parser.qualifiedFieldList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.qualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedEntityList':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'uniqueWhere':\n\t\t\t\texpression = Parser.parser.uniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'filter':\n\t\t\t\texpression = Parser.parser.nonUniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'orderBy':\n\t\t\t\texpression = Parser.parser.orderBy()\n\t\t\t\tbreak\n\t\t\tcase 'taggedMap':\n\t\t\t\texpression = Parser.parser.taggedMap()\n\t\t\t\tbreak\n\t\t\tcase 'columnValue':\n\t\t\t\texpression = Parser.parser.columnValue()\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new QueryLanguageError(`Not implemented entry point '${entry}'`)\n\t\t}\n\n\t\tif (Parser.parser.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to parse '${input}'.\\n\\n${Parser.parser.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tthis.cacheStore.set(environment, entry, input, expression as Parser.ParserResult[E])\n\n\t\treturn expression as Parser.ParserResult[E]\n\t}\n}\n\nnamespace Parser {\n\texport namespace AST {\n\t\texport type FieldWhere = Input.FieldWhere<Condition>\n\n\t\texport type ColumnValue = Input.ColumnValue\n\n\t\texport type Condition = Input.Condition<ColumnValue>\n\n\t\texport type ConditionOperator = keyof Pick<Condition, 'eq' | 'notEq' | 'lt' | 'lte' | 'gt' | 'gte'>\n\t}\n\n\texport interface ParserResult {\n\t\tqualifiedEntityList: ParsedQualifiedEntityList // E.g. Author[age < 123].son.sisters(name = 'Jane')\n\t\tqualifiedFieldList: ParsedQualifiedFieldList // E.g. Author[age < 123].son.sister.name\n\t\tqualifiedSingleEntity: ParsedQualifiedSingleEntity // E.g. Author(id = 123).son.sister\n\t\tunconstrainedQualifiedEntityList: ParsedUnconstrainedQualifiedEntityList // E.g. Author.son.sister\n\t\tunconstrainedQualifiedSingleEntity: ParsedUnconstrainedQualifiedSingleEntity // E.g. Author.son.sister\n\t\trelativeSingleField: ParsedRelativeSingleField // E.g. authors(id = 123).person.name\n\t\trelativeSingleEntity: ParsedRelativeSingleEntity // E.g. localesByLocale(locale.slug = en)\n\t\trelativeEntityList: ParsedRelativeEntityList // E.g. genres(slug = 'sciFi').authors[age < 123]\n\t\tuniqueWhere: UniqueWhere // E.g. (author.mother.id = 123)\n\t\tfilter: Filter // E.g. [author.son.age < 123]\n\t\torderBy: OrderBy // E.g. items.order asc, items.content.name asc\n\t\ttaggedMap: ParsedTaggedMap // E.g editUser(id: $entity.id, foo: 'bar')\n\t\tcolumnValue: AST.ColumnValue\n\t}\n\n\texport type EntryPoint = keyof ParserResult\n}\n\nexport { Parser }\n"],"names":["_Parser","EmbeddedActionsParser","tokenList","tokens","QueryLanguageError","TokenRegExps","BindingError","Lexer","Environment","CacheStore"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { GraphQlBuilder } from "@contember/client";
|
|
2
1
|
import { Lexer, EmbeddedActionsParser } from "chevrotain";
|
|
3
2
|
import { CacheStore } from "./CacheStore.js";
|
|
4
3
|
import { QueryLanguageError } from "./QueryLanguageError.js";
|
|
@@ -233,7 +232,7 @@ const _Parser = class _Parser2 extends EmbeddedActionsParser {
|
|
|
233
232
|
ALT: () => {
|
|
234
233
|
const variable = this.SUBRULE(this.variable);
|
|
235
234
|
return this.ACTION(() => {
|
|
236
|
-
if (typeof variable !== "object"
|
|
235
|
+
if (typeof variable !== "object") {
|
|
237
236
|
throw new QueryLanguageError(`Invalid filter value '${JSON.stringify(variable)}'`);
|
|
238
237
|
}
|
|
239
238
|
return variable;
|
|
@@ -411,7 +410,7 @@ const _Parser = class _Parser2 extends EmbeddedActionsParser {
|
|
|
411
410
|
} else {
|
|
412
411
|
if (nestedField in nestedWhere) {
|
|
413
412
|
const existingWhere = nestedWhere[nestedField];
|
|
414
|
-
if (typeof existingWhere === "object"
|
|
413
|
+
if (typeof existingWhere === "object") {
|
|
415
414
|
nestedWhere = existingWhere;
|
|
416
415
|
} else {
|
|
417
416
|
throw new QueryLanguageError(
|
|
@@ -543,7 +542,7 @@ const _Parser = class _Parser2 extends EmbeddedActionsParser {
|
|
|
543
542
|
ALT: () => {
|
|
544
543
|
const variableValue = this.SUBRULE(this.variable);
|
|
545
544
|
return this.ACTION(() => {
|
|
546
|
-
if (typeof variableValue === "string" || typeof variableValue === "number"
|
|
545
|
+
if (typeof variableValue === "string" || typeof variableValue === "number") {
|
|
547
546
|
return variableValue;
|
|
548
547
|
}
|
|
549
548
|
throw new QueryLanguageError(
|
|
@@ -622,8 +621,7 @@ const _Parser = class _Parser2 extends EmbeddedActionsParser {
|
|
|
622
621
|
return _Parser2.environment.getSubTree().filter;
|
|
623
622
|
}
|
|
624
623
|
if (_Parser2.environment.hasVariable(variableName)) {
|
|
625
|
-
|
|
626
|
-
return value instanceof GraphQlBuilder.GraphQlLiteral ? value.value : value;
|
|
624
|
+
return _Parser2.environment.getVariable(variableName);
|
|
627
625
|
}
|
|
628
626
|
if (_Parser2.environment.hasParameter(variableName)) {
|
|
629
627
|
return _Parser2.environment.getParameter(variableName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parser.js","sources":["../../../../../packages/binding-common/src/queryLanguage/Parser.ts"],"sourcesContent":["import { GraphQlBuilder, Input, Writable } from '@contember/client'\nimport { EmbeddedActionsParser, Lexer } from 'chevrotain'\nimport { Environment } from '../environment'\nimport type { EntityName, FieldName, Filter, OrderBy, UniqueWhere } from '../treeParameters'\nimport type {\n\tParsedHasManyRelation,\n\tParsedHasOneRelation,\n\tParsedQualifiedEntityList,\n\tParsedQualifiedFieldList,\n\tParsedQualifiedSingleEntity,\n\tParsedRelativeEntityList,\n\tParsedRelativeSingleEntity,\n\tParsedRelativeSingleField,\n\tParsedTaggedMap,\n\tParsedTaggedMapEntry,\n\tParsedTaggedMapLiteralValue,\n\tParsedTaggedMapVariableValue,\n\tParsedUnconstrainedQualifiedEntityList,\n\tParsedUnconstrainedQualifiedSingleEntity,\n} from './ParserResults'\nimport { CacheStore } from './CacheStore'\nimport { QueryLanguageError } from './QueryLanguageError'\nimport { tokenList, TokenRegExps, tokens } from './tokenList'\nimport { BindingError } from '../BindingError'\n\n/**\n * TODO:\n * \t- double quoted strings\n * \t- collections (objects & lists)\n * \t- collection operators (e.g. 'in', 'notIn', etc.)\n * \t- filtering toOne\n */\nclass Parser extends EmbeddedActionsParser {\n\tprivate static rawInput: string = ''\n\tprivate static lexer = new Lexer(tokenList)\n\tprivate static parser = new Parser()\n\tprivate static environment: Environment = Environment.create()\n\tprivate static cacheStore: CacheStore = new CacheStore()\n\n\tprivate qualifiedEntityList = this.RULE<ParsedQualifiedEntityList>('qualifiedEntityList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedFieldList = this.RULE<ParsedQualifiedFieldList>('qualifiedFieldList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tthis.CONSUME(tokens.Dot)\n\n\t\tconst { hasOneRelationPath, field } = this.SUBRULE(this.relativeSingleField)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfield,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedSingleEntity = this.RULE<ParsedQualifiedSingleEntity>('qualifiedSingleEntity', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\n\t\t// TODO this will probably go away once we support singleton entities\n\t\tconst where = this.SUBRULE(this.uniqueWhere)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\twhere,\n\t\t\thasOneRelationPath,\n\t\t\tfilter,\n\t\t}\n\t})\n\n\tprivate unconstrainedQualifiedEntityList = this.RULE<ParsedUnconstrainedQualifiedEntityList>(\n\t\t'unconstrainedQualifiedEntityList',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate unconstrainedQualifiedSingleEntity = this.RULE<ParsedUnconstrainedQualifiedSingleEntity>(\n\t\t'unconstrainedQualifiedSingleEntity',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate relativeSingleField = this.RULE<ParsedRelativeSingleField>('relativeSingleField', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined || last.filter !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced or filtered, which, grammatically, makes it a relation but a single field is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst field = this.ACTION(() => last.field)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\tfield,\n\t\t}\n\t})\n\n\tprivate relativeSingleEntity = this.RULE<ParsedRelativeSingleEntity>('relativeSingleEntity', () => {\n\t\tconst hasOneRelationPath: ParsedHasOneRelation[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\thasOneRelationPath.push(this.SUBRULE(this.hasOneRelation))\n\t\t\t},\n\t\t})\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate relativeEntityList = this.RULE<ParsedRelativeEntityList>('relativeEntityList', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced, which, grammatically, makes it a has-one relation but a has-many relation is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst hasManyRelation = this.ACTION(\n\t\t\t(): ParsedHasManyRelation => ({\n\t\t\t\tfield: last.field,\n\t\t\t\tfilter: last.filter,\n\t\t\t}),\n\t\t)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\thasManyRelation,\n\t\t}\n\t})\n\n\tprivate hasOneRelation = this.RULE<ParsedHasOneRelation>('hasOneRelation', () => {\n\t\tconst fieldName = this.SUBRULE(this.fieldName)\n\t\tconst reducedBy = this.OPTION(() => this.SUBRULE(this.uniqueWhere))\n\t\tconst filter = this.OPTION1(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst hasOneRelation: ParsedHasOneRelation = {\n\t\t\tfield: fieldName,\n\t\t\tfilter,\n\t\t\treducedBy,\n\t\t}\n\n\t\treturn hasOneRelation\n\t})\n\n\tprivate nonUniqueWhere: () => Filter = this.RULE('nonUniqueWhere', () => {\n\t\tconst cnfWhere: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE(() => {\n\t\t\tthis.CONSUME(tokens.LeftBracket)\n\n\t\t\tcnfWhere.push(this.SUBRULE(this.disjunction))\n\n\t\t\tthis.CONSUME(tokens.RightBracket)\n\t\t})\n\t\tif (cnfWhere.length === 1) {\n\t\t\treturn cnfWhere[0]\n\t\t}\n\t\treturn {\n\t\t\tand: cnfWhere,\n\t\t}\n\t})\n\n\tprivate disjunction: () => Filter = this.RULE('disjunction', () => {\n\t\tconst conjunctions: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Or,\n\t\t\tDEF: () => {\n\t\t\t\tconjunctions.push(this.SUBRULE(this.conjunction))\n\t\t\t},\n\t\t})\n\t\tif (conjunctions.length === 1) {\n\t\t\treturn conjunctions[0]\n\t\t}\n\t\treturn {\n\t\t\tor: conjunctions,\n\t\t}\n\t})\n\n\tprivate conjunction: () => Filter = this.RULE('conjunction', () => {\n\t\tconst negations: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.And,\n\t\t\tDEF: () => {\n\t\t\t\tnegations.push(this.SUBRULE(this.negation))\n\t\t\t},\n\t\t})\n\t\tif (negations.length === 1) {\n\t\t\treturn negations[0]\n\t\t}\n\t\treturn {\n\t\t\tand: negations,\n\t\t}\n\t})\n\n\t// TODO this is to naïve and needs rewriting\n\tprivate negation: () => Filter = this.RULE('negation', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Not)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnot: this.SUBRULE(this.filterGroup),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\treturn this.SUBRULE1(this.filterGroup)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterGroup: () => Filter = this.RULE('filterGroup', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\t\t\t\tconst subFilter = this.SUBRULE(this.disjunction)\n\t\t\t\t\tthis.CONSUME1(tokens.RightParenthesis)\n\t\t\t\t\treturn subFilter\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.filterAtom),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterAtom: () => Filter = this.RULE('filterAtom', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (typeof variable !== 'object' || variable instanceof GraphQlBuilder.GraphQlLiteral) {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`Invalid filter value '${JSON.stringify(variable)}'`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.fieldWhere),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldWhere: () => Parser.AST.FieldWhere = this.RULE('fieldWhere', () => {\n\t\tconst fields: { name: FieldName; modifier?: string }[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\tfields.push(this.SUBRULE(this.fieldIdentifierWithOptionalModifier))\n\t\t\t},\n\t\t})\n\n\t\tconst createFieldWhere = (value: Parser.AST.Condition | Parser.AST.FieldWhere): Parser.AST.FieldWhere => {\n\t\t\treturn this.ACTION(() => {\n\t\t\t\tlet val = value\n\t\t\t\tfor (let i = fields.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst field = fields[i]\n\t\t\t\t\tif (field.modifier === 'none') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (field.modifier === 'all') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: { not: val },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!field.modifier || field.modifier === 'some') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new QueryLanguageError(`Unknown modifier '${field.modifier}', expected 'none', 'some' or 'all'`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn val as Parser.AST.FieldWhere\n\t\t\t})\n\t\t}\n\n\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst condition = this.SUBRULE(this.condition)\n\t\t\t\t\treturn createFieldWhere(condition)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst subWhere = this.SUBRULE(this.nonUniqueWhere)\n\t\t\t\t\treturn createFieldWhere(subWhere)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate condition: () => Parser.AST.Condition = this.RULE('condition', () => {\n\t\tconst operator = this.SUBRULE(this.conditionOperator)\n\t\tconst columnValue = this.SUBRULE(this.columnValue)\n\t\tconst condition: Writable<Parser.AST.Condition> = {}\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (columnValue === null) {\n\t\t\t\tif (operator === 'eq') {\n\t\t\t\t\tcondition.null = true\n\t\t\t\t} else if (operator === 'notEq') {\n\t\t\t\t\tcondition.null = false\n\t\t\t\t} else {\n\t\t\t\t\tthrow new QueryLanguageError(`The null keyword as a right hand operand can only be tested for (in)equality.`)\n\t\t\t\t}\n\t\t\t\treturn condition\n\t\t\t}\n\t\t\tcondition[operator] = columnValue\n\n\t\t\treturn condition\n\t\t})\n\t})\n\n\tprivate conditionOperator: () => Parser.AST.ConditionOperator = this.RULE<Parser.AST.ConditionOperator>(\n\t\t'conditionOperator',\n\t\t() => {\n\t\t\treturn this.OR([\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\t\t\treturn 'eq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.NotEquals)\n\t\t\t\t\t\treturn 'notEq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerThan)\n\t\t\t\t\t\treturn 'lt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerEqual)\n\t\t\t\t\t\treturn 'lte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterThan)\n\t\t\t\t\t\treturn 'gt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterEqual)\n\t\t\t\t\t\treturn 'gte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t},\n\t)\n\n\tprivate columnValue: () => Parser.AST.ColumnValue = this.RULE<Parser.AST.ColumnValue>('columnValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Null)\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.True)\n\t\t\t\t\treturn true\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.False)\n\t\t\t\t\treturn false\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.primaryValue),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate uniqueWhere = this.RULE('uniqueWhere', () => {\n\t\tconst where: Writable<UniqueWhere> = {}\n\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst nestedFields: string[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tnestedFields.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\tconst primaryValue = this.SUBRULE<Input.PrimaryValue<GraphQlBuilder.GraphQlLiteral>>(this.primaryValue)\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet nestedWhere = where\n\t\t\t\t\tfor (let i = 0, len = nestedFields.length; i < len; i++) {\n\t\t\t\t\t\tconst nestedField = nestedFields[i]\n\n\t\t\t\t\t\tconst isLast = len - 1 === i\n\n\t\t\t\t\t\tif (isLast) {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tthrow new QueryLanguageError(`Duplicate '${nestedFields.slice(0, i + 1).join('.')}' field`)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnestedWhere[nestedField] = primaryValue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tconst existingWhere = nestedWhere[nestedField]\n\n\t\t\t\t\t\t\t\tif (typeof existingWhere === 'object' && !(existingWhere instanceof GraphQlBuilder.GraphQlLiteral)) {\n\t\t\t\t\t\t\t\t\tnestedWhere = existingWhere\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t\t\t\t`Malformed expression: cannot simultaneously treat the '${nestedFields\n\t\t\t\t\t\t\t\t\t\t\t.slice(0, i + 1)\n\t\t\t\t\t\t\t\t\t\t\t.join('.')}' ` + `field as a scalar as well as a relation.`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst newWhere = {}\n\t\t\t\t\t\t\t\tnestedWhere[nestedField] = newWhere\n\t\t\t\t\t\t\t\tnestedWhere = newWhere\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn where\n\t})\n\n\tprivate orderBy: () => Input.OrderBy<`${Input.OrderDirection}`>[] = this.RULE<\n\t\tInput.OrderBy<`${Input.OrderDirection}`>[]\n\t>('orderBy', () => {\n\t\tconst order: Input.OrderBy<`${Input.OrderDirection}`>[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst fieldNames: FieldName[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tfieldNames.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst literal = this.OPTION(() => this.SUBRULE1(this.identifier))\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet orderDirection: `${Input.OrderDirection}`\n\t\t\t\t\tif (literal) {\n\t\t\t\t\t\tif (literal !== 'asc' && literal !== 'desc' && literal !== 'ascNullsFirst' && literal !== 'descNullsLast') {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The only valid order directions are 'asc', 'desc', 'ascNullsFirst' and 'descNullsLast'.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\torderDirection = literal\n\t\t\t\t\t} else {\n\t\t\t\t\t\torderDirection = 'asc'\n\t\t\t\t\t}\n\t\t\t\t\tlet orderBy: Input.FieldOrderBy<`${Input.OrderDirection}`> = orderDirection\n\n\t\t\t\t\tfor (let i = fieldNames.length - 1; i >= 0; i--) {\n\t\t\t\t\t\torderBy = { [fieldNames[i]]: orderBy }\n\t\t\t\t\t}\n\t\t\t\t\torder.push(orderBy as Input.OrderBy<`${Input.OrderDirection}`>)\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\treturn order\n\t})\n\n\tprivate taggedMap: () => ParsedTaggedMap = this.RULE<ParsedTaggedMap>('taggedMap', () => {\n\t\tconst name = this.SUBRULE(this.pageName)\n\t\treturn {\n\t\t\tname,\n\t\t\tentries: this.OPTION(() => this.SUBRULE(this.taggedMapEntries)) ?? [],\n\t\t}\n\t})\n\n\tprivate taggedMapEntries: () => ParsedTaggedMapEntry[] = this.RULE<ParsedTaggedMapEntry[]>('taggedMapEntries', () => {\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tconst entries: ParsedTaggedMapEntry[] = []\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => entries.push(this.SUBRULE(this.taggedMapEntry)),\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn entries\n\t})\n\n\tprivate taggedMapEntry: () => ParsedTaggedMapEntry = this.RULE<ParsedTaggedMapEntry>('taggedMapEntry', () => {\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\t\tthis.CONSUME1(tokens.Colon)\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapLiteralValue),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapVariableValue),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\tkey: variableName,\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapLiteralValue: () => ParsedTaggedMapLiteralValue = this.RULE<ParsedTaggedMapLiteralValue>('taggedMapLiteralValue', () => {\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\ttype: 'literal',\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapVariableValue: () => ParsedTaggedMapVariableValue = this.RULE<ParsedTaggedMapVariableValue>('taggedMapVariableValue', () => {\n\t\tconst start = this.CONSUME(tokens.DollarSign)\n\t\tthis.SUBRULE(this.relativeSingleField)\n\t\tconst end = this.LA(0)\n\t\tconst field = this.input.slice(this.input.indexOf(start) + 1, this.input.indexOf(end) + 1).map(it => it.image).join('')\n\n\t\treturn {\n\t\t\ttype: 'variable',\n\t\t\tvalue: field,\n\t\t}\n\t})\n\n\n\tprivate fieldName: () => FieldName = this.RULE<FieldName>('fieldName', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.fieldIdentifier),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate primaryValue = this.RULE<Input.PrimaryValue<GraphQlBuilder.GraphQlLiteral>>('primaryValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.identifier),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variableValue = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof variableValue === 'string' ||\n\t\t\t\t\t\t\ttypeof variableValue === 'number' ||\n\t\t\t\t\t\t\tvariableValue instanceof GraphQlBuilder.GraphQlLiteral\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn variableValue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t`A variable can resolve to a literal, string or a number, not ${typeof variableValue}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldIdentifierWithOptionalModifier: () => { name: FieldName; modifier?: string } = this.RULE('fieldIdentifierWithOptionalModifier', () => {\n\t\tconst fieldIdentifier = this.SUBRULE1(this.fieldIdentifier)\n\t\tconst modifier = this.OPTION(() => {\n\t\t\tthis.CONSUME(tokens.Colon)\n\t\t\treturn this.SUBRULE(this.identifier)\n\t\t})\n\t\treturn { name: fieldIdentifier, modifier }\n\t})\n\n\tprivate fieldIdentifier: () => FieldName = this.RULE('fieldIdentifier', () => {\n\t\treturn this.SUBRULE(this.identifier)\n\t\t// return this.OR([\n\t\t// \t{\n\t\t// \t\tALT: () => this.SUBRULE(this.identifier),\n\t\t// \t},\n\t\t// \t{\n\t\t// \t\tALT: () => {\n\t\t// \t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t// \t\t\treturn this.ACTION(() => {\n\t\t// \t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.identifier.test(variable)) {\n\t\t// \t\t\t\t\tthrow new QueryLanguageError(`The value \\$${variable} is not a valid field identifier.`)\n\t\t// \t\t\t\t}\n\t\t// \t\t\t\treturn variable\n\t\t// \t\t\t})\n\t\t// \t\t},\n\t\t// \t},\n\t\t// ])\n\t})\n\n\tprivate identifier: () => string = this.RULE('identifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.Identifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// TODO this is a temporary hack to allow for literals that start with an uppercase letter… 🙈\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate pageName: () => string = this.RULE('pageName', () => {\n\t\tconst parts: string[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Slash,\n\t\t\tDEF: () => parts.push(this.CONSUME(tokens.Identifier).image),\n\t\t})\n\n\t\treturn parts.join('/')\n\t})\n\n\tprivate entityIdentifier: () => EntityName = this.RULE('entityIdentifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.entityIdentifier.test(variable)) {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The value of the variable \\$${variable} is not a valid entity identifier.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate string = this.RULE('string', () => {\n\t\tconst image = this.CONSUME(tokens.StringLiteral).image\n\t\treturn image\n\t\t\t.substring(1, image.length - 1)\n\t\t\t.replace(\"\\\\'\", \"'\")\n\t\t\t.replace(`\\\\\"`, `\"`)\n\t\t\t.replace('\\\\b', '\\b')\n\t\t\t.replace('\\\\f', '\\f')\n\t\t\t.replace('\\\\n', '\\n')\n\t\t\t.replace('\\\\r', '\\r')\n\t\t\t.replace('\\\\t', '\\t')\n\t\t\t.replace('\\\\v', '\\v')\n\t})\n\n\tprivate number = this.RULE('number', () => {\n\t\treturn parseFloat(this.CONSUME(tokens.NumberLiteral).image)\n\t})\n\n\tprivate variable = this.RULE<Environment.ResolvedValue>('variable', () => {\n\t\tthis.CONSUME(tokens.DollarSign)\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (import.meta.env.DEV && variableName === 'rootWhereAsFilter') {\n\t\t\t\tconsole.warn('$rootWhereAsFilter is deprecated, use $rootFilter')\n\t\t\t}\n\t\t\tswitch (variableName) {\n\t\t\t\tcase 'rootWhereAsFilter':\n\t\t\t\tcase 'rootFilter':\n\t\t\t\t\treturn Parser.environment.getSubTree().filter\n\t\t\t}\n\n\t\t\tif (Parser.environment.hasVariable(variableName)) {\n\t\t\t\tconst value = Parser.environment.getVariable(variableName)\n\t\t\t\treturn value instanceof GraphQlBuilder.GraphQlLiteral ? value.value : value\n\t\t\t}\n\t\t\tif (Parser.environment.hasParameter(variableName)) {\n\t\t\t\treturn Parser.environment.getParameter(variableName)\n\t\t\t}\n\t\t\tif (Parser.environment.hasDimension(variableName)) {\n\t\t\t\tconst dimensionValue = Parser.environment.getDimension(variableName)\n\t\t\t\tif (dimensionValue.length > 1) {\n\t\t\t\t\tthrow new BindingError(\n\t\t\t\t\t\t`The variable \\$${variableName} resolved to a dimension which exists but contains ${dimensionValue.length} values. It has to contain exactly one. ` +\n\t\t\t\t\t\t`Perhaps you forgot to set the 'maxItems' prop of your DimensionsSwitcher?`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn dimensionValue[0]\n\t\t\t}\n\n\t\t\tthrow new QueryLanguageError(`Undefined variable \\$${variableName}.`)\n\t\t})\n\t})\n\n\tprivate constructor() {\n\t\tsuper(tokenList, { outputCst: false, maxLookahead: 1 })\n\t\tthis.performSelfAnalysis()\n\t}\n\n\tpublic static parseQueryLanguageExpression<E extends Parser.EntryPoint>(\n\t\tinput: string,\n\t\tentry: E,\n\t\tenvironment: Environment,\n\t): Parser.ParserResult[E] {\n\t\tconst cached = this.cacheStore.get(environment, entry, input)\n\n\t\tif (cached !== undefined) {\n\t\t\treturn cached\n\t\t}\n\n\t\tconst lexingResult = Parser.lexer.tokenize((Parser.rawInput = input))\n\n\t\tif (lexingResult.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to tokenize '${input}'.\\n\\n${lexingResult.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tParser.environment = environment\n\t\tParser.parser.input = lexingResult.tokens\n\n\t\tlet expression: Parser.ParserResult[keyof Parser.ParserResult]\n\n\t\tswitch (entry) {\n\t\t\tcase 'relativeSingleField':\n\t\t\t\texpression = Parser.parser.relativeSingleField()\n\t\t\t\tbreak\n\t\t\tcase 'relativeSingleEntity':\n\t\t\t\texpression = Parser.parser.relativeSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'relativeEntityList':\n\t\t\t\texpression = Parser.parser.relativeEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedEntityList':\n\t\t\t\texpression = Parser.parser.qualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedFieldList':\n\t\t\t\texpression = Parser.parser.qualifiedFieldList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.qualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedEntityList':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'uniqueWhere':\n\t\t\t\texpression = Parser.parser.uniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'filter':\n\t\t\t\texpression = Parser.parser.nonUniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'orderBy':\n\t\t\t\texpression = Parser.parser.orderBy()\n\t\t\t\tbreak\n\t\t\tcase 'taggedMap':\n\t\t\t\texpression = Parser.parser.taggedMap()\n\t\t\t\tbreak\n\t\t\tcase 'columnValue':\n\t\t\t\texpression = Parser.parser.columnValue()\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new QueryLanguageError(`Not implemented entry point '${entry}'`)\n\t\t}\n\n\t\tif (Parser.parser.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to parse '${input}'.\\n\\n${Parser.parser.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tthis.cacheStore.set(environment, entry, input, expression as Parser.ParserResult[E])\n\n\t\treturn expression as Parser.ParserResult[E]\n\t}\n}\n\nnamespace Parser {\n\texport namespace AST {\n\t\texport type FieldWhere = Input.FieldWhere<Condition>\n\n\t\texport type ColumnValue = Input.ColumnValue<GraphQlBuilder.GraphQlLiteral>\n\n\t\texport type Condition = Input.Condition<ColumnValue>\n\n\t\texport type ConditionOperator = keyof Pick<Condition, 'eq' | 'notEq' | 'lt' | 'lte' | 'gt' | 'gte'>\n\t}\n\n\texport interface ParserResult {\n\t\tqualifiedEntityList: ParsedQualifiedEntityList // E.g. Author[age < 123].son.sisters(name = 'Jane')\n\t\tqualifiedFieldList: ParsedQualifiedFieldList // E.g. Author[age < 123].son.sister.name\n\t\tqualifiedSingleEntity: ParsedQualifiedSingleEntity // E.g. Author(id = 123).son.sister\n\t\tunconstrainedQualifiedEntityList: ParsedUnconstrainedQualifiedEntityList // E.g. Author.son.sister\n\t\tunconstrainedQualifiedSingleEntity: ParsedUnconstrainedQualifiedSingleEntity // E.g. Author.son.sister\n\t\trelativeSingleField: ParsedRelativeSingleField // E.g. authors(id = 123).person.name\n\t\trelativeSingleEntity: ParsedRelativeSingleEntity // E.g. localesByLocale(locale.slug = en)\n\t\trelativeEntityList: ParsedRelativeEntityList // E.g. genres(slug = 'sciFi').authors[age < 123]\n\t\tuniqueWhere: UniqueWhere // E.g. (author.mother.id = 123)\n\t\tfilter: Filter // E.g. [author.son.age < 123]\n\t\torderBy: OrderBy // E.g. items.order asc, items.content.name asc\n\t\ttaggedMap: ParsedTaggedMap // E.g editUser(id: $entity.id, foo: 'bar')\n\t\tcolumnValue: AST.ColumnValue\n\t}\n\n\texport type EntryPoint = keyof ParserResult\n}\n\nexport { Parser }\n"],"names":["_Parser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Parser.js","sources":["../../../../../packages/binding-common/src/queryLanguage/Parser.ts"],"sourcesContent":["import { Input, Writable } from '@contember/client'\nimport { EmbeddedActionsParser, Lexer } from 'chevrotain'\nimport { Environment } from '../environment'\nimport type { EntityName, FieldName, Filter, OrderBy, UniqueWhere } from '../treeParameters'\nimport type {\n\tParsedHasManyRelation,\n\tParsedHasOneRelation,\n\tParsedQualifiedEntityList,\n\tParsedQualifiedFieldList,\n\tParsedQualifiedSingleEntity,\n\tParsedRelativeEntityList,\n\tParsedRelativeSingleEntity,\n\tParsedRelativeSingleField,\n\tParsedTaggedMap,\n\tParsedTaggedMapEntry,\n\tParsedTaggedMapLiteralValue,\n\tParsedTaggedMapVariableValue,\n\tParsedUnconstrainedQualifiedEntityList,\n\tParsedUnconstrainedQualifiedSingleEntity,\n} from './ParserResults'\nimport { CacheStore } from './CacheStore'\nimport { QueryLanguageError } from './QueryLanguageError'\nimport { tokenList, TokenRegExps, tokens } from './tokenList'\nimport { BindingError } from '../BindingError'\n\n/**\n * TODO:\n * \t- double quoted strings\n * \t- collections (objects & lists)\n * \t- collection operators (e.g. 'in', 'notIn', etc.)\n * \t- filtering toOne\n */\nclass Parser extends EmbeddedActionsParser {\n\tprivate static rawInput: string = ''\n\tprivate static lexer = new Lexer(tokenList)\n\tprivate static parser = new Parser()\n\tprivate static environment: Environment = Environment.create()\n\tprivate static cacheStore: CacheStore = new CacheStore()\n\n\tprivate qualifiedEntityList = this.RULE<ParsedQualifiedEntityList>('qualifiedEntityList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedFieldList = this.RULE<ParsedQualifiedFieldList>('qualifiedFieldList', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\n\t\tthis.CONSUME(tokens.Dot)\n\n\t\tconst { hasOneRelationPath, field } = this.SUBRULE(this.relativeSingleField)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\tfield,\n\t\t\tfilter,\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate qualifiedSingleEntity = this.RULE<ParsedQualifiedSingleEntity>('qualifiedSingleEntity', () => {\n\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\n\t\t// TODO this will probably go away once we support singleton entities\n\t\tconst where = this.SUBRULE(this.uniqueWhere)\n\t\tconst filter = this.OPTION(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t})\n\n\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t)\n\n\t\treturn {\n\t\t\tentityName,\n\t\t\twhere,\n\t\t\thasOneRelationPath,\n\t\t\tfilter,\n\t\t}\n\t})\n\n\tprivate unconstrainedQualifiedEntityList = this.RULE<ParsedUnconstrainedQualifiedEntityList>(\n\t\t'unconstrainedQualifiedEntityList',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate unconstrainedQualifiedSingleEntity = this.RULE<ParsedUnconstrainedQualifiedSingleEntity>(\n\t\t'unconstrainedQualifiedSingleEntity',\n\t\t() => {\n\t\t\tconst entityName = this.SUBRULE(this.entityIdentifier)\n\t\t\tconst relativeSingleEntity = this.OPTION1(() => {\n\t\t\t\tthis.CONSUME(tokens.Dot)\n\t\t\t\treturn this.SUBRULE(this.relativeSingleEntity)\n\t\t\t})\n\n\t\t\tconst hasOneRelationPath = this.ACTION(() =>\n\t\t\t\trelativeSingleEntity === undefined ? [] : relativeSingleEntity.hasOneRelationPath,\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tentityName,\n\t\t\t\thasOneRelationPath,\n\t\t\t}\n\t\t},\n\t)\n\n\tprivate relativeSingleField = this.RULE<ParsedRelativeSingleField>('relativeSingleField', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined || last.filter !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced or filtered, which, grammatically, makes it a relation but a single field is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst field = this.ACTION(() => last.field)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\tfield,\n\t\t}\n\t})\n\n\tprivate relativeSingleEntity = this.RULE<ParsedRelativeSingleEntity>('relativeSingleEntity', () => {\n\t\tconst hasOneRelationPath: ParsedHasOneRelation[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\thasOneRelationPath.push(this.SUBRULE(this.hasOneRelation))\n\t\t\t},\n\t\t})\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t}\n\t})\n\n\tprivate relativeEntityList = this.RULE<ParsedRelativeEntityList>('relativeEntityList', () => {\n\t\tlet { hasOneRelationPath } = this.SUBRULE(this.relativeSingleEntity)\n\n\t\tconst last = this.ACTION(() => hasOneRelationPath.pop()!)\n\n\t\tthis.ACTION(() => {\n\t\t\tif (last.reducedBy !== undefined) {\n\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t`Cannot parse '${Parser.rawInput}': the last field '${last.field}' is being reduced, which, grammatically, makes it a has-one relation but a has-many relation is expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\n\t\tconst hasManyRelation = this.ACTION(\n\t\t\t(): ParsedHasManyRelation => ({\n\t\t\t\tfield: last.field,\n\t\t\t\tfilter: last.filter,\n\t\t\t}),\n\t\t)\n\n\t\treturn {\n\t\t\thasOneRelationPath,\n\t\t\thasManyRelation,\n\t\t}\n\t})\n\n\tprivate hasOneRelation = this.RULE<ParsedHasOneRelation>('hasOneRelation', () => {\n\t\tconst fieldName = this.SUBRULE(this.fieldName)\n\t\tconst reducedBy = this.OPTION(() => this.SUBRULE(this.uniqueWhere))\n\t\tconst filter = this.OPTION1(() => this.SUBRULE(this.nonUniqueWhere))\n\t\tconst hasOneRelation: ParsedHasOneRelation = {\n\t\t\tfield: fieldName,\n\t\t\tfilter,\n\t\t\treducedBy,\n\t\t}\n\n\t\treturn hasOneRelation\n\t})\n\n\tprivate nonUniqueWhere: () => Filter = this.RULE('nonUniqueWhere', () => {\n\t\tconst cnfWhere: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE(() => {\n\t\t\tthis.CONSUME(tokens.LeftBracket)\n\n\t\t\tcnfWhere.push(this.SUBRULE(this.disjunction))\n\n\t\t\tthis.CONSUME(tokens.RightBracket)\n\t\t})\n\t\tif (cnfWhere.length === 1) {\n\t\t\treturn cnfWhere[0]\n\t\t}\n\t\treturn {\n\t\t\tand: cnfWhere,\n\t\t}\n\t})\n\n\tprivate disjunction: () => Filter = this.RULE('disjunction', () => {\n\t\tconst conjunctions: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Or,\n\t\t\tDEF: () => {\n\t\t\t\tconjunctions.push(this.SUBRULE(this.conjunction))\n\t\t\t},\n\t\t})\n\t\tif (conjunctions.length === 1) {\n\t\t\treturn conjunctions[0]\n\t\t}\n\t\treturn {\n\t\t\tor: conjunctions,\n\t\t}\n\t})\n\n\tprivate conjunction: () => Filter = this.RULE('conjunction', () => {\n\t\tconst negations: Filter[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.And,\n\t\t\tDEF: () => {\n\t\t\t\tnegations.push(this.SUBRULE(this.negation))\n\t\t\t},\n\t\t})\n\t\tif (negations.length === 1) {\n\t\t\treturn negations[0]\n\t\t}\n\t\treturn {\n\t\t\tand: negations,\n\t\t}\n\t})\n\n\t// TODO this is to naïve and needs rewriting\n\tprivate negation: () => Filter = this.RULE('negation', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Not)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnot: this.SUBRULE(this.filterGroup),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\treturn this.SUBRULE1(this.filterGroup)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterGroup: () => Filter = this.RULE('filterGroup', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\t\t\t\tconst subFilter = this.SUBRULE(this.disjunction)\n\t\t\t\t\tthis.CONSUME1(tokens.RightParenthesis)\n\t\t\t\t\treturn subFilter\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.filterAtom),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate filterAtom: () => Filter = this.RULE('filterAtom', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (typeof variable !== 'object') {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`Invalid filter value '${JSON.stringify(variable)}'`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE1(this.fieldWhere),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldWhere: () => Parser.AST.FieldWhere = this.RULE('fieldWhere', () => {\n\t\tconst fields: { name: FieldName; modifier?: string }[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Dot,\n\t\t\tDEF: () => {\n\t\t\t\tfields.push(this.SUBRULE(this.fieldIdentifierWithOptionalModifier))\n\t\t\t},\n\t\t})\n\n\t\tconst createFieldWhere = (value: Parser.AST.Condition | Parser.AST.FieldWhere): Parser.AST.FieldWhere => {\n\t\t\treturn this.ACTION(() => {\n\t\t\t\tlet val = value\n\t\t\t\tfor (let i = fields.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst field = fields[i]\n\t\t\t\t\tif (field.modifier === 'none') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (field.modifier === 'all') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\tnot: {\n\t\t\t\t\t\t\t\t[field.name]: { not: val },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!field.modifier || field.modifier === 'some') {\n\t\t\t\t\t\tval = {\n\t\t\t\t\t\t\t[field.name]: val,\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new QueryLanguageError(`Unknown modifier '${field.modifier}', expected 'none', 'some' or 'all'`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn val as Parser.AST.FieldWhere\n\t\t\t})\n\t\t}\n\n\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst condition = this.SUBRULE(this.condition)\n\t\t\t\t\treturn createFieldWhere(condition)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst subWhere = this.SUBRULE(this.nonUniqueWhere)\n\t\t\t\t\treturn createFieldWhere(subWhere)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate condition: () => Parser.AST.Condition = this.RULE('condition', () => {\n\t\tconst operator = this.SUBRULE(this.conditionOperator)\n\t\tconst columnValue = this.SUBRULE(this.columnValue)\n\t\tconst condition: Writable<Parser.AST.Condition> = {}\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (columnValue === null) {\n\t\t\t\tif (operator === 'eq') {\n\t\t\t\t\tcondition.null = true\n\t\t\t\t} else if (operator === 'notEq') {\n\t\t\t\t\tcondition.null = false\n\t\t\t\t} else {\n\t\t\t\t\tthrow new QueryLanguageError(`The null keyword as a right hand operand can only be tested for (in)equality.`)\n\t\t\t\t}\n\t\t\t\treturn condition\n\t\t\t}\n\t\t\tcondition[operator] = columnValue\n\n\t\t\treturn condition\n\t\t})\n\t})\n\n\tprivate conditionOperator: () => Parser.AST.ConditionOperator = this.RULE<Parser.AST.ConditionOperator>(\n\t\t'conditionOperator',\n\t\t() => {\n\t\t\treturn this.OR([\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\t\t\treturn 'eq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.NotEquals)\n\t\t\t\t\t\treturn 'notEq'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerThan)\n\t\t\t\t\t\treturn 'lt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.LowerEqual)\n\t\t\t\t\t\treturn 'lte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterThan)\n\t\t\t\t\t\treturn 'gt'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tALT: () => {\n\t\t\t\t\t\tthis.CONSUME(tokens.GreaterEqual)\n\t\t\t\t\t\treturn 'gte'\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t},\n\t)\n\n\tprivate columnValue: () => Parser.AST.ColumnValue = this.RULE<Parser.AST.ColumnValue>('columnValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.Null)\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.True)\n\t\t\t\t\treturn true\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tthis.CONSUME(tokens.False)\n\t\t\t\t\treturn false\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.primaryValue),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate uniqueWhere = this.RULE('uniqueWhere', () => {\n\t\tconst where: Writable<UniqueWhere> = {}\n\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst nestedFields: string[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tnestedFields.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tthis.CONSUME(tokens.Equals)\n\t\t\t\tconst primaryValue = this.SUBRULE<Input.PrimaryValue>(this.primaryValue)\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet nestedWhere = where\n\t\t\t\t\tfor (let i = 0, len = nestedFields.length; i < len; i++) {\n\t\t\t\t\t\tconst nestedField = nestedFields[i]\n\n\t\t\t\t\t\tconst isLast = len - 1 === i\n\n\t\t\t\t\t\tif (isLast) {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tthrow new QueryLanguageError(`Duplicate '${nestedFields.slice(0, i + 1).join('.')}' field`)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnestedWhere[nestedField] = primaryValue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (nestedField in nestedWhere) {\n\t\t\t\t\t\t\t\tconst existingWhere = nestedWhere[nestedField]\n\n\t\t\t\t\t\t\t\tif (typeof existingWhere === 'object') {\n\t\t\t\t\t\t\t\t\tnestedWhere = existingWhere\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t\t\t\t`Malformed expression: cannot simultaneously treat the '${nestedFields\n\t\t\t\t\t\t\t\t\t\t\t.slice(0, i + 1)\n\t\t\t\t\t\t\t\t\t\t\t.join('.')}' ` + `field as a scalar as well as a relation.`,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst newWhere = {}\n\t\t\t\t\t\t\t\tnestedWhere[nestedField] = newWhere\n\t\t\t\t\t\t\t\tnestedWhere = newWhere\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn where\n\t})\n\n\tprivate orderBy: () => Input.OrderBy<`${Input.OrderDirection}`>[] = this.RULE<\n\t\tInput.OrderBy<`${Input.OrderDirection}`>[]\n\t>('orderBy', () => {\n\t\tconst order: Input.OrderBy<`${Input.OrderDirection}`>[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => {\n\t\t\t\tconst fieldNames: FieldName[] = []\n\t\t\t\tthis.AT_LEAST_ONE_SEP1({\n\t\t\t\t\tSEP: tokens.Dot,\n\t\t\t\t\tDEF: () => {\n\t\t\t\t\t\tfieldNames.push(this.SUBRULE(this.fieldIdentifier))\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst literal = this.OPTION(() => this.SUBRULE1(this.identifier))\n\n\t\t\t\tthis.ACTION(() => {\n\t\t\t\t\tlet orderDirection: `${Input.OrderDirection}`\n\t\t\t\t\tif (literal) {\n\t\t\t\t\t\tif (literal !== 'asc' && literal !== 'desc' && literal !== 'ascNullsFirst' && literal !== 'descNullsLast') {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The only valid order directions are 'asc', 'desc', 'ascNullsFirst' and 'descNullsLast'.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\torderDirection = literal\n\t\t\t\t\t} else {\n\t\t\t\t\t\torderDirection = 'asc'\n\t\t\t\t\t}\n\t\t\t\t\tlet orderBy: Input.FieldOrderBy<`${Input.OrderDirection}`> = orderDirection\n\n\t\t\t\t\tfor (let i = fieldNames.length - 1; i >= 0; i--) {\n\t\t\t\t\t\torderBy = { [fieldNames[i]]: orderBy }\n\t\t\t\t\t}\n\t\t\t\t\torder.push(orderBy as Input.OrderBy<`${Input.OrderDirection}`>)\n\t\t\t\t})\n\t\t\t},\n\t\t})\n\n\t\treturn order\n\t})\n\n\tprivate taggedMap: () => ParsedTaggedMap = this.RULE<ParsedTaggedMap>('taggedMap', () => {\n\t\tconst name = this.SUBRULE(this.pageName)\n\t\treturn {\n\t\t\tname,\n\t\t\tentries: this.OPTION(() => this.SUBRULE(this.taggedMapEntries)) ?? [],\n\t\t}\n\t})\n\n\tprivate taggedMapEntries: () => ParsedTaggedMapEntry[] = this.RULE<ParsedTaggedMapEntry[]>('taggedMapEntries', () => {\n\t\tthis.CONSUME(tokens.LeftParenthesis)\n\t\tconst entries: ParsedTaggedMapEntry[] = []\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Comma,\n\t\t\tDEF: () => entries.push(this.SUBRULE(this.taggedMapEntry)),\n\t\t})\n\t\tthis.CONSUME(tokens.RightParenthesis)\n\n\t\treturn entries\n\t})\n\n\tprivate taggedMapEntry: () => ParsedTaggedMapEntry = this.RULE<ParsedTaggedMapEntry>('taggedMapEntry', () => {\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\t\tthis.CONSUME1(tokens.Colon)\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapLiteralValue),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.taggedMapVariableValue),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\tkey: variableName,\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapLiteralValue: () => ParsedTaggedMapLiteralValue = this.RULE<ParsedTaggedMapLiteralValue>('taggedMapLiteralValue', () => {\n\t\tconst value = this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t])\n\n\t\treturn {\n\t\t\ttype: 'literal',\n\t\t\tvalue,\n\t\t}\n\t})\n\n\tprivate taggedMapVariableValue: () => ParsedTaggedMapVariableValue = this.RULE<ParsedTaggedMapVariableValue>('taggedMapVariableValue', () => {\n\t\tconst start = this.CONSUME(tokens.DollarSign)\n\t\tthis.SUBRULE(this.relativeSingleField)\n\t\tconst end = this.LA(0)\n\t\tconst field = this.input.slice(this.input.indexOf(start) + 1, this.input.indexOf(end) + 1).map(it => it.image).join('')\n\n\t\treturn {\n\t\t\ttype: 'variable',\n\t\t\tvalue: field,\n\t\t}\n\t})\n\n\n\tprivate fieldName: () => FieldName = this.RULE<FieldName>('fieldName', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.fieldIdentifier),\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate primaryValue = this.RULE<Input.PrimaryValue>('primaryValue', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.string),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.number),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => this.SUBRULE(this.identifier),\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variableValue = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof variableValue === 'string' ||\n\t\t\t\t\t\t\ttypeof variableValue === 'number'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn variableValue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new QueryLanguageError(\n\t\t\t\t\t\t\t`A variable can resolve to a literal, string or a number, not ${typeof variableValue}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate fieldIdentifierWithOptionalModifier: () => { name: FieldName; modifier?: string } = this.RULE('fieldIdentifierWithOptionalModifier', () => {\n\t\tconst fieldIdentifier = this.SUBRULE1(this.fieldIdentifier)\n\t\tconst modifier = this.OPTION(() => {\n\t\t\tthis.CONSUME(tokens.Colon)\n\t\t\treturn this.SUBRULE(this.identifier)\n\t\t})\n\t\treturn { name: fieldIdentifier, modifier }\n\t})\n\n\tprivate fieldIdentifier: () => FieldName = this.RULE('fieldIdentifier', () => {\n\t\treturn this.SUBRULE(this.identifier)\n\t\t// return this.OR([\n\t\t// \t{\n\t\t// \t\tALT: () => this.SUBRULE(this.identifier),\n\t\t// \t},\n\t\t// \t{\n\t\t// \t\tALT: () => {\n\t\t// \t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t// \t\t\treturn this.ACTION(() => {\n\t\t// \t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.identifier.test(variable)) {\n\t\t// \t\t\t\t\tthrow new QueryLanguageError(`The value \\$${variable} is not a valid field identifier.`)\n\t\t// \t\t\t\t}\n\t\t// \t\t\t\treturn variable\n\t\t// \t\t\t})\n\t\t// \t\t},\n\t\t// \t},\n\t\t// ])\n\t})\n\n\tprivate identifier: () => string = this.RULE('identifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.Identifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// TODO this is a temporary hack to allow for literals that start with an uppercase letter… 🙈\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate pageName: () => string = this.RULE('pageName', () => {\n\t\tconst parts: string[] = []\n\n\t\tthis.AT_LEAST_ONE_SEP({\n\t\t\tSEP: tokens.Slash,\n\t\t\tDEF: () => parts.push(this.CONSUME(tokens.Identifier).image),\n\t\t})\n\n\t\treturn parts.join('/')\n\t})\n\n\tprivate entityIdentifier: () => EntityName = this.RULE('entityIdentifier', () => {\n\t\treturn this.OR([\n\t\t\t{\n\t\t\t\tALT: () => this.CONSUME(tokens.EntityIdentifier).image,\n\t\t\t},\n\t\t\t{\n\t\t\t\tALT: () => {\n\t\t\t\t\tconst variable = this.SUBRULE(this.variable)\n\t\t\t\t\treturn this.ACTION(() => {\n\t\t\t\t\t\tif (!(typeof variable === 'string') || !TokenRegExps.entityIdentifier.test(variable)) {\n\t\t\t\t\t\t\tthrow new QueryLanguageError(`The value of the variable \\$${variable} is not a valid entity identifier.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn variable\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t})\n\n\tprivate string = this.RULE('string', () => {\n\t\tconst image = this.CONSUME(tokens.StringLiteral).image\n\t\treturn image\n\t\t\t.substring(1, image.length - 1)\n\t\t\t.replace(\"\\\\'\", \"'\")\n\t\t\t.replace(`\\\\\"`, `\"`)\n\t\t\t.replace('\\\\b', '\\b')\n\t\t\t.replace('\\\\f', '\\f')\n\t\t\t.replace('\\\\n', '\\n')\n\t\t\t.replace('\\\\r', '\\r')\n\t\t\t.replace('\\\\t', '\\t')\n\t\t\t.replace('\\\\v', '\\v')\n\t})\n\n\tprivate number = this.RULE('number', () => {\n\t\treturn parseFloat(this.CONSUME(tokens.NumberLiteral).image)\n\t})\n\n\tprivate variable = this.RULE<Environment.ResolvedValue>('variable', () => {\n\t\tthis.CONSUME(tokens.DollarSign)\n\t\tconst variableName = this.CONSUME(tokens.Identifier).image\n\n\t\treturn this.ACTION(() => {\n\t\t\tif (import.meta.env.DEV && variableName === 'rootWhereAsFilter') {\n\t\t\t\tconsole.warn('$rootWhereAsFilter is deprecated, use $rootFilter')\n\t\t\t}\n\t\t\tswitch (variableName) {\n\t\t\t\tcase 'rootWhereAsFilter':\n\t\t\t\tcase 'rootFilter':\n\t\t\t\t\treturn Parser.environment.getSubTree().filter\n\t\t\t}\n\n\t\t\tif (Parser.environment.hasVariable(variableName)) {\n\t\t\t\treturn Parser.environment.getVariable(variableName)\n\t\t\t}\n\t\t\tif (Parser.environment.hasParameter(variableName)) {\n\t\t\t\treturn Parser.environment.getParameter(variableName)\n\t\t\t}\n\t\t\tif (Parser.environment.hasDimension(variableName)) {\n\t\t\t\tconst dimensionValue = Parser.environment.getDimension(variableName)\n\t\t\t\tif (dimensionValue.length > 1) {\n\t\t\t\t\tthrow new BindingError(\n\t\t\t\t\t\t`The variable \\$${variableName} resolved to a dimension which exists but contains ${dimensionValue.length} values. It has to contain exactly one. ` +\n\t\t\t\t\t\t`Perhaps you forgot to set the 'maxItems' prop of your DimensionsSwitcher?`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn dimensionValue[0]\n\t\t\t}\n\n\t\t\tthrow new QueryLanguageError(`Undefined variable \\$${variableName}.`)\n\t\t})\n\t})\n\n\tprivate constructor() {\n\t\tsuper(tokenList, { outputCst: false, maxLookahead: 1 })\n\t\tthis.performSelfAnalysis()\n\t}\n\n\tpublic static parseQueryLanguageExpression<E extends Parser.EntryPoint>(\n\t\tinput: string,\n\t\tentry: E,\n\t\tenvironment: Environment,\n\t): Parser.ParserResult[E] {\n\t\tconst cached = this.cacheStore.get(environment, entry, input)\n\n\t\tif (cached !== undefined) {\n\t\t\treturn cached\n\t\t}\n\n\t\tconst lexingResult = Parser.lexer.tokenize((Parser.rawInput = input))\n\n\t\tif (lexingResult.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to tokenize '${input}'.\\n\\n${lexingResult.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tParser.environment = environment\n\t\tParser.parser.input = lexingResult.tokens\n\n\t\tlet expression: Parser.ParserResult[keyof Parser.ParserResult]\n\n\t\tswitch (entry) {\n\t\t\tcase 'relativeSingleField':\n\t\t\t\texpression = Parser.parser.relativeSingleField()\n\t\t\t\tbreak\n\t\t\tcase 'relativeSingleEntity':\n\t\t\t\texpression = Parser.parser.relativeSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'relativeEntityList':\n\t\t\t\texpression = Parser.parser.relativeEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedEntityList':\n\t\t\t\texpression = Parser.parser.qualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedFieldList':\n\t\t\t\texpression = Parser.parser.qualifiedFieldList()\n\t\t\t\tbreak\n\t\t\tcase 'qualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.qualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedEntityList':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedEntityList()\n\t\t\t\tbreak\n\t\t\tcase 'unconstrainedQualifiedSingleEntity':\n\t\t\t\texpression = Parser.parser.unconstrainedQualifiedSingleEntity()\n\t\t\t\tbreak\n\t\t\tcase 'uniqueWhere':\n\t\t\t\texpression = Parser.parser.uniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'filter':\n\t\t\t\texpression = Parser.parser.nonUniqueWhere()\n\t\t\t\tbreak\n\t\t\tcase 'orderBy':\n\t\t\t\texpression = Parser.parser.orderBy()\n\t\t\t\tbreak\n\t\t\tcase 'taggedMap':\n\t\t\t\texpression = Parser.parser.taggedMap()\n\t\t\t\tbreak\n\t\t\tcase 'columnValue':\n\t\t\t\texpression = Parser.parser.columnValue()\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new QueryLanguageError(`Not implemented entry point '${entry}'`)\n\t\t}\n\n\t\tif (Parser.parser.errors.length !== 0) {\n\t\t\tthrow new QueryLanguageError(\n\t\t\t\t`Failed to parse '${input}'.\\n\\n${Parser.parser.errors.map(i => i.message).join('\\n')}`,\n\t\t\t)\n\t\t}\n\n\t\tthis.cacheStore.set(environment, entry, input, expression as Parser.ParserResult[E])\n\n\t\treturn expression as Parser.ParserResult[E]\n\t}\n}\n\nnamespace Parser {\n\texport namespace AST {\n\t\texport type FieldWhere = Input.FieldWhere<Condition>\n\n\t\texport type ColumnValue = Input.ColumnValue\n\n\t\texport type Condition = Input.Condition<ColumnValue>\n\n\t\texport type ConditionOperator = keyof Pick<Condition, 'eq' | 'notEq' | 'lt' | 'lte' | 'gt' | 'gte'>\n\t}\n\n\texport interface ParserResult {\n\t\tqualifiedEntityList: ParsedQualifiedEntityList // E.g. Author[age < 123].son.sisters(name = 'Jane')\n\t\tqualifiedFieldList: ParsedQualifiedFieldList // E.g. Author[age < 123].son.sister.name\n\t\tqualifiedSingleEntity: ParsedQualifiedSingleEntity // E.g. Author(id = 123).son.sister\n\t\tunconstrainedQualifiedEntityList: ParsedUnconstrainedQualifiedEntityList // E.g. Author.son.sister\n\t\tunconstrainedQualifiedSingleEntity: ParsedUnconstrainedQualifiedSingleEntity // E.g. Author.son.sister\n\t\trelativeSingleField: ParsedRelativeSingleField // E.g. authors(id = 123).person.name\n\t\trelativeSingleEntity: ParsedRelativeSingleEntity // E.g. localesByLocale(locale.slug = en)\n\t\trelativeEntityList: ParsedRelativeEntityList // E.g. genres(slug = 'sciFi').authors[age < 123]\n\t\tuniqueWhere: UniqueWhere // E.g. (author.mother.id = 123)\n\t\tfilter: Filter // E.g. [author.son.age < 123]\n\t\torderBy: OrderBy // E.g. items.order asc, items.content.name asc\n\t\ttaggedMap: ParsedTaggedMap // E.g editUser(id: $entity.id, foo: 'bar')\n\t\tcolumnValue: AST.ColumnValue\n\t}\n\n\texport type EntryPoint = keyof ParserResult\n}\n\nexport { Parser }\n"],"names":["_Parser"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const Parser = require("./Parser.cjs");
|
|
4
|
-
const client = require("@contember/client");
|
|
5
4
|
const tokenList = require("./tokenList.cjs");
|
|
6
5
|
const TreeParameterMerger = require("../treeParameters/TreeParameterMerger.cjs");
|
|
7
6
|
const VariableInputTransformer = require("../environment/VariableInputTransformer.cjs");
|
|
@@ -363,7 +362,7 @@ const _QueryLanguage = class _QueryLanguage2 {
|
|
|
363
362
|
initialEntityCount: unsugarableFieldList.initialEntityCount ?? defaults.EntityListPreferencesDefaults.initialEntityCount
|
|
364
363
|
};
|
|
365
364
|
}
|
|
366
|
-
static desugarQualifiedSingleEntity({ entity, ...unsugarableSingleEntity }, environment
|
|
365
|
+
static desugarQualifiedSingleEntity({ entity, ...unsugarableSingleEntity }, environment) {
|
|
367
366
|
let entityName;
|
|
368
367
|
let where;
|
|
369
368
|
let filter;
|
|
@@ -389,15 +388,6 @@ const _QueryLanguage = class _QueryLanguage2 {
|
|
|
389
388
|
);
|
|
390
389
|
}
|
|
391
390
|
let setOnCreate = unsugarableSingleEntity.setOnCreate !== void 0 ? this.desugarSetOnCreate(unsugarableSingleEntity.setOnCreate, environment) : void 0;
|
|
392
|
-
if (!setOnCreate && options.missingSetOnCreate) {
|
|
393
|
-
const whereValues = Object.values(where);
|
|
394
|
-
if (whereValues.length === 1 && whereValues[0] instanceof client.GraphQlLiteral) {
|
|
395
|
-
setOnCreate = where;
|
|
396
|
-
if (options.missingSetOnCreate === "fillAndWarn") {
|
|
397
|
-
console.warn("Automatic creation of singleton entities in EditPage is deprecated. Please use setOnCreate prop.");
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
391
|
const isNonbearing = unsugarableSingleEntity.isNonbearing !== void 0 ? unsugarableSingleEntity.isNonbearing : defaults.EntityCreationParametersDefaults.isNonbearing;
|
|
402
392
|
const eventListeners = this.desugarSingleEntityEventListeners(unsugarableSingleEntity);
|
|
403
393
|
const expectedMutation = unsugarableSingleEntity.expectedMutation ?? defaults.QualifiedEntityParametersDefaults.expectedMutation;
|