@contember/binding-common 2.0.0-beta.4 → 2.0.0-beta.6
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/src/environment/Environment.cjs +0 -18
- package/dist/development/src/environment/Environment.cjs.map +1 -1
- package/dist/development/src/environment/Environment.js +0 -18
- package/dist/development/src/environment/Environment.js.map +1 -1
- package/dist/development/src/markers/MarkerMerger.cjs +2 -1
- package/dist/development/src/markers/MarkerMerger.cjs.map +1 -1
- package/dist/development/src/markers/MarkerMerger.js +2 -1
- package/dist/development/src/markers/MarkerMerger.js.map +1 -1
- package/dist/development/src/queryLanguage/QueryLanguage.cjs +4 -0
- package/dist/development/src/queryLanguage/QueryLanguage.cjs.map +1 -1
- package/dist/development/src/queryLanguage/QueryLanguage.js +4 -0
- package/dist/development/src/queryLanguage/QueryLanguage.js.map +1 -1
- package/dist/development/src/treeParameters/TreeParameterMerger.cjs +6 -0
- package/dist/development/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
- package/dist/development/src/treeParameters/TreeParameterMerger.js +6 -0
- package/dist/development/src/treeParameters/TreeParameterMerger.js.map +1 -1
- package/dist/development/src/types/EntityAccessor.cjs.map +1 -1
- package/dist/development/src/types/EntityAccessor.js.map +1 -1
- package/dist/production/src/environment/Environment.cjs +0 -18
- package/dist/production/src/environment/Environment.cjs.map +1 -1
- package/dist/production/src/environment/Environment.js +0 -18
- package/dist/production/src/environment/Environment.js.map +1 -1
- package/dist/production/src/markers/MarkerMerger.cjs +2 -1
- package/dist/production/src/markers/MarkerMerger.cjs.map +1 -1
- package/dist/production/src/markers/MarkerMerger.js +2 -1
- package/dist/production/src/markers/MarkerMerger.js.map +1 -1
- package/dist/production/src/queryLanguage/QueryLanguage.cjs +4 -0
- package/dist/production/src/queryLanguage/QueryLanguage.cjs.map +1 -1
- package/dist/production/src/queryLanguage/QueryLanguage.js +4 -0
- package/dist/production/src/queryLanguage/QueryLanguage.js.map +1 -1
- package/dist/production/src/treeParameters/TreeParameterMerger.cjs +6 -0
- package/dist/production/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
- package/dist/production/src/treeParameters/TreeParameterMerger.js +6 -0
- package/dist/production/src/treeParameters/TreeParameterMerger.js.map +1 -1
- package/dist/production/src/types/EntityAccessor.cjs.map +1 -1
- package/dist/production/src/types/EntityAccessor.js.map +1 -1
- package/dist/types/environment/Environment.d.ts +1 -13
- package/dist/types/environment/Environment.d.ts.map +1 -1
- package/dist/types/markers/MarkerMerger.d.ts.map +1 -1
- package/dist/types/queryLanguage/QueryLanguage.d.ts.map +1 -1
- package/dist/types/treeParameters/Normalized.d.ts +4 -0
- package/dist/types/treeParameters/Normalized.d.ts.map +1 -1
- package/dist/types/treeParameters/Sugared.d.ts +4 -0
- package/dist/types/treeParameters/Sugared.d.ts.map +1 -1
- package/dist/types/treeParameters/TreeParameterMerger.d.ts +1 -0
- package/dist/types/treeParameters/TreeParameterMerger.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types/EntityAccessor.d.ts +4 -0
- package/dist/types/types/EntityAccessor.d.ts.map +1 -1
- package/dist/types/types/QueryRequestResponse.d.ts +6 -0
- package/dist/types/types/QueryRequestResponse.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/environment/Environment.ts +1 -29
- package/src/markers/MarkerMerger.ts +1 -0
- package/src/queryLanguage/QueryLanguage.ts +4 -0
- package/src/treeParameters/Normalized.ts +5 -0
- package/src/treeParameters/Sugared.ts +4 -0
- package/src/treeParameters/TreeParameterMerger.ts +12 -0
- package/src/types/EntityAccessor.ts +2 -0
- package/src/types/QueryRequestResponse.ts +6 -0
|
@@ -61,30 +61,12 @@ class Environment {
|
|
|
61
61
|
getVariableOrElse(key, fallback) {
|
|
62
62
|
return this.options.variables[key] ?? fallback;
|
|
63
63
|
}
|
|
64
|
-
/** @deprecated use getVariable or getParameter */
|
|
65
|
-
getValue(key) {
|
|
66
|
-
console.warn("Environment.getValue() is deprecated, use Environment.getVariable() or Environment.getParameter() instead.");
|
|
67
|
-
return this.getVariableOrElse(key, void 0) ?? this.getParameterOrElse(key, void 0);
|
|
68
|
-
}
|
|
69
|
-
/** @deprecated use getVariableOrElse or getParameterOrElse */
|
|
70
|
-
getValueOrElse(key, fallback) {
|
|
71
|
-
console.warn("Environment.getValueOrElse() is deprecated, use Environment.getVariableOrElse() or Environment.getParameterOrElse() instead.");
|
|
72
|
-
return this.getVariableOrElse(key, void 0) ?? this.getParameterOrElse(key, fallback);
|
|
73
|
-
}
|
|
74
|
-
/** @deprecated */
|
|
75
|
-
hasName(key) {
|
|
76
|
-
console.warn("Environment.hasName() is deprecated, use Environment.hasVariable() or Environment.hasParameter() instead.");
|
|
77
|
-
return key in this.options.variables || key in this.options.parameters;
|
|
78
|
-
}
|
|
79
64
|
withVariables(variables) {
|
|
80
65
|
if (variables === void 0) {
|
|
81
66
|
return this;
|
|
82
67
|
}
|
|
83
68
|
const newVariables = { ...this.options.variables };
|
|
84
69
|
for (const [newName, newValue] of Object.entries(variables)) {
|
|
85
|
-
if (newName === "labelMiddleware") {
|
|
86
|
-
throw new BindingError.BindingError("You cannot pass labelMiddleware to withVariables method. Use withLabelMiddleware instead.");
|
|
87
|
-
}
|
|
88
70
|
const resolvedValue = typeof newValue === "function" ? newValue(this) : newValue;
|
|
89
71
|
if (resolvedValue === void 0) {
|
|
90
72
|
delete newVariables[newName];
|
|
@@ -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'\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
|
+
{"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\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\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 Value = unknown\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\nexport { Environment }\n"],"names":["BindingError","Environment"],"mappings":"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"}
|
|
@@ -59,30 +59,12 @@ class Environment {
|
|
|
59
59
|
getVariableOrElse(key, fallback) {
|
|
60
60
|
return this.options.variables[key] ?? fallback;
|
|
61
61
|
}
|
|
62
|
-
/** @deprecated use getVariable or getParameter */
|
|
63
|
-
getValue(key) {
|
|
64
|
-
console.warn("Environment.getValue() is deprecated, use Environment.getVariable() or Environment.getParameter() instead.");
|
|
65
|
-
return this.getVariableOrElse(key, void 0) ?? this.getParameterOrElse(key, void 0);
|
|
66
|
-
}
|
|
67
|
-
/** @deprecated use getVariableOrElse or getParameterOrElse */
|
|
68
|
-
getValueOrElse(key, fallback) {
|
|
69
|
-
console.warn("Environment.getValueOrElse() is deprecated, use Environment.getVariableOrElse() or Environment.getParameterOrElse() instead.");
|
|
70
|
-
return this.getVariableOrElse(key, void 0) ?? this.getParameterOrElse(key, fallback);
|
|
71
|
-
}
|
|
72
|
-
/** @deprecated */
|
|
73
|
-
hasName(key) {
|
|
74
|
-
console.warn("Environment.hasName() is deprecated, use Environment.hasVariable() or Environment.hasParameter() instead.");
|
|
75
|
-
return key in this.options.variables || key in this.options.parameters;
|
|
76
|
-
}
|
|
77
62
|
withVariables(variables) {
|
|
78
63
|
if (variables === void 0) {
|
|
79
64
|
return this;
|
|
80
65
|
}
|
|
81
66
|
const newVariables = { ...this.options.variables };
|
|
82
67
|
for (const [newName, newValue] of Object.entries(variables)) {
|
|
83
|
-
if (newName === "labelMiddleware") {
|
|
84
|
-
throw new BindingError("You cannot pass labelMiddleware to withVariables method. Use withLabelMiddleware instead.");
|
|
85
|
-
}
|
|
86
68
|
const resolvedValue = typeof newValue === "function" ? newValue(this) : newValue;
|
|
87
69
|
if (resolvedValue === void 0) {
|
|
88
70
|
delete newVariables[newName];
|
|
@@ -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'\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
|
+
{"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\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\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 Value = unknown\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\nexport { Environment }\n"],"names":["Environment"],"mappings":"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"}
|
|
@@ -234,7 +234,8 @@ class MarkerMerger {
|
|
|
234
234
|
field: consts.PRIMARY_KEY_NAME,
|
|
235
235
|
defaultValue: void 0,
|
|
236
236
|
isNonbearing: true,
|
|
237
|
-
eventListeners: void 0
|
|
237
|
+
eventListeners: void 0,
|
|
238
|
+
meta: []
|
|
238
239
|
});
|
|
239
240
|
const freshFields = new EntityFieldMarkersContainer.EntityFieldMarkersContainer(
|
|
240
241
|
false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkerMerger.cjs","sources":["../../../../../packages/binding-common/src/markers/MarkerMerger.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport { PRIMARY_KEY_NAME } from '../consts'\nimport {\n\tEntityFieldMarkers,\n\tEntityFieldMarkersContainer,\n\tEntityFieldPlaceholders,\n\tEntityListSubTreeMarker,\n\tEntitySubTreeMarker,\n\tFieldMarker,\n\tHasManyRelationMarker,\n\tHasOneRelationMarker,\n\tMarkerTreeRoot,\n\tMeaningfulMarker,\n\tSubTreeMarkers,\n} from '../markers'\nimport type { Alias, FieldName, PlaceholderName } from '../treeParameters'\nimport { assertNever } from '../utils/assertNever'\nimport { TreeParameterMerger } from '../treeParameters/TreeParameterMerger'\nimport { Environment } from '../environment'\n\nexport class MarkerMerger {\n\t// This method assumes their placeholder names are the same\n\tpublic static mergeMarkers(original: MeaningfulMarker, fresh: MeaningfulMarker): MeaningfulMarker {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original instanceof FieldMarker) {\n\t\t\tif (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.mergeFieldMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker || fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.fieldName)\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('Merging fields and sub trees is an undefined operation.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasOneRelationMarker) {\n\t\t\tif (fresh instanceof HasOneRelationMarker) {\n\t\t\t\treturn this.mergeHasOneRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasManyRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasManyRelationMarker) {\n\t\t\tif (fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.mergeHasManyRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof EntitySubTreeMarker) {\n\t\t\tif (fresh instanceof EntitySubTreeMarker) {\n\t\t\t\treturn this.mergeEntitySubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntitySubTreeMarker can only be merged with other entity sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t} else if (original instanceof EntityListSubTreeMarker) {\n\t\t\tif (fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\treturn this.mergeEntityListSubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntityListSubTreeMarker can only be merged with other list sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tassertNever(original)\n\t}\n\n\tpublic static mergeMarkerTreeRoots(original: MarkerTreeRoot, fresh: MarkerTreeRoot): MarkerTreeRoot {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new MarkerTreeRoot(\n\t\t\tthis.mergeEntityFields(original.subTrees, fresh.subTrees),\n\t\t\tthis.mergeSubTreePlaceholdersByAliases(original.placeholdersByAliases, fresh.placeholdersByAliases),\n\t\t)\n\t}\n\n\tpublic static mergeSubTreeMarkers(\n\t\toriginal: SubTreeMarkers | undefined,\n\t\tfresh: SubTreeMarkers | undefined,\n\t): SubTreeMarkers | 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\tconst newOriginal = new Map(original)\n\n\t\tfor (const [placeholderName, fromFresh] of fresh) {\n\t\t\tconst fromOriginal = newOriginal.get(placeholderName)\n\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tfromOriginal === undefined\n\t\t\t\t\t? fromFresh\n\t\t\t\t\t: fromOriginal instanceof EntityListSubTreeMarker\n\t\t\t\t\t\t? MarkerMerger.mergeEntityListSubTreeMarkers(fromOriginal, fromFresh as EntityListSubTreeMarker)\n\t\t\t\t\t\t: MarkerMerger.mergeEntitySubTreeMarkers(fromOriginal, fromFresh as EntitySubTreeMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeSubTreePlaceholdersByAliases(\n\t\toriginal: ReadonlyMap<Alias, PlaceholderName>,\n\t\tfresh: ReadonlyMap<Alias, PlaceholderName>,\n\t) {\n\t\tconst newOriginalAliases = new Map(original)\n\t\tfor (const [alias, placeholder] of fresh) {\n\t\t\tconst fromOriginal = newOriginalAliases.get(alias)\n\t\t\tif (fromOriginal === undefined) {\n\t\t\t\tnewOriginalAliases.set(alias, placeholder)\n\t\t\t} else if (fromOriginal === placeholder) {\n\t\t\t\t// Do nothing\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(`Illegal subTree alias '${alias}' points to distinct subTrees.`)\n\t\t\t}\n\t\t}\n\t\treturn newOriginalAliases\n\t}\n\n\tpublic static mergeEntityFields(original: SubTreeMarkers, fresh: SubTreeMarkers): SubTreeMarkers\n\tpublic static mergeEntityFields(original: EntityFieldMarkers, fresh: EntityFieldMarkers): EntityFieldMarkers\n\tpublic static mergeEntityFields(\n\t\toriginal: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t\tfresh: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t): ReadonlyMap<PlaceholderName, MeaningfulMarker> {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<PlaceholderName, MeaningfulMarker> = new Map(original)\n\t\tfor (const [placeholderName, freshMarker] of fresh) {\n\t\t\tconst markerFromOriginal = newOriginal.get(placeholderName)\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tmarkerFromOriginal === undefined ? freshMarker : this.mergeMarkers(markerFromOriginal, freshMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldPlaceholders(\n\t\toriginal: EntityFieldPlaceholders,\n\t\tfresh: EntityFieldPlaceholders,\n\t): EntityFieldPlaceholders {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<FieldName, PlaceholderName | Set<PlaceholderName>> = new Map(original)\n\t\tfor (const [fieldName, freshPlaceholders] of fresh) {\n\t\t\tconst placeholderFromOriginal = newOriginal.get(fieldName)\n\n\t\t\tif (placeholderFromOriginal === undefined) {\n\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t} else if (placeholderFromOriginal instanceof Set) {\n\t\t\t\tconst combinedSet = new Set(placeholderFromOriginal)\n\t\t\t\tif (freshPlaceholders instanceof Set) {\n\t\t\t\t\tfor (const freshPlaceholder of freshPlaceholders) {\n\t\t\t\t\t\tcombinedSet.add(freshPlaceholder)\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tcombinedSet.add(freshPlaceholders)\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t} else if (typeof placeholderFromOriginal === 'string') {\n\t\t\t\tif (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tif (placeholderFromOriginal === freshPlaceholders) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewOriginal.set(fieldName, new Set([placeholderFromOriginal, freshPlaceholders]))\n\t\t\t\t\t}\n\t\t\t\t} else if (freshPlaceholders instanceof Set) {\n\t\t\t\t\tif (freshPlaceholders.has(placeholderFromOriginal)) {\n\t\t\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst combinedSet = new Set(freshPlaceholders)\n\t\t\t\t\t\tcombinedSet.add(placeholderFromOriginal)\n\t\t\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(placeholderFromOriginal)\n\t\t\t}\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldsContainers(\n\t\toriginal: EntityFieldMarkersContainer,\n\t\tfresh: EntityFieldMarkersContainer,\n\t): EntityFieldMarkersContainer {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityFieldMarkersContainer(\n\t\t\toriginal.hasAtLeastOneBearingField || fresh.hasAtLeastOneBearingField,\n\t\t\tthis.mergeEntityFields(original.markers, fresh.markers),\n\t\t\tthis.mergeEntityFieldPlaceholders(original.placeholders, fresh.placeholders),\n\t\t)\n\t}\n\n\tpublic static mergeHasOneRelationMarkers(original: HasOneRelationMarker, fresh: HasOneRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasOneRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasOneRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeHasManyRelationMarkers(original: HasManyRelationMarker, fresh: HasManyRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasManyRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasManyRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntitySubTreeMarkers(original: EntitySubTreeMarker, fresh: EntitySubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntitySubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntitySubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntityListSubTreeMarkers(original: EntityListSubTreeMarker, fresh: EntityListSubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityListSubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntityListSubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeFieldMarkers(original: FieldMarker, fresh: FieldMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new FieldMarker(TreeParameterMerger.mergeSingleField(original.parameters, fresh.parameters))\n\t}\n\n\tpublic static mergeInSystemFields(original: EntityFieldMarkersContainer | undefined): EntityFieldMarkersContainer {\n\t\tconst primaryKey = new FieldMarker({\n\t\t\tfield: PRIMARY_KEY_NAME,\n\t\t\tdefaultValue: undefined,\n\t\t\tisNonbearing: true,\n\t\t\teventListeners: undefined,\n\t\t})\n\t\t// We could potentially share this instance for all fields. Maybe sometime later.\n\t\tconst freshFields = new EntityFieldMarkersContainer(\n\t\t\tfalse,\n\t\t\tnew Map([[primaryKey.placeholderName, primaryKey]]),\n\t\t\tnew Map([[PRIMARY_KEY_NAME, primaryKey.placeholderName]]),\n\t\t)\n\t\treturn original ? this.mergeEntityFieldsContainers(original, freshFields) : freshFields\n\t}\n\n\tpublic static mergeEnvironments(original: Environment, fresh: Environment): Environment {\n\t\treturn original.merge(fresh)\n\t}\n\n\tprivate static rejectRelationScalarCombo(fieldName: FieldName): never {\n\t\tthrow new BindingError(`Cannot combine a relation with a scalar field '${fieldName}'.`)\n\t}\n}\n"],"names":["FieldMarker","HasOneRelationMarker","HasManyRelationMarker","EntitySubTreeMarker","EntityListSubTreeMarker","BindingError","assertNever","MarkerTreeRoot","EntityFieldMarkersContainer","TreeParameterMerger","PRIMARY_KEY_NAME"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkerMerger.cjs","sources":["../../../../../packages/binding-common/src/markers/MarkerMerger.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport { PRIMARY_KEY_NAME } from '../consts'\nimport {\n\tEntityFieldMarkers,\n\tEntityFieldMarkersContainer,\n\tEntityFieldPlaceholders,\n\tEntityListSubTreeMarker,\n\tEntitySubTreeMarker,\n\tFieldMarker,\n\tHasManyRelationMarker,\n\tHasOneRelationMarker,\n\tMarkerTreeRoot,\n\tMeaningfulMarker,\n\tSubTreeMarkers,\n} from '../markers'\nimport type { Alias, FieldName, PlaceholderName } from '../treeParameters'\nimport { assertNever } from '../utils/assertNever'\nimport { TreeParameterMerger } from '../treeParameters/TreeParameterMerger'\nimport { Environment } from '../environment'\n\nexport class MarkerMerger {\n\t// This method assumes their placeholder names are the same\n\tpublic static mergeMarkers(original: MeaningfulMarker, fresh: MeaningfulMarker): MeaningfulMarker {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original instanceof FieldMarker) {\n\t\t\tif (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.mergeFieldMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker || fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.fieldName)\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('Merging fields and sub trees is an undefined operation.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasOneRelationMarker) {\n\t\t\tif (fresh instanceof HasOneRelationMarker) {\n\t\t\t\treturn this.mergeHasOneRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasManyRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasManyRelationMarker) {\n\t\t\tif (fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.mergeHasManyRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof EntitySubTreeMarker) {\n\t\t\tif (fresh instanceof EntitySubTreeMarker) {\n\t\t\t\treturn this.mergeEntitySubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntitySubTreeMarker can only be merged with other entity sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t} else if (original instanceof EntityListSubTreeMarker) {\n\t\t\tif (fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\treturn this.mergeEntityListSubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntityListSubTreeMarker can only be merged with other list sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tassertNever(original)\n\t}\n\n\tpublic static mergeMarkerTreeRoots(original: MarkerTreeRoot, fresh: MarkerTreeRoot): MarkerTreeRoot {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new MarkerTreeRoot(\n\t\t\tthis.mergeEntityFields(original.subTrees, fresh.subTrees),\n\t\t\tthis.mergeSubTreePlaceholdersByAliases(original.placeholdersByAliases, fresh.placeholdersByAliases),\n\t\t)\n\t}\n\n\tpublic static mergeSubTreeMarkers(\n\t\toriginal: SubTreeMarkers | undefined,\n\t\tfresh: SubTreeMarkers | undefined,\n\t): SubTreeMarkers | 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\tconst newOriginal = new Map(original)\n\n\t\tfor (const [placeholderName, fromFresh] of fresh) {\n\t\t\tconst fromOriginal = newOriginal.get(placeholderName)\n\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tfromOriginal === undefined\n\t\t\t\t\t? fromFresh\n\t\t\t\t\t: fromOriginal instanceof EntityListSubTreeMarker\n\t\t\t\t\t\t? MarkerMerger.mergeEntityListSubTreeMarkers(fromOriginal, fromFresh as EntityListSubTreeMarker)\n\t\t\t\t\t\t: MarkerMerger.mergeEntitySubTreeMarkers(fromOriginal, fromFresh as EntitySubTreeMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeSubTreePlaceholdersByAliases(\n\t\toriginal: ReadonlyMap<Alias, PlaceholderName>,\n\t\tfresh: ReadonlyMap<Alias, PlaceholderName>,\n\t) {\n\t\tconst newOriginalAliases = new Map(original)\n\t\tfor (const [alias, placeholder] of fresh) {\n\t\t\tconst fromOriginal = newOriginalAliases.get(alias)\n\t\t\tif (fromOriginal === undefined) {\n\t\t\t\tnewOriginalAliases.set(alias, placeholder)\n\t\t\t} else if (fromOriginal === placeholder) {\n\t\t\t\t// Do nothing\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(`Illegal subTree alias '${alias}' points to distinct subTrees.`)\n\t\t\t}\n\t\t}\n\t\treturn newOriginalAliases\n\t}\n\n\tpublic static mergeEntityFields(original: SubTreeMarkers, fresh: SubTreeMarkers): SubTreeMarkers\n\tpublic static mergeEntityFields(original: EntityFieldMarkers, fresh: EntityFieldMarkers): EntityFieldMarkers\n\tpublic static mergeEntityFields(\n\t\toriginal: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t\tfresh: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t): ReadonlyMap<PlaceholderName, MeaningfulMarker> {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<PlaceholderName, MeaningfulMarker> = new Map(original)\n\t\tfor (const [placeholderName, freshMarker] of fresh) {\n\t\t\tconst markerFromOriginal = newOriginal.get(placeholderName)\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tmarkerFromOriginal === undefined ? freshMarker : this.mergeMarkers(markerFromOriginal, freshMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldPlaceholders(\n\t\toriginal: EntityFieldPlaceholders,\n\t\tfresh: EntityFieldPlaceholders,\n\t): EntityFieldPlaceholders {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<FieldName, PlaceholderName | Set<PlaceholderName>> = new Map(original)\n\t\tfor (const [fieldName, freshPlaceholders] of fresh) {\n\t\t\tconst placeholderFromOriginal = newOriginal.get(fieldName)\n\n\t\t\tif (placeholderFromOriginal === undefined) {\n\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t} else if (placeholderFromOriginal instanceof Set) {\n\t\t\t\tconst combinedSet = new Set(placeholderFromOriginal)\n\t\t\t\tif (freshPlaceholders instanceof Set) {\n\t\t\t\t\tfor (const freshPlaceholder of freshPlaceholders) {\n\t\t\t\t\t\tcombinedSet.add(freshPlaceholder)\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tcombinedSet.add(freshPlaceholders)\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t} else if (typeof placeholderFromOriginal === 'string') {\n\t\t\t\tif (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tif (placeholderFromOriginal === freshPlaceholders) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewOriginal.set(fieldName, new Set([placeholderFromOriginal, freshPlaceholders]))\n\t\t\t\t\t}\n\t\t\t\t} else if (freshPlaceholders instanceof Set) {\n\t\t\t\t\tif (freshPlaceholders.has(placeholderFromOriginal)) {\n\t\t\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst combinedSet = new Set(freshPlaceholders)\n\t\t\t\t\t\tcombinedSet.add(placeholderFromOriginal)\n\t\t\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(placeholderFromOriginal)\n\t\t\t}\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldsContainers(\n\t\toriginal: EntityFieldMarkersContainer,\n\t\tfresh: EntityFieldMarkersContainer,\n\t): EntityFieldMarkersContainer {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityFieldMarkersContainer(\n\t\t\toriginal.hasAtLeastOneBearingField || fresh.hasAtLeastOneBearingField,\n\t\t\tthis.mergeEntityFields(original.markers, fresh.markers),\n\t\t\tthis.mergeEntityFieldPlaceholders(original.placeholders, fresh.placeholders),\n\t\t)\n\t}\n\n\tpublic static mergeHasOneRelationMarkers(original: HasOneRelationMarker, fresh: HasOneRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasOneRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasOneRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeHasManyRelationMarkers(original: HasManyRelationMarker, fresh: HasManyRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasManyRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasManyRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntitySubTreeMarkers(original: EntitySubTreeMarker, fresh: EntitySubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntitySubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntitySubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntityListSubTreeMarkers(original: EntityListSubTreeMarker, fresh: EntityListSubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityListSubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntityListSubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeFieldMarkers(original: FieldMarker, fresh: FieldMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new FieldMarker(TreeParameterMerger.mergeSingleField(original.parameters, fresh.parameters))\n\t}\n\n\tpublic static mergeInSystemFields(original: EntityFieldMarkersContainer | undefined): EntityFieldMarkersContainer {\n\t\tconst primaryKey = new FieldMarker({\n\t\t\tfield: PRIMARY_KEY_NAME,\n\t\t\tdefaultValue: undefined,\n\t\t\tisNonbearing: true,\n\t\t\teventListeners: undefined,\n\t\t\tmeta: [],\n\t\t})\n\t\t// We could potentially share this instance for all fields. Maybe sometime later.\n\t\tconst freshFields = new EntityFieldMarkersContainer(\n\t\t\tfalse,\n\t\t\tnew Map([[primaryKey.placeholderName, primaryKey]]),\n\t\t\tnew Map([[PRIMARY_KEY_NAME, primaryKey.placeholderName]]),\n\t\t)\n\t\treturn original ? this.mergeEntityFieldsContainers(original, freshFields) : freshFields\n\t}\n\n\tpublic static mergeEnvironments(original: Environment, fresh: Environment): Environment {\n\t\treturn original.merge(fresh)\n\t}\n\n\tprivate static rejectRelationScalarCombo(fieldName: FieldName): never {\n\t\tthrow new BindingError(`Cannot combine a relation with a scalar field '${fieldName}'.`)\n\t}\n}\n"],"names":["FieldMarker","HasOneRelationMarker","HasManyRelationMarker","EntitySubTreeMarker","EntityListSubTreeMarker","BindingError","assertNever","MarkerTreeRoot","EntityFieldMarkersContainer","TreeParameterMerger","PRIMARY_KEY_NAME"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkerMerger.js","sources":["../../../../../packages/binding-common/src/markers/MarkerMerger.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport { PRIMARY_KEY_NAME } from '../consts'\nimport {\n\tEntityFieldMarkers,\n\tEntityFieldMarkersContainer,\n\tEntityFieldPlaceholders,\n\tEntityListSubTreeMarker,\n\tEntitySubTreeMarker,\n\tFieldMarker,\n\tHasManyRelationMarker,\n\tHasOneRelationMarker,\n\tMarkerTreeRoot,\n\tMeaningfulMarker,\n\tSubTreeMarkers,\n} from '../markers'\nimport type { Alias, FieldName, PlaceholderName } from '../treeParameters'\nimport { assertNever } from '../utils/assertNever'\nimport { TreeParameterMerger } from '../treeParameters/TreeParameterMerger'\nimport { Environment } from '../environment'\n\nexport class MarkerMerger {\n\t// This method assumes their placeholder names are the same\n\tpublic static mergeMarkers(original: MeaningfulMarker, fresh: MeaningfulMarker): MeaningfulMarker {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original instanceof FieldMarker) {\n\t\t\tif (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.mergeFieldMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker || fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.fieldName)\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('Merging fields and sub trees is an undefined operation.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasOneRelationMarker) {\n\t\t\tif (fresh instanceof HasOneRelationMarker) {\n\t\t\t\treturn this.mergeHasOneRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasManyRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasManyRelationMarker) {\n\t\t\tif (fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.mergeHasManyRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof EntitySubTreeMarker) {\n\t\t\tif (fresh instanceof EntitySubTreeMarker) {\n\t\t\t\treturn this.mergeEntitySubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntitySubTreeMarker can only be merged with other entity sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t} else if (original instanceof EntityListSubTreeMarker) {\n\t\t\tif (fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\treturn this.mergeEntityListSubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntityListSubTreeMarker can only be merged with other list sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tassertNever(original)\n\t}\n\n\tpublic static mergeMarkerTreeRoots(original: MarkerTreeRoot, fresh: MarkerTreeRoot): MarkerTreeRoot {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new MarkerTreeRoot(\n\t\t\tthis.mergeEntityFields(original.subTrees, fresh.subTrees),\n\t\t\tthis.mergeSubTreePlaceholdersByAliases(original.placeholdersByAliases, fresh.placeholdersByAliases),\n\t\t)\n\t}\n\n\tpublic static mergeSubTreeMarkers(\n\t\toriginal: SubTreeMarkers | undefined,\n\t\tfresh: SubTreeMarkers | undefined,\n\t): SubTreeMarkers | 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\tconst newOriginal = new Map(original)\n\n\t\tfor (const [placeholderName, fromFresh] of fresh) {\n\t\t\tconst fromOriginal = newOriginal.get(placeholderName)\n\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tfromOriginal === undefined\n\t\t\t\t\t? fromFresh\n\t\t\t\t\t: fromOriginal instanceof EntityListSubTreeMarker\n\t\t\t\t\t\t? MarkerMerger.mergeEntityListSubTreeMarkers(fromOriginal, fromFresh as EntityListSubTreeMarker)\n\t\t\t\t\t\t: MarkerMerger.mergeEntitySubTreeMarkers(fromOriginal, fromFresh as EntitySubTreeMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeSubTreePlaceholdersByAliases(\n\t\toriginal: ReadonlyMap<Alias, PlaceholderName>,\n\t\tfresh: ReadonlyMap<Alias, PlaceholderName>,\n\t) {\n\t\tconst newOriginalAliases = new Map(original)\n\t\tfor (const [alias, placeholder] of fresh) {\n\t\t\tconst fromOriginal = newOriginalAliases.get(alias)\n\t\t\tif (fromOriginal === undefined) {\n\t\t\t\tnewOriginalAliases.set(alias, placeholder)\n\t\t\t} else if (fromOriginal === placeholder) {\n\t\t\t\t// Do nothing\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(`Illegal subTree alias '${alias}' points to distinct subTrees.`)\n\t\t\t}\n\t\t}\n\t\treturn newOriginalAliases\n\t}\n\n\tpublic static mergeEntityFields(original: SubTreeMarkers, fresh: SubTreeMarkers): SubTreeMarkers\n\tpublic static mergeEntityFields(original: EntityFieldMarkers, fresh: EntityFieldMarkers): EntityFieldMarkers\n\tpublic static mergeEntityFields(\n\t\toriginal: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t\tfresh: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t): ReadonlyMap<PlaceholderName, MeaningfulMarker> {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<PlaceholderName, MeaningfulMarker> = new Map(original)\n\t\tfor (const [placeholderName, freshMarker] of fresh) {\n\t\t\tconst markerFromOriginal = newOriginal.get(placeholderName)\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tmarkerFromOriginal === undefined ? freshMarker : this.mergeMarkers(markerFromOriginal, freshMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldPlaceholders(\n\t\toriginal: EntityFieldPlaceholders,\n\t\tfresh: EntityFieldPlaceholders,\n\t): EntityFieldPlaceholders {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<FieldName, PlaceholderName | Set<PlaceholderName>> = new Map(original)\n\t\tfor (const [fieldName, freshPlaceholders] of fresh) {\n\t\t\tconst placeholderFromOriginal = newOriginal.get(fieldName)\n\n\t\t\tif (placeholderFromOriginal === undefined) {\n\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t} else if (placeholderFromOriginal instanceof Set) {\n\t\t\t\tconst combinedSet = new Set(placeholderFromOriginal)\n\t\t\t\tif (freshPlaceholders instanceof Set) {\n\t\t\t\t\tfor (const freshPlaceholder of freshPlaceholders) {\n\t\t\t\t\t\tcombinedSet.add(freshPlaceholder)\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tcombinedSet.add(freshPlaceholders)\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t} else if (typeof placeholderFromOriginal === 'string') {\n\t\t\t\tif (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tif (placeholderFromOriginal === freshPlaceholders) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewOriginal.set(fieldName, new Set([placeholderFromOriginal, freshPlaceholders]))\n\t\t\t\t\t}\n\t\t\t\t} else if (freshPlaceholders instanceof Set) {\n\t\t\t\t\tif (freshPlaceholders.has(placeholderFromOriginal)) {\n\t\t\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst combinedSet = new Set(freshPlaceholders)\n\t\t\t\t\t\tcombinedSet.add(placeholderFromOriginal)\n\t\t\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(placeholderFromOriginal)\n\t\t\t}\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldsContainers(\n\t\toriginal: EntityFieldMarkersContainer,\n\t\tfresh: EntityFieldMarkersContainer,\n\t): EntityFieldMarkersContainer {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityFieldMarkersContainer(\n\t\t\toriginal.hasAtLeastOneBearingField || fresh.hasAtLeastOneBearingField,\n\t\t\tthis.mergeEntityFields(original.markers, fresh.markers),\n\t\t\tthis.mergeEntityFieldPlaceholders(original.placeholders, fresh.placeholders),\n\t\t)\n\t}\n\n\tpublic static mergeHasOneRelationMarkers(original: HasOneRelationMarker, fresh: HasOneRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasOneRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasOneRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeHasManyRelationMarkers(original: HasManyRelationMarker, fresh: HasManyRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasManyRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasManyRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntitySubTreeMarkers(original: EntitySubTreeMarker, fresh: EntitySubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntitySubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntitySubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntityListSubTreeMarkers(original: EntityListSubTreeMarker, fresh: EntityListSubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityListSubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntityListSubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeFieldMarkers(original: FieldMarker, fresh: FieldMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new FieldMarker(TreeParameterMerger.mergeSingleField(original.parameters, fresh.parameters))\n\t}\n\n\tpublic static mergeInSystemFields(original: EntityFieldMarkersContainer | undefined): EntityFieldMarkersContainer {\n\t\tconst primaryKey = new FieldMarker({\n\t\t\tfield: PRIMARY_KEY_NAME,\n\t\t\tdefaultValue: undefined,\n\t\t\tisNonbearing: true,\n\t\t\teventListeners: undefined,\n\t\t})\n\t\t// We could potentially share this instance for all fields. Maybe sometime later.\n\t\tconst freshFields = new EntityFieldMarkersContainer(\n\t\t\tfalse,\n\t\t\tnew Map([[primaryKey.placeholderName, primaryKey]]),\n\t\t\tnew Map([[PRIMARY_KEY_NAME, primaryKey.placeholderName]]),\n\t\t)\n\t\treturn original ? this.mergeEntityFieldsContainers(original, freshFields) : freshFields\n\t}\n\n\tpublic static mergeEnvironments(original: Environment, fresh: Environment): Environment {\n\t\treturn original.merge(fresh)\n\t}\n\n\tprivate static rejectRelationScalarCombo(fieldName: FieldName): never {\n\t\tthrow new BindingError(`Cannot combine a relation with a scalar field '${fieldName}'.`)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkerMerger.js","sources":["../../../../../packages/binding-common/src/markers/MarkerMerger.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\nimport { PRIMARY_KEY_NAME } from '../consts'\nimport {\n\tEntityFieldMarkers,\n\tEntityFieldMarkersContainer,\n\tEntityFieldPlaceholders,\n\tEntityListSubTreeMarker,\n\tEntitySubTreeMarker,\n\tFieldMarker,\n\tHasManyRelationMarker,\n\tHasOneRelationMarker,\n\tMarkerTreeRoot,\n\tMeaningfulMarker,\n\tSubTreeMarkers,\n} from '../markers'\nimport type { Alias, FieldName, PlaceholderName } from '../treeParameters'\nimport { assertNever } from '../utils/assertNever'\nimport { TreeParameterMerger } from '../treeParameters/TreeParameterMerger'\nimport { Environment } from '../environment'\n\nexport class MarkerMerger {\n\t// This method assumes their placeholder names are the same\n\tpublic static mergeMarkers(original: MeaningfulMarker, fresh: MeaningfulMarker): MeaningfulMarker {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original instanceof FieldMarker) {\n\t\t\tif (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.mergeFieldMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker || fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.fieldName)\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('Merging fields and sub trees is an undefined operation.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasOneRelationMarker) {\n\t\t\tif (fresh instanceof HasOneRelationMarker) {\n\t\t\t\treturn this.mergeHasOneRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasManyRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof HasManyRelationMarker) {\n\t\t\tif (fresh instanceof HasManyRelationMarker) {\n\t\t\t\treturn this.mergeHasManyRelationMarkers(original, fresh)\n\t\t\t} else if (fresh instanceof FieldMarker) {\n\t\t\t\treturn this.rejectRelationScalarCombo(original.parameters.field)\n\t\t\t} else if (fresh instanceof HasOneRelationMarker) {\n\t\t\t\tthrow new BindingError() // TODO not implemented\n\t\t\t} else if (fresh instanceof EntitySubTreeMarker || fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\tthrow new BindingError('MarkerTreeGenerator merging: SubTreeMarkers can only be merged with other sub trees.')\n\t\t\t}\n\t\t\tassertNever(fresh)\n\t\t} else if (original instanceof EntitySubTreeMarker) {\n\t\t\tif (fresh instanceof EntitySubTreeMarker) {\n\t\t\t\treturn this.mergeEntitySubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntitySubTreeMarker can only be merged with other entity sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t} else if (original instanceof EntityListSubTreeMarker) {\n\t\t\tif (fresh instanceof EntityListSubTreeMarker) {\n\t\t\t\treturn this.mergeEntityListSubTreeMarkers(original, fresh)\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(\n\t\t\t\t\t'MarkerTreeGenerator merging: EntityListSubTreeMarker can only be merged with other list sub trees.',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tassertNever(original)\n\t}\n\n\tpublic static mergeMarkerTreeRoots(original: MarkerTreeRoot, fresh: MarkerTreeRoot): MarkerTreeRoot {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new MarkerTreeRoot(\n\t\t\tthis.mergeEntityFields(original.subTrees, fresh.subTrees),\n\t\t\tthis.mergeSubTreePlaceholdersByAliases(original.placeholdersByAliases, fresh.placeholdersByAliases),\n\t\t)\n\t}\n\n\tpublic static mergeSubTreeMarkers(\n\t\toriginal: SubTreeMarkers | undefined,\n\t\tfresh: SubTreeMarkers | undefined,\n\t): SubTreeMarkers | 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\tconst newOriginal = new Map(original)\n\n\t\tfor (const [placeholderName, fromFresh] of fresh) {\n\t\t\tconst fromOriginal = newOriginal.get(placeholderName)\n\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tfromOriginal === undefined\n\t\t\t\t\t? fromFresh\n\t\t\t\t\t: fromOriginal instanceof EntityListSubTreeMarker\n\t\t\t\t\t\t? MarkerMerger.mergeEntityListSubTreeMarkers(fromOriginal, fromFresh as EntityListSubTreeMarker)\n\t\t\t\t\t\t: MarkerMerger.mergeEntitySubTreeMarkers(fromOriginal, fromFresh as EntitySubTreeMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeSubTreePlaceholdersByAliases(\n\t\toriginal: ReadonlyMap<Alias, PlaceholderName>,\n\t\tfresh: ReadonlyMap<Alias, PlaceholderName>,\n\t) {\n\t\tconst newOriginalAliases = new Map(original)\n\t\tfor (const [alias, placeholder] of fresh) {\n\t\t\tconst fromOriginal = newOriginalAliases.get(alias)\n\t\t\tif (fromOriginal === undefined) {\n\t\t\t\tnewOriginalAliases.set(alias, placeholder)\n\t\t\t} else if (fromOriginal === placeholder) {\n\t\t\t\t// Do nothing\n\t\t\t} else {\n\t\t\t\tthrow new BindingError(`Illegal subTree alias '${alias}' points to distinct subTrees.`)\n\t\t\t}\n\t\t}\n\t\treturn newOriginalAliases\n\t}\n\n\tpublic static mergeEntityFields(original: SubTreeMarkers, fresh: SubTreeMarkers): SubTreeMarkers\n\tpublic static mergeEntityFields(original: EntityFieldMarkers, fresh: EntityFieldMarkers): EntityFieldMarkers\n\tpublic static mergeEntityFields(\n\t\toriginal: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t\tfresh: ReadonlyMap<PlaceholderName, MeaningfulMarker>,\n\t): ReadonlyMap<PlaceholderName, MeaningfulMarker> {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<PlaceholderName, MeaningfulMarker> = new Map(original)\n\t\tfor (const [placeholderName, freshMarker] of fresh) {\n\t\t\tconst markerFromOriginal = newOriginal.get(placeholderName)\n\t\t\tnewOriginal.set(\n\t\t\t\tplaceholderName,\n\t\t\t\tmarkerFromOriginal === undefined ? freshMarker : this.mergeMarkers(markerFromOriginal, freshMarker),\n\t\t\t)\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldPlaceholders(\n\t\toriginal: EntityFieldPlaceholders,\n\t\tfresh: EntityFieldPlaceholders,\n\t): EntityFieldPlaceholders {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original.size === 0) {\n\t\t\treturn fresh\n\t\t}\n\t\tconst newOriginal: Map<FieldName, PlaceholderName | Set<PlaceholderName>> = new Map(original)\n\t\tfor (const [fieldName, freshPlaceholders] of fresh) {\n\t\t\tconst placeholderFromOriginal = newOriginal.get(fieldName)\n\n\t\t\tif (placeholderFromOriginal === undefined) {\n\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t} else if (placeholderFromOriginal instanceof Set) {\n\t\t\t\tconst combinedSet = new Set(placeholderFromOriginal)\n\t\t\t\tif (freshPlaceholders instanceof Set) {\n\t\t\t\t\tfor (const freshPlaceholder of freshPlaceholders) {\n\t\t\t\t\t\tcombinedSet.add(freshPlaceholder)\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tcombinedSet.add(freshPlaceholders)\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t} else if (typeof placeholderFromOriginal === 'string') {\n\t\t\t\tif (typeof freshPlaceholders === 'string') {\n\t\t\t\t\tif (placeholderFromOriginal === freshPlaceholders) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewOriginal.set(fieldName, new Set([placeholderFromOriginal, freshPlaceholders]))\n\t\t\t\t\t}\n\t\t\t\t} else if (freshPlaceholders instanceof Set) {\n\t\t\t\t\tif (freshPlaceholders.has(placeholderFromOriginal)) {\n\t\t\t\t\t\tnewOriginal.set(fieldName, freshPlaceholders)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst combinedSet = new Set(freshPlaceholders)\n\t\t\t\t\t\tcombinedSet.add(placeholderFromOriginal)\n\t\t\t\t\t\tnewOriginal.set(fieldName, combinedSet)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tassertNever(freshPlaceholders)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNever(placeholderFromOriginal)\n\t\t\t}\n\t\t}\n\t\treturn newOriginal\n\t}\n\n\tpublic static mergeEntityFieldsContainers(\n\t\toriginal: EntityFieldMarkersContainer,\n\t\tfresh: EntityFieldMarkersContainer,\n\t): EntityFieldMarkersContainer {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityFieldMarkersContainer(\n\t\t\toriginal.hasAtLeastOneBearingField || fresh.hasAtLeastOneBearingField,\n\t\t\tthis.mergeEntityFields(original.markers, fresh.markers),\n\t\t\tthis.mergeEntityFieldPlaceholders(original.placeholders, fresh.placeholders),\n\t\t)\n\t}\n\n\tpublic static mergeHasOneRelationMarkers(original: HasOneRelationMarker, fresh: HasOneRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasOneRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasOneRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeHasManyRelationMarkers(original: HasManyRelationMarker, fresh: HasManyRelationMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new HasManyRelationMarker(\n\t\t\tTreeParameterMerger.mergeHasManyRelationsWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntitySubTreeMarkers(original: EntitySubTreeMarker, fresh: EntitySubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntitySubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntitySubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeEntityListSubTreeMarkers(original: EntityListSubTreeMarker, fresh: EntityListSubTreeMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new EntityListSubTreeMarker(\n\t\t\tTreeParameterMerger.mergeEntityListSubTreeParametersWithSamePlaceholders(original.parameters, fresh.parameters),\n\t\t\tthis.mergeEntityFieldsContainers(original.fields, fresh.fields),\n\t\t\tthis.mergeEnvironments(original.environment, fresh.environment),\n\t\t)\n\t}\n\n\tpublic static mergeFieldMarkers(original: FieldMarker, fresh: FieldMarker) {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\treturn new FieldMarker(TreeParameterMerger.mergeSingleField(original.parameters, fresh.parameters))\n\t}\n\n\tpublic static mergeInSystemFields(original: EntityFieldMarkersContainer | undefined): EntityFieldMarkersContainer {\n\t\tconst primaryKey = new FieldMarker({\n\t\t\tfield: PRIMARY_KEY_NAME,\n\t\t\tdefaultValue: undefined,\n\t\t\tisNonbearing: true,\n\t\t\teventListeners: undefined,\n\t\t\tmeta: [],\n\t\t})\n\t\t// We could potentially share this instance for all fields. Maybe sometime later.\n\t\tconst freshFields = new EntityFieldMarkersContainer(\n\t\t\tfalse,\n\t\t\tnew Map([[primaryKey.placeholderName, primaryKey]]),\n\t\t\tnew Map([[PRIMARY_KEY_NAME, primaryKey.placeholderName]]),\n\t\t)\n\t\treturn original ? this.mergeEntityFieldsContainers(original, freshFields) : freshFields\n\t}\n\n\tpublic static mergeEnvironments(original: Environment, fresh: Environment): Environment {\n\t\treturn original.merge(fresh)\n\t}\n\n\tprivate static rejectRelationScalarCombo(fieldName: FieldName): never {\n\t\tthrow new BindingError(`Cannot combine a relation with a scalar field '${fieldName}'.`)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -156,6 +156,7 @@ const _QueryLanguage = class _QueryLanguage2 {
|
|
|
156
156
|
reducedBy: sugarable.reducedBy ? this.desugarUniqueWhere(sugarable.reducedBy, environment) : void 0,
|
|
157
157
|
setOnCreate: unsugarable.setOnCreate ? this.desugarSetOnCreate(unsugarable.setOnCreate, environment) : void 0,
|
|
158
158
|
isNonbearing: unsugarable.isNonbearing ?? defaults.EntityCreationParametersDefaults.isNonbearing,
|
|
159
|
+
meta: unsugarable.withMeta ?? [],
|
|
159
160
|
// forceCreation: unsugarable.forceCreation ?? EntityCreationParametersDefaults.forceCreation,
|
|
160
161
|
eventListeners: this.desugarSingleEntityEventListeners(unsugarable)
|
|
161
162
|
};
|
|
@@ -182,6 +183,7 @@ const _QueryLanguage = class _QueryLanguage2 {
|
|
|
182
183
|
// forceCreation: unsugarable.forceCreation ?? EntityCreationParametersDefaults.forceCreation,
|
|
183
184
|
initialEntityCount: unsugarable.initialEntityCount ?? defaults.EntityListPreferencesDefaults.initialEntityCount,
|
|
184
185
|
setOnCreate: unsugarable.setOnCreate ? this.desugarSetOnCreate(unsugarable.setOnCreate, environment) : void 0,
|
|
186
|
+
meta: unsugarable.withMeta ?? [],
|
|
185
187
|
orderBy: unsugarable.orderBy ? this.desugarOrderBy(unsugarable.orderBy, environment) : void 0,
|
|
186
188
|
offset: unsugarable.offset,
|
|
187
189
|
limit: unsugarable.limit,
|
|
@@ -217,6 +219,7 @@ const _QueryLanguage = class _QueryLanguage2 {
|
|
|
217
219
|
initialEntityCount: unsugarablePart.initialEntityCount ?? defaults.EntityListPreferencesDefaults.initialEntityCount,
|
|
218
220
|
expectedMutation: unsugarablePart.expectedMutation ?? defaults.RelationDefaults.expectedMutation,
|
|
219
221
|
setOnCreate: unsugarablePart.setOnCreate ? this.desugarSetOnCreate(unsugarablePart.setOnCreate, environment) : void 0,
|
|
222
|
+
meta: unsugarablePart.withMeta ?? [],
|
|
220
223
|
field: sugarablePart.field,
|
|
221
224
|
isNonbearing: unsugarablePart.isNonbearing ?? defaults.EntityCreationParametersDefaults.isNonbearing,
|
|
222
225
|
// forceCreation: unsugarablePart.forceCreation ?? EntityCreationParametersDefaults.forceCreation,
|
|
@@ -472,6 +475,7 @@ const _QueryLanguage = class _QueryLanguage2 {
|
|
|
472
475
|
hasOneRelationPath,
|
|
473
476
|
field: fieldName,
|
|
474
477
|
isNonbearing: unsugarableField.isNonbearing ?? defaults.LeafFieldDefaults.isNonbearing,
|
|
478
|
+
meta: unsugarableField.withMeta ?? [],
|
|
475
479
|
defaultValue: unsugarableField.defaultValue !== void 0 ? VariableInputTransformer.VariableInputTransformer.transformValue(unsugarableField.defaultValue, environment) : void 0
|
|
476
480
|
};
|
|
477
481
|
}
|