@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
|
@@ -11,7 +11,7 @@ import { HasOneRelationMarker } from "../markers/HasOneRelationMarker.js";
|
|
|
11
11
|
import { HasManyRelationMarker } from "../markers/HasManyRelationMarker.js";
|
|
12
12
|
class MarkerFactory {
|
|
13
13
|
static createEntitySubTreeMarker(entity, fields, environment) {
|
|
14
|
-
const qualifiedSingleEntity = QueryLanguage.desugarQualifiedSingleEntity(entity, environment
|
|
14
|
+
const qualifiedSingleEntity = QueryLanguage.desugarQualifiedSingleEntity(entity, environment);
|
|
15
15
|
return this.createSubTreeMarker(qualifiedSingleEntity, "eventListeners", EntitySubTreeMarker, fields, environment);
|
|
16
16
|
}
|
|
17
17
|
static createUnconstrainedEntitySubTreeMarker(entity, fields, environment) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkerFactory.js","sources":["../../../../../packages/binding-common/src/queryLanguage/MarkerFactory.ts"],"sourcesContent":["import type { Environment } from '../environment'\nimport {\n\tEntityFieldMarker,\n\tEntityFieldMarkersContainer,\n\tEntityFieldsWithHoistablesMarker,\n\tEntityListSubTreeMarker,\n\tEntitySubTreeMarker,\n\tFieldMarker,\n\tHasManyRelationMarker,\n\tHasOneRelationMarker,\n} from '../markers'\nimport { MarkerMerger } from '../markers/MarkerMerger'\nimport type {\n\tEntityEventListenerStore,\n\tHasManyRelation,\n\tHasOneRelation,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSugaredParentEntityParameters,\n\tSugaredQualifiedEntityList,\n\tSugaredQualifiedSingleEntity,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tSugaredUnconstrainedQualifiedEntityList,\n\tSugaredUnconstrainedQualifiedSingleEntity,\n} from '../treeParameters'\nimport { TreeParameterMerger } from '../treeParameters/TreeParameterMerger'\nimport { assertNever } from '../utils/assertNever'\nimport { QueryLanguage } from './QueryLanguage'\n\nexport class MarkerFactory {\n\n\tpublic static createEntitySubTreeMarker(\n\t\tentity: SugaredQualifiedSingleEntity,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\tconst qualifiedSingleEntity: QualifiedSingleEntity = QueryLanguage.desugarQualifiedSingleEntity(entity, environment, { missingSetOnCreate: 'fillAndWarn' })\n\n\t\treturn this.createSubTreeMarker(qualifiedSingleEntity, 'eventListeners', EntitySubTreeMarker, fields, environment)\n\t}\n\n\tpublic static createUnconstrainedEntitySubTreeMarker(\n\t\tentity: SugaredUnconstrainedQualifiedSingleEntity,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\treturn this.createSubTreeMarker(\n\t\t\tQueryLanguage.desugarUnconstrainedQualifiedSingleEntity(entity, environment),\n\t\t\t'eventListeners',\n\t\t\tEntitySubTreeMarker,\n\t\t\tfields,\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tpublic static createEntityListSubTreeMarker(\n\t\tentityList: SugaredQualifiedEntityList,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\treturn this.createSubTreeMarker(\n\t\t\tQueryLanguage.desugarQualifiedEntityList(entityList, environment),\n\t\t\t'childEventListeners',\n\t\t\tEntityListSubTreeMarker,\n\t\t\tfields,\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tpublic static createUnconstrainedEntityListSubTreeMarker(\n\t\tentityList: SugaredUnconstrainedQualifiedEntityList,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\treturn this.createSubTreeMarker(\n\t\t\tQueryLanguage.desugarUnconstrainedQualifiedEntityList(entityList, environment),\n\t\t\t'childEventListeners',\n\t\t\tEntityListSubTreeMarker,\n\t\t\tfields,\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tpublic static createParentEntityMarker(\n\t\tparentEntity: SugaredParentEntityParameters,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\tconst desugared = QueryLanguage.desugarParentEntityParameters(parentEntity, environment)\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\treturn new EntityFieldsWithHoistablesMarker(fields, undefined, desugared)\n\t\t}\n\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tfields.fields,\n\t\t\tfields.subTrees,\n\t\t\tTreeParameterMerger.mergeParentEntityParameters(fields.parentReference, desugared),\n\t\t)\n\t}\n\n\tpublic static createEntityFieldsWithHoistablesMarker(\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\treturn new EntityFieldsWithHoistablesMarker(fields, undefined, undefined)\n\t\t}\n\n\t\treturn new EntityFieldsWithHoistablesMarker(fields.fields, fields.subTrees, undefined)\n\t}\n\n\tpublic static createRelativeSingleEntityFields(\n\t\tfield: SugaredRelativeSingleEntity,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer,\n\t): EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer {\n\n\t\tconst relativeSingleEntity = QueryLanguage.desugarRelativeSingleEntity(field, environment)\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\treturn this.wrapRelativeEntityFieldMarkers(relativeSingleEntity.hasOneRelationPath, environment, fields)\n\t\t}\n\n\t\trelativeSingleEntity.hasOneRelationPath[relativeSingleEntity.hasOneRelationPath.length - 1] =\n\t\t\tTreeParameterMerger.mergeInParentEntity(\n\t\t\t\trelativeSingleEntity.hasOneRelationPath[relativeSingleEntity.hasOneRelationPath.length - 1],\n\t\t\t\t'eventListeners',\n\t\t\t\tfields.parentReference,\n\t\t\t)\n\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tthis.wrapRelativeEntityFieldMarkers(relativeSingleEntity.hasOneRelationPath, environment, fields.fields),\n\t\t\tfields.subTrees,\n\t\t\tundefined,\n\t\t)\n\t}\n\n\tpublic static createRelativeEntityListFields(\n\t\tfield: SugaredRelativeEntityList,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer,\n\t): EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer {\n\n\t\tconst relativeEntityList = QueryLanguage.desugarRelativeEntityList(field, environment)\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\tconst hasManyRelationMarker = this.createHasManyRelationMarker(\n\t\t\t\trelativeEntityList.hasManyRelation,\n\t\t\t\tenvironment,\n\t\t\t\tfields,\n\t\t\t)\n\t\t\treturn this.wrapRelativeEntityFieldMarkers(\n\t\t\t\trelativeEntityList.hasOneRelationPath,\n\t\t\t\tenvironment.getParent(),\n\t\t\t\tthis.createEntityFieldMarkersContainer(hasManyRelationMarker),\n\t\t\t)\n\t\t}\n\n\t\trelativeEntityList.hasManyRelation = TreeParameterMerger.mergeInParentEntity(\n\t\t\trelativeEntityList.hasManyRelation,\n\t\t\t'childEventListeners',\n\t\t\tfields.parentReference,\n\t\t)\n\n\t\tconst hasManyRelationMarker = this.createHasManyRelationMarker(\n\t\t\trelativeEntityList.hasManyRelation,\n\t\t\tenvironment,\n\t\t\tfields.fields,\n\t\t)\n\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tthis.wrapRelativeEntityFieldMarkers(\n\t\t\t\trelativeEntityList.hasOneRelationPath,\n\t\t\t\tenvironment.getParent(),\n\t\t\t\tthis.createEntityFieldMarkersContainer(hasManyRelationMarker),\n\t\t\t),\n\t\t\tfields.subTrees,\n\t\t\tundefined,\n\t\t)\n\t}\n\n\tpublic static createFieldMarker(field: SugaredRelativeSingleField, environment: Environment): EntityFieldMarkersContainer {\n\n\t\treturn this.wrapRelativeSingleField(\n\t\t\tfield,\n\t\t\tenvironment,\n\t\t\trelativeSingleField => new FieldMarker(relativeSingleField),\n\t\t)\n\t}\n\n\tprivate static wrapRelativeSingleField(\n\t\tfield: SugaredRelativeSingleField,\n\t\tenvironment: Environment,\n\t\tgetMarker: (relativeSingleField: RelativeSingleField) => EntityFieldMarker,\n\t): EntityFieldMarkersContainer {\n\n\t\tconst relativeSingleField = QueryLanguage.desugarRelativeSingleField(field, environment)\n\n\t\treturn this.wrapRelativeEntityFieldMarkers(\n\t\t\trelativeSingleField.hasOneRelationPath,\n\t\t\tenvironment.getParent(),\n\t\t\tthis.createEntityFieldMarkersContainer(getMarker(relativeSingleField)),\n\t\t)\n\t}\n\n\tprivate static wrapRelativeEntityFieldMarkers(\n\t\thasOneRelationPath: HasOneRelation[],\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldMarkersContainer,\n\t): EntityFieldMarkersContainer {\n\n\t\tfor (let i = hasOneRelationPath.length - 1; i >= 0; i--) {\n\t\t\tconst marker = this.createHasOneRelationMarker(hasOneRelationPath[i], environment, fields)\n\t\t\tenvironment = environment.getParent()\n\t\t\tfields = this.createEntityFieldMarkersContainer(marker)\n\t\t}\n\n\t\treturn fields\n\t}\n\n\tpublic static createEntityFieldMarkersContainer(marker: EntityFieldMarker | undefined): EntityFieldMarkersContainer {\n\t\tif (marker instanceof FieldMarker) {\n\t\t\treturn new EntityFieldMarkersContainer(\n\t\t\t\t!marker.isNonbearing,\n\t\t\t\tnew Map([[marker.placeholderName, marker]]),\n\t\t\t\tnew Map([[marker.fieldName, marker.placeholderName]]),\n\t\t\t)\n\t\t} else if (marker instanceof HasOneRelationMarker || marker instanceof HasManyRelationMarker) {\n\t\t\treturn new EntityFieldMarkersContainer(\n\t\t\t\t!marker.parameters.isNonbearing,\n\t\t\t\tnew Map([[marker.placeholderName, marker]]),\n\t\t\t\tnew Map([[marker.parameters.field, marker.placeholderName]]),\n\t\t\t)\n\t\t} else if (marker === undefined) {\n\t\t\treturn new EntityFieldMarkersContainer(false, new Map(), new Map())\n\t\t} else {\n\t\t\treturn assertNever(marker)\n\t\t}\n\t}\n\n\tprivate static createHasOneRelationMarker(\n\t\thasOneRelation: HasOneRelation,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldMarkersContainer,\n\t): HasOneRelationMarker {\n\t\treturn new HasOneRelationMarker(\n\t\t\t{\n\t\t\t\t...hasOneRelation,\n\t\t\t\tsetOnCreate: hasOneRelation.reducedBy\n\t\t\t\t\t? TreeParameterMerger.mergeSetOnCreate(hasOneRelation.setOnCreate || {}, hasOneRelation.reducedBy)\n\t\t\t\t\t: hasOneRelation.setOnCreate,\n\t\t\t},\n\t\t\tMarkerMerger.mergeInSystemFields(fields),\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tprivate static createHasManyRelationMarker(\n\t\thasManyRelation: HasManyRelation,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldMarkersContainer,\n\t) {\n\t\treturn new HasManyRelationMarker(hasManyRelation, MarkerMerger.mergeInSystemFields(fields), environment)\n\t}\n\n\tprivate static createSubTreeMarker<\n\t\tParams extends Record<'hasOneRelationPath', HasOneRelation[]> & Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Params,\n\t>(\n\t\tqualifiedParams: Params,\n\t\tkey: Key,\n\t\tMarker: new (params: Params, fields: EntityFieldMarkersContainer, env: Environment) =>\n\t\t\t| EntitySubTreeMarker\n\t\t\t| EntityListSubTreeMarker,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\t\tlet entityFields: EntityFieldMarkersContainer | undefined\n\n\t\tif (fields instanceof EntityFieldsWithHoistablesMarker) {\n\t\t\t// TODO this is wrong with respect to hasOneRelationPath\n\t\t\tqualifiedParams = TreeParameterMerger.mergeInParentEntity(qualifiedParams, key, fields.parentReference)\n\t\t\tentityFields = fields.fields\n\t\t} else {\n\t\t\tentityFields = fields\n\t\t}\n\n\t\tconst subTree = new Marker(\n\t\t\tqualifiedParams,\n\t\t\tthis.wrapRelativeEntityFieldMarkers(\n\t\t\t\tqualifiedParams.hasOneRelationPath,\n\t\t\t\tenvironment,\n\t\t\t\tMarkerMerger.mergeInSystemFields(entityFields),\n\t\t\t),\n\t\t\tenvironment,\n\t\t)\n\t\tif (fields instanceof EntityFieldsWithHoistablesMarker) {\n\t\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\t\tthis.createEntityFieldMarkersContainer(undefined),\n\t\t\t\tMarkerMerger.mergeSubTreeMarkers(fields.subTrees, new Map([[subTree.placeholderName, subTree]])),\n\t\t\t\tundefined,\n\t\t\t)\n\t\t}\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tthis.createEntityFieldMarkersContainer(undefined),\n\t\t\tnew Map([[subTree.placeholderName, subTree]]),\n\t\t\tundefined,\n\t\t)\n\t}\n}\n"],"names":["hasManyRelationMarker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkerFactory.js","sources":["../../../../../packages/binding-common/src/queryLanguage/MarkerFactory.ts"],"sourcesContent":["import type { Environment } from '../environment'\nimport {\n\tEntityFieldMarker,\n\tEntityFieldMarkersContainer,\n\tEntityFieldsWithHoistablesMarker,\n\tEntityListSubTreeMarker,\n\tEntitySubTreeMarker,\n\tFieldMarker,\n\tHasManyRelationMarker,\n\tHasOneRelationMarker,\n} from '../markers'\nimport { MarkerMerger } from '../markers/MarkerMerger'\nimport type {\n\tEntityEventListenerStore,\n\tHasManyRelation,\n\tHasOneRelation,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSugaredParentEntityParameters,\n\tSugaredQualifiedEntityList,\n\tSugaredQualifiedSingleEntity,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tSugaredUnconstrainedQualifiedEntityList,\n\tSugaredUnconstrainedQualifiedSingleEntity,\n} from '../treeParameters'\nimport { TreeParameterMerger } from '../treeParameters/TreeParameterMerger'\nimport { assertNever } from '../utils/assertNever'\nimport { QueryLanguage } from './QueryLanguage'\n\nexport class MarkerFactory {\n\n\tpublic static createEntitySubTreeMarker(\n\t\tentity: SugaredQualifiedSingleEntity,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\tconst qualifiedSingleEntity: QualifiedSingleEntity = QueryLanguage.desugarQualifiedSingleEntity(entity, environment)\n\n\t\treturn this.createSubTreeMarker(qualifiedSingleEntity, 'eventListeners', EntitySubTreeMarker, fields, environment)\n\t}\n\n\tpublic static createUnconstrainedEntitySubTreeMarker(\n\t\tentity: SugaredUnconstrainedQualifiedSingleEntity,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\treturn this.createSubTreeMarker(\n\t\t\tQueryLanguage.desugarUnconstrainedQualifiedSingleEntity(entity, environment),\n\t\t\t'eventListeners',\n\t\t\tEntitySubTreeMarker,\n\t\t\tfields,\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tpublic static createEntityListSubTreeMarker(\n\t\tentityList: SugaredQualifiedEntityList,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\treturn this.createSubTreeMarker(\n\t\t\tQueryLanguage.desugarQualifiedEntityList(entityList, environment),\n\t\t\t'childEventListeners',\n\t\t\tEntityListSubTreeMarker,\n\t\t\tfields,\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tpublic static createUnconstrainedEntityListSubTreeMarker(\n\t\tentityList: SugaredUnconstrainedQualifiedEntityList,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\treturn this.createSubTreeMarker(\n\t\t\tQueryLanguage.desugarUnconstrainedQualifiedEntityList(entityList, environment),\n\t\t\t'childEventListeners',\n\t\t\tEntityListSubTreeMarker,\n\t\t\tfields,\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tpublic static createParentEntityMarker(\n\t\tparentEntity: SugaredParentEntityParameters,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\tconst desugared = QueryLanguage.desugarParentEntityParameters(parentEntity, environment)\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\treturn new EntityFieldsWithHoistablesMarker(fields, undefined, desugared)\n\t\t}\n\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tfields.fields,\n\t\t\tfields.subTrees,\n\t\t\tTreeParameterMerger.mergeParentEntityParameters(fields.parentReference, desugared),\n\t\t)\n\t}\n\n\tpublic static createEntityFieldsWithHoistablesMarker(\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\treturn new EntityFieldsWithHoistablesMarker(fields, undefined, undefined)\n\t\t}\n\n\t\treturn new EntityFieldsWithHoistablesMarker(fields.fields, fields.subTrees, undefined)\n\t}\n\n\tpublic static createRelativeSingleEntityFields(\n\t\tfield: SugaredRelativeSingleEntity,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer,\n\t): EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer {\n\n\t\tconst relativeSingleEntity = QueryLanguage.desugarRelativeSingleEntity(field, environment)\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\treturn this.wrapRelativeEntityFieldMarkers(relativeSingleEntity.hasOneRelationPath, environment, fields)\n\t\t}\n\n\t\trelativeSingleEntity.hasOneRelationPath[relativeSingleEntity.hasOneRelationPath.length - 1] =\n\t\t\tTreeParameterMerger.mergeInParentEntity(\n\t\t\t\trelativeSingleEntity.hasOneRelationPath[relativeSingleEntity.hasOneRelationPath.length - 1],\n\t\t\t\t'eventListeners',\n\t\t\t\tfields.parentReference,\n\t\t\t)\n\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tthis.wrapRelativeEntityFieldMarkers(relativeSingleEntity.hasOneRelationPath, environment, fields.fields),\n\t\t\tfields.subTrees,\n\t\t\tundefined,\n\t\t)\n\t}\n\n\tpublic static createRelativeEntityListFields(\n\t\tfield: SugaredRelativeEntityList,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer,\n\t): EntityFieldsWithHoistablesMarker | EntityFieldMarkersContainer {\n\n\t\tconst relativeEntityList = QueryLanguage.desugarRelativeEntityList(field, environment)\n\n\t\tif (fields instanceof EntityFieldMarkersContainer) {\n\t\t\tconst hasManyRelationMarker = this.createHasManyRelationMarker(\n\t\t\t\trelativeEntityList.hasManyRelation,\n\t\t\t\tenvironment,\n\t\t\t\tfields,\n\t\t\t)\n\t\t\treturn this.wrapRelativeEntityFieldMarkers(\n\t\t\t\trelativeEntityList.hasOneRelationPath,\n\t\t\t\tenvironment.getParent(),\n\t\t\t\tthis.createEntityFieldMarkersContainer(hasManyRelationMarker),\n\t\t\t)\n\t\t}\n\n\t\trelativeEntityList.hasManyRelation = TreeParameterMerger.mergeInParentEntity(\n\t\t\trelativeEntityList.hasManyRelation,\n\t\t\t'childEventListeners',\n\t\t\tfields.parentReference,\n\t\t)\n\n\t\tconst hasManyRelationMarker = this.createHasManyRelationMarker(\n\t\t\trelativeEntityList.hasManyRelation,\n\t\t\tenvironment,\n\t\t\tfields.fields,\n\t\t)\n\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tthis.wrapRelativeEntityFieldMarkers(\n\t\t\t\trelativeEntityList.hasOneRelationPath,\n\t\t\t\tenvironment.getParent(),\n\t\t\t\tthis.createEntityFieldMarkersContainer(hasManyRelationMarker),\n\t\t\t),\n\t\t\tfields.subTrees,\n\t\t\tundefined,\n\t\t)\n\t}\n\n\tpublic static createFieldMarker(field: SugaredRelativeSingleField, environment: Environment): EntityFieldMarkersContainer {\n\n\t\treturn this.wrapRelativeSingleField(\n\t\t\tfield,\n\t\t\tenvironment,\n\t\t\trelativeSingleField => new FieldMarker(relativeSingleField),\n\t\t)\n\t}\n\n\tprivate static wrapRelativeSingleField(\n\t\tfield: SugaredRelativeSingleField,\n\t\tenvironment: Environment,\n\t\tgetMarker: (relativeSingleField: RelativeSingleField) => EntityFieldMarker,\n\t): EntityFieldMarkersContainer {\n\n\t\tconst relativeSingleField = QueryLanguage.desugarRelativeSingleField(field, environment)\n\n\t\treturn this.wrapRelativeEntityFieldMarkers(\n\t\t\trelativeSingleField.hasOneRelationPath,\n\t\t\tenvironment.getParent(),\n\t\t\tthis.createEntityFieldMarkersContainer(getMarker(relativeSingleField)),\n\t\t)\n\t}\n\n\tprivate static wrapRelativeEntityFieldMarkers(\n\t\thasOneRelationPath: HasOneRelation[],\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldMarkersContainer,\n\t): EntityFieldMarkersContainer {\n\n\t\tfor (let i = hasOneRelationPath.length - 1; i >= 0; i--) {\n\t\t\tconst marker = this.createHasOneRelationMarker(hasOneRelationPath[i], environment, fields)\n\t\t\tenvironment = environment.getParent()\n\t\t\tfields = this.createEntityFieldMarkersContainer(marker)\n\t\t}\n\n\t\treturn fields\n\t}\n\n\tpublic static createEntityFieldMarkersContainer(marker: EntityFieldMarker | undefined): EntityFieldMarkersContainer {\n\t\tif (marker instanceof FieldMarker) {\n\t\t\treturn new EntityFieldMarkersContainer(\n\t\t\t\t!marker.isNonbearing,\n\t\t\t\tnew Map([[marker.placeholderName, marker]]),\n\t\t\t\tnew Map([[marker.fieldName, marker.placeholderName]]),\n\t\t\t)\n\t\t} else if (marker instanceof HasOneRelationMarker || marker instanceof HasManyRelationMarker) {\n\t\t\treturn new EntityFieldMarkersContainer(\n\t\t\t\t!marker.parameters.isNonbearing,\n\t\t\t\tnew Map([[marker.placeholderName, marker]]),\n\t\t\t\tnew Map([[marker.parameters.field, marker.placeholderName]]),\n\t\t\t)\n\t\t} else if (marker === undefined) {\n\t\t\treturn new EntityFieldMarkersContainer(false, new Map(), new Map())\n\t\t} else {\n\t\t\treturn assertNever(marker)\n\t\t}\n\t}\n\n\tprivate static createHasOneRelationMarker(\n\t\thasOneRelation: HasOneRelation,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldMarkersContainer,\n\t): HasOneRelationMarker {\n\t\treturn new HasOneRelationMarker(\n\t\t\t{\n\t\t\t\t...hasOneRelation,\n\t\t\t\tsetOnCreate: hasOneRelation.reducedBy\n\t\t\t\t\t? TreeParameterMerger.mergeSetOnCreate(hasOneRelation.setOnCreate || {}, hasOneRelation.reducedBy)\n\t\t\t\t\t: hasOneRelation.setOnCreate,\n\t\t\t},\n\t\t\tMarkerMerger.mergeInSystemFields(fields),\n\t\t\tenvironment,\n\t\t)\n\t}\n\n\tprivate static createHasManyRelationMarker(\n\t\thasManyRelation: HasManyRelation,\n\t\tenvironment: Environment,\n\t\tfields: EntityFieldMarkersContainer,\n\t) {\n\t\treturn new HasManyRelationMarker(hasManyRelation, MarkerMerger.mergeInSystemFields(fields), environment)\n\t}\n\n\tprivate static createSubTreeMarker<\n\t\tParams extends Record<'hasOneRelationPath', HasOneRelation[]> & Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Params,\n\t>(\n\t\tqualifiedParams: Params,\n\t\tkey: Key,\n\t\tMarker: new (params: Params, fields: EntityFieldMarkersContainer, env: Environment) =>\n\t\t\t| EntitySubTreeMarker\n\t\t\t| EntityListSubTreeMarker,\n\t\tfields: EntityFieldMarkersContainer | EntityFieldsWithHoistablesMarker,\n\t\tenvironment: Environment,\n\t): EntityFieldsWithHoistablesMarker {\n\t\tlet entityFields: EntityFieldMarkersContainer | undefined\n\n\t\tif (fields instanceof EntityFieldsWithHoistablesMarker) {\n\t\t\t// TODO this is wrong with respect to hasOneRelationPath\n\t\t\tqualifiedParams = TreeParameterMerger.mergeInParentEntity(qualifiedParams, key, fields.parentReference)\n\t\t\tentityFields = fields.fields\n\t\t} else {\n\t\t\tentityFields = fields\n\t\t}\n\n\t\tconst subTree = new Marker(\n\t\t\tqualifiedParams,\n\t\t\tthis.wrapRelativeEntityFieldMarkers(\n\t\t\t\tqualifiedParams.hasOneRelationPath,\n\t\t\t\tenvironment,\n\t\t\t\tMarkerMerger.mergeInSystemFields(entityFields),\n\t\t\t),\n\t\t\tenvironment,\n\t\t)\n\t\tif (fields instanceof EntityFieldsWithHoistablesMarker) {\n\t\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\t\tthis.createEntityFieldMarkersContainer(undefined),\n\t\t\t\tMarkerMerger.mergeSubTreeMarkers(fields.subTrees, new Map([[subTree.placeholderName, subTree]])),\n\t\t\t\tundefined,\n\t\t\t)\n\t\t}\n\t\treturn new EntityFieldsWithHoistablesMarker(\n\t\t\tthis.createEntityFieldMarkersContainer(undefined),\n\t\t\tnew Map([[subTree.placeholderName, subTree]]),\n\t\t\tundefined,\n\t\t)\n\t}\n}\n"],"names":["hasManyRelationMarker"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const client = require("@contember/client");
|
|
4
3
|
const chevrotain = require("chevrotain");
|
|
5
4
|
const CacheStore = require("./CacheStore.cjs");
|
|
6
5
|
const QueryLanguageError = require("./QueryLanguageError.cjs");
|
|
@@ -235,7 +234,7 @@ const _Parser = class _Parser2 extends chevrotain.EmbeddedActionsParser {
|
|
|
235
234
|
ALT: () => {
|
|
236
235
|
const variable = this.SUBRULE(this.variable);
|
|
237
236
|
return this.ACTION(() => {
|
|
238
|
-
if (typeof variable !== "object"
|
|
237
|
+
if (typeof variable !== "object") {
|
|
239
238
|
throw new QueryLanguageError.QueryLanguageError(`Invalid filter value '${JSON.stringify(variable)}'`);
|
|
240
239
|
}
|
|
241
240
|
return variable;
|
|
@@ -413,7 +412,7 @@ const _Parser = class _Parser2 extends chevrotain.EmbeddedActionsParser {
|
|
|
413
412
|
} else {
|
|
414
413
|
if (nestedField in nestedWhere) {
|
|
415
414
|
const existingWhere = nestedWhere[nestedField];
|
|
416
|
-
if (typeof existingWhere === "object"
|
|
415
|
+
if (typeof existingWhere === "object") {
|
|
417
416
|
nestedWhere = existingWhere;
|
|
418
417
|
} else {
|
|
419
418
|
throw new QueryLanguageError.QueryLanguageError(
|
|
@@ -545,7 +544,7 @@ const _Parser = class _Parser2 extends chevrotain.EmbeddedActionsParser {
|
|
|
545
544
|
ALT: () => {
|
|
546
545
|
const variableValue = this.SUBRULE(this.variable);
|
|
547
546
|
return this.ACTION(() => {
|
|
548
|
-
if (typeof variableValue === "string" || typeof variableValue === "number"
|
|
547
|
+
if (typeof variableValue === "string" || typeof variableValue === "number") {
|
|
549
548
|
return variableValue;
|
|
550
549
|
}
|
|
551
550
|
throw new QueryLanguageError.QueryLanguageError(
|
|
@@ -621,8 +620,7 @@ const _Parser = class _Parser2 extends chevrotain.EmbeddedActionsParser {
|
|
|
621
620
|
return _Parser2.environment.getSubTree().filter;
|
|
622
621
|
}
|
|
623
622
|
if (_Parser2.environment.hasVariable(variableName)) {
|
|
624
|
-
|
|
625
|
-
return value instanceof client.GraphQlBuilder.GraphQlLiteral ? value.value : value;
|
|
623
|
+
return _Parser2.environment.getVariable(variableName);
|
|
626
624
|
}
|
|
627
625
|
if (_Parser2.environment.hasParameter(variableName)) {
|
|
628
626
|
return _Parser2.environment.getParameter(variableName);
|
|
@@ -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(
|
|
@@ -619,8 +618,7 @@ const _Parser = class _Parser2 extends EmbeddedActionsParser {
|
|
|
619
618
|
return _Parser2.environment.getSubTree().filter;
|
|
620
619
|
}
|
|
621
620
|
if (_Parser2.environment.hasVariable(variableName)) {
|
|
622
|
-
|
|
623
|
-
return value instanceof GraphQlBuilder.GraphQlLiteral ? value.value : value;
|
|
621
|
+
return _Parser2.environment.getVariable(variableName);
|
|
624
622
|
}
|
|
625
623
|
if (_Parser2.environment.hasParameter(variableName)) {
|
|
626
624
|
return _Parser2.environment.getParameter(variableName);
|