@contember/binding-common 2.0.0-alpha.19 → 2.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/development/index.cjs +2 -0
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +2 -0
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/environment/Environment.cjs.map +1 -1
- package/dist/development/src/environment/Environment.js.map +1 -1
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.cjs +3 -3
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.cjs.map +1 -1
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.js +2 -2
- package/dist/development/src/environment/TreeNodeEnvironmentFactory.js.map +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.cjs +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.cjs.map +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.js +1 -1
- package/dist/development/src/queryLanguage/MarkerFactory.js.map +1 -1
- package/dist/development/src/queryLanguage/Parser.cjs +4 -6
- package/dist/development/src/queryLanguage/Parser.cjs.map +1 -1
- package/dist/development/src/queryLanguage/Parser.js +4 -6
- package/dist/development/src/queryLanguage/Parser.js.map +1 -1
- package/dist/development/src/queryLanguage/QueryLanguage.cjs +1 -11
- package/dist/development/src/queryLanguage/QueryLanguage.cjs.map +1 -1
- package/dist/development/src/queryLanguage/QueryLanguage.js +1 -11
- package/dist/development/src/queryLanguage/QueryLanguage.js.map +1 -1
- package/dist/development/src/treeParameters/TreeParameterMerger.cjs +1 -15
- package/dist/development/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
- package/dist/development/src/treeParameters/TreeParameterMerger.js +1 -15
- package/dist/development/src/treeParameters/TreeParameterMerger.js.map +1 -1
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.cjs +2 -2
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.cjs.map +1 -1
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.js +1 -1
- package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.js.map +1 -1
- package/dist/development/src/utils/whereToFilter.cjs +16 -0
- package/dist/development/src/utils/whereToFilter.cjs.map +1 -0
- package/dist/development/src/utils/whereToFilter.js +16 -0
- package/dist/development/src/utils/whereToFilter.js.map +1 -0
- package/dist/production/index.cjs +2 -0
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +2 -0
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/environment/Environment.cjs.map +1 -1
- package/dist/production/src/environment/Environment.js.map +1 -1
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.cjs +3 -3
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.cjs.map +1 -1
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.js +2 -2
- package/dist/production/src/environment/TreeNodeEnvironmentFactory.js.map +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.cjs +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.cjs.map +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.js +1 -1
- package/dist/production/src/queryLanguage/MarkerFactory.js.map +1 -1
- package/dist/production/src/queryLanguage/Parser.cjs +4 -6
- package/dist/production/src/queryLanguage/Parser.cjs.map +1 -1
- package/dist/production/src/queryLanguage/Parser.js +4 -6
- package/dist/production/src/queryLanguage/Parser.js.map +1 -1
- package/dist/production/src/queryLanguage/QueryLanguage.cjs +1 -8
- package/dist/production/src/queryLanguage/QueryLanguage.cjs.map +1 -1
- package/dist/production/src/queryLanguage/QueryLanguage.js +1 -8
- package/dist/production/src/queryLanguage/QueryLanguage.js.map +1 -1
- package/dist/production/src/treeParameters/TreeParameterMerger.cjs +1 -15
- package/dist/production/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
- package/dist/production/src/treeParameters/TreeParameterMerger.js +1 -15
- package/dist/production/src/treeParameters/TreeParameterMerger.js.map +1 -1
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.cjs +2 -2
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.cjs.map +1 -1
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.js +1 -1
- package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.js.map +1 -1
- package/dist/production/src/utils/whereToFilter.cjs +16 -0
- package/dist/production/src/utils/whereToFilter.cjs.map +1 -0
- package/dist/production/src/utils/whereToFilter.js +16 -0
- package/dist/production/src/utils/whereToFilter.js.map +1 -0
- package/dist/types/environment/Environment.d.ts +1 -2
- package/dist/types/environment/Environment.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/queryLanguage/Parser.d.ts +2 -2
- package/dist/types/queryLanguage/Parser.d.ts.map +1 -1
- package/dist/types/queryLanguage/QueryLanguage.d.ts +1 -3
- package/dist/types/queryLanguage/QueryLanguage.d.ts.map +1 -1
- package/dist/types/treeParameters/TreeParameterMerger.d.ts.map +1 -1
- package/dist/types/treeParameters/helpers/wrapFilterInHasOnes.d.ts.map +1 -1
- package/dist/types/treeParameters/primitives/Filter.d.ts +2 -2
- package/dist/types/treeParameters/primitives/Filter.d.ts.map +1 -1
- package/dist/types/treeParameters/primitives/OrderBy.d.ts +2 -2
- package/dist/types/treeParameters/primitives/OrderBy.d.ts.map +1 -1
- package/dist/types/treeParameters/primitives/UniqueWhere.d.ts +2 -2
- package/dist/types/treeParameters/primitives/UniqueWhere.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types/BindingOperations.d.ts +0 -2
- package/dist/types/types/BindingOperations.d.ts.map +1 -1
- package/dist/types/utils/whereToFilter.d.ts +3 -0
- package/dist/types/utils/whereToFilter.d.ts.map +1 -0
- package/package.json +4 -4
- package/src/environment/Environment.ts +1 -2
- package/src/environment/TreeNodeEnvironmentFactory.ts +2 -2
- package/src/index.ts +1 -0
- package/src/queryLanguage/MarkerFactory.ts +1 -1
- package/src/queryLanguage/Parser.ts +8 -10
- package/src/queryLanguage/QueryLanguage.ts +0 -12
- package/src/treeParameters/TreeParameterMerger.ts +2 -17
- package/src/treeParameters/helpers/wrapFilterInHasOnes.ts +1 -1
- package/src/treeParameters/primitives/Filter.ts +2 -2
- package/src/treeParameters/primitives/OrderBy.ts +2 -2
- package/src/treeParameters/primitives/UniqueWhere.ts +2 -2
- package/src/types/BindingOperations.ts +0 -3
- package/src/utils/whereToFilter.ts +18 -0
- package/tests/cases/unit/queryLanguage/general.spec.tsx +2 -3
- package/tests/cases/unit/queryLanguage/orderBy.spec.tsx +0 -1
- package/tests/cases/unit/queryLanguage/singleRelativeField.spec.tsx +0 -1
- package/tests/cases/unit/whereToFilter.ts +24 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeParameterMerger.js","sources":["../../../../../packages/binding-common/src/treeParameters/TreeParameterMerger.ts"],"sourcesContent":["import { GraphQlBuilder, Writable } from '@contember/client'\nimport type {\n\tAlias,\n\tEntityEventListenerStore,\n\tEventListenersStore,\n\tExpectedQualifiedEntityMutation,\n\tExpectedRelationMutation,\n\tGenericEventsMap,\n\tHasManyRelation,\n\tHasOneRelation,\n\tParentEntityParameters,\n\tQualifiedEntityList,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSetOnCreate,\n\tUnconstrainedQualifiedEntityList,\n\tUnconstrainedQualifiedSingleEntity,\n\tUniqueWhere,\n} from '../treeParameters'\nimport { BindingError } from '../BindingError'\n\nexport class TreeParameterMerger {\n\tpublic static mergeHasOneRelationsWithSamePlaceholders(\n\t\toriginal: HasOneRelation,\n\t\tfresh: HasOneRelation,\n\t): HasOneRelation {\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\treducedBy: original.reducedBy,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeHasManyRelationsWithSamePlaceholders(\n\t\toriginal: HasManyRelation,\n\t\tfresh: HasManyRelation,\n\t): HasManyRelation {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected hasMany relations on the same field '${original.field}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\tchildEventListeners: this.mergeEventStore(\n\t\t\t\toriginal.childEventListeners,\n\t\t\t\tfresh.childEventListeners,\n\t\t\t),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntitySubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t\tfresh: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t): QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity {\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\twhere: original.where,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntityListSubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t\tfresh: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t): QualifiedEntityList | UnconstrainedQualifiedEntityList {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected sub trees of the same entity '${original.entityName}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t}\n\t}\n\n\tpublic static mergeSingleField(original: Omit<RelativeSingleField, 'hasOneRelationPath'>, fresh: Omit<RelativeSingleField, 'hasOneRelationPath'>): Omit<RelativeSingleField, 'hasOneRelationPath'> {\n\t\tif (original.defaultValue !== undefined && fresh.defaultValue !== undefined && original.defaultValue !== fresh.defaultValue) {\n\t\t\tthrow new BindingError(`MarkerTreeGenerator merging: multiple fields \"${original.field}\" with different defaultValue found: ${JSON.stringify([original.defaultValue, fresh.defaultValue])}, `)\n\t\t}\n\t\treturn {\n\t\t\tfield: original.field,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tdefaultValue: original.defaultValue ?? fresh.defaultValue,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\n\tpublic static mergeSetOnCreate(original: SetOnCreate, fresh: SetOnCreate): SetOnCreate {\n\t\tif (original === undefined && fresh === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\tconst originalCopy: Writable<UniqueWhere> = { ...original }\n\n\t\tfor (const field in fresh) {\n\t\t\tif (field in originalCopy) {\n\t\t\t\tconst fromOriginal = originalCopy[field]\n\t\t\t\tconst fromFresh = fresh[field]\n\n\t\t\t\tif (fromOriginal instanceof GraphQlBuilder.GraphQlLiteral) {\n\t\t\t\t\tif (fromFresh instanceof GraphQlBuilder.GraphQlLiteral) {\n\t\t\t\t\t\tif (fromOriginal.value === fromFresh.value) {\n\t\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromOriginal === 'object') {\n\t\t\t\t\tif (fromFresh instanceof GraphQlBuilder.GraphQlLiteral) {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t} else if (typeof fromFresh === 'object') {\n\t\t\t\t\t\tconst merged = this.mergeSetOnCreate(fromOriginal, fromFresh)\n\t\t\t\t\t\tif (merged !== undefined) {\n\t\t\t\t\t\t\toriginalCopy[field] = merged\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromFresh === 'string' || typeof fromFresh === 'number') {\n\t\t\t\t\tif (fromOriginal === fromFresh) {\n\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t} else {\n\t\t\t\toriginalCopy[field] = fresh[field]\n\t\t\t}\n\t\t}\n\n\t\treturn originalCopy\n\t}\n\n\tprivate static mergeSets<T>(original: Set<T>, fresh: Set<T>): Set<T> {\n\t\tconst combinedSet = new Set(original)\n\t\tfor (const item of fresh) {\n\t\t\tcombinedSet.add(item)\n\t\t}\n\t\treturn combinedSet\n\t}\n\n\tpublic static mergeParentEntityParameters(\n\t\toriginal: ParentEntityParameters | undefined,\n\t\tfresh: ParentEntityParameters | undefined,\n\t): ParentEntityParameters | undefined {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn {\n\t\t\teventListeners: TreeParameterMerger.mergeEventStore(\n\t\t\t\toriginal.eventListeners,\n\t\t\t\tfresh.eventListeners,\n\t\t\t),\n\t\t}\n\t}\n\n\tpublic static mergeInParentEntity<\n\t\tOriginal extends Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Original,\n\t>(original: Original, key: Key, parentEntity: ParentEntityParameters | undefined): Original {\n\t\tif (!parentEntity) {\n\t\t\treturn original\n\t\t}\n\n\t\treturn {\n\t\t\t...original,\n\t\t\t[key]: TreeParameterMerger.mergeEventStore(original[key], parentEntity.eventListeners),\n\t\t}\n\t}\n\n\n\tprivate static mergeEventStore<Events extends GenericEventsMap>(\n\t\toriginal: EventListenersStore<Events> | undefined,\n\t\tfresh: EventListenersStore<Events> | undefined,\n\t): EventListenersStore<Events> | undefined {\n\t\tif (original === undefined) {\n\t\t\tif (fresh === undefined) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn fresh\n\t\t}\n\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\n\t\tconst store = original.clone()\n\t\tstore.append(fresh)\n\n\t\treturn store\n\t}\n\n\tprivate static mergeExpectedRelationMutation(\n\t\toriginal: ExpectedRelationMutation,\n\t\tfresh: ExpectedRelationMutation,\n\t): ExpectedRelationMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeExpectedQualifiedEntityMutation(\n\t\toriginal: ExpectedQualifiedEntityMutation,\n\t\tfresh: ExpectedQualifiedEntityMutation,\n\t): ExpectedQualifiedEntityMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeSubTreeAliases(\n\t\toriginal: Set<Alias> | undefined,\n\t\tfresh: Set<Alias> | undefined,\n\t): Set<Alias> | undefined {\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn this.mergeSets(original, fresh)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeParameterMerger.js","sources":["../../../../../packages/binding-common/src/treeParameters/TreeParameterMerger.ts"],"sourcesContent":["import { Writable } from '@contember/client'\nimport type {\n\tAlias,\n\tEntityEventListenerStore,\n\tEventListenersStore,\n\tExpectedQualifiedEntityMutation,\n\tExpectedRelationMutation,\n\tGenericEventsMap,\n\tHasManyRelation,\n\tHasOneRelation,\n\tParentEntityParameters,\n\tQualifiedEntityList,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSetOnCreate,\n\tUnconstrainedQualifiedEntityList,\n\tUnconstrainedQualifiedSingleEntity,\n\tUniqueWhere,\n} from '../treeParameters'\nimport { BindingError } from '../BindingError'\n\nexport class TreeParameterMerger {\n\tpublic static mergeHasOneRelationsWithSamePlaceholders(\n\t\toriginal: HasOneRelation,\n\t\tfresh: HasOneRelation,\n\t): HasOneRelation {\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\treducedBy: original.reducedBy,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeHasManyRelationsWithSamePlaceholders(\n\t\toriginal: HasManyRelation,\n\t\tfresh: HasManyRelation,\n\t): HasManyRelation {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected hasMany relations on the same field '${original.field}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\tchildEventListeners: this.mergeEventStore(\n\t\t\t\toriginal.childEventListeners,\n\t\t\t\tfresh.childEventListeners,\n\t\t\t),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntitySubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t\tfresh: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t): QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity {\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\twhere: original.where,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntityListSubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t\tfresh: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t): QualifiedEntityList | UnconstrainedQualifiedEntityList {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected sub trees of the same entity '${original.entityName}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t}\n\t}\n\n\tpublic static mergeSingleField(original: Omit<RelativeSingleField, 'hasOneRelationPath'>, fresh: Omit<RelativeSingleField, 'hasOneRelationPath'>): Omit<RelativeSingleField, 'hasOneRelationPath'> {\n\t\tif (original.defaultValue !== undefined && fresh.defaultValue !== undefined && original.defaultValue !== fresh.defaultValue) {\n\t\t\tthrow new BindingError(`MarkerTreeGenerator merging: multiple fields \"${original.field}\" with different defaultValue found: ${JSON.stringify([original.defaultValue, fresh.defaultValue])}, `)\n\t\t}\n\t\treturn {\n\t\t\tfield: original.field,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tdefaultValue: original.defaultValue ?? fresh.defaultValue,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\n\tpublic static mergeSetOnCreate(original: SetOnCreate, fresh: SetOnCreate): SetOnCreate {\n\t\tif (original === undefined && fresh === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\tconst originalCopy: Writable<UniqueWhere> = { ...original }\n\n\t\tfor (const field in fresh) {\n\t\t\tif (field in originalCopy) {\n\t\t\t\tconst fromOriginal = originalCopy[field]\n\t\t\t\tconst fromFresh = fresh[field]\n\t\t\t\tif (typeof fromOriginal === 'object') {\n\t\t\t\t\tif (typeof fromFresh === 'object') {\n\t\t\t\t\t\tconst merged = this.mergeSetOnCreate(fromOriginal, fromFresh)\n\t\t\t\t\t\tif (merged !== undefined) {\n\t\t\t\t\t\t\toriginalCopy[field] = merged\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromFresh === 'string' || typeof fromFresh === 'number') {\n\t\t\t\t\tif (fromOriginal === fromFresh) {\n\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t} else {\n\t\t\t\toriginalCopy[field] = fresh[field]\n\t\t\t}\n\t\t}\n\n\t\treturn originalCopy\n\t}\n\n\tprivate static mergeSets<T>(original: Set<T>, fresh: Set<T>): Set<T> {\n\t\tconst combinedSet = new Set(original)\n\t\tfor (const item of fresh) {\n\t\t\tcombinedSet.add(item)\n\t\t}\n\t\treturn combinedSet\n\t}\n\n\tpublic static mergeParentEntityParameters(\n\t\toriginal: ParentEntityParameters | undefined,\n\t\tfresh: ParentEntityParameters | undefined,\n\t): ParentEntityParameters | undefined {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn {\n\t\t\teventListeners: TreeParameterMerger.mergeEventStore(\n\t\t\t\toriginal.eventListeners,\n\t\t\t\tfresh.eventListeners,\n\t\t\t),\n\t\t}\n\t}\n\n\tpublic static mergeInParentEntity<\n\t\tOriginal extends Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Original,\n\t>(original: Original, key: Key, parentEntity: ParentEntityParameters | undefined): Original {\n\t\tif (!parentEntity) {\n\t\t\treturn original\n\t\t}\n\n\t\treturn {\n\t\t\t...original,\n\t\t\t[key]: TreeParameterMerger.mergeEventStore(original[key], parentEntity.eventListeners),\n\t\t}\n\t}\n\n\n\tprivate static mergeEventStore<Events extends GenericEventsMap>(\n\t\toriginal: EventListenersStore<Events> | undefined,\n\t\tfresh: EventListenersStore<Events> | undefined,\n\t): EventListenersStore<Events> | undefined {\n\t\tif (original === undefined) {\n\t\t\tif (fresh === undefined) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn fresh\n\t\t}\n\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\n\t\tconst store = original.clone()\n\t\tstore.append(fresh)\n\n\t\treturn store\n\t}\n\n\tprivate static mergeExpectedRelationMutation(\n\t\toriginal: ExpectedRelationMutation,\n\t\tfresh: ExpectedRelationMutation,\n\t): ExpectedRelationMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeExpectedQualifiedEntityMutation(\n\t\toriginal: ExpectedQualifiedEntityMutation,\n\t\tfresh: ExpectedQualifiedEntityMutation,\n\t): ExpectedQualifiedEntityMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeSubTreeAliases(\n\t\toriginal: Set<Alias> | undefined,\n\t\tfresh: Set<Alias> | undefined,\n\t): Set<Alias> | undefined {\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn this.mergeSets(original, fresh)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
3
|
+
const whereToFilter = require("../../utils/whereToFilter.cjs");
|
|
4
4
|
const wrapFilterInHasOnes = (path, filter) => {
|
|
5
5
|
for (let i = path.length - 1; i >= 0; i--) {
|
|
6
6
|
const current = path[i];
|
|
@@ -11,7 +11,7 @@ const wrapFilterInHasOnes = (path, filter) => {
|
|
|
11
11
|
} else {
|
|
12
12
|
filter = {
|
|
13
13
|
[current.field]: {
|
|
14
|
-
and: [filter,
|
|
14
|
+
and: [filter, whereToFilter.whereToFilter(current.reducedBy)]
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapFilterInHasOnes.cjs","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"wrapFilterInHasOnes.cjs","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import type { Filter, HasOneRelation } from '../../treeParameters'\nimport { whereToFilter } from '../../utils/whereToFilter'\n\nexport const wrapFilterInHasOnes = (path: HasOneRelation[], filter: Filter): Filter => {\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst current = path[i]\n\n\t\tif (current.reducedBy === undefined) {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: filter,\n\t\t\t}\n\t\t} else {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: {\n\t\t\t\t\tand: [filter, whereToFilter(current.reducedBy)],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\treturn filter\n}\n"],"names":["whereToFilter"],"mappings":";;;AAGa,MAAA,sBAAsB,CAAC,MAAwB,WAA2B;AACtF,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,UAAA,UAAU,KAAK,CAAC;AAElB,QAAA,QAAQ,cAAc,QAAW;AAC3B,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,MAAA;AAAA,IAClB,OACM;AACG,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,UAChB,KAAK,CAAC,QAAQA,cAAc,cAAA,QAAQ,SAAS,CAAC;AAAA,QAC/C;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AACO,SAAA;AACR;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapFilterInHasOnes.js","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"wrapFilterInHasOnes.js","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import type { Filter, HasOneRelation } from '../../treeParameters'\nimport { whereToFilter } from '../../utils/whereToFilter'\n\nexport const wrapFilterInHasOnes = (path: HasOneRelation[], filter: Filter): Filter => {\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst current = path[i]\n\n\t\tif (current.reducedBy === undefined) {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: filter,\n\t\t\t}\n\t\t} else {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: {\n\t\t\t\t\tand: [filter, whereToFilter(current.reducedBy)],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\treturn filter\n}\n"],"names":[],"mappings":";AAGa,MAAA,sBAAsB,CAAC,MAAwB,WAA2B;AACtF,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,UAAA,UAAU,KAAK,CAAC;AAElB,QAAA,QAAQ,cAAc,QAAW;AAC3B,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,MAAA;AAAA,IAClB,OACM;AACG,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,UAChB,KAAK,CAAC,QAAQ,cAAc,QAAQ,SAAS,CAAC;AAAA,QAC/C;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AACO,SAAA;AACR;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const whereToFilter = (by) => {
|
|
4
|
+
const where = {};
|
|
5
|
+
for (const key in by) {
|
|
6
|
+
const value = by[key];
|
|
7
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
8
|
+
where[key] = { eq: value };
|
|
9
|
+
} else {
|
|
10
|
+
where[key] = whereToFilter(value);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return where;
|
|
14
|
+
};
|
|
15
|
+
exports.whereToFilter = whereToFilter;
|
|
16
|
+
//# sourceMappingURL=whereToFilter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whereToFilter.cjs","sources":["../../../../../packages/binding-common/src/utils/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/client'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere,\n): Input.Where<Input.Condition<Input.ColumnValue>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";;AAEa,MAAA,gBAAgB,CAC5B,OACqD;AACrD,QAAM,QAAmE,CAAA;AACzE,aAAW,OAAO,IAAI;AACf,UAAA,QAAQ,GAAG,GAAG;AAEpB,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,YAAM,GAAG,IAAI,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,GAAG,IAAI,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const whereToFilter = (by) => {
|
|
2
|
+
const where = {};
|
|
3
|
+
for (const key in by) {
|
|
4
|
+
const value = by[key];
|
|
5
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
6
|
+
where[key] = { eq: value };
|
|
7
|
+
} else {
|
|
8
|
+
where[key] = whereToFilter(value);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return where;
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
whereToFilter
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=whereToFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whereToFilter.js","sources":["../../../../../packages/binding-common/src/utils/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/client'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere,\n): Input.Where<Input.Condition<Input.ColumnValue>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":"AAEa,MAAA,gBAAgB,CAC5B,OACqD;AACrD,QAAM,QAAmE,CAAA;AACzE,aAAW,OAAO,IAAI;AACf,UAAA,QAAQ,GAAG,GAAG;AAEpB,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,YAAM,GAAG,IAAI,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,GAAG,IAAI,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;"}
|
|
@@ -8,6 +8,7 @@ const RuntimeId = require("./src/RuntimeId.cjs");
|
|
|
8
8
|
const TreeNodeUtils = require("./src/utils/TreeNodeUtils.cjs");
|
|
9
9
|
const assertNever = require("./src/utils/assertNever.cjs");
|
|
10
10
|
const createQueryBuilder = require("./src/utils/createQueryBuilder.cjs");
|
|
11
|
+
const whereToFilter = require("./src/utils/whereToFilter.cjs");
|
|
11
12
|
const uuid = require("uuid");
|
|
12
13
|
const EntityFieldMarkersContainer = require("./src/markers/EntityFieldMarkersContainer.cjs");
|
|
13
14
|
const EntityFieldsWithHoistablesMarker = require("./src/markers/EntityFieldsWithHoistablesMarker.cjs");
|
|
@@ -55,6 +56,7 @@ exports.UnpersistedEntityDummyId = RuntimeId.UnpersistedEntityDummyId;
|
|
|
55
56
|
exports.TreeNodeUtils = TreeNodeUtils.TreeNodeUtils;
|
|
56
57
|
exports.assertNever = assertNever.assertNever;
|
|
57
58
|
exports.createQueryBuilder = createQueryBuilder.createQueryBuilder;
|
|
59
|
+
exports.whereToFilter = whereToFilter.whereToFilter;
|
|
58
60
|
Object.defineProperty(exports, "generateUuid", {
|
|
59
61
|
enumerable: true,
|
|
60
62
|
get: () => uuid.v4
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/production/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { ClientGeneratedUuid, ServerId, UnpersistedEntityDummyId } from "./src/R
|
|
|
6
6
|
import { TreeNodeUtils } from "./src/utils/TreeNodeUtils.js";
|
|
7
7
|
import { assertNever } from "./src/utils/assertNever.js";
|
|
8
8
|
import { createQueryBuilder } from "./src/utils/createQueryBuilder.js";
|
|
9
|
+
import { whereToFilter } from "./src/utils/whereToFilter.js";
|
|
9
10
|
import { v4 } from "uuid";
|
|
10
11
|
import { EntityFieldMarkersContainer } from "./src/markers/EntityFieldMarkersContainer.js";
|
|
11
12
|
import { EntityFieldsWithHoistablesMarker } from "./src/markers/EntityFieldsWithHoistablesMarker.js";
|
|
@@ -93,6 +94,7 @@ export {
|
|
|
93
94
|
throwBindingError,
|
|
94
95
|
tokenList,
|
|
95
96
|
tokens,
|
|
97
|
+
whereToFilter,
|
|
96
98
|
wrapFilterInHasOnes
|
|
97
99
|
};
|
|
98
100
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environment.cjs","sources":["../../../../../packages/binding-common/src/environment/Environment.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport type { Filter } from '../treeParameters'\nimport equal from 'fast-deep-equal/es6/index.js'\nimport { Schema, SchemaColumn, SchemaEntity, SchemaRelation } from '../schema'\nimport { GraphQlLiteral } from '@contember/client'\n\nclass Environment<Node extends Environment.AnyNode | undefined = Environment.AnyNode | undefined> {\n\tprivate constructor(\n\t\tprivate readonly options: Environment.Options<Node>,\n\t) {\n\t}\n\n\tpublic static create() {\n\t\treturn new Environment({\n\t\t\tdimensions: {},\n\t\t\tvariables: {},\n\t\t\tparameters: {},\n\t\t\textensions: new Map(),\n\t\t})\n\t}\n\n\tpublic getSubTree(): Environment.SubTreeNode {\n\t\tfor (let env: Environment = this; env.options.node; env = env.getParent()) {\n\t\t\tconst node = env.options.node\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn node\n\t\t\t}\n\t\t}\n\t\tthrow new BindingError('Not in a SubTree')\n\t}\n\n\tpublic getSubTreeNode(): Node & Environment.AnyNode {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn this.options.node\n\t}\n\n\tpublic withSubTree<Node extends Environment.SubTreeNode>(SubTree: Node): Environment<Node> {\n\t\tconst { parent, ...options } = this.options\n\t\treturn new Environment({\n\t\t\t...options,\n\t\t\tnode: SubTree,\n\t\t})\n\t}\n\n\tpublic withSubTreeChild<Node extends Environment.InnerNode>(node: Node): Environment<Node> {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError(`Cannot call withSubTreeChild without previous call of withSubTree`)\n\t\t}\n\t\tif (this.options.node.entity.fields.get(node.field.name) !== node.field) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tnode,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\n\tpublic hasVariable(key: string): boolean {\n\t\treturn key in this.options.variables\n\t}\n\n\tpublic getVariable<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tif (!(key in this.options.variables)) {\n\t\t\tthrow new BindingError(`Variable ${key} not found`)\n\t\t}\n\t\treturn this.options.variables[key] as V\n\t}\n\n\tpublic getVariableOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\treturn (this.options.variables[key] as V) ?? fallback\n\t}\n\n\t/** @deprecated use getVariable or getParameter */\n\tpublic getValue<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tconsole.warn('Environment.getValue() is deprecated, use Environment.getVariable() or Environment.getParameter() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, undefined) as V\n\t}\n\n\t/** @deprecated use getVariableOrElse or getParameterOrElse */\n\tpublic getValueOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\tconsole.warn('Environment.getValueOrElse() is deprecated, use Environment.getVariableOrElse() or Environment.getParameterOrElse() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, fallback) as any\n\t}\n\n\t/** @deprecated */\n\tpublic hasName(key: string): boolean {\n\t\tconsole.warn('Environment.hasName() is deprecated, use Environment.hasVariable() or Environment.hasParameter() instead.')\n\t\treturn key in this.options.variables || key in this.options.parameters\n\t}\n\n\tpublic withVariables(variables: Environment.ValuesMapWithFactory | undefined): Environment {\n\t\tif (variables === undefined) {\n\t\t\treturn this\n\t\t}\n\t\tconst newVariables = { ...this.options.variables }\n\t\tfor (const [newName, newValue] of Object.entries(variables)) {\n\t\t\tif (newName === 'labelMiddleware') {\n\t\t\t\tthrow new BindingError('You cannot pass labelMiddleware to withVariables method. Use withLabelMiddleware instead.')\n\t\t\t}\n\t\t\tconst resolvedValue = typeof newValue === 'function' ? newValue(this) : newValue\n\t\t\tif (resolvedValue === undefined) {\n\t\t\t\tdelete newVariables[newName]\n\t\t\t} else {\n\t\t\t\tnewVariables[newName] = resolvedValue\n\t\t\t}\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tvariables: newVariables,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\tpublic getAllVariables() {\n\t\treturn this.options.variables\n\t}\n\n\tpublic hasParameter(key: string): boolean {\n\t\treturn key in this.options.parameters\n\t}\n\n\tpublic getParameter<F>(key: string): string | number {\n\t\tif (!(key in this.options.parameters)) {\n\t\t\tthrow new BindingError(`Parameter ${key} not found`)\n\t\t}\n\t\treturn this.options.parameters[key] as string | number\n\t}\n\n\tpublic getParameterOrElse<F>(key: string, fallback: F): string | number | F {\n\t\treturn this.options.parameters[key] ?? fallback\n\t}\n\n\tpublic getAllParameters() {\n\t\treturn this.options.parameters\n\t}\n\n\tpublic withParameters(parameters: Environment.Parameters): Environment {\n\t\treturn new Environment({ ...this.options, parameters })\n\t}\n\n\tpublic hasDimension(dimensionName: string): boolean {\n\t\treturn dimensionName in this.options.dimensions\n\t}\n\n\tpublic getDimension<F>(dimensionName: string): string[] {\n\t\tif (!(dimensionName in this.options.dimensions)) {\n\t\t\tthrow new BindingError(`Dimension ${dimensionName} does not exist.`)\n\t\t}\n\t\treturn this.options.dimensions[dimensionName]\n\t}\n\n\tpublic getDimensionOrElse<F>(dimensionName: string, fallback: F): string[] | F {\n\t\treturn this.options.dimensions[dimensionName] ?? fallback\n\t}\n\n\tpublic getAllDimensions(): Environment.SelectedDimensions {\n\t\treturn this.options.dimensions\n\t}\n\n\tpublic withDimensions(dimensions: Environment.SelectedDimensions): Environment {\n\t\tconst newDimensions = {\n\t\t\t...this.options.dimensions,\n\t\t\t...dimensions,\n\t\t}\n\t\tif (equal(newDimensions, this.options.dimensions)) {\n\t\t\treturn this\n\t\t}\n\t\treturn new Environment({ ...this.options, dimensions: newDimensions })\n\t}\n\n\thasSchema(): boolean {\n\t\treturn this.options.schema !== undefined\n\t}\n\n\tpublic getSchema(): Schema {\n\t\tif (!this.options.schema) {\n\t\t\tthrow new BindingError('Schema is not set')\n\t\t}\n\t\treturn this.options.schema\n\t}\n\n\tpublic withSchema(schema: Schema): Environment {\n\t\treturn new Environment({ ...this.options, schema })\n\t}\n\n\tpublic getParent(): Environment {\n\t\tif (!this.options.parent) {\n\t\t\tthrow new BindingError('There is no parent environment')\n\t\t}\n\t\treturn this.options.parent\n\t}\n\n\tpublic withExtension<S, R>(extension: Environment.Extension<S, R>, state: S): Environment {\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\textensions: new Map([...this.options.extensions, [extension, state] as [Environment.Extension<unknown, unknown>, unknown]]),\n\t\t})\n\t}\n\n\tpublic getExtension<S, R>(extension: Environment.Extension<S, R>): R {\n\t\tconst state = this.options.extensions.get(extension as Environment.Extension<unknown, unknown>)\n\t\treturn extension.create(state as S, this)\n\t}\n\n\tpublic merge(other: Environment): Environment {\n\t\tif (other === this) {\n\t\t\treturn this\n\t\t}\n\t\tif (!equal(this.options.node, other.options.node)) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different tree position.`)\n\t\t}\n\t\tif (this.options.parameters !== other.options.parameters) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different parameters.`)\n\t\t}\n\t\tif (this.options.dimensions !== other.options.dimensions) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different dimensions.`)\n\t\t}\n\t\tif (this.options.extensions !== other.options.extensions) {\n\t\t\t// todo: deep compare?\n\t\t\tthrow new BindingError(`Cannot merge two environments with different extensions.`)\n\t\t}\n\n\t\tif (equal(this.options.variables, other.options.variables) && this.options.parent === other.options.parent) {\n\t\t\treturn this\n\t\t}\n\t\tfor (const key in other.options.variables) {\n\t\t\tif (key in this.options.variables && !equal(this.options.variables[key], other.options.variables[key])) {\n\t\t\t\tthrow new BindingError(`Cannot merge two environments with different value of variable ${key}:\\n`\n\t\t\t\t\t+ JSON.stringify(this.options.variables[key]) + '\\n'\n\t\t\t\t\t+ JSON.stringify(other.options.variables[key]))\n\t\t\t}\n\t\t}\n\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tparent: this.options.parent && other.options.parent ? this.options.parent.merge(other.options.parent) : undefined,\n\t\t\tvariables: { ...this.options.variables, ...other.options.variables },\n\t\t})\n\t}\n}\n\nnamespace Environment {\n\texport type Name = string\n\n\texport type ReactElementLike = {\n\t\ttype: any\n\t\tprops: any\n\t}\n\n\texport type Value = string | number | boolean | undefined | GraphQlLiteral | Filter | ReactElementLike\n\n\texport type ResolvedValue = Value\n\n\texport interface Options<Node extends AnyNode | undefined> {\n\t\tnode?: Node\n\t\tschema?: Schema\n\t\tdimensions: SelectedDimensions\n\t\tparameters: Parameters\n\t\tvariables: CustomVariables\n\t\tparent?: Environment\n\t\textensions: Map<Extension<unknown, unknown>, unknown>\n\t}\n\n\texport type SubTreeNode =\n\t\t| SubTreeEntityNode\n\t\t| SubTreeEntityListNode\n\n\texport type InnerNode =\n\t\t| EntityNode\n\t\t| EntityListNode\n\t\t| ColumnNode\n\n\texport type AnyNode =\n\t\t| SubTreeNode\n\t\t| InnerNode\n\n\texport interface SubTreeEntityNode {\n\t\ttype: 'subtree-entity'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero' | 'one' | 'zero-or-one'\n\t\tfilter: Filter\n\t}\n\n\texport interface SubTreeEntityListNode {\n\t\ttype: 'subtree-entity-list'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero-to-many' | 'zero'\n\t\tfilter: Filter\n\t}\n\n\texport interface EntityNode {\n\t\ttype: 'entity'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface EntityListNode {\n\t\ttype: 'entity-list'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface ColumnNode {\n\t\ttype: 'column'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaColumn\n\t}\n\n\texport interface SelectedDimensions {\n\t\t[key: string]: string[]\n\t}\n\n\texport type Parameters = {\n\t\t[K in string]?: string | number\n\t}\n\n\texport interface CustomVariables {\n\t\t[key: string]: Value\n\t}\n\n\texport interface ValuesMapWithFactory {\n\t\t[key: string]:\n\t\t\t| ((environment: Environment) => Value)\n\t\t\t| Value\n\t}\n\n\texport type Extension<State, Result> = {\n\t\tcreate: (state: State | undefined, environment: Environment) => Result\n\t}\n\n\texport const createExtension = <S, R>(create: Extension<S, R>['create'], otherMethods?: Omit<Extension<S, R>, 'create'>): Extension<S, R> => {\n\t\treturn {\n\t\t\tcreate,\n\t\t\t...otherMethods,\n\t\t}\n\t}\n\n\t/** @deprecated */\n\texport type DeltaFactory = ValuesMapWithFactory\n}\n\nexport { Environment }\n"],"names":["BindingError","Environment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Environment.cjs","sources":["../../../../../packages/binding-common/src/environment/Environment.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport type { Filter } from '../treeParameters'\nimport equal from 'fast-deep-equal/es6/index.js'\nimport { Schema, SchemaColumn, SchemaEntity, SchemaRelation } from '../schema'\n\nclass Environment<Node extends Environment.AnyNode | undefined = Environment.AnyNode | undefined> {\n\tprivate constructor(\n\t\tprivate readonly options: Environment.Options<Node>,\n\t) {\n\t}\n\n\tpublic static create() {\n\t\treturn new Environment({\n\t\t\tdimensions: {},\n\t\t\tvariables: {},\n\t\t\tparameters: {},\n\t\t\textensions: new Map(),\n\t\t})\n\t}\n\n\tpublic getSubTree(): Environment.SubTreeNode {\n\t\tfor (let env: Environment = this; env.options.node; env = env.getParent()) {\n\t\t\tconst node = env.options.node\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn node\n\t\t\t}\n\t\t}\n\t\tthrow new BindingError('Not in a SubTree')\n\t}\n\n\tpublic getSubTreeNode(): Node & Environment.AnyNode {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn this.options.node\n\t}\n\n\tpublic withSubTree<Node extends Environment.SubTreeNode>(SubTree: Node): Environment<Node> {\n\t\tconst { parent, ...options } = this.options\n\t\treturn new Environment({\n\t\t\t...options,\n\t\t\tnode: SubTree,\n\t\t})\n\t}\n\n\tpublic withSubTreeChild<Node extends Environment.InnerNode>(node: Node): Environment<Node> {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError(`Cannot call withSubTreeChild without previous call of withSubTree`)\n\t\t}\n\t\tif (this.options.node.entity.fields.get(node.field.name) !== node.field) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tnode,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\n\tpublic hasVariable(key: string): boolean {\n\t\treturn key in this.options.variables\n\t}\n\n\tpublic getVariable<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tif (!(key in this.options.variables)) {\n\t\t\tthrow new BindingError(`Variable ${key} not found`)\n\t\t}\n\t\treturn this.options.variables[key] as V\n\t}\n\n\tpublic getVariableOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\treturn (this.options.variables[key] as V) ?? fallback\n\t}\n\n\t/** @deprecated use getVariable or getParameter */\n\tpublic getValue<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tconsole.warn('Environment.getValue() is deprecated, use Environment.getVariable() or Environment.getParameter() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, undefined) as V\n\t}\n\n\t/** @deprecated use getVariableOrElse or getParameterOrElse */\n\tpublic getValueOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\tconsole.warn('Environment.getValueOrElse() is deprecated, use Environment.getVariableOrElse() or Environment.getParameterOrElse() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, fallback) as any\n\t}\n\n\t/** @deprecated */\n\tpublic hasName(key: string): boolean {\n\t\tconsole.warn('Environment.hasName() is deprecated, use Environment.hasVariable() or Environment.hasParameter() instead.')\n\t\treturn key in this.options.variables || key in this.options.parameters\n\t}\n\n\tpublic withVariables(variables: Environment.ValuesMapWithFactory | undefined): Environment {\n\t\tif (variables === undefined) {\n\t\t\treturn this\n\t\t}\n\t\tconst newVariables = { ...this.options.variables }\n\t\tfor (const [newName, newValue] of Object.entries(variables)) {\n\t\t\tif (newName === 'labelMiddleware') {\n\t\t\t\tthrow new BindingError('You cannot pass labelMiddleware to withVariables method. Use withLabelMiddleware instead.')\n\t\t\t}\n\t\t\tconst resolvedValue = typeof newValue === 'function' ? newValue(this) : newValue\n\t\t\tif (resolvedValue === undefined) {\n\t\t\t\tdelete newVariables[newName]\n\t\t\t} else {\n\t\t\t\tnewVariables[newName] = resolvedValue\n\t\t\t}\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tvariables: newVariables,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\tpublic getAllVariables() {\n\t\treturn this.options.variables\n\t}\n\n\tpublic hasParameter(key: string): boolean {\n\t\treturn key in this.options.parameters\n\t}\n\n\tpublic getParameter<F>(key: string): string | number {\n\t\tif (!(key in this.options.parameters)) {\n\t\t\tthrow new BindingError(`Parameter ${key} not found`)\n\t\t}\n\t\treturn this.options.parameters[key] as string | number\n\t}\n\n\tpublic getParameterOrElse<F>(key: string, fallback: F): string | number | F {\n\t\treturn this.options.parameters[key] ?? fallback\n\t}\n\n\tpublic getAllParameters() {\n\t\treturn this.options.parameters\n\t}\n\n\tpublic withParameters(parameters: Environment.Parameters): Environment {\n\t\treturn new Environment({ ...this.options, parameters })\n\t}\n\n\tpublic hasDimension(dimensionName: string): boolean {\n\t\treturn dimensionName in this.options.dimensions\n\t}\n\n\tpublic getDimension<F>(dimensionName: string): string[] {\n\t\tif (!(dimensionName in this.options.dimensions)) {\n\t\t\tthrow new BindingError(`Dimension ${dimensionName} does not exist.`)\n\t\t}\n\t\treturn this.options.dimensions[dimensionName]\n\t}\n\n\tpublic getDimensionOrElse<F>(dimensionName: string, fallback: F): string[] | F {\n\t\treturn this.options.dimensions[dimensionName] ?? fallback\n\t}\n\n\tpublic getAllDimensions(): Environment.SelectedDimensions {\n\t\treturn this.options.dimensions\n\t}\n\n\tpublic withDimensions(dimensions: Environment.SelectedDimensions): Environment {\n\t\tconst newDimensions = {\n\t\t\t...this.options.dimensions,\n\t\t\t...dimensions,\n\t\t}\n\t\tif (equal(newDimensions, this.options.dimensions)) {\n\t\t\treturn this\n\t\t}\n\t\treturn new Environment({ ...this.options, dimensions: newDimensions })\n\t}\n\n\thasSchema(): boolean {\n\t\treturn this.options.schema !== undefined\n\t}\n\n\tpublic getSchema(): Schema {\n\t\tif (!this.options.schema) {\n\t\t\tthrow new BindingError('Schema is not set')\n\t\t}\n\t\treturn this.options.schema\n\t}\n\n\tpublic withSchema(schema: Schema): Environment {\n\t\treturn new Environment({ ...this.options, schema })\n\t}\n\n\tpublic getParent(): Environment {\n\t\tif (!this.options.parent) {\n\t\t\tthrow new BindingError('There is no parent environment')\n\t\t}\n\t\treturn this.options.parent\n\t}\n\n\tpublic withExtension<S, R>(extension: Environment.Extension<S, R>, state: S): Environment {\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\textensions: new Map([...this.options.extensions, [extension, state] as [Environment.Extension<unknown, unknown>, unknown]]),\n\t\t})\n\t}\n\n\tpublic getExtension<S, R>(extension: Environment.Extension<S, R>): R {\n\t\tconst state = this.options.extensions.get(extension as Environment.Extension<unknown, unknown>)\n\t\treturn extension.create(state as S, this)\n\t}\n\n\tpublic merge(other: Environment): Environment {\n\t\tif (other === this) {\n\t\t\treturn this\n\t\t}\n\t\tif (!equal(this.options.node, other.options.node)) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different tree position.`)\n\t\t}\n\t\tif (this.options.parameters !== other.options.parameters) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different parameters.`)\n\t\t}\n\t\tif (this.options.dimensions !== other.options.dimensions) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different dimensions.`)\n\t\t}\n\t\tif (this.options.extensions !== other.options.extensions) {\n\t\t\t// todo: deep compare?\n\t\t\tthrow new BindingError(`Cannot merge two environments with different extensions.`)\n\t\t}\n\n\t\tif (equal(this.options.variables, other.options.variables) && this.options.parent === other.options.parent) {\n\t\t\treturn this\n\t\t}\n\t\tfor (const key in other.options.variables) {\n\t\t\tif (key in this.options.variables && !equal(this.options.variables[key], other.options.variables[key])) {\n\t\t\t\tthrow new BindingError(`Cannot merge two environments with different value of variable ${key}:\\n`\n\t\t\t\t\t+ JSON.stringify(this.options.variables[key]) + '\\n'\n\t\t\t\t\t+ JSON.stringify(other.options.variables[key]))\n\t\t\t}\n\t\t}\n\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tparent: this.options.parent && other.options.parent ? this.options.parent.merge(other.options.parent) : undefined,\n\t\t\tvariables: { ...this.options.variables, ...other.options.variables },\n\t\t})\n\t}\n}\n\nnamespace Environment {\n\texport type Name = string\n\n\texport type ReactElementLike = {\n\t\ttype: any\n\t\tprops: any\n\t}\n\n\texport type Value = string | number | boolean | undefined | Filter | ReactElementLike\n\n\texport type ResolvedValue = Value\n\n\texport interface Options<Node extends AnyNode | undefined> {\n\t\tnode?: Node\n\t\tschema?: Schema\n\t\tdimensions: SelectedDimensions\n\t\tparameters: Parameters\n\t\tvariables: CustomVariables\n\t\tparent?: Environment\n\t\textensions: Map<Extension<unknown, unknown>, unknown>\n\t}\n\n\texport type SubTreeNode =\n\t\t| SubTreeEntityNode\n\t\t| SubTreeEntityListNode\n\n\texport type InnerNode =\n\t\t| EntityNode\n\t\t| EntityListNode\n\t\t| ColumnNode\n\n\texport type AnyNode =\n\t\t| SubTreeNode\n\t\t| InnerNode\n\n\texport interface SubTreeEntityNode {\n\t\ttype: 'subtree-entity'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero' | 'one' | 'zero-or-one'\n\t\tfilter: Filter\n\t}\n\n\texport interface SubTreeEntityListNode {\n\t\ttype: 'subtree-entity-list'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero-to-many' | 'zero'\n\t\tfilter: Filter\n\t}\n\n\texport interface EntityNode {\n\t\ttype: 'entity'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface EntityListNode {\n\t\ttype: 'entity-list'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface ColumnNode {\n\t\ttype: 'column'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaColumn\n\t}\n\n\texport interface SelectedDimensions {\n\t\t[key: string]: string[]\n\t}\n\n\texport type Parameters = {\n\t\t[K in string]?: string | number\n\t}\n\n\texport interface CustomVariables {\n\t\t[key: string]: Value\n\t}\n\n\texport interface ValuesMapWithFactory {\n\t\t[key: string]:\n\t\t\t| ((environment: Environment) => Value)\n\t\t\t| Value\n\t}\n\n\texport type Extension<State, Result> = {\n\t\tcreate: (state: State | undefined, environment: Environment) => Result\n\t}\n\n\texport const createExtension = <S, R>(create: Extension<S, R>['create'], otherMethods?: Omit<Extension<S, R>, 'create'>): Extension<S, R> => {\n\t\treturn {\n\t\t\tcreate,\n\t\t\t...otherMethods,\n\t\t}\n\t}\n\n\t/** @deprecated */\n\texport type DeltaFactory = ValuesMapWithFactory\n}\n\nexport { Environment }\n"],"names":["BindingError","Environment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environment.js","sources":["../../../../../packages/binding-common/src/environment/Environment.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport type { Filter } from '../treeParameters'\nimport equal from 'fast-deep-equal/es6/index.js'\nimport { Schema, SchemaColumn, SchemaEntity, SchemaRelation } from '../schema'\nimport { GraphQlLiteral } from '@contember/client'\n\nclass Environment<Node extends Environment.AnyNode | undefined = Environment.AnyNode | undefined> {\n\tprivate constructor(\n\t\tprivate readonly options: Environment.Options<Node>,\n\t) {\n\t}\n\n\tpublic static create() {\n\t\treturn new Environment({\n\t\t\tdimensions: {},\n\t\t\tvariables: {},\n\t\t\tparameters: {},\n\t\t\textensions: new Map(),\n\t\t})\n\t}\n\n\tpublic getSubTree(): Environment.SubTreeNode {\n\t\tfor (let env: Environment = this; env.options.node; env = env.getParent()) {\n\t\t\tconst node = env.options.node\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn node\n\t\t\t}\n\t\t}\n\t\tthrow new BindingError('Not in a SubTree')\n\t}\n\n\tpublic getSubTreeNode(): Node & Environment.AnyNode {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn this.options.node\n\t}\n\n\tpublic withSubTree<Node extends Environment.SubTreeNode>(SubTree: Node): Environment<Node> {\n\t\tconst { parent, ...options } = this.options\n\t\treturn new Environment({\n\t\t\t...options,\n\t\t\tnode: SubTree,\n\t\t})\n\t}\n\n\tpublic withSubTreeChild<Node extends Environment.InnerNode>(node: Node): Environment<Node> {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError(`Cannot call withSubTreeChild without previous call of withSubTree`)\n\t\t}\n\t\tif (this.options.node.entity.fields.get(node.field.name) !== node.field) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tnode,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\n\tpublic hasVariable(key: string): boolean {\n\t\treturn key in this.options.variables\n\t}\n\n\tpublic getVariable<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tif (!(key in this.options.variables)) {\n\t\t\tthrow new BindingError(`Variable ${key} not found`)\n\t\t}\n\t\treturn this.options.variables[key] as V\n\t}\n\n\tpublic getVariableOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\treturn (this.options.variables[key] as V) ?? fallback\n\t}\n\n\t/** @deprecated use getVariable or getParameter */\n\tpublic getValue<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tconsole.warn('Environment.getValue() is deprecated, use Environment.getVariable() or Environment.getParameter() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, undefined) as V\n\t}\n\n\t/** @deprecated use getVariableOrElse or getParameterOrElse */\n\tpublic getValueOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\tconsole.warn('Environment.getValueOrElse() is deprecated, use Environment.getVariableOrElse() or Environment.getParameterOrElse() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, fallback) as any\n\t}\n\n\t/** @deprecated */\n\tpublic hasName(key: string): boolean {\n\t\tconsole.warn('Environment.hasName() is deprecated, use Environment.hasVariable() or Environment.hasParameter() instead.')\n\t\treturn key in this.options.variables || key in this.options.parameters\n\t}\n\n\tpublic withVariables(variables: Environment.ValuesMapWithFactory | undefined): Environment {\n\t\tif (variables === undefined) {\n\t\t\treturn this\n\t\t}\n\t\tconst newVariables = { ...this.options.variables }\n\t\tfor (const [newName, newValue] of Object.entries(variables)) {\n\t\t\tif (newName === 'labelMiddleware') {\n\t\t\t\tthrow new BindingError('You cannot pass labelMiddleware to withVariables method. Use withLabelMiddleware instead.')\n\t\t\t}\n\t\t\tconst resolvedValue = typeof newValue === 'function' ? newValue(this) : newValue\n\t\t\tif (resolvedValue === undefined) {\n\t\t\t\tdelete newVariables[newName]\n\t\t\t} else {\n\t\t\t\tnewVariables[newName] = resolvedValue\n\t\t\t}\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tvariables: newVariables,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\tpublic getAllVariables() {\n\t\treturn this.options.variables\n\t}\n\n\tpublic hasParameter(key: string): boolean {\n\t\treturn key in this.options.parameters\n\t}\n\n\tpublic getParameter<F>(key: string): string | number {\n\t\tif (!(key in this.options.parameters)) {\n\t\t\tthrow new BindingError(`Parameter ${key} not found`)\n\t\t}\n\t\treturn this.options.parameters[key] as string | number\n\t}\n\n\tpublic getParameterOrElse<F>(key: string, fallback: F): string | number | F {\n\t\treturn this.options.parameters[key] ?? fallback\n\t}\n\n\tpublic getAllParameters() {\n\t\treturn this.options.parameters\n\t}\n\n\tpublic withParameters(parameters: Environment.Parameters): Environment {\n\t\treturn new Environment({ ...this.options, parameters })\n\t}\n\n\tpublic hasDimension(dimensionName: string): boolean {\n\t\treturn dimensionName in this.options.dimensions\n\t}\n\n\tpublic getDimension<F>(dimensionName: string): string[] {\n\t\tif (!(dimensionName in this.options.dimensions)) {\n\t\t\tthrow new BindingError(`Dimension ${dimensionName} does not exist.`)\n\t\t}\n\t\treturn this.options.dimensions[dimensionName]\n\t}\n\n\tpublic getDimensionOrElse<F>(dimensionName: string, fallback: F): string[] | F {\n\t\treturn this.options.dimensions[dimensionName] ?? fallback\n\t}\n\n\tpublic getAllDimensions(): Environment.SelectedDimensions {\n\t\treturn this.options.dimensions\n\t}\n\n\tpublic withDimensions(dimensions: Environment.SelectedDimensions): Environment {\n\t\tconst newDimensions = {\n\t\t\t...this.options.dimensions,\n\t\t\t...dimensions,\n\t\t}\n\t\tif (equal(newDimensions, this.options.dimensions)) {\n\t\t\treturn this\n\t\t}\n\t\treturn new Environment({ ...this.options, dimensions: newDimensions })\n\t}\n\n\thasSchema(): boolean {\n\t\treturn this.options.schema !== undefined\n\t}\n\n\tpublic getSchema(): Schema {\n\t\tif (!this.options.schema) {\n\t\t\tthrow new BindingError('Schema is not set')\n\t\t}\n\t\treturn this.options.schema\n\t}\n\n\tpublic withSchema(schema: Schema): Environment {\n\t\treturn new Environment({ ...this.options, schema })\n\t}\n\n\tpublic getParent(): Environment {\n\t\tif (!this.options.parent) {\n\t\t\tthrow new BindingError('There is no parent environment')\n\t\t}\n\t\treturn this.options.parent\n\t}\n\n\tpublic withExtension<S, R>(extension: Environment.Extension<S, R>, state: S): Environment {\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\textensions: new Map([...this.options.extensions, [extension, state] as [Environment.Extension<unknown, unknown>, unknown]]),\n\t\t})\n\t}\n\n\tpublic getExtension<S, R>(extension: Environment.Extension<S, R>): R {\n\t\tconst state = this.options.extensions.get(extension as Environment.Extension<unknown, unknown>)\n\t\treturn extension.create(state as S, this)\n\t}\n\n\tpublic merge(other: Environment): Environment {\n\t\tif (other === this) {\n\t\t\treturn this\n\t\t}\n\t\tif (!equal(this.options.node, other.options.node)) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different tree position.`)\n\t\t}\n\t\tif (this.options.parameters !== other.options.parameters) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different parameters.`)\n\t\t}\n\t\tif (this.options.dimensions !== other.options.dimensions) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different dimensions.`)\n\t\t}\n\t\tif (this.options.extensions !== other.options.extensions) {\n\t\t\t// todo: deep compare?\n\t\t\tthrow new BindingError(`Cannot merge two environments with different extensions.`)\n\t\t}\n\n\t\tif (equal(this.options.variables, other.options.variables) && this.options.parent === other.options.parent) {\n\t\t\treturn this\n\t\t}\n\t\tfor (const key in other.options.variables) {\n\t\t\tif (key in this.options.variables && !equal(this.options.variables[key], other.options.variables[key])) {\n\t\t\t\tthrow new BindingError(`Cannot merge two environments with different value of variable ${key}:\\n`\n\t\t\t\t\t+ JSON.stringify(this.options.variables[key]) + '\\n'\n\t\t\t\t\t+ JSON.stringify(other.options.variables[key]))\n\t\t\t}\n\t\t}\n\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tparent: this.options.parent && other.options.parent ? this.options.parent.merge(other.options.parent) : undefined,\n\t\t\tvariables: { ...this.options.variables, ...other.options.variables },\n\t\t})\n\t}\n}\n\nnamespace Environment {\n\texport type Name = string\n\n\texport type ReactElementLike = {\n\t\ttype: any\n\t\tprops: any\n\t}\n\n\texport type Value = string | number | boolean | undefined | GraphQlLiteral | Filter | ReactElementLike\n\n\texport type ResolvedValue = Value\n\n\texport interface Options<Node extends AnyNode | undefined> {\n\t\tnode?: Node\n\t\tschema?: Schema\n\t\tdimensions: SelectedDimensions\n\t\tparameters: Parameters\n\t\tvariables: CustomVariables\n\t\tparent?: Environment\n\t\textensions: Map<Extension<unknown, unknown>, unknown>\n\t}\n\n\texport type SubTreeNode =\n\t\t| SubTreeEntityNode\n\t\t| SubTreeEntityListNode\n\n\texport type InnerNode =\n\t\t| EntityNode\n\t\t| EntityListNode\n\t\t| ColumnNode\n\n\texport type AnyNode =\n\t\t| SubTreeNode\n\t\t| InnerNode\n\n\texport interface SubTreeEntityNode {\n\t\ttype: 'subtree-entity'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero' | 'one' | 'zero-or-one'\n\t\tfilter: Filter\n\t}\n\n\texport interface SubTreeEntityListNode {\n\t\ttype: 'subtree-entity-list'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero-to-many' | 'zero'\n\t\tfilter: Filter\n\t}\n\n\texport interface EntityNode {\n\t\ttype: 'entity'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface EntityListNode {\n\t\ttype: 'entity-list'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface ColumnNode {\n\t\ttype: 'column'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaColumn\n\t}\n\n\texport interface SelectedDimensions {\n\t\t[key: string]: string[]\n\t}\n\n\texport type Parameters = {\n\t\t[K in string]?: string | number\n\t}\n\n\texport interface CustomVariables {\n\t\t[key: string]: Value\n\t}\n\n\texport interface ValuesMapWithFactory {\n\t\t[key: string]:\n\t\t\t| ((environment: Environment) => Value)\n\t\t\t| Value\n\t}\n\n\texport type Extension<State, Result> = {\n\t\tcreate: (state: State | undefined, environment: Environment) => Result\n\t}\n\n\texport const createExtension = <S, R>(create: Extension<S, R>['create'], otherMethods?: Omit<Extension<S, R>, 'create'>): Extension<S, R> => {\n\t\treturn {\n\t\t\tcreate,\n\t\t\t...otherMethods,\n\t\t}\n\t}\n\n\t/** @deprecated */\n\texport type DeltaFactory = ValuesMapWithFactory\n}\n\nexport { Environment }\n"],"names":["Environment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Environment.js","sources":["../../../../../packages/binding-common/src/environment/Environment.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport type { Filter } from '../treeParameters'\nimport equal from 'fast-deep-equal/es6/index.js'\nimport { Schema, SchemaColumn, SchemaEntity, SchemaRelation } from '../schema'\n\nclass Environment<Node extends Environment.AnyNode | undefined = Environment.AnyNode | undefined> {\n\tprivate constructor(\n\t\tprivate readonly options: Environment.Options<Node>,\n\t) {\n\t}\n\n\tpublic static create() {\n\t\treturn new Environment({\n\t\t\tdimensions: {},\n\t\t\tvariables: {},\n\t\t\tparameters: {},\n\t\t\textensions: new Map(),\n\t\t})\n\t}\n\n\tpublic getSubTree(): Environment.SubTreeNode {\n\t\tfor (let env: Environment = this; env.options.node; env = env.getParent()) {\n\t\t\tconst node = env.options.node\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn node\n\t\t\t}\n\t\t}\n\t\tthrow new BindingError('Not in a SubTree')\n\t}\n\n\tpublic getSubTreeNode(): Node & Environment.AnyNode {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn this.options.node\n\t}\n\n\tpublic withSubTree<Node extends Environment.SubTreeNode>(SubTree: Node): Environment<Node> {\n\t\tconst { parent, ...options } = this.options\n\t\treturn new Environment({\n\t\t\t...options,\n\t\t\tnode: SubTree,\n\t\t})\n\t}\n\n\tpublic withSubTreeChild<Node extends Environment.InnerNode>(node: Node): Environment<Node> {\n\t\tif (!this.options.node) {\n\t\t\tthrow new BindingError(`Cannot call withSubTreeChild without previous call of withSubTree`)\n\t\t}\n\t\tif (this.options.node.entity.fields.get(node.field.name) !== node.field) {\n\t\t\tthrow new BindingError()\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tnode,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\n\tpublic hasVariable(key: string): boolean {\n\t\treturn key in this.options.variables\n\t}\n\n\tpublic getVariable<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tif (!(key in this.options.variables)) {\n\t\t\tthrow new BindingError(`Variable ${key} not found`)\n\t\t}\n\t\treturn this.options.variables[key] as V\n\t}\n\n\tpublic getVariableOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\treturn (this.options.variables[key] as V) ?? fallback\n\t}\n\n\t/** @deprecated use getVariable or getParameter */\n\tpublic getValue<V extends Environment.Value = Environment.Value>(key: string): V {\n\t\tconsole.warn('Environment.getValue() is deprecated, use Environment.getVariable() or Environment.getParameter() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, undefined) as V\n\t}\n\n\t/** @deprecated use getVariableOrElse or getParameterOrElse */\n\tpublic getValueOrElse<F, V extends Environment.Value = Environment.Value>(key: string, fallback: F): V | F {\n\t\tconsole.warn('Environment.getValueOrElse() is deprecated, use Environment.getVariableOrElse() or Environment.getParameterOrElse() instead.')\n\t\treturn this.getVariableOrElse(key, undefined) ?? this.getParameterOrElse(key, fallback) as any\n\t}\n\n\t/** @deprecated */\n\tpublic hasName(key: string): boolean {\n\t\tconsole.warn('Environment.hasName() is deprecated, use Environment.hasVariable() or Environment.hasParameter() instead.')\n\t\treturn key in this.options.variables || key in this.options.parameters\n\t}\n\n\tpublic withVariables(variables: Environment.ValuesMapWithFactory | undefined): Environment {\n\t\tif (variables === undefined) {\n\t\t\treturn this\n\t\t}\n\t\tconst newVariables = { ...this.options.variables }\n\t\tfor (const [newName, newValue] of Object.entries(variables)) {\n\t\t\tif (newName === 'labelMiddleware') {\n\t\t\t\tthrow new BindingError('You cannot pass labelMiddleware to withVariables method. Use withLabelMiddleware instead.')\n\t\t\t}\n\t\t\tconst resolvedValue = typeof newValue === 'function' ? newValue(this) : newValue\n\t\t\tif (resolvedValue === undefined) {\n\t\t\t\tdelete newVariables[newName]\n\t\t\t} else {\n\t\t\t\tnewVariables[newName] = resolvedValue\n\t\t\t}\n\t\t}\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tvariables: newVariables,\n\t\t\tparent: this,\n\t\t})\n\t}\n\n\tpublic getAllVariables() {\n\t\treturn this.options.variables\n\t}\n\n\tpublic hasParameter(key: string): boolean {\n\t\treturn key in this.options.parameters\n\t}\n\n\tpublic getParameter<F>(key: string): string | number {\n\t\tif (!(key in this.options.parameters)) {\n\t\t\tthrow new BindingError(`Parameter ${key} not found`)\n\t\t}\n\t\treturn this.options.parameters[key] as string | number\n\t}\n\n\tpublic getParameterOrElse<F>(key: string, fallback: F): string | number | F {\n\t\treturn this.options.parameters[key] ?? fallback\n\t}\n\n\tpublic getAllParameters() {\n\t\treturn this.options.parameters\n\t}\n\n\tpublic withParameters(parameters: Environment.Parameters): Environment {\n\t\treturn new Environment({ ...this.options, parameters })\n\t}\n\n\tpublic hasDimension(dimensionName: string): boolean {\n\t\treturn dimensionName in this.options.dimensions\n\t}\n\n\tpublic getDimension<F>(dimensionName: string): string[] {\n\t\tif (!(dimensionName in this.options.dimensions)) {\n\t\t\tthrow new BindingError(`Dimension ${dimensionName} does not exist.`)\n\t\t}\n\t\treturn this.options.dimensions[dimensionName]\n\t}\n\n\tpublic getDimensionOrElse<F>(dimensionName: string, fallback: F): string[] | F {\n\t\treturn this.options.dimensions[dimensionName] ?? fallback\n\t}\n\n\tpublic getAllDimensions(): Environment.SelectedDimensions {\n\t\treturn this.options.dimensions\n\t}\n\n\tpublic withDimensions(dimensions: Environment.SelectedDimensions): Environment {\n\t\tconst newDimensions = {\n\t\t\t...this.options.dimensions,\n\t\t\t...dimensions,\n\t\t}\n\t\tif (equal(newDimensions, this.options.dimensions)) {\n\t\t\treturn this\n\t\t}\n\t\treturn new Environment({ ...this.options, dimensions: newDimensions })\n\t}\n\n\thasSchema(): boolean {\n\t\treturn this.options.schema !== undefined\n\t}\n\n\tpublic getSchema(): Schema {\n\t\tif (!this.options.schema) {\n\t\t\tthrow new BindingError('Schema is not set')\n\t\t}\n\t\treturn this.options.schema\n\t}\n\n\tpublic withSchema(schema: Schema): Environment {\n\t\treturn new Environment({ ...this.options, schema })\n\t}\n\n\tpublic getParent(): Environment {\n\t\tif (!this.options.parent) {\n\t\t\tthrow new BindingError('There is no parent environment')\n\t\t}\n\t\treturn this.options.parent\n\t}\n\n\tpublic withExtension<S, R>(extension: Environment.Extension<S, R>, state: S): Environment {\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\textensions: new Map([...this.options.extensions, [extension, state] as [Environment.Extension<unknown, unknown>, unknown]]),\n\t\t})\n\t}\n\n\tpublic getExtension<S, R>(extension: Environment.Extension<S, R>): R {\n\t\tconst state = this.options.extensions.get(extension as Environment.Extension<unknown, unknown>)\n\t\treturn extension.create(state as S, this)\n\t}\n\n\tpublic merge(other: Environment): Environment {\n\t\tif (other === this) {\n\t\t\treturn this\n\t\t}\n\t\tif (!equal(this.options.node, other.options.node)) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different tree position.`)\n\t\t}\n\t\tif (this.options.parameters !== other.options.parameters) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different parameters.`)\n\t\t}\n\t\tif (this.options.dimensions !== other.options.dimensions) {\n\t\t\tthrow new BindingError(`Cannot merge two environments with different dimensions.`)\n\t\t}\n\t\tif (this.options.extensions !== other.options.extensions) {\n\t\t\t// todo: deep compare?\n\t\t\tthrow new BindingError(`Cannot merge two environments with different extensions.`)\n\t\t}\n\n\t\tif (equal(this.options.variables, other.options.variables) && this.options.parent === other.options.parent) {\n\t\t\treturn this\n\t\t}\n\t\tfor (const key in other.options.variables) {\n\t\t\tif (key in this.options.variables && !equal(this.options.variables[key], other.options.variables[key])) {\n\t\t\t\tthrow new BindingError(`Cannot merge two environments with different value of variable ${key}:\\n`\n\t\t\t\t\t+ JSON.stringify(this.options.variables[key]) + '\\n'\n\t\t\t\t\t+ JSON.stringify(other.options.variables[key]))\n\t\t\t}\n\t\t}\n\n\t\treturn new Environment({\n\t\t\t...this.options,\n\t\t\tparent: this.options.parent && other.options.parent ? this.options.parent.merge(other.options.parent) : undefined,\n\t\t\tvariables: { ...this.options.variables, ...other.options.variables },\n\t\t})\n\t}\n}\n\nnamespace Environment {\n\texport type Name = string\n\n\texport type ReactElementLike = {\n\t\ttype: any\n\t\tprops: any\n\t}\n\n\texport type Value = string | number | boolean | undefined | Filter | ReactElementLike\n\n\texport type ResolvedValue = Value\n\n\texport interface Options<Node extends AnyNode | undefined> {\n\t\tnode?: Node\n\t\tschema?: Schema\n\t\tdimensions: SelectedDimensions\n\t\tparameters: Parameters\n\t\tvariables: CustomVariables\n\t\tparent?: Environment\n\t\textensions: Map<Extension<unknown, unknown>, unknown>\n\t}\n\n\texport type SubTreeNode =\n\t\t| SubTreeEntityNode\n\t\t| SubTreeEntityListNode\n\n\texport type InnerNode =\n\t\t| EntityNode\n\t\t| EntityListNode\n\t\t| ColumnNode\n\n\texport type AnyNode =\n\t\t| SubTreeNode\n\t\t| InnerNode\n\n\texport interface SubTreeEntityNode {\n\t\ttype: 'subtree-entity'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero' | 'one' | 'zero-or-one'\n\t\tfilter: Filter\n\t}\n\n\texport interface SubTreeEntityListNode {\n\t\ttype: 'subtree-entity-list'\n\t\tentity: SchemaEntity\n\t\texpectedCardinality: 'zero-to-many' | 'zero'\n\t\tfilter: Filter\n\t}\n\n\texport interface EntityNode {\n\t\ttype: 'entity'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface EntityListNode {\n\t\ttype: 'entity-list'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaRelation\n\t}\n\n\texport interface ColumnNode {\n\t\ttype: 'column'\n\t\tentity: SchemaEntity\n\t\tfield: SchemaColumn\n\t}\n\n\texport interface SelectedDimensions {\n\t\t[key: string]: string[]\n\t}\n\n\texport type Parameters = {\n\t\t[K in string]?: string | number\n\t}\n\n\texport interface CustomVariables {\n\t\t[key: string]: Value\n\t}\n\n\texport interface ValuesMapWithFactory {\n\t\t[key: string]:\n\t\t\t| ((environment: Environment) => Value)\n\t\t\t| Value\n\t}\n\n\texport type Extension<State, Result> = {\n\t\tcreate: (state: State | undefined, environment: Environment) => Result\n\t}\n\n\texport const createExtension = <S, R>(create: Extension<S, R>['create'], otherMethods?: Omit<Extension<S, R>, 'create'>): Extension<S, R> => {\n\t\treturn {\n\t\t\tcreate,\n\t\t\t...otherMethods,\n\t\t}\n\t}\n\n\t/** @deprecated */\n\texport type DeltaFactory = ValuesMapWithFactory\n}\n\nexport { Environment }\n"],"names":["Environment"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const client = require("@contember/client");
|
|
4
3
|
const TreeNodeUtils = require("../utils/TreeNodeUtils.cjs");
|
|
4
|
+
const whereToFilter = require("../utils/whereToFilter.cjs");
|
|
5
5
|
const QueryLanguage = require("../queryLanguage/QueryLanguage.cjs");
|
|
6
6
|
class TreeNodeEnvironmentFactory {
|
|
7
7
|
static createEnvironmentForEntityListSubtree(environment, sugaredEntityList) {
|
|
@@ -34,8 +34,8 @@ class TreeNodeEnvironmentFactory {
|
|
|
34
34
|
expectedCardinality = "zero";
|
|
35
35
|
entity = QueryLanguage.QueryLanguage.desugarUnconstrainedQualifiedSingleEntity(sugaredEntityList, environment);
|
|
36
36
|
} else {
|
|
37
|
-
entity = QueryLanguage.QueryLanguage.desugarQualifiedSingleEntity(sugaredEntityList, environment
|
|
38
|
-
rootWhere =
|
|
37
|
+
entity = QueryLanguage.QueryLanguage.desugarQualifiedSingleEntity(sugaredEntityList, environment);
|
|
38
|
+
rootWhere = whereToFilter.whereToFilter(entity.where);
|
|
39
39
|
expectedCardinality = entity.setOnCreate ? "zero-or-one" : "one";
|
|
40
40
|
}
|
|
41
41
|
const entitySchema = TreeNodeUtils.TreeNodeUtils.resolveEntity(environment.getSchema(), entity.entityName, "entity");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeEnvironmentFactory.cjs","sources":["../../../../../packages/binding-common/src/environment/TreeNodeEnvironmentFactory.ts"],"sourcesContent":["import { Environment } from './Environment'\nimport {\n\tHasOneRelation,\n\tSugaredQualifiedEntityList,\n\tSugaredQualifiedSingleEntity,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tSugaredUnconstrainedQualifiedEntityList,\n\tSugaredUnconstrainedQualifiedSingleEntity,\n} from '../treeParameters'\nimport { QueryLanguage } from '../queryLanguage'\nimport {
|
|
1
|
+
{"version":3,"file":"TreeNodeEnvironmentFactory.cjs","sources":["../../../../../packages/binding-common/src/environment/TreeNodeEnvironmentFactory.ts"],"sourcesContent":["import { Environment } from './Environment'\nimport {\n\tHasOneRelation,\n\tSugaredQualifiedEntityList,\n\tSugaredQualifiedSingleEntity,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tSugaredUnconstrainedQualifiedEntityList,\n\tSugaredUnconstrainedQualifiedSingleEntity,\n} from '../treeParameters'\nimport { QueryLanguage } from '../queryLanguage'\nimport { TreeNodeUtils } from '../utils/TreeNodeUtils'\nimport { whereToFilter } from '../utils/whereToFilter'\n\nexport class TreeNodeEnvironmentFactory {\n\n\tpublic static createEnvironmentForEntityListSubtree(\n\t\tenvironment: Environment,\n\t\tsugaredEntityList: SugaredQualifiedEntityList | SugaredUnconstrainedQualifiedEntityList,\n\t): Environment {\n\t\tlet entityList\n\t\tlet rootWhere\n\t\tlet expectedCardinality: Environment.SubTreeNode['expectedCardinality']\n\n\t\tif (sugaredEntityList.isCreating) {\n\t\t\tentityList = QueryLanguage.desugarUnconstrainedQualifiedEntityList(sugaredEntityList, environment)\n\t\t\trootWhere = {} as const\n\t\t\texpectedCardinality = 'zero'\n\n\t\t} else {\n\t\t\tentityList = QueryLanguage.desugarQualifiedEntityList(sugaredEntityList, environment)\n\t\t\trootWhere = entityList.filter ?? {}\n\t\t\texpectedCardinality = 'zero-to-many'\n\t\t}\n\n\t\tconst entitySchema = TreeNodeUtils.resolveEntity(environment.getSchema(), entityList.entityName, 'entity list')\n\n\t\treturn environment.withSubTree({\n\t\t\ttype: 'subtree-entity-list',\n\t\t\tentity: entitySchema,\n\t\t\texpectedCardinality,\n\t\t\tfilter: rootWhere,\n\t\t})\n\t}\n\n\tpublic static createEnvironmentForEntitySubtree(\n\t\tenvironment: Environment,\n\t\tsugaredEntityList: SugaredQualifiedSingleEntity | SugaredUnconstrainedQualifiedSingleEntity,\n\t): Environment {\n\t\tlet entity\n\t\tlet rootWhere\n\t\tlet expectedCardinality: Environment.SubTreeNode['expectedCardinality']\n\n\t\tif (sugaredEntityList.isCreating) {\n\t\t\trootWhere = { } as const\n\t\t\texpectedCardinality = 'zero'\n\t\t\tentity = QueryLanguage.desugarUnconstrainedQualifiedSingleEntity(sugaredEntityList, environment)\n\n\t\t} else {\n\t\t\tentity = QueryLanguage.desugarQualifiedSingleEntity(sugaredEntityList, environment)\n\t\t\trootWhere = whereToFilter(entity.where)\n\t\t\texpectedCardinality = entity.setOnCreate ? 'zero-or-one' : 'one'\n\t\t}\n\n\t\tconst entitySchema = TreeNodeUtils.resolveEntity(environment.getSchema(), entity.entityName, 'entity')\n\n\t\treturn environment.withSubTree({\n\t\t\ttype: 'subtree-entity',\n\t\t\tentity: entitySchema,\n\t\t\texpectedCardinality: expectedCardinality,\n\t\t\tfilter: rootWhere,\n\t\t})\n\t}\n\n\tpublic static createEnvironmentForEntityList(\n\t\tenvironment: Environment,\n\t\tsugaredRelativeEntityList: SugaredRelativeEntityList,\n\t): Environment {\n\t\tconst relativeEntityList = QueryLanguage.desugarRelativeEntityList(sugaredRelativeEntityList, environment)\n\t\tconst hasOneEnvironment = this.traverseHasOnePath(environment, relativeEntityList.hasOneRelationPath)\n\t\tconst hasManyField = relativeEntityList.hasManyRelation.field\n\n\t\tconst field = TreeNodeUtils.resolveHasManyRelation(hasOneEnvironment, hasManyField)\n\n\t\tconst targetEntity = environment.getSchema().getEntity(field.targetEntity)\n\n\t\treturn hasOneEnvironment.withSubTreeChild({\n\t\t\ttype: 'entity-list',\n\t\t\tfield,\n\t\t\tentity: targetEntity,\n\t\t})\n\t}\n\n\tpublic static createEnvironmentForEntity(\n\t\tenvironment: Environment,\n\t\tsugaredRelativeSingleEntity: SugaredRelativeSingleEntity,\n\t) {\n\t\tconst relativeSingleEntity = QueryLanguage.desugarRelativeSingleEntity(sugaredRelativeSingleEntity, environment)\n\n\t\treturn this.traverseHasOnePath(environment, relativeSingleEntity.hasOneRelationPath)\n\t}\n\n\tpublic static createEnvironmentForField(\n\t\tenvironment: Environment,\n\t\tsugaredRelativeSingleField: SugaredRelativeSingleField,\n\t) {\n\t\tconst relativeSingleField = QueryLanguage.desugarRelativeSingleField(sugaredRelativeSingleField, environment)\n\t\tconst hasOneEnvironment = this.traverseHasOnePath(environment, relativeSingleField.hasOneRelationPath)\n\n\t\tconst field = TreeNodeUtils.resolveColumn(hasOneEnvironment, relativeSingleField.field)\n\n\t\treturn hasOneEnvironment.withSubTreeChild({\n\t\t\ttype: 'column',\n\t\t\tentity: environment.getSubTreeNode().entity,\n\t\t\tfield,\n\t\t})\n\t}\n\n\tprivate static traverseHasOnePath(\n\t\tenvironment: Environment,\n\t\thasOneRelationPath: HasOneRelation[],\n\t): Environment {\n\t\tfor (const pathItem of hasOneRelationPath) {\n\t\t\tconst field = TreeNodeUtils.resolveHasOneRelation(environment, pathItem.field, !!pathItem.reducedBy)\n\t\t\tconst targetEntity = environment.getSchema().getEntity(field.targetEntity)\n\n\t\t\tenvironment = environment.withSubTreeChild({\n\t\t\t\ttype: 'entity',\n\t\t\t\tfield,\n\t\t\t\tentity: targetEntity,\n\t\t\t})\n\t\t}\n\t\treturn environment\n\t}\n\n}\n"],"names":["QueryLanguage","TreeNodeUtils","whereToFilter"],"mappings":";;;;;AAeO,MAAM,2BAA2B;AAAA,EAEvC,OAAc,sCACb,aACA,mBACc;AACV,QAAA;AACA,QAAA;AACA,QAAA;AAEJ,QAAI,kBAAkB,YAAY;AACpB,mBAAAA,cAAAA,cAAc,wCAAwC,mBAAmB,WAAW;AACjG,kBAAY,CAAA;AACU,4BAAA;AAAA,IAAA,OAEhB;AACO,mBAAAA,cAAAA,cAAc,2BAA2B,mBAAmB,WAAW;AACxE,kBAAA,WAAW,UAAU;AACX,4BAAA;AAAA,IACvB;AAEM,UAAA,eAAeC,4BAAc,cAAc,YAAY,aAAa,WAAW,YAAY,aAAa;AAE9G,WAAO,YAAY,YAAY;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAAA,EAEA,OAAc,kCACb,aACA,mBACc;AACV,QAAA;AACA,QAAA;AACA,QAAA;AAEJ,QAAI,kBAAkB,YAAY;AACjC,kBAAY,CAAA;AACU,4BAAA;AACb,eAAAD,cAAAA,cAAc,0CAA0C,mBAAmB,WAAW;AAAA,IAAA,OAEzF;AACG,eAAAA,cAAAA,cAAc,6BAA6B,mBAAmB,WAAW;AACtE,kBAAAE,cAAA,cAAc,OAAO,KAAK;AAChB,4BAAA,OAAO,cAAc,gBAAgB;AAAA,IAC5D;AAEM,UAAA,eAAeD,4BAAc,cAAc,YAAY,aAAa,OAAO,YAAY,QAAQ;AAErG,WAAO,YAAY,YAAY;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAAA,EAEA,OAAc,+BACb,aACA,2BACc;AACd,UAAM,qBAAqBD,cAAA,cAAc,0BAA0B,2BAA2B,WAAW;AACzG,UAAM,oBAAoB,KAAK,mBAAmB,aAAa,mBAAmB,kBAAkB;AAC9F,UAAA,eAAe,mBAAmB,gBAAgB;AAExD,UAAM,QAAQC,cAAA,cAAc,uBAAuB,mBAAmB,YAAY;AAElF,UAAM,eAAe,YAAY,UAAA,EAAY,UAAU,MAAM,YAAY;AAEzE,WAAO,kBAAkB,iBAAiB;AAAA,MACzC,MAAM;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAAA,EAEA,OAAc,2BACb,aACA,6BACC;AACD,UAAM,uBAAuBD,cAAA,cAAc,4BAA4B,6BAA6B,WAAW;AAE/G,WAAO,KAAK,mBAAmB,aAAa,qBAAqB,kBAAkB;AAAA,EACpF;AAAA,EAEA,OAAc,0BACb,aACA,4BACC;AACD,UAAM,sBAAsBA,cAAA,cAAc,2BAA2B,4BAA4B,WAAW;AAC5G,UAAM,oBAAoB,KAAK,mBAAmB,aAAa,oBAAoB,kBAAkB;AAErG,UAAM,QAAQC,cAAAA,cAAc,cAAc,mBAAmB,oBAAoB,KAAK;AAEtF,WAAO,kBAAkB,iBAAiB;AAAA,MACzC,MAAM;AAAA,MACN,QAAQ,YAAY,eAAA,EAAiB;AAAA,MACrC;AAAA,IAAA,CACA;AAAA,EACF;AAAA,EAEA,OAAe,mBACd,aACA,oBACc;AACd,eAAW,YAAY,oBAAoB;AACpC,YAAA,QAAQA,4BAAc,sBAAsB,aAAa,SAAS,OAAO,CAAC,CAAC,SAAS,SAAS;AACnG,YAAM,eAAe,YAAY,UAAA,EAAY,UAAU,MAAM,YAAY;AAEzE,oBAAc,YAAY,iBAAiB;AAAA,QAC1C,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,MAAA,CACR;AAAA,IACF;AACO,WAAA;AAAA,EACR;AAED;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { whereToFilter } from "@contember/client";
|
|
2
1
|
import { TreeNodeUtils } from "../utils/TreeNodeUtils.js";
|
|
2
|
+
import { whereToFilter } from "../utils/whereToFilter.js";
|
|
3
3
|
import { QueryLanguage } from "../queryLanguage/QueryLanguage.js";
|
|
4
4
|
class TreeNodeEnvironmentFactory {
|
|
5
5
|
static createEnvironmentForEntityListSubtree(environment, sugaredEntityList) {
|
|
@@ -32,7 +32,7 @@ class TreeNodeEnvironmentFactory {
|
|
|
32
32
|
expectedCardinality = "zero";
|
|
33
33
|
entity = QueryLanguage.desugarUnconstrainedQualifiedSingleEntity(sugaredEntityList, environment);
|
|
34
34
|
} else {
|
|
35
|
-
entity = QueryLanguage.desugarQualifiedSingleEntity(sugaredEntityList, environment
|
|
35
|
+
entity = QueryLanguage.desugarQualifiedSingleEntity(sugaredEntityList, environment);
|
|
36
36
|
rootWhere = whereToFilter(entity.where);
|
|
37
37
|
expectedCardinality = entity.setOnCreate ? "zero-or-one" : "one";
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeEnvironmentFactory.js","sources":["../../../../../packages/binding-common/src/environment/TreeNodeEnvironmentFactory.ts"],"sourcesContent":["import { Environment } from './Environment'\nimport {\n\tHasOneRelation,\n\tSugaredQualifiedEntityList,\n\tSugaredQualifiedSingleEntity,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tSugaredUnconstrainedQualifiedEntityList,\n\tSugaredUnconstrainedQualifiedSingleEntity,\n} from '../treeParameters'\nimport { QueryLanguage } from '../queryLanguage'\nimport {
|
|
1
|
+
{"version":3,"file":"TreeNodeEnvironmentFactory.js","sources":["../../../../../packages/binding-common/src/environment/TreeNodeEnvironmentFactory.ts"],"sourcesContent":["import { Environment } from './Environment'\nimport {\n\tHasOneRelation,\n\tSugaredQualifiedEntityList,\n\tSugaredQualifiedSingleEntity,\n\tSugaredRelativeEntityList,\n\tSugaredRelativeSingleEntity,\n\tSugaredRelativeSingleField,\n\tSugaredUnconstrainedQualifiedEntityList,\n\tSugaredUnconstrainedQualifiedSingleEntity,\n} from '../treeParameters'\nimport { QueryLanguage } from '../queryLanguage'\nimport { TreeNodeUtils } from '../utils/TreeNodeUtils'\nimport { whereToFilter } from '../utils/whereToFilter'\n\nexport class TreeNodeEnvironmentFactory {\n\n\tpublic static createEnvironmentForEntityListSubtree(\n\t\tenvironment: Environment,\n\t\tsugaredEntityList: SugaredQualifiedEntityList | SugaredUnconstrainedQualifiedEntityList,\n\t): Environment {\n\t\tlet entityList\n\t\tlet rootWhere\n\t\tlet expectedCardinality: Environment.SubTreeNode['expectedCardinality']\n\n\t\tif (sugaredEntityList.isCreating) {\n\t\t\tentityList = QueryLanguage.desugarUnconstrainedQualifiedEntityList(sugaredEntityList, environment)\n\t\t\trootWhere = {} as const\n\t\t\texpectedCardinality = 'zero'\n\n\t\t} else {\n\t\t\tentityList = QueryLanguage.desugarQualifiedEntityList(sugaredEntityList, environment)\n\t\t\trootWhere = entityList.filter ?? {}\n\t\t\texpectedCardinality = 'zero-to-many'\n\t\t}\n\n\t\tconst entitySchema = TreeNodeUtils.resolveEntity(environment.getSchema(), entityList.entityName, 'entity list')\n\n\t\treturn environment.withSubTree({\n\t\t\ttype: 'subtree-entity-list',\n\t\t\tentity: entitySchema,\n\t\t\texpectedCardinality,\n\t\t\tfilter: rootWhere,\n\t\t})\n\t}\n\n\tpublic static createEnvironmentForEntitySubtree(\n\t\tenvironment: Environment,\n\t\tsugaredEntityList: SugaredQualifiedSingleEntity | SugaredUnconstrainedQualifiedSingleEntity,\n\t): Environment {\n\t\tlet entity\n\t\tlet rootWhere\n\t\tlet expectedCardinality: Environment.SubTreeNode['expectedCardinality']\n\n\t\tif (sugaredEntityList.isCreating) {\n\t\t\trootWhere = { } as const\n\t\t\texpectedCardinality = 'zero'\n\t\t\tentity = QueryLanguage.desugarUnconstrainedQualifiedSingleEntity(sugaredEntityList, environment)\n\n\t\t} else {\n\t\t\tentity = QueryLanguage.desugarQualifiedSingleEntity(sugaredEntityList, environment)\n\t\t\trootWhere = whereToFilter(entity.where)\n\t\t\texpectedCardinality = entity.setOnCreate ? 'zero-or-one' : 'one'\n\t\t}\n\n\t\tconst entitySchema = TreeNodeUtils.resolveEntity(environment.getSchema(), entity.entityName, 'entity')\n\n\t\treturn environment.withSubTree({\n\t\t\ttype: 'subtree-entity',\n\t\t\tentity: entitySchema,\n\t\t\texpectedCardinality: expectedCardinality,\n\t\t\tfilter: rootWhere,\n\t\t})\n\t}\n\n\tpublic static createEnvironmentForEntityList(\n\t\tenvironment: Environment,\n\t\tsugaredRelativeEntityList: SugaredRelativeEntityList,\n\t): Environment {\n\t\tconst relativeEntityList = QueryLanguage.desugarRelativeEntityList(sugaredRelativeEntityList, environment)\n\t\tconst hasOneEnvironment = this.traverseHasOnePath(environment, relativeEntityList.hasOneRelationPath)\n\t\tconst hasManyField = relativeEntityList.hasManyRelation.field\n\n\t\tconst field = TreeNodeUtils.resolveHasManyRelation(hasOneEnvironment, hasManyField)\n\n\t\tconst targetEntity = environment.getSchema().getEntity(field.targetEntity)\n\n\t\treturn hasOneEnvironment.withSubTreeChild({\n\t\t\ttype: 'entity-list',\n\t\t\tfield,\n\t\t\tentity: targetEntity,\n\t\t})\n\t}\n\n\tpublic static createEnvironmentForEntity(\n\t\tenvironment: Environment,\n\t\tsugaredRelativeSingleEntity: SugaredRelativeSingleEntity,\n\t) {\n\t\tconst relativeSingleEntity = QueryLanguage.desugarRelativeSingleEntity(sugaredRelativeSingleEntity, environment)\n\n\t\treturn this.traverseHasOnePath(environment, relativeSingleEntity.hasOneRelationPath)\n\t}\n\n\tpublic static createEnvironmentForField(\n\t\tenvironment: Environment,\n\t\tsugaredRelativeSingleField: SugaredRelativeSingleField,\n\t) {\n\t\tconst relativeSingleField = QueryLanguage.desugarRelativeSingleField(sugaredRelativeSingleField, environment)\n\t\tconst hasOneEnvironment = this.traverseHasOnePath(environment, relativeSingleField.hasOneRelationPath)\n\n\t\tconst field = TreeNodeUtils.resolveColumn(hasOneEnvironment, relativeSingleField.field)\n\n\t\treturn hasOneEnvironment.withSubTreeChild({\n\t\t\ttype: 'column',\n\t\t\tentity: environment.getSubTreeNode().entity,\n\t\t\tfield,\n\t\t})\n\t}\n\n\tprivate static traverseHasOnePath(\n\t\tenvironment: Environment,\n\t\thasOneRelationPath: HasOneRelation[],\n\t): Environment {\n\t\tfor (const pathItem of hasOneRelationPath) {\n\t\t\tconst field = TreeNodeUtils.resolveHasOneRelation(environment, pathItem.field, !!pathItem.reducedBy)\n\t\t\tconst targetEntity = environment.getSchema().getEntity(field.targetEntity)\n\n\t\t\tenvironment = environment.withSubTreeChild({\n\t\t\t\ttype: 'entity',\n\t\t\t\tfield,\n\t\t\t\tentity: targetEntity,\n\t\t\t})\n\t\t}\n\t\treturn environment\n\t}\n\n}\n"],"names":[],"mappings":";;;AAeO,MAAM,2BAA2B;AAAA,EAEvC,OAAc,sCACb,aACA,mBACc;AACV,QAAA;AACA,QAAA;AACA,QAAA;AAEJ,QAAI,kBAAkB,YAAY;AACpB,mBAAA,cAAc,wCAAwC,mBAAmB,WAAW;AACjG,kBAAY,CAAA;AACU,4BAAA;AAAA,IAAA,OAEhB;AACO,mBAAA,cAAc,2BAA2B,mBAAmB,WAAW;AACxE,kBAAA,WAAW,UAAU;AACX,4BAAA;AAAA,IACvB;AAEM,UAAA,eAAe,cAAc,cAAc,YAAY,aAAa,WAAW,YAAY,aAAa;AAE9G,WAAO,YAAY,YAAY;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAAA,EAEA,OAAc,kCACb,aACA,mBACc;AACV,QAAA;AACA,QAAA;AACA,QAAA;AAEJ,QAAI,kBAAkB,YAAY;AACjC,kBAAY,CAAA;AACU,4BAAA;AACb,eAAA,cAAc,0CAA0C,mBAAmB,WAAW;AAAA,IAAA,OAEzF;AACG,eAAA,cAAc,6BAA6B,mBAAmB,WAAW;AACtE,kBAAA,cAAc,OAAO,KAAK;AAChB,4BAAA,OAAO,cAAc,gBAAgB;AAAA,IAC5D;AAEM,UAAA,eAAe,cAAc,cAAc,YAAY,aAAa,OAAO,YAAY,QAAQ;AAErG,WAAO,YAAY,YAAY;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAAA,EAEA,OAAc,+BACb,aACA,2BACc;AACd,UAAM,qBAAqB,cAAc,0BAA0B,2BAA2B,WAAW;AACzG,UAAM,oBAAoB,KAAK,mBAAmB,aAAa,mBAAmB,kBAAkB;AAC9F,UAAA,eAAe,mBAAmB,gBAAgB;AAExD,UAAM,QAAQ,cAAc,uBAAuB,mBAAmB,YAAY;AAElF,UAAM,eAAe,YAAY,UAAA,EAAY,UAAU,MAAM,YAAY;AAEzE,WAAO,kBAAkB,iBAAiB;AAAA,MACzC,MAAM;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAAA,EAEA,OAAc,2BACb,aACA,6BACC;AACD,UAAM,uBAAuB,cAAc,4BAA4B,6BAA6B,WAAW;AAE/G,WAAO,KAAK,mBAAmB,aAAa,qBAAqB,kBAAkB;AAAA,EACpF;AAAA,EAEA,OAAc,0BACb,aACA,4BACC;AACD,UAAM,sBAAsB,cAAc,2BAA2B,4BAA4B,WAAW;AAC5G,UAAM,oBAAoB,KAAK,mBAAmB,aAAa,oBAAoB,kBAAkB;AAErG,UAAM,QAAQ,cAAc,cAAc,mBAAmB,oBAAoB,KAAK;AAEtF,WAAO,kBAAkB,iBAAiB;AAAA,MACzC,MAAM;AAAA,MACN,QAAQ,YAAY,eAAA,EAAiB;AAAA,MACrC;AAAA,IAAA,CACA;AAAA,EACF;AAAA,EAEA,OAAe,mBACd,aACA,oBACc;AACd,eAAW,YAAY,oBAAoB;AACpC,YAAA,QAAQ,cAAc,sBAAsB,aAAa,SAAS,OAAO,CAAC,CAAC,SAAS,SAAS;AACnG,YAAM,eAAe,YAAY,UAAA,EAAY,UAAU,MAAM,YAAY;AAEzE,oBAAc,YAAY,iBAAiB;AAAA,QAC1C,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,MAAA,CACR;AAAA,IACF;AACO,WAAA;AAAA,EACR;AAED;"}
|
|
@@ -13,7 +13,7 @@ const HasOneRelationMarker = require("../markers/HasOneRelationMarker.cjs");
|
|
|
13
13
|
const HasManyRelationMarker = require("../markers/HasManyRelationMarker.cjs");
|
|
14
14
|
class MarkerFactory {
|
|
15
15
|
static createEntitySubTreeMarker(entity, fields, environment) {
|
|
16
|
-
const qualifiedSingleEntity = QueryLanguage.QueryLanguage.desugarQualifiedSingleEntity(entity, environment
|
|
16
|
+
const qualifiedSingleEntity = QueryLanguage.QueryLanguage.desugarQualifiedSingleEntity(entity, environment);
|
|
17
17
|
return this.createSubTreeMarker(qualifiedSingleEntity, "eventListeners", EntitySubTreeMarker.EntitySubTreeMarker, fields, environment);
|
|
18
18
|
}
|
|
19
19
|
static createUnconstrainedEntitySubTreeMarker(entity, fields, environment) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkerFactory.cjs","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":["QueryLanguage","EntitySubTreeMarker","EntityListSubTreeMarker","EntityFieldMarkersContainer","EntityFieldsWithHoistablesMarker","TreeParameterMerger","hasManyRelationMarker","FieldMarker","HasOneRelationMarker","HasManyRelationMarker","assertNever","MarkerMerger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkerFactory.cjs","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":["QueryLanguage","EntitySubTreeMarker","EntityListSubTreeMarker","EntityFieldMarkersContainer","EntityFieldsWithHoistablesMarker","TreeParameterMerger","hasManyRelationMarker","FieldMarker","HasOneRelationMarker","HasManyRelationMarker","assertNever","MarkerMerger"],"mappings":";;;;;;;;;;;;;AA+BO,MAAM,cAAc;AAAA,EAE1B,OAAc,0BACb,QACA,QACA,aACmC;AAEnC,UAAM,wBAA+CA,cAAA,cAAc,6BAA6B,QAAQ,WAAW;AAEnH,WAAO,KAAK,oBAAoB,uBAAuB,kBAAkBC,yCAAqB,QAAQ,WAAW;AAAA,EAClH;AAAA,EAEA,OAAc,uCACb,QACA,QACA,aACmC;AAEnC,WAAO,KAAK;AAAA,MACXD,4BAAc,0CAA0C,QAAQ,WAAW;AAAA,MAC3E;AAAA,MACAC,oBAAA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAc,8BACb,YACA,QACA,aACmC;AAEnC,WAAO,KAAK;AAAA,MACXD,4BAAc,2BAA2B,YAAY,WAAW;AAAA,MAChE;AAAA,MACAE,wBAAA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAc,2CACb,YACA,QACA,aACmC;AAEnC,WAAO,KAAK;AAAA,MACXF,4BAAc,wCAAwC,YAAY,WAAW;AAAA,MAC7E;AAAA,MACAE,wBAAA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAc,yBACb,cACA,QACA,aACmC;AAEnC,UAAM,YAAYF,cAAA,cAAc,8BAA8B,cAAc,WAAW;AAEvF,QAAI,kBAAkBG,4BAAAA,6BAA6B;AAClD,aAAO,IAAIC,iCAAAA,iCAAiC,QAAQ,QAAW,SAAS;AAAA,IACzE;AAEA,WAAO,IAAIA,iCAAA;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACPC,oBAAAA,oBAAoB,4BAA4B,OAAO,iBAAiB,SAAS;AAAA,IAAA;AAAA,EAEnF;AAAA,EAEA,OAAc,uCACb,QACA,aACmC;AAEnC,QAAI,kBAAkBF,4BAAAA,6BAA6B;AAClD,aAAO,IAAIC,iCAAA,iCAAiC,QAAQ,QAAW,MAAS;AAAA,IACzE;AAEA,WAAO,IAAIA,iCAAiC,iCAAA,OAAO,QAAQ,OAAO,UAAU,MAAS;AAAA,EACtF;AAAA,EAEA,OAAc,iCACb,OACA,aACA,QACiE;AAEjE,UAAM,uBAAuBJ,cAAA,cAAc,4BAA4B,OAAO,WAAW;AAEzF,QAAI,kBAAkBG,4BAAAA,6BAA6B;AAClD,aAAO,KAAK,+BAA+B,qBAAqB,oBAAoB,aAAa,MAAM;AAAA,IACxG;AAEA,yBAAqB,mBAAmB,qBAAqB,mBAAmB,SAAS,CAAC,IACzFE,oBAAAA,oBAAoB;AAAA,MACnB,qBAAqB,mBAAmB,qBAAqB,mBAAmB,SAAS,CAAC;AAAA,MAC1F;AAAA,MACA,OAAO;AAAA,IAAA;AAGT,WAAO,IAAID,iCAAA;AAAA,MACV,KAAK,+BAA+B,qBAAqB,oBAAoB,aAAa,OAAO,MAAM;AAAA,MACvG,OAAO;AAAA,MACP;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAc,+BACb,OACA,aACA,QACiE;AAEjE,UAAM,qBAAqBJ,cAAA,cAAc,0BAA0B,OAAO,WAAW;AAErF,QAAI,kBAAkBG,4BAAAA,6BAA6B;AAClD,YAAMG,yBAAwB,KAAK;AAAA,QAClC,mBAAmB;AAAA,QACnB;AAAA,QACA;AAAA,MAAA;AAED,aAAO,KAAK;AAAA,QACX,mBAAmB;AAAA,QACnB,YAAY,UAAU;AAAA,QACtB,KAAK,kCAAkCA,sBAAqB;AAAA,MAAA;AAAA,IAE9D;AAEA,uBAAmB,kBAAkBD,oBAAAA,oBAAoB;AAAA,MACxD,mBAAmB;AAAA,MACnB;AAAA,MACA,OAAO;AAAA,IAAA;AAGR,UAAM,wBAAwB,KAAK;AAAA,MAClC,mBAAmB;AAAA,MACnB;AAAA,MACA,OAAO;AAAA,IAAA;AAGR,WAAO,IAAID,iCAAA;AAAA,MACV,KAAK;AAAA,QACJ,mBAAmB;AAAA,QACnB,YAAY,UAAU;AAAA,QACtB,KAAK,kCAAkC,qBAAqB;AAAA,MAC7D;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAc,kBAAkB,OAAmC,aAAuD;AAEzH,WAAO,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA,CAAA,wBAAuB,IAAIG,YAAA,YAAY,mBAAmB;AAAA,IAAA;AAAA,EAE5D;AAAA,EAEA,OAAe,wBACd,OACA,aACA,WAC8B;AAE9B,UAAM,sBAAsBP,cAAA,cAAc,2BAA2B,OAAO,WAAW;AAEvF,WAAO,KAAK;AAAA,MACX,oBAAoB;AAAA,MACpB,YAAY,UAAU;AAAA,MACtB,KAAK,kCAAkC,UAAU,mBAAmB,CAAC;AAAA,IAAA;AAAA,EAEvE;AAAA,EAEA,OAAe,+BACd,oBACA,aACA,QAC8B;AAE9B,aAAS,IAAI,mBAAmB,SAAS,GAAG,KAAK,GAAG,KAAK;AACxD,YAAM,SAAS,KAAK,2BAA2B,mBAAmB,CAAC,GAAG,aAAa,MAAM;AACzF,oBAAc,YAAY;AACjB,eAAA,KAAK,kCAAkC,MAAM;AAAA,IACvD;AAEO,WAAA;AAAA,EACR;AAAA,EAEA,OAAc,kCAAkC,QAAoE;AACnH,QAAI,kBAAkBO,YAAAA,aAAa;AAClC,aAAO,IAAIJ,4BAAA;AAAA,QACV,CAAC,OAAO;AAAA,QACR,oBAAI,IAAI,CAAC,CAAC,OAAO,iBAAiB,MAAM,CAAC,CAAC;AAAA,QAC1C,oBAAI,IAAI,CAAC,CAAC,OAAO,WAAW,OAAO,eAAe,CAAC,CAAC;AAAA,MAAA;AAAA,IAE3C,WAAA,kBAAkBK,6CAAwB,kBAAkBC,sBAAAA,uBAAuB;AAC7F,aAAO,IAAIN,4BAAA;AAAA,QACV,CAAC,OAAO,WAAW;AAAA,QACnB,oBAAI,IAAI,CAAC,CAAC,OAAO,iBAAiB,MAAM,CAAC,CAAC;AAAA,QAC1C,oBAAI,IAAI,CAAC,CAAC,OAAO,WAAW,OAAO,OAAO,eAAe,CAAC,CAAC;AAAA,MAAA;AAAA,IAC5D,WACU,WAAW,QAAW;AACzB,aAAA,IAAIA,wDAA4B,OAAO,oBAAI,OAAO,oBAAI,KAAK;AAAA,IAAA,OAC5D;AACN,aAAOO,YAAAA,YAAkB;AAAA,IAC1B;AAAA,EACD;AAAA,EAEA,OAAe,2BACd,gBACA,aACA,QACuB;AACvB,WAAO,IAAIF,qBAAA;AAAA,MACV;AAAA,QACC,GAAG;AAAA,QACH,aAAa,eAAe,YACzBH,oBAAAA,oBAAoB,iBAAiB,eAAe,eAAe,CAAI,GAAA,eAAe,SAAS,IAC/F,eAAe;AAAA,MACnB;AAAA,MACAM,aAAA,aAAa,oBAAoB,MAAM;AAAA,MACvC;AAAA,IAAA;AAAA,EAEF;AAAA,EAEA,OAAe,4BACd,iBACA,aACA,QACC;AACD,WAAO,IAAIF,sBAAsB,sBAAA,iBAAiBE,aAAAA,aAAa,oBAAoB,MAAM,GAAG,WAAW;AAAA,EACxG;AAAA,EAEA,OAAe,oBAId,iBACA,KACA,QAGA,QACA,aACmC;AAC/B,QAAA;AAEJ,QAAI,kBAAkBP,iCAAAA,kCAAkC;AAEvD,wBAAkBC,oBAAoB,oBAAA,oBAAoB,iBAAiB,KAAK,OAAO,eAAe;AACtG,qBAAe,OAAO;AAAA,IAAA,OAChB;AACS,qBAAA;AAAA,IAChB;AAEA,UAAM,UAAU,IAAI;AAAA,MACnB;AAAA,MACA,KAAK;AAAA,QACJ,gBAAgB;AAAA,QAChB;AAAA,QACAM,aAAA,aAAa,oBAAoB,YAAY;AAAA,MAC9C;AAAA,MACA;AAAA,IAAA;AAED,QAAI,kBAAkBP,iCAAAA,kCAAkC;AACvD,aAAO,IAAIA,iCAAA;AAAA,QACV,KAAK,kCAAkC,MAAS;AAAA,QAChDO,aAAAA,aAAa,oBAAoB,OAAO,UAAc,oBAAA,IAAI,CAAC,CAAC,QAAQ,iBAAiB,OAAO,CAAC,CAAC,CAAC;AAAA,QAC/F;AAAA,MAAA;AAAA,IAEF;AACA,WAAO,IAAIP,iCAAA;AAAA,MACV,KAAK,kCAAkC,MAAS;AAAA,MAChD,oBAAI,IAAI,CAAC,CAAC,QAAQ,iBAAiB,OAAO,CAAC,CAAC;AAAA,MAC5C;AAAA,IAAA;AAAA,EAEF;AACD;;"}
|