@contember/binding-common 2.0.0-alpha.32 → 2.0.0-alpha.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/dist/development/src/LocalizedBindingError.cjs.map +1 -1
  2. package/dist/development/src/LocalizedBindingError.js.map +1 -1
  3. package/dist/development/src/RuntimeId.cjs.map +1 -1
  4. package/dist/development/src/RuntimeId.js.map +1 -1
  5. package/dist/development/src/environment/Environment.cjs.map +1 -1
  6. package/dist/development/src/environment/Environment.js.map +1 -1
  7. package/dist/development/src/environment/TreeNodeEnvironmentFactory.cjs.map +1 -1
  8. package/dist/development/src/environment/TreeNodeEnvironmentFactory.js.map +1 -1
  9. package/dist/development/src/environment/VariableFieldValue.cjs.map +1 -1
  10. package/dist/development/src/environment/VariableFieldValue.js.map +1 -1
  11. package/dist/development/src/environment/VariableInputTransformer.cjs.map +1 -1
  12. package/dist/development/src/environment/VariableInputTransformer.js.map +1 -1
  13. package/dist/development/src/markers/EntityFieldMarkersContainer.cjs.map +1 -1
  14. package/dist/development/src/markers/EntityFieldMarkersContainer.js.map +1 -1
  15. package/dist/development/src/markers/EntityFieldsWithHoistablesMarker.cjs.map +1 -1
  16. package/dist/development/src/markers/EntityFieldsWithHoistablesMarker.js.map +1 -1
  17. package/dist/development/src/markers/EntityListSubTreeMarker.cjs.map +1 -1
  18. package/dist/development/src/markers/EntityListSubTreeMarker.js.map +1 -1
  19. package/dist/development/src/markers/EntitySubTreeMarker.cjs.map +1 -1
  20. package/dist/development/src/markers/EntitySubTreeMarker.js.map +1 -1
  21. package/dist/development/src/markers/FieldMarker.cjs.map +1 -1
  22. package/dist/development/src/markers/FieldMarker.js.map +1 -1
  23. package/dist/development/src/markers/HasManyRelationMarker.cjs.map +1 -1
  24. package/dist/development/src/markers/HasManyRelationMarker.js.map +1 -1
  25. package/dist/development/src/markers/HasOneRelationMarker.cjs.map +1 -1
  26. package/dist/development/src/markers/HasOneRelationMarker.js.map +1 -1
  27. package/dist/development/src/markers/MarkerComparator.cjs.map +1 -1
  28. package/dist/development/src/markers/MarkerComparator.js.map +1 -1
  29. package/dist/development/src/markers/MarkerMerger.cjs.map +1 -1
  30. package/dist/development/src/markers/MarkerMerger.js.map +1 -1
  31. package/dist/development/src/markers/MarkerTreeRoot.cjs.map +1 -1
  32. package/dist/development/src/markers/MarkerTreeRoot.js.map +1 -1
  33. package/dist/development/src/markers/PlaceholderGenerator.cjs.map +1 -1
  34. package/dist/development/src/markers/PlaceholderGenerator.js.map +1 -1
  35. package/dist/development/src/markers/PlaceholderParametersGenerator.cjs.map +1 -1
  36. package/dist/development/src/markers/PlaceholderParametersGenerator.js.map +1 -1
  37. package/dist/development/src/queryLanguage/CacheStore.cjs.map +1 -1
  38. package/dist/development/src/queryLanguage/CacheStore.js.map +1 -1
  39. package/dist/development/src/queryLanguage/MarkerFactory.cjs.map +1 -1
  40. package/dist/development/src/queryLanguage/MarkerFactory.js.map +1 -1
  41. package/dist/development/src/queryLanguage/Parser.cjs.map +1 -1
  42. package/dist/development/src/queryLanguage/Parser.js.map +1 -1
  43. package/dist/development/src/queryLanguage/QueryLanguage.cjs.map +1 -1
  44. package/dist/development/src/queryLanguage/QueryLanguage.js.map +1 -1
  45. package/dist/development/src/queryLanguage/tokenList.cjs.map +1 -1
  46. package/dist/development/src/queryLanguage/tokenList.js.map +1 -1
  47. package/dist/development/src/schema/Schema.cjs.map +1 -1
  48. package/dist/development/src/schema/Schema.js.map +1 -1
  49. package/dist/development/src/schema/SchemaLoader.cjs.map +1 -1
  50. package/dist/development/src/schema/SchemaLoader.js.map +1 -1
  51. package/dist/development/src/schema/SchemaPreprocessor.cjs.map +1 -1
  52. package/dist/development/src/schema/SchemaPreprocessor.js.map +1 -1
  53. package/dist/development/src/treeParameters/EventListenersStore.cjs.map +1 -1
  54. package/dist/development/src/treeParameters/EventListenersStore.js.map +1 -1
  55. package/dist/development/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
  56. package/dist/development/src/treeParameters/TreeParameterMerger.js.map +1 -1
  57. package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.cjs.map +1 -1
  58. package/dist/development/src/treeParameters/helpers/wrapFilterInHasOnes.js.map +1 -1
  59. package/dist/development/src/types/ErrorAccessor.cjs.map +1 -1
  60. package/dist/development/src/types/ErrorAccessor.js.map +1 -1
  61. package/dist/development/src/types/TreeRootAccessor.cjs.map +1 -1
  62. package/dist/development/src/types/TreeRootAccessor.js.map +1 -1
  63. package/dist/development/src/utils/Hashing.cjs.map +1 -1
  64. package/dist/development/src/utils/Hashing.js.map +1 -1
  65. package/dist/development/src/utils/TreeNodeUtils.cjs.map +1 -1
  66. package/dist/development/src/utils/TreeNodeUtils.js.map +1 -1
  67. package/dist/development/src/utils/assertNever.cjs.map +1 -1
  68. package/dist/development/src/utils/assertNever.js.map +1 -1
  69. package/dist/development/src/utils/createQueryBuilder.cjs.map +1 -1
  70. package/dist/development/src/utils/createQueryBuilder.js.map +1 -1
  71. package/dist/development/src/utils/whereToFilter.cjs.map +1 -1
  72. package/dist/development/src/utils/whereToFilter.js.map +1 -1
  73. package/dist/production/src/LocalizedBindingError.cjs.map +1 -1
  74. package/dist/production/src/LocalizedBindingError.js.map +1 -1
  75. package/dist/production/src/RuntimeId.cjs.map +1 -1
  76. package/dist/production/src/RuntimeId.js.map +1 -1
  77. package/dist/production/src/environment/Environment.cjs.map +1 -1
  78. package/dist/production/src/environment/Environment.js.map +1 -1
  79. package/dist/production/src/environment/TreeNodeEnvironmentFactory.cjs.map +1 -1
  80. package/dist/production/src/environment/TreeNodeEnvironmentFactory.js.map +1 -1
  81. package/dist/production/src/environment/VariableFieldValue.cjs.map +1 -1
  82. package/dist/production/src/environment/VariableFieldValue.js.map +1 -1
  83. package/dist/production/src/environment/VariableInputTransformer.cjs.map +1 -1
  84. package/dist/production/src/environment/VariableInputTransformer.js.map +1 -1
  85. package/dist/production/src/markers/EntityFieldMarkersContainer.cjs.map +1 -1
  86. package/dist/production/src/markers/EntityFieldMarkersContainer.js.map +1 -1
  87. package/dist/production/src/markers/EntityFieldsWithHoistablesMarker.cjs.map +1 -1
  88. package/dist/production/src/markers/EntityFieldsWithHoistablesMarker.js.map +1 -1
  89. package/dist/production/src/markers/EntityListSubTreeMarker.cjs.map +1 -1
  90. package/dist/production/src/markers/EntityListSubTreeMarker.js.map +1 -1
  91. package/dist/production/src/markers/EntitySubTreeMarker.cjs.map +1 -1
  92. package/dist/production/src/markers/EntitySubTreeMarker.js.map +1 -1
  93. package/dist/production/src/markers/FieldMarker.cjs.map +1 -1
  94. package/dist/production/src/markers/FieldMarker.js.map +1 -1
  95. package/dist/production/src/markers/HasManyRelationMarker.cjs.map +1 -1
  96. package/dist/production/src/markers/HasManyRelationMarker.js.map +1 -1
  97. package/dist/production/src/markers/HasOneRelationMarker.cjs.map +1 -1
  98. package/dist/production/src/markers/HasOneRelationMarker.js.map +1 -1
  99. package/dist/production/src/markers/MarkerComparator.cjs.map +1 -1
  100. package/dist/production/src/markers/MarkerComparator.js.map +1 -1
  101. package/dist/production/src/markers/MarkerMerger.cjs.map +1 -1
  102. package/dist/production/src/markers/MarkerMerger.js.map +1 -1
  103. package/dist/production/src/markers/MarkerTreeRoot.cjs.map +1 -1
  104. package/dist/production/src/markers/MarkerTreeRoot.js.map +1 -1
  105. package/dist/production/src/markers/PlaceholderGenerator.cjs.map +1 -1
  106. package/dist/production/src/markers/PlaceholderGenerator.js.map +1 -1
  107. package/dist/production/src/markers/PlaceholderParametersGenerator.cjs.map +1 -1
  108. package/dist/production/src/markers/PlaceholderParametersGenerator.js.map +1 -1
  109. package/dist/production/src/queryLanguage/CacheStore.cjs.map +1 -1
  110. package/dist/production/src/queryLanguage/CacheStore.js.map +1 -1
  111. package/dist/production/src/queryLanguage/MarkerFactory.cjs.map +1 -1
  112. package/dist/production/src/queryLanguage/MarkerFactory.js.map +1 -1
  113. package/dist/production/src/queryLanguage/Parser.cjs.map +1 -1
  114. package/dist/production/src/queryLanguage/Parser.js.map +1 -1
  115. package/dist/production/src/queryLanguage/QueryLanguage.cjs.map +1 -1
  116. package/dist/production/src/queryLanguage/QueryLanguage.js.map +1 -1
  117. package/dist/production/src/queryLanguage/tokenList.cjs.map +1 -1
  118. package/dist/production/src/queryLanguage/tokenList.js.map +1 -1
  119. package/dist/production/src/schema/Schema.cjs.map +1 -1
  120. package/dist/production/src/schema/Schema.js.map +1 -1
  121. package/dist/production/src/schema/SchemaLoader.cjs.map +1 -1
  122. package/dist/production/src/schema/SchemaLoader.js.map +1 -1
  123. package/dist/production/src/schema/SchemaPreprocessor.cjs.map +1 -1
  124. package/dist/production/src/schema/SchemaPreprocessor.js.map +1 -1
  125. package/dist/production/src/treeParameters/EventListenersStore.cjs.map +1 -1
  126. package/dist/production/src/treeParameters/EventListenersStore.js.map +1 -1
  127. package/dist/production/src/treeParameters/TreeParameterMerger.cjs.map +1 -1
  128. package/dist/production/src/treeParameters/TreeParameterMerger.js.map +1 -1
  129. package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.cjs.map +1 -1
  130. package/dist/production/src/treeParameters/helpers/wrapFilterInHasOnes.js.map +1 -1
  131. package/dist/production/src/types/ErrorAccessor.cjs.map +1 -1
  132. package/dist/production/src/types/ErrorAccessor.js.map +1 -1
  133. package/dist/production/src/types/TreeRootAccessor.cjs.map +1 -1
  134. package/dist/production/src/types/TreeRootAccessor.js.map +1 -1
  135. package/dist/production/src/utils/Hashing.cjs.map +1 -1
  136. package/dist/production/src/utils/Hashing.js.map +1 -1
  137. package/dist/production/src/utils/TreeNodeUtils.cjs.map +1 -1
  138. package/dist/production/src/utils/TreeNodeUtils.js.map +1 -1
  139. package/dist/production/src/utils/assertNever.cjs.map +1 -1
  140. package/dist/production/src/utils/assertNever.js.map +1 -1
  141. package/dist/production/src/utils/createQueryBuilder.cjs.map +1 -1
  142. package/dist/production/src/utils/createQueryBuilder.js.map +1 -1
  143. package/dist/production/src/utils/whereToFilter.cjs.map +1 -1
  144. package/dist/production/src/utils/whereToFilter.js.map +1 -1
  145. package/dist/types/tsconfig.tsbuildinfo +1 -1
  146. package/package.json +5 -5
  147. package/tests/cases/unit/queryLanguage/filter.spec.tsx +1 -1
  148. package/tests/cases/unit/queryLanguage/general.spec.tsx +1 -1
  149. package/tests/cases/unit/queryLanguage/orderBy.spec.tsx +1 -1
  150. package/tests/cases/unit/queryLanguage/qualifiedEntityList.spec.tsx +1 -1
  151. package/tests/cases/unit/queryLanguage/qualifiedFieldList.spec.tsx +1 -1
  152. package/tests/cases/unit/queryLanguage/relativeEntityList.spec.tsx +3 -3
  153. package/tests/cases/unit/queryLanguage/singleRelativeField.spec.tsx +1 -1
  154. package/tests/cases/unit/queryLanguage/taggedMap.spec.tsx +1 -1
  155. package/tests/cases/unit/whereToFilter.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EventListenersStore.cjs","sources":["../../../../../packages/binding-common/src/treeParameters/EventListenersStore.ts"],"sourcesContent":["type AnyFunction = (...args: any[]) => any\nexport type GenericEventsMap = {\n\t[K in string]: (...args: any[]) => void | AnyFunction | Promise<void | AnyFunction>\n}\n\nexport class EventListenersStore<Events extends GenericEventsMap> {\n\n\tconstructor(\n\t\tprivate readonly parentStoreGetter?: () => EventListenersStore<Events> | undefined,\n\t\tprivate listeners?: Map<string, Set<Events[any]>>,\n\t) {}\n\n\tset<Type extends keyof Events>(event: { type: Type; key?: string }, listeners: Set<Events[Type]>): void {\n\t\tthis.listeners ??= new Map()\n\t\tthis.listeners.set(this.formatMapEntryKey(event), listeners)\n\t}\n\n\tdelete<Type extends keyof Events>(event: { type: Type; key?: string }) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tthis.listeners.delete(this.formatMapEntryKey(event))\n\t}\n\n\tdeleteByType<Type extends keyof Events>(type: Type) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst prefix = this.formatMapEntryKey({ type, key: '' })\n\t\tfor (const eventType of this.listeners.keys()) {\n\t\t\tif (eventType.startsWith(prefix)) {\n\t\t\t\tthis.listeners.delete(eventType)\n\t\t\t}\n\t\t}\n\t}\n\n\tget<Type extends keyof Events>(event: { type: Type; key?: string }): Set<Events[Type]> | undefined {\n\t\tif (!this.listeners) {\n\t\t\treturn undefined\n\t\t}\n\t\tconst ownListeners = this.listeners.get(this.formatMapEntryKey(event))\n\t\tconst parentListeners = this.parentStoreGetter?.()?.get(event)\n\t\tif (!parentListeners) {\n\t\t\treturn ownListeners\n\t\t} else if (!ownListeners) {\n\t\t\treturn parentListeners\n\t\t}\n\t\treturn new Set([...ownListeners, ...parentListeners])\n\t}\n\n\tinvoke<Type extends keyof Events>(event: { type: Type; key?: string }, ...args: Parameters<Events[Type]>): void {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst listeners = this.get(event)\n\t\tif (listeners) {\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(...args)\n\t\t\t}\n\t\t}\n\t}\n\n\tadd<Type extends keyof Events>(event: { type: Type; key?: string }, handler: Events[Type]): () => void {\n\t\tconst key = this.formatMapEntryKey(event)\n\t\tlet eventListeners = this.addInternal(key, handler)\n\t\treturn () => eventListeners?.delete(handler)\n\t}\n\n\tclone(): EventListenersStore<Events> {\n\t\tif (!this.listeners) {\n\t\t\treturn new EventListenersStore<Events>(this.parentStoreGetter)\n\t\t}\n\t\tconst store: EventListenersStore<Events> = new EventListenersStore(this.parentStoreGetter, new Map())\n\t\tfor (const [key, value] of this.listeners.entries()) {\n\t\t\tstore.listeners!.set(key, new Set(value))\n\t\t}\n\t\treturn store\n\t}\n\n\tappend(other: EventListenersStore<Events>) {\n\t\tif (!other.listeners) {\n\t\t\treturn\n\t\t}\n\t\tfor (const [eventKey, otherListeners] of other.listeners) {\n\t\t\tfor (const listener of otherListeners) {\n\t\t\t\tthis.addInternal(eventKey, listener)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate formatMapEntryKey(event: { type: keyof Events; key?: string }): string {\n\t\treturn event.key ? `${(event.type as string)}_${event.key ?? ''}` : (event.type as string)\n\t}\n\n\tprivate addInternal<Type extends keyof Events>(key: string, handler: Events[Type]) {\n\t\tthis.listeners ??= new Map()\n\t\tlet eventListeners = this.listeners.get(key)\n\t\tif (!eventListeners) {\n\t\t\teventListeners = new Set()\n\t\t\tthis.listeners.set(key, eventListeners)\n\t\t}\n\t\teventListeners.add(handler)\n\t\treturn eventListeners\n\t}\n}\n"],"names":[],"mappings":";;AAKO,MAAM,oBAAqD;AAAA,EAEjE,YACkB,mBACT,WACP;AAFgB,SAAA,oBAAA;AACT,SAAA,YAAA;AAAA,EACN;AAAA,EAEH,IAA+B,OAAqC,WAAoC;AACvG,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,SAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,GAAG,SAAS;AAAA,EAC5D;AAAA,EAEA,OAAkC,OAAqC;AAClE,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IACD;AACA,SAAK,UAAU,OAAO,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACpD;AAAA,EAEA,aAAwC,MAAY;AAC/C,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IACD;AACA,UAAM,SAAS,KAAK,kBAAkB,EAAE,MAAM,KAAK,IAAI;AACvD,eAAW,aAAa,KAAK,UAAU,KAAA,GAAQ;AAC1C,UAAA,UAAU,WAAW,MAAM,GAAG;AAC5B,aAAA,UAAU,OAAO,SAAS;AAAA,MAChC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAA+B,OAAoE;AAC9F,QAAA,CAAC,KAAK,WAAW;AACb,aAAA;AAAA,IACR;AACA,UAAM,eAAe,KAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,CAAC;AACrE,UAAM,kBAAkB,KAAK,oBAAoB,GAAG,IAAI,KAAK;AAC7D,QAAI,CAAC,iBAAiB;AACd,aAAA;AAAA,IAAA,WACG,CAAC,cAAc;AAClB,aAAA;AAAA,IACR;AACA,+BAAW,IAAI,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC;AAAA,EACrD;AAAA,EAEA,OAAkC,UAAwC,MAAsC;AAC3G,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IACD;AACM,UAAA,YAAY,KAAK,IAAI,KAAK;AAChC,QAAI,WAAW;AACd,iBAAW,YAAY,WAAW;AACjC,iBAAS,GAAG,IAAI;AAAA,MACjB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAA+B,OAAqC,SAAmC;AAChG,UAAA,MAAM,KAAK,kBAAkB,KAAK;AACxC,QAAI,iBAAiB,KAAK,YAAY,KAAK,OAAO;AAC3C,WAAA,MAAM,gBAAgB,OAAO,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAqC;AAChC,QAAA,CAAC,KAAK,WAAW;AACb,aAAA,IAAI,oBAA4B,KAAK,iBAAiB;AAAA,IAC9D;AACA,UAAM,QAAqC,IAAI,oBAAoB,KAAK,mBAAmB,oBAAI,KAAK;AACpG,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,WAAW;AACpD,YAAM,UAAW,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC;AAAA,IACzC;AACO,WAAA;AAAA,EACR;AAAA,EAEA,OAAO,OAAoC;AACtC,QAAA,CAAC,MAAM,WAAW;AACrB;AAAA,IACD;AACA,eAAW,CAAC,UAAU,cAAc,KAAK,MAAM,WAAW;AACzD,iBAAW,YAAY,gBAAgB;AACjC,aAAA,YAAY,UAAU,QAAQ;AAAA,MACpC;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,kBAAkB,OAAqD;AACvE,WAAA,MAAM,MAAM,GAAI,MAAM,IAAe,IAAI,MAAM,OAAO,EAAE,KAAM,MAAM;AAAA,EAC5E;AAAA,EAEQ,YAAuC,KAAa,SAAuB;AAClF,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,QAAI,iBAAiB,KAAK,UAAU,IAAI,GAAG;AAC3C,QAAI,CAAC,gBAAgB;AACpB,2CAAqB;AAChB,WAAA,UAAU,IAAI,KAAK,cAAc;AAAA,IACvC;AACA,mBAAe,IAAI,OAAO;AACnB,WAAA;AAAA,EACR;AACD;;"}
1
+ {"version":3,"file":"EventListenersStore.cjs","sources":["../../../../../packages/binding-common/src/treeParameters/EventListenersStore.ts"],"sourcesContent":["type AnyFunction = (...args: any[]) => any\nexport type GenericEventsMap = {\n\t[K in string]: (...args: any[]) => void | AnyFunction | Promise<void | AnyFunction>\n}\n\nexport class EventListenersStore<Events extends GenericEventsMap> {\n\n\tconstructor(\n\t\tprivate readonly parentStoreGetter?: () => EventListenersStore<Events> | undefined,\n\t\tprivate listeners?: Map<string, Set<Events[any]>>,\n\t) {}\n\n\tset<Type extends keyof Events>(event: { type: Type; key?: string }, listeners: Set<Events[Type]>): void {\n\t\tthis.listeners ??= new Map()\n\t\tthis.listeners.set(this.formatMapEntryKey(event), listeners)\n\t}\n\n\tdelete<Type extends keyof Events>(event: { type: Type; key?: string }) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tthis.listeners.delete(this.formatMapEntryKey(event))\n\t}\n\n\tdeleteByType<Type extends keyof Events>(type: Type) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst prefix = this.formatMapEntryKey({ type, key: '' })\n\t\tfor (const eventType of this.listeners.keys()) {\n\t\t\tif (eventType.startsWith(prefix)) {\n\t\t\t\tthis.listeners.delete(eventType)\n\t\t\t}\n\t\t}\n\t}\n\n\tget<Type extends keyof Events>(event: { type: Type; key?: string }): Set<Events[Type]> | undefined {\n\t\tif (!this.listeners) {\n\t\t\treturn undefined\n\t\t}\n\t\tconst ownListeners = this.listeners.get(this.formatMapEntryKey(event))\n\t\tconst parentListeners = this.parentStoreGetter?.()?.get(event)\n\t\tif (!parentListeners) {\n\t\t\treturn ownListeners\n\t\t} else if (!ownListeners) {\n\t\t\treturn parentListeners\n\t\t}\n\t\treturn new Set([...ownListeners, ...parentListeners])\n\t}\n\n\tinvoke<Type extends keyof Events>(event: { type: Type; key?: string }, ...args: Parameters<Events[Type]>): void {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst listeners = this.get(event)\n\t\tif (listeners) {\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(...args)\n\t\t\t}\n\t\t}\n\t}\n\n\tadd<Type extends keyof Events>(event: { type: Type; key?: string }, handler: Events[Type]): () => void {\n\t\tconst key = this.formatMapEntryKey(event)\n\t\tlet eventListeners = this.addInternal(key, handler)\n\t\treturn () => eventListeners?.delete(handler)\n\t}\n\n\tclone(): EventListenersStore<Events> {\n\t\tif (!this.listeners) {\n\t\t\treturn new EventListenersStore<Events>(this.parentStoreGetter)\n\t\t}\n\t\tconst store: EventListenersStore<Events> = new EventListenersStore(this.parentStoreGetter, new Map())\n\t\tfor (const [key, value] of this.listeners.entries()) {\n\t\t\tstore.listeners!.set(key, new Set(value))\n\t\t}\n\t\treturn store\n\t}\n\n\tappend(other: EventListenersStore<Events>) {\n\t\tif (!other.listeners) {\n\t\t\treturn\n\t\t}\n\t\tfor (const [eventKey, otherListeners] of other.listeners) {\n\t\t\tfor (const listener of otherListeners) {\n\t\t\t\tthis.addInternal(eventKey, listener)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate formatMapEntryKey(event: { type: keyof Events; key?: string }): string {\n\t\treturn event.key ? `${(event.type as string)}_${event.key ?? ''}` : (event.type as string)\n\t}\n\n\tprivate addInternal<Type extends keyof Events>(key: string, handler: Events[Type]) {\n\t\tthis.listeners ??= new Map()\n\t\tlet eventListeners = this.listeners.get(key)\n\t\tif (!eventListeners) {\n\t\t\teventListeners = new Set()\n\t\t\tthis.listeners.set(key, eventListeners)\n\t\t}\n\t\teventListeners.add(handler)\n\t\treturn eventListeners\n\t}\n}\n"],"names":[],"mappings":";;AAKO,MAAM,oBAAqD;AAAA,EAEjE,YACkB,mBACT,WACP;AAFgB,SAAA,oBAAA;AACT,SAAA,YAAA;AAAA,EAAA;AAAA,EAGT,IAA+B,OAAqC,WAAoC;AACvG,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,SAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,GAAG,SAAS;AAAA,EAAA;AAAA,EAG5D,OAAkC,OAAqC;AAClE,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IAAA;AAED,SAAK,UAAU,OAAO,KAAK,kBAAkB,KAAK,CAAC;AAAA,EAAA;AAAA,EAGpD,aAAwC,MAAY;AAC/C,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IAAA;AAED,UAAM,SAAS,KAAK,kBAAkB,EAAE,MAAM,KAAK,IAAI;AACvD,eAAW,aAAa,KAAK,UAAU,KAAA,GAAQ;AAC1C,UAAA,UAAU,WAAW,MAAM,GAAG;AAC5B,aAAA,UAAU,OAAO,SAAS;AAAA,MAAA;AAAA,IAChC;AAAA,EACD;AAAA,EAGD,IAA+B,OAAoE;AAC9F,QAAA,CAAC,KAAK,WAAW;AACb,aAAA;AAAA,IAAA;AAER,UAAM,eAAe,KAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,CAAC;AACrE,UAAM,kBAAkB,KAAK,oBAAoB,GAAG,IAAI,KAAK;AAC7D,QAAI,CAAC,iBAAiB;AACd,aAAA;AAAA,IAAA,WACG,CAAC,cAAc;AAClB,aAAA;AAAA,IAAA;AAER,+BAAW,IAAI,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC;AAAA,EAAA;AAAA,EAGrD,OAAkC,UAAwC,MAAsC;AAC3G,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IAAA;AAEK,UAAA,YAAY,KAAK,IAAI,KAAK;AAChC,QAAI,WAAW;AACd,iBAAW,YAAY,WAAW;AACjC,iBAAS,GAAG,IAAI;AAAA,MAAA;AAAA,IACjB;AAAA,EACD;AAAA,EAGD,IAA+B,OAAqC,SAAmC;AAChG,UAAA,MAAM,KAAK,kBAAkB,KAAK;AACxC,QAAI,iBAAiB,KAAK,YAAY,KAAK,OAAO;AAC3C,WAAA,MAAM,gBAAgB,OAAO,OAAO;AAAA,EAAA;AAAA,EAG5C,QAAqC;AAChC,QAAA,CAAC,KAAK,WAAW;AACb,aAAA,IAAI,oBAA4B,KAAK,iBAAiB;AAAA,IAAA;AAE9D,UAAM,QAAqC,IAAI,oBAAoB,KAAK,mBAAmB,oBAAI,KAAK;AACpG,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,WAAW;AACpD,YAAM,UAAW,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC;AAAA,IAAA;AAElC,WAAA;AAAA,EAAA;AAAA,EAGR,OAAO,OAAoC;AACtC,QAAA,CAAC,MAAM,WAAW;AACrB;AAAA,IAAA;AAED,eAAW,CAAC,UAAU,cAAc,KAAK,MAAM,WAAW;AACzD,iBAAW,YAAY,gBAAgB;AACjC,aAAA,YAAY,UAAU,QAAQ;AAAA,MAAA;AAAA,IACpC;AAAA,EACD;AAAA,EAGO,kBAAkB,OAAqD;AACvE,WAAA,MAAM,MAAM,GAAI,MAAM,IAAe,IAAI,MAAM,OAAO,EAAE,KAAM,MAAM;AAAA,EAAA;AAAA,EAGpE,YAAuC,KAAa,SAAuB;AAClF,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,QAAI,iBAAiB,KAAK,UAAU,IAAI,GAAG;AAC3C,QAAI,CAAC,gBAAgB;AACpB,2CAAqB,IAAI;AACpB,WAAA,UAAU,IAAI,KAAK,cAAc;AAAA,IAAA;AAEvC,mBAAe,IAAI,OAAO;AACnB,WAAA;AAAA,EAAA;AAET;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventListenersStore.js","sources":["../../../../../packages/binding-common/src/treeParameters/EventListenersStore.ts"],"sourcesContent":["type AnyFunction = (...args: any[]) => any\nexport type GenericEventsMap = {\n\t[K in string]: (...args: any[]) => void | AnyFunction | Promise<void | AnyFunction>\n}\n\nexport class EventListenersStore<Events extends GenericEventsMap> {\n\n\tconstructor(\n\t\tprivate readonly parentStoreGetter?: () => EventListenersStore<Events> | undefined,\n\t\tprivate listeners?: Map<string, Set<Events[any]>>,\n\t) {}\n\n\tset<Type extends keyof Events>(event: { type: Type; key?: string }, listeners: Set<Events[Type]>): void {\n\t\tthis.listeners ??= new Map()\n\t\tthis.listeners.set(this.formatMapEntryKey(event), listeners)\n\t}\n\n\tdelete<Type extends keyof Events>(event: { type: Type; key?: string }) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tthis.listeners.delete(this.formatMapEntryKey(event))\n\t}\n\n\tdeleteByType<Type extends keyof Events>(type: Type) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst prefix = this.formatMapEntryKey({ type, key: '' })\n\t\tfor (const eventType of this.listeners.keys()) {\n\t\t\tif (eventType.startsWith(prefix)) {\n\t\t\t\tthis.listeners.delete(eventType)\n\t\t\t}\n\t\t}\n\t}\n\n\tget<Type extends keyof Events>(event: { type: Type; key?: string }): Set<Events[Type]> | undefined {\n\t\tif (!this.listeners) {\n\t\t\treturn undefined\n\t\t}\n\t\tconst ownListeners = this.listeners.get(this.formatMapEntryKey(event))\n\t\tconst parentListeners = this.parentStoreGetter?.()?.get(event)\n\t\tif (!parentListeners) {\n\t\t\treturn ownListeners\n\t\t} else if (!ownListeners) {\n\t\t\treturn parentListeners\n\t\t}\n\t\treturn new Set([...ownListeners, ...parentListeners])\n\t}\n\n\tinvoke<Type extends keyof Events>(event: { type: Type; key?: string }, ...args: Parameters<Events[Type]>): void {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst listeners = this.get(event)\n\t\tif (listeners) {\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(...args)\n\t\t\t}\n\t\t}\n\t}\n\n\tadd<Type extends keyof Events>(event: { type: Type; key?: string }, handler: Events[Type]): () => void {\n\t\tconst key = this.formatMapEntryKey(event)\n\t\tlet eventListeners = this.addInternal(key, handler)\n\t\treturn () => eventListeners?.delete(handler)\n\t}\n\n\tclone(): EventListenersStore<Events> {\n\t\tif (!this.listeners) {\n\t\t\treturn new EventListenersStore<Events>(this.parentStoreGetter)\n\t\t}\n\t\tconst store: EventListenersStore<Events> = new EventListenersStore(this.parentStoreGetter, new Map())\n\t\tfor (const [key, value] of this.listeners.entries()) {\n\t\t\tstore.listeners!.set(key, new Set(value))\n\t\t}\n\t\treturn store\n\t}\n\n\tappend(other: EventListenersStore<Events>) {\n\t\tif (!other.listeners) {\n\t\t\treturn\n\t\t}\n\t\tfor (const [eventKey, otherListeners] of other.listeners) {\n\t\t\tfor (const listener of otherListeners) {\n\t\t\t\tthis.addInternal(eventKey, listener)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate formatMapEntryKey(event: { type: keyof Events; key?: string }): string {\n\t\treturn event.key ? `${(event.type as string)}_${event.key ?? ''}` : (event.type as string)\n\t}\n\n\tprivate addInternal<Type extends keyof Events>(key: string, handler: Events[Type]) {\n\t\tthis.listeners ??= new Map()\n\t\tlet eventListeners = this.listeners.get(key)\n\t\tif (!eventListeners) {\n\t\t\teventListeners = new Set()\n\t\t\tthis.listeners.set(key, eventListeners)\n\t\t}\n\t\teventListeners.add(handler)\n\t\treturn eventListeners\n\t}\n}\n"],"names":[],"mappings":"AAKO,MAAM,oBAAqD;AAAA,EAEjE,YACkB,mBACT,WACP;AAFgB,SAAA,oBAAA;AACT,SAAA,YAAA;AAAA,EACN;AAAA,EAEH,IAA+B,OAAqC,WAAoC;AACvG,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,SAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,GAAG,SAAS;AAAA,EAC5D;AAAA,EAEA,OAAkC,OAAqC;AAClE,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IACD;AACA,SAAK,UAAU,OAAO,KAAK,kBAAkB,KAAK,CAAC;AAAA,EACpD;AAAA,EAEA,aAAwC,MAAY;AAC/C,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IACD;AACA,UAAM,SAAS,KAAK,kBAAkB,EAAE,MAAM,KAAK,IAAI;AACvD,eAAW,aAAa,KAAK,UAAU,KAAA,GAAQ;AAC1C,UAAA,UAAU,WAAW,MAAM,GAAG;AAC5B,aAAA,UAAU,OAAO,SAAS;AAAA,MAChC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAA+B,OAAoE;AAC9F,QAAA,CAAC,KAAK,WAAW;AACb,aAAA;AAAA,IACR;AACA,UAAM,eAAe,KAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,CAAC;AACrE,UAAM,kBAAkB,KAAK,oBAAoB,GAAG,IAAI,KAAK;AAC7D,QAAI,CAAC,iBAAiB;AACd,aAAA;AAAA,IAAA,WACG,CAAC,cAAc;AAClB,aAAA;AAAA,IACR;AACA,+BAAW,IAAI,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC;AAAA,EACrD;AAAA,EAEA,OAAkC,UAAwC,MAAsC;AAC3G,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IACD;AACM,UAAA,YAAY,KAAK,IAAI,KAAK;AAChC,QAAI,WAAW;AACd,iBAAW,YAAY,WAAW;AACjC,iBAAS,GAAG,IAAI;AAAA,MACjB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,IAA+B,OAAqC,SAAmC;AAChG,UAAA,MAAM,KAAK,kBAAkB,KAAK;AACxC,QAAI,iBAAiB,KAAK,YAAY,KAAK,OAAO;AAC3C,WAAA,MAAM,gBAAgB,OAAO,OAAO;AAAA,EAC5C;AAAA,EAEA,QAAqC;AAChC,QAAA,CAAC,KAAK,WAAW;AACb,aAAA,IAAI,oBAA4B,KAAK,iBAAiB;AAAA,IAC9D;AACA,UAAM,QAAqC,IAAI,oBAAoB,KAAK,mBAAmB,oBAAI,KAAK;AACpG,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,WAAW;AACpD,YAAM,UAAW,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC;AAAA,IACzC;AACO,WAAA;AAAA,EACR;AAAA,EAEA,OAAO,OAAoC;AACtC,QAAA,CAAC,MAAM,WAAW;AACrB;AAAA,IACD;AACA,eAAW,CAAC,UAAU,cAAc,KAAK,MAAM,WAAW;AACzD,iBAAW,YAAY,gBAAgB;AACjC,aAAA,YAAY,UAAU,QAAQ;AAAA,MACpC;AAAA,IACD;AAAA,EACD;AAAA,EAEQ,kBAAkB,OAAqD;AACvE,WAAA,MAAM,MAAM,GAAI,MAAM,IAAe,IAAI,MAAM,OAAO,EAAE,KAAM,MAAM;AAAA,EAC5E;AAAA,EAEQ,YAAuC,KAAa,SAAuB;AAClF,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,QAAI,iBAAiB,KAAK,UAAU,IAAI,GAAG;AAC3C,QAAI,CAAC,gBAAgB;AACpB,2CAAqB;AAChB,WAAA,UAAU,IAAI,KAAK,cAAc;AAAA,IACvC;AACA,mBAAe,IAAI,OAAO;AACnB,WAAA;AAAA,EACR;AACD;"}
1
+ {"version":3,"file":"EventListenersStore.js","sources":["../../../../../packages/binding-common/src/treeParameters/EventListenersStore.ts"],"sourcesContent":["type AnyFunction = (...args: any[]) => any\nexport type GenericEventsMap = {\n\t[K in string]: (...args: any[]) => void | AnyFunction | Promise<void | AnyFunction>\n}\n\nexport class EventListenersStore<Events extends GenericEventsMap> {\n\n\tconstructor(\n\t\tprivate readonly parentStoreGetter?: () => EventListenersStore<Events> | undefined,\n\t\tprivate listeners?: Map<string, Set<Events[any]>>,\n\t) {}\n\n\tset<Type extends keyof Events>(event: { type: Type; key?: string }, listeners: Set<Events[Type]>): void {\n\t\tthis.listeners ??= new Map()\n\t\tthis.listeners.set(this.formatMapEntryKey(event), listeners)\n\t}\n\n\tdelete<Type extends keyof Events>(event: { type: Type; key?: string }) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tthis.listeners.delete(this.formatMapEntryKey(event))\n\t}\n\n\tdeleteByType<Type extends keyof Events>(type: Type) {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst prefix = this.formatMapEntryKey({ type, key: '' })\n\t\tfor (const eventType of this.listeners.keys()) {\n\t\t\tif (eventType.startsWith(prefix)) {\n\t\t\t\tthis.listeners.delete(eventType)\n\t\t\t}\n\t\t}\n\t}\n\n\tget<Type extends keyof Events>(event: { type: Type; key?: string }): Set<Events[Type]> | undefined {\n\t\tif (!this.listeners) {\n\t\t\treturn undefined\n\t\t}\n\t\tconst ownListeners = this.listeners.get(this.formatMapEntryKey(event))\n\t\tconst parentListeners = this.parentStoreGetter?.()?.get(event)\n\t\tif (!parentListeners) {\n\t\t\treturn ownListeners\n\t\t} else if (!ownListeners) {\n\t\t\treturn parentListeners\n\t\t}\n\t\treturn new Set([...ownListeners, ...parentListeners])\n\t}\n\n\tinvoke<Type extends keyof Events>(event: { type: Type; key?: string }, ...args: Parameters<Events[Type]>): void {\n\t\tif (!this.listeners) {\n\t\t\treturn\n\t\t}\n\t\tconst listeners = this.get(event)\n\t\tif (listeners) {\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(...args)\n\t\t\t}\n\t\t}\n\t}\n\n\tadd<Type extends keyof Events>(event: { type: Type; key?: string }, handler: Events[Type]): () => void {\n\t\tconst key = this.formatMapEntryKey(event)\n\t\tlet eventListeners = this.addInternal(key, handler)\n\t\treturn () => eventListeners?.delete(handler)\n\t}\n\n\tclone(): EventListenersStore<Events> {\n\t\tif (!this.listeners) {\n\t\t\treturn new EventListenersStore<Events>(this.parentStoreGetter)\n\t\t}\n\t\tconst store: EventListenersStore<Events> = new EventListenersStore(this.parentStoreGetter, new Map())\n\t\tfor (const [key, value] of this.listeners.entries()) {\n\t\t\tstore.listeners!.set(key, new Set(value))\n\t\t}\n\t\treturn store\n\t}\n\n\tappend(other: EventListenersStore<Events>) {\n\t\tif (!other.listeners) {\n\t\t\treturn\n\t\t}\n\t\tfor (const [eventKey, otherListeners] of other.listeners) {\n\t\t\tfor (const listener of otherListeners) {\n\t\t\t\tthis.addInternal(eventKey, listener)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate formatMapEntryKey(event: { type: keyof Events; key?: string }): string {\n\t\treturn event.key ? `${(event.type as string)}_${event.key ?? ''}` : (event.type as string)\n\t}\n\n\tprivate addInternal<Type extends keyof Events>(key: string, handler: Events[Type]) {\n\t\tthis.listeners ??= new Map()\n\t\tlet eventListeners = this.listeners.get(key)\n\t\tif (!eventListeners) {\n\t\t\teventListeners = new Set()\n\t\t\tthis.listeners.set(key, eventListeners)\n\t\t}\n\t\teventListeners.add(handler)\n\t\treturn eventListeners\n\t}\n}\n"],"names":[],"mappings":"AAKO,MAAM,oBAAqD;AAAA,EAEjE,YACkB,mBACT,WACP;AAFgB,SAAA,oBAAA;AACT,SAAA,YAAA;AAAA,EAAA;AAAA,EAGT,IAA+B,OAAqC,WAAoC;AACvG,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,SAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,GAAG,SAAS;AAAA,EAAA;AAAA,EAG5D,OAAkC,OAAqC;AAClE,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IAAA;AAED,SAAK,UAAU,OAAO,KAAK,kBAAkB,KAAK,CAAC;AAAA,EAAA;AAAA,EAGpD,aAAwC,MAAY;AAC/C,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IAAA;AAED,UAAM,SAAS,KAAK,kBAAkB,EAAE,MAAM,KAAK,IAAI;AACvD,eAAW,aAAa,KAAK,UAAU,KAAA,GAAQ;AAC1C,UAAA,UAAU,WAAW,MAAM,GAAG;AAC5B,aAAA,UAAU,OAAO,SAAS;AAAA,MAAA;AAAA,IAChC;AAAA,EACD;AAAA,EAGD,IAA+B,OAAoE;AAC9F,QAAA,CAAC,KAAK,WAAW;AACb,aAAA;AAAA,IAAA;AAER,UAAM,eAAe,KAAK,UAAU,IAAI,KAAK,kBAAkB,KAAK,CAAC;AACrE,UAAM,kBAAkB,KAAK,oBAAoB,GAAG,IAAI,KAAK;AAC7D,QAAI,CAAC,iBAAiB;AACd,aAAA;AAAA,IAAA,WACG,CAAC,cAAc;AAClB,aAAA;AAAA,IAAA;AAER,+BAAW,IAAI,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC;AAAA,EAAA;AAAA,EAGrD,OAAkC,UAAwC,MAAsC;AAC3G,QAAA,CAAC,KAAK,WAAW;AACpB;AAAA,IAAA;AAEK,UAAA,YAAY,KAAK,IAAI,KAAK;AAChC,QAAI,WAAW;AACd,iBAAW,YAAY,WAAW;AACjC,iBAAS,GAAG,IAAI;AAAA,MAAA;AAAA,IACjB;AAAA,EACD;AAAA,EAGD,IAA+B,OAAqC,SAAmC;AAChG,UAAA,MAAM,KAAK,kBAAkB,KAAK;AACxC,QAAI,iBAAiB,KAAK,YAAY,KAAK,OAAO;AAC3C,WAAA,MAAM,gBAAgB,OAAO,OAAO;AAAA,EAAA;AAAA,EAG5C,QAAqC;AAChC,QAAA,CAAC,KAAK,WAAW;AACb,aAAA,IAAI,oBAA4B,KAAK,iBAAiB;AAAA,IAAA;AAE9D,UAAM,QAAqC,IAAI,oBAAoB,KAAK,mBAAmB,oBAAI,KAAK;AACpG,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,WAAW;AACpD,YAAM,UAAW,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC;AAAA,IAAA;AAElC,WAAA;AAAA,EAAA;AAAA,EAGR,OAAO,OAAoC;AACtC,QAAA,CAAC,MAAM,WAAW;AACrB;AAAA,IAAA;AAED,eAAW,CAAC,UAAU,cAAc,KAAK,MAAM,WAAW;AACzD,iBAAW,YAAY,gBAAgB;AACjC,aAAA,YAAY,UAAU,QAAQ;AAAA,MAAA;AAAA,IACpC;AAAA,EACD;AAAA,EAGO,kBAAkB,OAAqD;AACvE,WAAA,MAAM,MAAM,GAAI,MAAM,IAAe,IAAI,MAAM,OAAO,EAAE,KAAM,MAAM;AAAA,EAAA;AAAA,EAGpE,YAAuC,KAAa,SAAuB;AAClF,SAAK,cAAL,KAAK,YAAc,oBAAI,IAAI;AAC3B,QAAI,iBAAiB,KAAK,UAAU,IAAI,GAAG;AAC3C,QAAI,CAAC,gBAAgB;AACpB,2CAAqB,IAAI;AACpB,WAAA,UAAU,IAAI,KAAK,cAAc;AAAA,IAAA;AAEvC,mBAAe,IAAI,OAAO;AACnB,WAAA;AAAA,EAAA;AAET;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeParameterMerger.cjs","sources":["../../../../../packages/binding-common/src/treeParameters/TreeParameterMerger.ts"],"sourcesContent":["import { Writable } from '@contember/client'\nimport type {\n\tAlias,\n\tEntityEventListenerStore,\n\tEventListenersStore,\n\tExpectedQualifiedEntityMutation,\n\tExpectedRelationMutation,\n\tGenericEventsMap,\n\tHasManyRelation,\n\tHasOneRelation,\n\tParentEntityParameters,\n\tQualifiedEntityList,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSetOnCreate,\n\tUnconstrainedQualifiedEntityList,\n\tUnconstrainedQualifiedSingleEntity,\n\tUniqueWhere,\n} from '../treeParameters'\nimport { BindingError } from '../BindingError'\n\nexport class TreeParameterMerger {\n\tpublic static mergeHasOneRelationsWithSamePlaceholders(\n\t\toriginal: HasOneRelation,\n\t\tfresh: HasOneRelation,\n\t): HasOneRelation {\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\treducedBy: original.reducedBy,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeHasManyRelationsWithSamePlaceholders(\n\t\toriginal: HasManyRelation,\n\t\tfresh: HasManyRelation,\n\t): HasManyRelation {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected hasMany relations on the same field '${original.field}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\tchildEventListeners: this.mergeEventStore(\n\t\t\t\toriginal.childEventListeners,\n\t\t\t\tfresh.childEventListeners,\n\t\t\t),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntitySubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t\tfresh: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t): QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity {\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\twhere: original.where,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntityListSubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t\tfresh: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t): QualifiedEntityList | UnconstrainedQualifiedEntityList {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected sub trees of the same entity '${original.entityName}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t}\n\t}\n\n\tpublic static mergeSingleField(original: Omit<RelativeSingleField, 'hasOneRelationPath'>, fresh: Omit<RelativeSingleField, 'hasOneRelationPath'>): Omit<RelativeSingleField, 'hasOneRelationPath'> {\n\t\tif (original.defaultValue !== undefined && fresh.defaultValue !== undefined && original.defaultValue !== fresh.defaultValue) {\n\t\t\tthrow new BindingError(`MarkerTreeGenerator merging: multiple fields \"${original.field}\" with different defaultValue found: ${JSON.stringify([original.defaultValue, fresh.defaultValue])}, `)\n\t\t}\n\t\treturn {\n\t\t\tfield: original.field,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tdefaultValue: original.defaultValue ?? fresh.defaultValue,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\n\tpublic static mergeSetOnCreate(original: SetOnCreate, fresh: SetOnCreate): SetOnCreate {\n\t\tif (original === undefined && fresh === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\tconst originalCopy: Writable<UniqueWhere> = { ...original }\n\n\t\tfor (const field in fresh) {\n\t\t\tif (field in originalCopy) {\n\t\t\t\tconst fromOriginal = originalCopy[field]\n\t\t\t\tconst fromFresh = fresh[field]\n\t\t\t\tif (typeof fromOriginal === 'object') {\n\t\t\t\t\tif (typeof fromFresh === 'object') {\n\t\t\t\t\t\tconst merged = this.mergeSetOnCreate(fromOriginal, fromFresh)\n\t\t\t\t\t\tif (merged !== undefined) {\n\t\t\t\t\t\t\toriginalCopy[field] = merged\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromFresh === 'string' || typeof fromFresh === 'number') {\n\t\t\t\t\tif (fromOriginal === fromFresh) {\n\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t} else {\n\t\t\t\toriginalCopy[field] = fresh[field]\n\t\t\t}\n\t\t}\n\n\t\treturn originalCopy\n\t}\n\n\tprivate static mergeSets<T>(original: Set<T>, fresh: Set<T>): Set<T> {\n\t\tconst combinedSet = new Set(original)\n\t\tfor (const item of fresh) {\n\t\t\tcombinedSet.add(item)\n\t\t}\n\t\treturn combinedSet\n\t}\n\n\tpublic static mergeParentEntityParameters(\n\t\toriginal: ParentEntityParameters | undefined,\n\t\tfresh: ParentEntityParameters | undefined,\n\t): ParentEntityParameters | undefined {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn {\n\t\t\teventListeners: TreeParameterMerger.mergeEventStore(\n\t\t\t\toriginal.eventListeners,\n\t\t\t\tfresh.eventListeners,\n\t\t\t),\n\t\t}\n\t}\n\n\tpublic static mergeInParentEntity<\n\t\tOriginal extends Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Original,\n\t>(original: Original, key: Key, parentEntity: ParentEntityParameters | undefined): Original {\n\t\tif (!parentEntity) {\n\t\t\treturn original\n\t\t}\n\n\t\treturn {\n\t\t\t...original,\n\t\t\t[key]: TreeParameterMerger.mergeEventStore(original[key], parentEntity.eventListeners),\n\t\t}\n\t}\n\n\n\tprivate static mergeEventStore<Events extends GenericEventsMap>(\n\t\toriginal: EventListenersStore<Events> | undefined,\n\t\tfresh: EventListenersStore<Events> | undefined,\n\t): EventListenersStore<Events> | undefined {\n\t\tif (original === undefined) {\n\t\t\tif (fresh === undefined) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn fresh\n\t\t}\n\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\n\t\tconst store = original.clone()\n\t\tstore.append(fresh)\n\n\t\treturn store\n\t}\n\n\tprivate static mergeExpectedRelationMutation(\n\t\toriginal: ExpectedRelationMutation,\n\t\tfresh: ExpectedRelationMutation,\n\t): ExpectedRelationMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeExpectedQualifiedEntityMutation(\n\t\toriginal: ExpectedQualifiedEntityMutation,\n\t\tfresh: ExpectedQualifiedEntityMutation,\n\t): ExpectedQualifiedEntityMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeSubTreeAliases(\n\t\toriginal: Set<Alias> | undefined,\n\t\tfresh: Set<Alias> | undefined,\n\t): Set<Alias> | undefined {\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn this.mergeSets(original, fresh)\n\t}\n}\n"],"names":["BindingError"],"mappings":"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"}
1
+ {"version":3,"file":"TreeParameterMerger.cjs","sources":["../../../../../packages/binding-common/src/treeParameters/TreeParameterMerger.ts"],"sourcesContent":["import { Writable } from '@contember/client'\nimport type {\n\tAlias,\n\tEntityEventListenerStore,\n\tEventListenersStore,\n\tExpectedQualifiedEntityMutation,\n\tExpectedRelationMutation,\n\tGenericEventsMap,\n\tHasManyRelation,\n\tHasOneRelation,\n\tParentEntityParameters,\n\tQualifiedEntityList,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSetOnCreate,\n\tUnconstrainedQualifiedEntityList,\n\tUnconstrainedQualifiedSingleEntity,\n\tUniqueWhere,\n} from '../treeParameters'\nimport { BindingError } from '../BindingError'\n\nexport class TreeParameterMerger {\n\tpublic static mergeHasOneRelationsWithSamePlaceholders(\n\t\toriginal: HasOneRelation,\n\t\tfresh: HasOneRelation,\n\t): HasOneRelation {\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\treducedBy: original.reducedBy,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeHasManyRelationsWithSamePlaceholders(\n\t\toriginal: HasManyRelation,\n\t\tfresh: HasManyRelation,\n\t): HasManyRelation {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected hasMany relations on the same field '${original.field}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\tchildEventListeners: this.mergeEventStore(\n\t\t\t\toriginal.childEventListeners,\n\t\t\t\tfresh.childEventListeners,\n\t\t\t),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntitySubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t\tfresh: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t): QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity {\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\twhere: original.where,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntityListSubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t\tfresh: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t): QualifiedEntityList | UnconstrainedQualifiedEntityList {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected sub trees of the same entity '${original.entityName}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t}\n\t}\n\n\tpublic static mergeSingleField(original: Omit<RelativeSingleField, 'hasOneRelationPath'>, fresh: Omit<RelativeSingleField, 'hasOneRelationPath'>): Omit<RelativeSingleField, 'hasOneRelationPath'> {\n\t\tif (original.defaultValue !== undefined && fresh.defaultValue !== undefined && original.defaultValue !== fresh.defaultValue) {\n\t\t\tthrow new BindingError(`MarkerTreeGenerator merging: multiple fields \"${original.field}\" with different defaultValue found: ${JSON.stringify([original.defaultValue, fresh.defaultValue])}, `)\n\t\t}\n\t\treturn {\n\t\t\tfield: original.field,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tdefaultValue: original.defaultValue ?? fresh.defaultValue,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\n\tpublic static mergeSetOnCreate(original: SetOnCreate, fresh: SetOnCreate): SetOnCreate {\n\t\tif (original === undefined && fresh === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\tconst originalCopy: Writable<UniqueWhere> = { ...original }\n\n\t\tfor (const field in fresh) {\n\t\t\tif (field in originalCopy) {\n\t\t\t\tconst fromOriginal = originalCopy[field]\n\t\t\t\tconst fromFresh = fresh[field]\n\t\t\t\tif (typeof fromOriginal === 'object') {\n\t\t\t\t\tif (typeof fromFresh === 'object') {\n\t\t\t\t\t\tconst merged = this.mergeSetOnCreate(fromOriginal, fromFresh)\n\t\t\t\t\t\tif (merged !== undefined) {\n\t\t\t\t\t\t\toriginalCopy[field] = merged\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromFresh === 'string' || typeof fromFresh === 'number') {\n\t\t\t\t\tif (fromOriginal === fromFresh) {\n\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t} else {\n\t\t\t\toriginalCopy[field] = fresh[field]\n\t\t\t}\n\t\t}\n\n\t\treturn originalCopy\n\t}\n\n\tprivate static mergeSets<T>(original: Set<T>, fresh: Set<T>): Set<T> {\n\t\tconst combinedSet = new Set(original)\n\t\tfor (const item of fresh) {\n\t\t\tcombinedSet.add(item)\n\t\t}\n\t\treturn combinedSet\n\t}\n\n\tpublic static mergeParentEntityParameters(\n\t\toriginal: ParentEntityParameters | undefined,\n\t\tfresh: ParentEntityParameters | undefined,\n\t): ParentEntityParameters | undefined {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn {\n\t\t\teventListeners: TreeParameterMerger.mergeEventStore(\n\t\t\t\toriginal.eventListeners,\n\t\t\t\tfresh.eventListeners,\n\t\t\t),\n\t\t}\n\t}\n\n\tpublic static mergeInParentEntity<\n\t\tOriginal extends Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Original,\n\t>(original: Original, key: Key, parentEntity: ParentEntityParameters | undefined): Original {\n\t\tif (!parentEntity) {\n\t\t\treturn original\n\t\t}\n\n\t\treturn {\n\t\t\t...original,\n\t\t\t[key]: TreeParameterMerger.mergeEventStore(original[key], parentEntity.eventListeners),\n\t\t}\n\t}\n\n\n\tprivate static mergeEventStore<Events extends GenericEventsMap>(\n\t\toriginal: EventListenersStore<Events> | undefined,\n\t\tfresh: EventListenersStore<Events> | undefined,\n\t): EventListenersStore<Events> | undefined {\n\t\tif (original === undefined) {\n\t\t\tif (fresh === undefined) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn fresh\n\t\t}\n\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\n\t\tconst store = original.clone()\n\t\tstore.append(fresh)\n\n\t\treturn store\n\t}\n\n\tprivate static mergeExpectedRelationMutation(\n\t\toriginal: ExpectedRelationMutation,\n\t\tfresh: ExpectedRelationMutation,\n\t): ExpectedRelationMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeExpectedQualifiedEntityMutation(\n\t\toriginal: ExpectedQualifiedEntityMutation,\n\t\tfresh: ExpectedQualifiedEntityMutation,\n\t): ExpectedQualifiedEntityMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeSubTreeAliases(\n\t\toriginal: Set<Alias> | undefined,\n\t\tfresh: Set<Alias> | undefined,\n\t): Set<Alias> | undefined {\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn this.mergeSets(original, fresh)\n\t}\n}\n"],"names":["BindingError"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeParameterMerger.js","sources":["../../../../../packages/binding-common/src/treeParameters/TreeParameterMerger.ts"],"sourcesContent":["import { Writable } from '@contember/client'\nimport type {\n\tAlias,\n\tEntityEventListenerStore,\n\tEventListenersStore,\n\tExpectedQualifiedEntityMutation,\n\tExpectedRelationMutation,\n\tGenericEventsMap,\n\tHasManyRelation,\n\tHasOneRelation,\n\tParentEntityParameters,\n\tQualifiedEntityList,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSetOnCreate,\n\tUnconstrainedQualifiedEntityList,\n\tUnconstrainedQualifiedSingleEntity,\n\tUniqueWhere,\n} from '../treeParameters'\nimport { BindingError } from '../BindingError'\n\nexport class TreeParameterMerger {\n\tpublic static mergeHasOneRelationsWithSamePlaceholders(\n\t\toriginal: HasOneRelation,\n\t\tfresh: HasOneRelation,\n\t): HasOneRelation {\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\treducedBy: original.reducedBy,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeHasManyRelationsWithSamePlaceholders(\n\t\toriginal: HasManyRelation,\n\t\tfresh: HasManyRelation,\n\t): HasManyRelation {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected hasMany relations on the same field '${original.field}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\tchildEventListeners: this.mergeEventStore(\n\t\t\t\toriginal.childEventListeners,\n\t\t\t\tfresh.childEventListeners,\n\t\t\t),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntitySubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t\tfresh: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t): QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity {\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\twhere: original.where,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntityListSubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t\tfresh: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t): QualifiedEntityList | UnconstrainedQualifiedEntityList {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected sub trees of the same entity '${original.entityName}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t}\n\t}\n\n\tpublic static mergeSingleField(original: Omit<RelativeSingleField, 'hasOneRelationPath'>, fresh: Omit<RelativeSingleField, 'hasOneRelationPath'>): Omit<RelativeSingleField, 'hasOneRelationPath'> {\n\t\tif (original.defaultValue !== undefined && fresh.defaultValue !== undefined && original.defaultValue !== fresh.defaultValue) {\n\t\t\tthrow new BindingError(`MarkerTreeGenerator merging: multiple fields \"${original.field}\" with different defaultValue found: ${JSON.stringify([original.defaultValue, fresh.defaultValue])}, `)\n\t\t}\n\t\treturn {\n\t\t\tfield: original.field,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tdefaultValue: original.defaultValue ?? fresh.defaultValue,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\n\tpublic static mergeSetOnCreate(original: SetOnCreate, fresh: SetOnCreate): SetOnCreate {\n\t\tif (original === undefined && fresh === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\tconst originalCopy: Writable<UniqueWhere> = { ...original }\n\n\t\tfor (const field in fresh) {\n\t\t\tif (field in originalCopy) {\n\t\t\t\tconst fromOriginal = originalCopy[field]\n\t\t\t\tconst fromFresh = fresh[field]\n\t\t\t\tif (typeof fromOriginal === 'object') {\n\t\t\t\t\tif (typeof fromFresh === 'object') {\n\t\t\t\t\t\tconst merged = this.mergeSetOnCreate(fromOriginal, fromFresh)\n\t\t\t\t\t\tif (merged !== undefined) {\n\t\t\t\t\t\t\toriginalCopy[field] = merged\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromFresh === 'string' || typeof fromFresh === 'number') {\n\t\t\t\t\tif (fromOriginal === fromFresh) {\n\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t} else {\n\t\t\t\toriginalCopy[field] = fresh[field]\n\t\t\t}\n\t\t}\n\n\t\treturn originalCopy\n\t}\n\n\tprivate static mergeSets<T>(original: Set<T>, fresh: Set<T>): Set<T> {\n\t\tconst combinedSet = new Set(original)\n\t\tfor (const item of fresh) {\n\t\t\tcombinedSet.add(item)\n\t\t}\n\t\treturn combinedSet\n\t}\n\n\tpublic static mergeParentEntityParameters(\n\t\toriginal: ParentEntityParameters | undefined,\n\t\tfresh: ParentEntityParameters | undefined,\n\t): ParentEntityParameters | undefined {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn {\n\t\t\teventListeners: TreeParameterMerger.mergeEventStore(\n\t\t\t\toriginal.eventListeners,\n\t\t\t\tfresh.eventListeners,\n\t\t\t),\n\t\t}\n\t}\n\n\tpublic static mergeInParentEntity<\n\t\tOriginal extends Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Original,\n\t>(original: Original, key: Key, parentEntity: ParentEntityParameters | undefined): Original {\n\t\tif (!parentEntity) {\n\t\t\treturn original\n\t\t}\n\n\t\treturn {\n\t\t\t...original,\n\t\t\t[key]: TreeParameterMerger.mergeEventStore(original[key], parentEntity.eventListeners),\n\t\t}\n\t}\n\n\n\tprivate static mergeEventStore<Events extends GenericEventsMap>(\n\t\toriginal: EventListenersStore<Events> | undefined,\n\t\tfresh: EventListenersStore<Events> | undefined,\n\t): EventListenersStore<Events> | undefined {\n\t\tif (original === undefined) {\n\t\t\tif (fresh === undefined) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn fresh\n\t\t}\n\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\n\t\tconst store = original.clone()\n\t\tstore.append(fresh)\n\n\t\treturn store\n\t}\n\n\tprivate static mergeExpectedRelationMutation(\n\t\toriginal: ExpectedRelationMutation,\n\t\tfresh: ExpectedRelationMutation,\n\t): ExpectedRelationMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeExpectedQualifiedEntityMutation(\n\t\toriginal: ExpectedQualifiedEntityMutation,\n\t\tfresh: ExpectedQualifiedEntityMutation,\n\t): ExpectedQualifiedEntityMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeSubTreeAliases(\n\t\toriginal: Set<Alias> | undefined,\n\t\tfresh: Set<Alias> | undefined,\n\t): Set<Alias> | undefined {\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn this.mergeSets(original, fresh)\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeParameterMerger.js","sources":["../../../../../packages/binding-common/src/treeParameters/TreeParameterMerger.ts"],"sourcesContent":["import { Writable } from '@contember/client'\nimport type {\n\tAlias,\n\tEntityEventListenerStore,\n\tEventListenersStore,\n\tExpectedQualifiedEntityMutation,\n\tExpectedRelationMutation,\n\tGenericEventsMap,\n\tHasManyRelation,\n\tHasOneRelation,\n\tParentEntityParameters,\n\tQualifiedEntityList,\n\tQualifiedSingleEntity,\n\tRelativeSingleField,\n\tSetOnCreate,\n\tUnconstrainedQualifiedEntityList,\n\tUnconstrainedQualifiedSingleEntity,\n\tUniqueWhere,\n} from '../treeParameters'\nimport { BindingError } from '../BindingError'\n\nexport class TreeParameterMerger {\n\tpublic static mergeHasOneRelationsWithSamePlaceholders(\n\t\toriginal: HasOneRelation,\n\t\tfresh: HasOneRelation,\n\t): HasOneRelation {\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\treducedBy: original.reducedBy,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeHasManyRelationsWithSamePlaceholders(\n\t\toriginal: HasManyRelation,\n\t\tfresh: HasManyRelation,\n\t): HasManyRelation {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected hasMany relations on the same field '${original.field}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tfield: original.field,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\texpectedMutation: this.mergeExpectedRelationMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.forceCreation || fresh.forceCreation,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\tchildEventListeners: this.mergeEventStore(\n\t\t\t\toriginal.childEventListeners,\n\t\t\t\tfresh.childEventListeners,\n\t\t\t),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntitySubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t\tfresh: QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity,\n\t): QualifiedSingleEntity | UnconstrainedQualifiedSingleEntity {\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\twhere: original.where,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\tpublic static mergeEntityListSubTreeParametersWithSamePlaceholders(\n\t\toriginal: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t\tfresh: QualifiedEntityList | UnconstrainedQualifiedEntityList,\n\t): QualifiedEntityList | UnconstrainedQualifiedEntityList {\n\t\tif (original.initialEntityCount !== fresh.initialEntityCount) {\n\t\t\tthrow new BindingError(\n\t\t\t\t`Detected sub trees of the same entity '${original.entityName}' with different preferred initial ` +\n\t\t\t\t\t`entity counts: '${original.initialEntityCount}' and '${fresh.initialEntityCount}' respectively.`,\n\t\t\t)\n\t\t}\n\n\t\tif (original.isCreating) {\n\t\t\tif (!fresh.isCreating) {\n\t\t\t\tthrow new BindingError()\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// Encoded within the placeholder\n\t\t\t\tisCreating: original.isCreating,\n\t\t\t\tisUnpersisted: original.isUnpersisted && fresh.isUnpersisted,\n\t\t\t\tentityName: original.entityName,\n\n\t\t\t\t// Not encoded within the placeholder\n\t\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t// Encoded within the placeholder\n\t\t\tisCreating: original.isCreating,\n\t\t\tentityName: original.entityName,\n\t\t\tfilter: original.filter,\n\t\t\torderBy: original.orderBy,\n\t\t\toffset: original.offset,\n\t\t\tlimit: original.limit,\n\n\t\t\t// Not encoded within the placeholder\n\t\t\talias: this.mergeSubTreeAliases(original.alias, fresh.alias),\n\t\t\tsetOnCreate: this.mergeSetOnCreate(original.setOnCreate, fresh.setOnCreate),\n\t\t\t// forceCreation: original.value.forceCreation || fresh.value.forceCreation,\n\t\t\texpectedMutation: this.mergeExpectedQualifiedEntityMutation(original.expectedMutation, fresh.expectedMutation),\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\thasOneRelationPath: original.hasOneRelationPath, // TODO this is completely wrong.\n\t\t\tchildEventListeners: this.mergeEventStore(original.childEventListeners, fresh.childEventListeners),\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t\tinitialEntityCount: original.initialEntityCount, // Handled above\n\t\t}\n\t}\n\n\tpublic static mergeSingleField(original: Omit<RelativeSingleField, 'hasOneRelationPath'>, fresh: Omit<RelativeSingleField, 'hasOneRelationPath'>): Omit<RelativeSingleField, 'hasOneRelationPath'> {\n\t\tif (original.defaultValue !== undefined && fresh.defaultValue !== undefined && original.defaultValue !== fresh.defaultValue) {\n\t\t\tthrow new BindingError(`MarkerTreeGenerator merging: multiple fields \"${original.field}\" with different defaultValue found: ${JSON.stringify([original.defaultValue, fresh.defaultValue])}, `)\n\t\t}\n\t\treturn {\n\t\t\tfield: original.field,\n\t\t\tisNonbearing: original.isNonbearing && fresh.isNonbearing,\n\t\t\tdefaultValue: original.defaultValue ?? fresh.defaultValue,\n\t\t\teventListeners: this.mergeEventStore(original.eventListeners, fresh.eventListeners),\n\t\t}\n\t}\n\n\n\tpublic static mergeSetOnCreate(original: SetOnCreate, fresh: SetOnCreate): SetOnCreate {\n\t\tif (original === undefined && fresh === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\tconst originalCopy: Writable<UniqueWhere> = { ...original }\n\n\t\tfor (const field in fresh) {\n\t\t\tif (field in originalCopy) {\n\t\t\t\tconst fromOriginal = originalCopy[field]\n\t\t\t\tconst fromFresh = fresh[field]\n\t\t\t\tif (typeof fromOriginal === 'object') {\n\t\t\t\t\tif (typeof fromFresh === 'object') {\n\t\t\t\t\t\tconst merged = this.mergeSetOnCreate(fromOriginal, fromFresh)\n\t\t\t\t\t\tif (merged !== undefined) {\n\t\t\t\t\t\t\toriginalCopy[field] = merged\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof fromFresh === 'string' || typeof fromFresh === 'number') {\n\t\t\t\t\tif (fromOriginal === fromFresh) {\n\t\t\t\t\t\t// Good, do nothing.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new BindingError() // TODO msg\n\t\t\t} else {\n\t\t\t\toriginalCopy[field] = fresh[field]\n\t\t\t}\n\t\t}\n\n\t\treturn originalCopy\n\t}\n\n\tprivate static mergeSets<T>(original: Set<T>, fresh: Set<T>): Set<T> {\n\t\tconst combinedSet = new Set(original)\n\t\tfor (const item of fresh) {\n\t\t\tcombinedSet.add(item)\n\t\t}\n\t\treturn combinedSet\n\t}\n\n\tpublic static mergeParentEntityParameters(\n\t\toriginal: ParentEntityParameters | undefined,\n\t\tfresh: ParentEntityParameters | undefined,\n\t): ParentEntityParameters | undefined {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn {\n\t\t\teventListeners: TreeParameterMerger.mergeEventStore(\n\t\t\t\toriginal.eventListeners,\n\t\t\t\tfresh.eventListeners,\n\t\t\t),\n\t\t}\n\t}\n\n\tpublic static mergeInParentEntity<\n\t\tOriginal extends Record<Key, EntityEventListenerStore | undefined>,\n\t\tKey extends keyof Original,\n\t>(original: Original, key: Key, parentEntity: ParentEntityParameters | undefined): Original {\n\t\tif (!parentEntity) {\n\t\t\treturn original\n\t\t}\n\n\t\treturn {\n\t\t\t...original,\n\t\t\t[key]: TreeParameterMerger.mergeEventStore(original[key], parentEntity.eventListeners),\n\t\t}\n\t}\n\n\n\tprivate static mergeEventStore<Events extends GenericEventsMap>(\n\t\toriginal: EventListenersStore<Events> | undefined,\n\t\tfresh: EventListenersStore<Events> | undefined,\n\t): EventListenersStore<Events> | undefined {\n\t\tif (original === undefined) {\n\t\t\tif (fresh === undefined) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn fresh\n\t\t}\n\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\n\t\tconst store = original.clone()\n\t\tstore.append(fresh)\n\n\t\treturn store\n\t}\n\n\tprivate static mergeExpectedRelationMutation(\n\t\toriginal: ExpectedRelationMutation,\n\t\tfresh: ExpectedRelationMutation,\n\t): ExpectedRelationMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeExpectedQualifiedEntityMutation(\n\t\toriginal: ExpectedQualifiedEntityMutation,\n\t\tfresh: ExpectedQualifiedEntityMutation,\n\t): ExpectedQualifiedEntityMutation {\n\t\tif (original === fresh) {\n\t\t\treturn original\n\t\t}\n\t\tif (original === 'none') {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === 'none') {\n\t\t\treturn original\n\t\t}\n\t\treturn 'anyMutation'\n\t}\n\n\tprivate static mergeSubTreeAliases(\n\t\toriginal: Set<Alias> | undefined,\n\t\tfresh: Set<Alias> | undefined,\n\t): Set<Alias> | undefined {\n\t\tif (original === undefined) {\n\t\t\treturn fresh\n\t\t}\n\t\tif (fresh === undefined) {\n\t\t\treturn original\n\t\t}\n\t\treturn this.mergeSets(original, fresh)\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapFilterInHasOnes.cjs","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import type { Filter, HasOneRelation } from '../../treeParameters'\nimport { whereToFilter } from '../../utils/whereToFilter'\n\nexport const wrapFilterInHasOnes = (path: HasOneRelation[], filter: Filter): Filter => {\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst current = path[i]\n\n\t\tif (current.reducedBy === undefined) {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: filter,\n\t\t\t}\n\t\t} else {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: {\n\t\t\t\t\tand: [filter, whereToFilter(current.reducedBy)],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\treturn filter\n}\n"],"names":["whereToFilter"],"mappings":";;;AAGa,MAAA,sBAAsB,CAAC,MAAwB,WAA2B;AACtF,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,UAAA,UAAU,KAAK,CAAC;AAElB,QAAA,QAAQ,cAAc,QAAW;AAC3B,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,MAAA;AAAA,IAClB,OACM;AACG,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,UAChB,KAAK,CAAC,QAAQA,cAAc,cAAA,QAAQ,SAAS,CAAC;AAAA,QAC/C;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AACO,SAAA;AACR;;"}
1
+ {"version":3,"file":"wrapFilterInHasOnes.cjs","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import type { Filter, HasOneRelation } from '../../treeParameters'\nimport { whereToFilter } from '../../utils/whereToFilter'\n\nexport const wrapFilterInHasOnes = (path: HasOneRelation[], filter: Filter): Filter => {\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst current = path[i]\n\n\t\tif (current.reducedBy === undefined) {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: filter,\n\t\t\t}\n\t\t} else {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: {\n\t\t\t\t\tand: [filter, whereToFilter(current.reducedBy)],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\treturn filter\n}\n"],"names":["whereToFilter"],"mappings":";;;AAGa,MAAA,sBAAsB,CAAC,MAAwB,WAA2B;AACtF,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,UAAA,UAAU,KAAK,CAAC;AAElB,QAAA,QAAQ,cAAc,QAAW;AAC3B,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,IAAA,OACM;AACG,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,UAChB,KAAK,CAAC,QAAQA,4BAAc,QAAQ,SAAS,CAAC;AAAA,QAAA;AAAA,MAEhD;AAAA,IAAA;AAAA,EACD;AAEM,SAAA;AACR;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapFilterInHasOnes.js","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import type { Filter, HasOneRelation } from '../../treeParameters'\nimport { whereToFilter } from '../../utils/whereToFilter'\n\nexport const wrapFilterInHasOnes = (path: HasOneRelation[], filter: Filter): Filter => {\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst current = path[i]\n\n\t\tif (current.reducedBy === undefined) {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: filter,\n\t\t\t}\n\t\t} else {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: {\n\t\t\t\t\tand: [filter, whereToFilter(current.reducedBy)],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\treturn filter\n}\n"],"names":[],"mappings":";AAGa,MAAA,sBAAsB,CAAC,MAAwB,WAA2B;AACtF,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,UAAA,UAAU,KAAK,CAAC;AAElB,QAAA,QAAQ,cAAc,QAAW;AAC3B,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,MAAA;AAAA,IAClB,OACM;AACG,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,UAChB,KAAK,CAAC,QAAQ,cAAc,QAAQ,SAAS,CAAC;AAAA,QAC/C;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AACO,SAAA;AACR;"}
1
+ {"version":3,"file":"wrapFilterInHasOnes.js","sources":["../../../../../../packages/binding-common/src/treeParameters/helpers/wrapFilterInHasOnes.ts"],"sourcesContent":["import type { Filter, HasOneRelation } from '../../treeParameters'\nimport { whereToFilter } from '../../utils/whereToFilter'\n\nexport const wrapFilterInHasOnes = (path: HasOneRelation[], filter: Filter): Filter => {\n\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\tconst current = path[i]\n\n\t\tif (current.reducedBy === undefined) {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: filter,\n\t\t\t}\n\t\t} else {\n\t\t\tfilter = {\n\t\t\t\t[current.field]: {\n\t\t\t\t\tand: [filter, whereToFilter(current.reducedBy)],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\treturn filter\n}\n"],"names":[],"mappings":";AAGa,MAAA,sBAAsB,CAAC,MAAwB,WAA2B;AACtF,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,UAAA,UAAU,KAAK,CAAC;AAElB,QAAA,QAAQ,cAAc,QAAW;AAC3B,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,IAAA,OACM;AACG,eAAA;AAAA,QACR,CAAC,QAAQ,KAAK,GAAG;AAAA,UAChB,KAAK,CAAC,QAAQ,cAAc,QAAQ,SAAS,CAAC;AAAA,QAAA;AAAA,MAEhD;AAAA,IAAA;AAAA,EACD;AAEM,SAAA;AACR;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorAccessor.cjs","sources":["../../../../../packages/binding-common/src/types/ErrorAccessor.ts"],"sourcesContent":["import type { Result } from '@contember/client'\n\ninterface ErrorAccessor {\n\treadonly errors: ErrorAccessor.Error[]\n}\n\nnamespace ErrorAccessor {\n\texport type ErrorId = number\n\texport type Error = ExecutionError | ValidationError\n\texport type ErrorsById = Map<ErrorId, Error>\n\texport type ClearError = () => void\n\n\texport type AddError = (error: ErrorAccessor.Error | string) => ClearError\n\n\texport type ExecutionErrors = ExecutionError[]\n\n\texport interface ExecutionError {\n\t\ttype: 'execution'\n\t\tcode: Result.ExecutionErrorType\n\t\tdeveloperMessage: string | null\n\t}\n\n\texport type ValidationErrors = ValidationError[]\n\n\texport interface ValidationError {\n\t\ttype: 'validation'\n\t\tcode: WellKnownErrorCode | string | undefined\n\t\tmessage: string\n\t}\n\n\texport type WellKnownErrorCode = 'fieldRequired'\n\n\texport const normalizeError = (error: Error | string): Error => typeof error === 'string' ? {\n\t\ttype: 'validation',\n\t\tmessage: error,\n\t\tcode: undefined,\n\t} : error\n}\nexport { ErrorAccessor }\n\nexport interface ErrorAccessorHolder {\n\treadonly errors: ErrorAccessor | undefined\n}\n"],"names":["ErrorAccessor"],"mappings":";;AAMUA,QAAA,gBAAA;AAAA,CAAV,CAAUA,mBAAV;AA0BcA,iBAAA,iBAAiB,CAAC,UAAiC,OAAO,UAAU,WAAW;AAAA,IAC3F,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EACH,IAAA;AAAA,GA9BKA,QAAA,kBAAAA,wBAAA,CAAA,EAAA;"}
1
+ {"version":3,"file":"ErrorAccessor.cjs","sources":["../../../../../packages/binding-common/src/types/ErrorAccessor.ts"],"sourcesContent":["import type { Result } from '@contember/client'\n\ninterface ErrorAccessor {\n\treadonly errors: ErrorAccessor.Error[]\n}\n\nnamespace ErrorAccessor {\n\texport type ErrorId = number\n\texport type Error = ExecutionError | ValidationError\n\texport type ErrorsById = Map<ErrorId, Error>\n\texport type ClearError = () => void\n\n\texport type AddError = (error: ErrorAccessor.Error | string) => ClearError\n\n\texport type ExecutionErrors = ExecutionError[]\n\n\texport interface ExecutionError {\n\t\ttype: 'execution'\n\t\tcode: Result.ExecutionErrorType\n\t\tdeveloperMessage: string | null\n\t}\n\n\texport type ValidationErrors = ValidationError[]\n\n\texport interface ValidationError {\n\t\ttype: 'validation'\n\t\tcode: WellKnownErrorCode | string | undefined\n\t\tmessage: string\n\t}\n\n\texport type WellKnownErrorCode = 'fieldRequired'\n\n\texport const normalizeError = (error: Error | string): Error => typeof error === 'string' ? {\n\t\ttype: 'validation',\n\t\tmessage: error,\n\t\tcode: undefined,\n\t} : error\n}\nexport { ErrorAccessor }\n\nexport interface ErrorAccessorHolder {\n\treadonly errors: ErrorAccessor | undefined\n}\n"],"names":["ErrorAccessor"],"mappings":";;AAMUA,QAAAA,gBAAAA;AAAAA,CAAV,CAAUA,mBAAV;AA0BcA,iBAAA,iBAAiB,CAAC,UAAiC,OAAO,UAAU,WAAW;AAAA,IAC3F,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EAAA,IACH;AAAA,GA9BKA,QAAA,kBAAAA,wBAAA,CAAA,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorAccessor.js","sources":["../../../../../packages/binding-common/src/types/ErrorAccessor.ts"],"sourcesContent":["import type { Result } from '@contember/client'\n\ninterface ErrorAccessor {\n\treadonly errors: ErrorAccessor.Error[]\n}\n\nnamespace ErrorAccessor {\n\texport type ErrorId = number\n\texport type Error = ExecutionError | ValidationError\n\texport type ErrorsById = Map<ErrorId, Error>\n\texport type ClearError = () => void\n\n\texport type AddError = (error: ErrorAccessor.Error | string) => ClearError\n\n\texport type ExecutionErrors = ExecutionError[]\n\n\texport interface ExecutionError {\n\t\ttype: 'execution'\n\t\tcode: Result.ExecutionErrorType\n\t\tdeveloperMessage: string | null\n\t}\n\n\texport type ValidationErrors = ValidationError[]\n\n\texport interface ValidationError {\n\t\ttype: 'validation'\n\t\tcode: WellKnownErrorCode | string | undefined\n\t\tmessage: string\n\t}\n\n\texport type WellKnownErrorCode = 'fieldRequired'\n\n\texport const normalizeError = (error: Error | string): Error => typeof error === 'string' ? {\n\t\ttype: 'validation',\n\t\tmessage: error,\n\t\tcode: undefined,\n\t} : error\n}\nexport { ErrorAccessor }\n\nexport interface ErrorAccessorHolder {\n\treadonly errors: ErrorAccessor | undefined\n}\n"],"names":["ErrorAccessor"],"mappings":"AAMU,IAAA;AAAA,CAAV,CAAUA,mBAAV;AA0BcA,iBAAA,iBAAiB,CAAC,UAAiC,OAAO,UAAU,WAAW;AAAA,IAC3F,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EACH,IAAA;AAAA,GA9BK,kBAAA,gBAAA,CAAA,EAAA;"}
1
+ {"version":3,"file":"ErrorAccessor.js","sources":["../../../../../packages/binding-common/src/types/ErrorAccessor.ts"],"sourcesContent":["import type { Result } from '@contember/client'\n\ninterface ErrorAccessor {\n\treadonly errors: ErrorAccessor.Error[]\n}\n\nnamespace ErrorAccessor {\n\texport type ErrorId = number\n\texport type Error = ExecutionError | ValidationError\n\texport type ErrorsById = Map<ErrorId, Error>\n\texport type ClearError = () => void\n\n\texport type AddError = (error: ErrorAccessor.Error | string) => ClearError\n\n\texport type ExecutionErrors = ExecutionError[]\n\n\texport interface ExecutionError {\n\t\ttype: 'execution'\n\t\tcode: Result.ExecutionErrorType\n\t\tdeveloperMessage: string | null\n\t}\n\n\texport type ValidationErrors = ValidationError[]\n\n\texport interface ValidationError {\n\t\ttype: 'validation'\n\t\tcode: WellKnownErrorCode | string | undefined\n\t\tmessage: string\n\t}\n\n\texport type WellKnownErrorCode = 'fieldRequired'\n\n\texport const normalizeError = (error: Error | string): Error => typeof error === 'string' ? {\n\t\ttype: 'validation',\n\t\tmessage: error,\n\t\tcode: undefined,\n\t} : error\n}\nexport { ErrorAccessor }\n\nexport interface ErrorAccessorHolder {\n\treadonly errors: ErrorAccessor | undefined\n}\n"],"names":["ErrorAccessor"],"mappings":"AAMU,IAAA;AAAA,CAAV,CAAUA,mBAAV;AA0BcA,iBAAA,iBAAiB,CAAC,UAAiC,OAAO,UAAU,WAAW;AAAA,IAC3F,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EAAA,IACH;AAAA,GA9BK,kBAAA,gBAAA,CAAA,EAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeRootAccessor.cjs","sources":["../../../../../packages/binding-common/src/types/TreeRootAccessor.ts"],"sourcesContent":["import type { BindingOperations } from './BindingOperations'\n\n// This allows us to have several parallel sub-trees without one having to be the main tree\n// and all the other ones subordinate.\nexport class TreeRootAccessor<Node> {\n\t/**\n\t * Whenever an update occurs, a new instance of this class is created.\n\t */\n\tpublic constructor(\n\t\tpublic readonly hasUnpersistedChanges: boolean,\n\t\tpublic readonly isMutating: boolean,\n\t\tpublic readonly bindingOperations: BindingOperations<Node>,\n\t) {}\n}\n"],"names":[],"mappings":";;AAIO,MAAM,iBAAuB;AAAA;AAAA;AAAA;AAAA,EAI5B,YACU,uBACA,YACA,mBACf;AAHe,SAAA,wBAAA;AACA,SAAA,aAAA;AACA,SAAA,oBAAA;AAAA,EACd;AACJ;;"}
1
+ {"version":3,"file":"TreeRootAccessor.cjs","sources":["../../../../../packages/binding-common/src/types/TreeRootAccessor.ts"],"sourcesContent":["import type { BindingOperations } from './BindingOperations'\n\n// This allows us to have several parallel sub-trees without one having to be the main tree\n// and all the other ones subordinate.\nexport class TreeRootAccessor<Node> {\n\t/**\n\t * Whenever an update occurs, a new instance of this class is created.\n\t */\n\tpublic constructor(\n\t\tpublic readonly hasUnpersistedChanges: boolean,\n\t\tpublic readonly isMutating: boolean,\n\t\tpublic readonly bindingOperations: BindingOperations<Node>,\n\t) {}\n}\n"],"names":[],"mappings":";;AAIO,MAAM,iBAAuB;AAAA;AAAA;AAAA;AAAA,EAI5B,YACU,uBACA,YACA,mBACf;AAHe,SAAA,wBAAA;AACA,SAAA,aAAA;AACA,SAAA,oBAAA;AAAA,EAAA;AAElB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeRootAccessor.js","sources":["../../../../../packages/binding-common/src/types/TreeRootAccessor.ts"],"sourcesContent":["import type { BindingOperations } from './BindingOperations'\n\n// This allows us to have several parallel sub-trees without one having to be the main tree\n// and all the other ones subordinate.\nexport class TreeRootAccessor<Node> {\n\t/**\n\t * Whenever an update occurs, a new instance of this class is created.\n\t */\n\tpublic constructor(\n\t\tpublic readonly hasUnpersistedChanges: boolean,\n\t\tpublic readonly isMutating: boolean,\n\t\tpublic readonly bindingOperations: BindingOperations<Node>,\n\t) {}\n}\n"],"names":[],"mappings":"AAIO,MAAM,iBAAuB;AAAA;AAAA;AAAA;AAAA,EAI5B,YACU,uBACA,YACA,mBACf;AAHe,SAAA,wBAAA;AACA,SAAA,aAAA;AACA,SAAA,oBAAA;AAAA,EACd;AACJ;"}
1
+ {"version":3,"file":"TreeRootAccessor.js","sources":["../../../../../packages/binding-common/src/types/TreeRootAccessor.ts"],"sourcesContent":["import type { BindingOperations } from './BindingOperations'\n\n// This allows us to have several parallel sub-trees without one having to be the main tree\n// and all the other ones subordinate.\nexport class TreeRootAccessor<Node> {\n\t/**\n\t * Whenever an update occurs, a new instance of this class is created.\n\t */\n\tpublic constructor(\n\t\tpublic readonly hasUnpersistedChanges: boolean,\n\t\tpublic readonly isMutating: boolean,\n\t\tpublic readonly bindingOperations: BindingOperations<Node>,\n\t) {}\n}\n"],"names":[],"mappings":"AAIO,MAAM,iBAAuB;AAAA;AAAA;AAAA;AAAA,EAI5B,YACU,uBACA,YACA,mBACf;AAHe,SAAA,wBAAA;AACA,SAAA,aAAA;AACA,SAAA,oBAAA;AAAA,EAAA;AAElB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Hashing.cjs","sources":["../../../../../packages/binding-common/src/utils/Hashing.ts"],"sourcesContent":["// TODO update hashing so that for offset, 0 == undefined\nexport class Hashing {\n\tpublic static hashAny(array: any[]): number {\n\t\tconst json = JSON.stringify(array)\n\t\treturn Hashing.hash(json)\n\t}\n\n\t// Taken from Java\n\tpublic static hash(str: string): number {\n\t\tlet hash = 0\n\t\tif (str.length === 0) {\n\t\t\treturn hash\n\t\t}\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\thash = (hash << 5) - hash + str.charCodeAt(i)\n\t\t\thash = hash & hash // Convert to 32bit integer\n\t\t}\n\t\treturn Math.abs(hash)\n\t}\n}\n"],"names":[],"mappings":";;AACO,MAAM,QAAQ;AAAA,EACpB,OAAc,QAAQ,OAAsB;AACrC,UAAA,OAAO,KAAK,UAAU,KAAK;AAC1B,WAAA,QAAQ,KAAK,IAAI;AAAA,EACzB;AAAA;AAAA,EAGA,OAAc,KAAK,KAAqB;AACvC,QAAI,OAAO;AACP,QAAA,IAAI,WAAW,GAAG;AACd,aAAA;AAAA,IACR;AACA,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACpC,cAAQ,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC;AAC5C,aAAO,OAAO;AAAA,IACf;AACO,WAAA,KAAK,IAAI,IAAI;AAAA,EACrB;AACD;;"}
1
+ {"version":3,"file":"Hashing.cjs","sources":["../../../../../packages/binding-common/src/utils/Hashing.ts"],"sourcesContent":["// TODO update hashing so that for offset, 0 == undefined\nexport class Hashing {\n\tpublic static hashAny(array: any[]): number {\n\t\tconst json = JSON.stringify(array)\n\t\treturn Hashing.hash(json)\n\t}\n\n\t// Taken from Java\n\tpublic static hash(str: string): number {\n\t\tlet hash = 0\n\t\tif (str.length === 0) {\n\t\t\treturn hash\n\t\t}\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\thash = (hash << 5) - hash + str.charCodeAt(i)\n\t\t\thash = hash & hash // Convert to 32bit integer\n\t\t}\n\t\treturn Math.abs(hash)\n\t}\n}\n"],"names":[],"mappings":";;AACO,MAAM,QAAQ;AAAA,EACpB,OAAc,QAAQ,OAAsB;AACrC,UAAA,OAAO,KAAK,UAAU,KAAK;AAC1B,WAAA,QAAQ,KAAK,IAAI;AAAA,EAAA;AAAA;AAAA,EAIzB,OAAc,KAAK,KAAqB;AACvC,QAAI,OAAO;AACP,QAAA,IAAI,WAAW,GAAG;AACd,aAAA;AAAA,IAAA;AAER,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACpC,cAAQ,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC;AAC5C,aAAO,OAAO;AAAA,IAAA;AAER,WAAA,KAAK,IAAI,IAAI;AAAA,EAAA;AAEtB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Hashing.js","sources":["../../../../../packages/binding-common/src/utils/Hashing.ts"],"sourcesContent":["// TODO update hashing so that for offset, 0 == undefined\nexport class Hashing {\n\tpublic static hashAny(array: any[]): number {\n\t\tconst json = JSON.stringify(array)\n\t\treturn Hashing.hash(json)\n\t}\n\n\t// Taken from Java\n\tpublic static hash(str: string): number {\n\t\tlet hash = 0\n\t\tif (str.length === 0) {\n\t\t\treturn hash\n\t\t}\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\thash = (hash << 5) - hash + str.charCodeAt(i)\n\t\t\thash = hash & hash // Convert to 32bit integer\n\t\t}\n\t\treturn Math.abs(hash)\n\t}\n}\n"],"names":[],"mappings":"AACO,MAAM,QAAQ;AAAA,EACpB,OAAc,QAAQ,OAAsB;AACrC,UAAA,OAAO,KAAK,UAAU,KAAK;AAC1B,WAAA,QAAQ,KAAK,IAAI;AAAA,EACzB;AAAA;AAAA,EAGA,OAAc,KAAK,KAAqB;AACvC,QAAI,OAAO;AACP,QAAA,IAAI,WAAW,GAAG;AACd,aAAA;AAAA,IACR;AACA,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACpC,cAAQ,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC;AAC5C,aAAO,OAAO;AAAA,IACf;AACO,WAAA,KAAK,IAAI,IAAI;AAAA,EACrB;AACD;"}
1
+ {"version":3,"file":"Hashing.js","sources":["../../../../../packages/binding-common/src/utils/Hashing.ts"],"sourcesContent":["// TODO update hashing so that for offset, 0 == undefined\nexport class Hashing {\n\tpublic static hashAny(array: any[]): number {\n\t\tconst json = JSON.stringify(array)\n\t\treturn Hashing.hash(json)\n\t}\n\n\t// Taken from Java\n\tpublic static hash(str: string): number {\n\t\tlet hash = 0\n\t\tif (str.length === 0) {\n\t\t\treturn hash\n\t\t}\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\thash = (hash << 5) - hash + str.charCodeAt(i)\n\t\t\thash = hash & hash // Convert to 32bit integer\n\t\t}\n\t\treturn Math.abs(hash)\n\t}\n}\n"],"names":[],"mappings":"AACO,MAAM,QAAQ;AAAA,EACpB,OAAc,QAAQ,OAAsB;AACrC,UAAA,OAAO,KAAK,UAAU,KAAK;AAC1B,WAAA,QAAQ,KAAK,IAAI;AAAA,EAAA;AAAA;AAAA,EAIzB,OAAc,KAAK,KAAqB;AACvC,QAAI,OAAO;AACP,QAAA,IAAI,WAAW,GAAG;AACd,aAAA;AAAA,IAAA;AAER,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACpC,cAAQ,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC;AAC5C,aAAO,OAAO;AAAA,IAAA;AAER,WAAA,KAAK,IAAI,IAAI;AAAA,EAAA;AAEtB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeUtils.cjs","sources":["../../../../../packages/binding-common/src/utils/TreeNodeUtils.ts"],"sourcesContent":["import { Environment } from '../environment'\nimport { BaseRelation, Schema, SchemaColumn, SchemaEntity, SchemaField, SchemaRelation } from '../schema'\nimport { BindingError } from '../BindingError'\nimport levenshtein from 'js-levenshtein'\n\nexport class TreeNodeUtils {\n\n\tpublic static resolveEntity(schema: Schema, entityName: string, type: 'entity' | 'entity list'): SchemaEntity {\n\t\tconst entity = schema.getEntityOrUndefined(entityName)\n\t\tif (!entity) {\n\t\t\tconst alternative = this.recommendAlternative(entityName, schema.getEntityNames())\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Invalid ${type} sub tree: Entity '${entityName}' doesn't exist. ${didYouMean}`)\n\t\t}\n\t\treturn entity\n\t}\n\n\tpublic static resolveHasOneRelation(environment: Environment, field: string, isReduced: boolean): SchemaRelation {\n\t\tif (isReduced) {\n\t\t\treturn this.resolveRelation(environment, field, 'reduced has-one relation', ['ManyHasMany', 'OneHasMany'])\n\t\t}\n\t\treturn this.resolveRelation(environment, field, 'a has-one relation', ['ManyHasOne', 'OneHasOne'])\n\t}\n\n\n\tpublic static resolveHasManyRelation(environment: Environment, field: string): SchemaRelation {\n\t\treturn this.resolveRelation(environment, field, 'a has-many relation', ['ManyHasMany', 'OneHasMany'])\n\t}\n\n\tprivate static resolveRelation(environment: Environment, field: string, relationDescription: string, expectedRelationType: BaseRelation['type'][]): SchemaRelation {\n\t\treturn this.resolveField(environment, field, (field): field is SchemaRelation => {\n\t\t\treturn field.__typename === '_Relation' && expectedRelationType.includes(field.type)\n\t\t}, relationDescription)\n\t}\n\n\tpublic static resolveColumn(environment: Environment, fieldName: string): SchemaColumn {\n\t\treturn this.resolveField(environment, fieldName, (field): field is SchemaColumn => field.__typename === '_Column', 'an ordinary field')\n\t\t// TODO check that defaultValue matches the type\n\t\t// TODO run custom validators\n\t}\n\n\tprivate static resolveField<T extends SchemaField>(environment: Environment, fieldName: string, matcher: (field: SchemaField) => field is T, expectedDescription: string): T {\n\t\tconst treeLocation = environment.getSubTreeNode()\n\t\tconst entity = treeLocation.entity\n\t\tconst field = entity.fields.get(fieldName)\n\t\tif (!field) {\n\t\t\tconst alternative = this.recommendAlternative(\n\t\t\t\tfieldName,\n\t\t\t\tArray.from(entity.fields)\n\t\t\t\t\t.filter(([, field]) => matcher(field))\n\t\t\t\t\t.map(([fieldName]) => fieldName),\n\t\t\t)\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Field '${fieldName}' doesn't exist on ${this.describeLocation(environment)}. ${didYouMean}`)\n\t\t}\n\t\tif (!matcher(field)) {\n\t\t\tconst actual = field.__typename === '_Column' ? 'an ordinary field' : `a ${field.type} relation`\n\t\t\tthrow new BindingError(\n\t\t\t\t`Invalid field: the name '${field.name}' on ${this.describeLocation(environment)} ` +\n\t\t\t\t`refers to ${actual} but is being used as a ${expectedDescription}.`,\n\t\t\t)\n\t\t}\n\t\treturn field\n\t}\n\n\tpublic static describeLocation(environment: Environment): string {\n\t\tconst path = []\n\t\tconst loc = environment.getSubTreeNode()\n\t\tfor (let env = environment; ; env = env.getParent()) {\n\t\t\tconst node = env.getSubTreeNode()\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn `entity '${loc.entity.name}' in path '${[node.entity.name, ...path.reverse()].join('.')}'`\n\t\t\t}\n\t\t\tpath.push(node.field.name)\n\t\t}\n\t}\n\n\tpublic static recommendAlternative(original: string, possibleAlternatives: Iterable<string>): string | undefined {\n\t\tlet bestAlternative: string | undefined = undefined\n\t\tlet bestAlternativeDistance = Number.MAX_SAFE_INTEGER\n\n\t\tfor (const alternative of possibleAlternatives) {\n\t\t\tconst distance = levenshtein(original, alternative)\n\n\t\t\tif (distance < bestAlternativeDistance) {\n\t\t\t\tbestAlternative = alternative\n\t\t\t\tbestAlternativeDistance = distance\n\t\t\t}\n\t\t}\n\t\treturn bestAlternative\n\t}\n}\n"],"names":["BindingError","field","fieldName"],"mappings":"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"}
1
+ {"version":3,"file":"TreeNodeUtils.cjs","sources":["../../../../../packages/binding-common/src/utils/TreeNodeUtils.ts"],"sourcesContent":["import { Environment } from '../environment'\nimport { BaseRelation, Schema, SchemaColumn, SchemaEntity, SchemaField, SchemaRelation } from '../schema'\nimport { BindingError } from '../BindingError'\nimport levenshtein from 'js-levenshtein'\n\nexport class TreeNodeUtils {\n\n\tpublic static resolveEntity(schema: Schema, entityName: string, type: 'entity' | 'entity list'): SchemaEntity {\n\t\tconst entity = schema.getEntityOrUndefined(entityName)\n\t\tif (!entity) {\n\t\t\tconst alternative = this.recommendAlternative(entityName, schema.getEntityNames())\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Invalid ${type} sub tree: Entity '${entityName}' doesn't exist. ${didYouMean}`)\n\t\t}\n\t\treturn entity\n\t}\n\n\tpublic static resolveHasOneRelation(environment: Environment, field: string, isReduced: boolean): SchemaRelation {\n\t\tif (isReduced) {\n\t\t\treturn this.resolveRelation(environment, field, 'reduced has-one relation', ['ManyHasMany', 'OneHasMany'])\n\t\t}\n\t\treturn this.resolveRelation(environment, field, 'a has-one relation', ['ManyHasOne', 'OneHasOne'])\n\t}\n\n\n\tpublic static resolveHasManyRelation(environment: Environment, field: string): SchemaRelation {\n\t\treturn this.resolveRelation(environment, field, 'a has-many relation', ['ManyHasMany', 'OneHasMany'])\n\t}\n\n\tprivate static resolveRelation(environment: Environment, field: string, relationDescription: string, expectedRelationType: BaseRelation['type'][]): SchemaRelation {\n\t\treturn this.resolveField(environment, field, (field): field is SchemaRelation => {\n\t\t\treturn field.__typename === '_Relation' && expectedRelationType.includes(field.type)\n\t\t}, relationDescription)\n\t}\n\n\tpublic static resolveColumn(environment: Environment, fieldName: string): SchemaColumn {\n\t\treturn this.resolveField(environment, fieldName, (field): field is SchemaColumn => field.__typename === '_Column', 'an ordinary field')\n\t\t// TODO check that defaultValue matches the type\n\t\t// TODO run custom validators\n\t}\n\n\tprivate static resolveField<T extends SchemaField>(environment: Environment, fieldName: string, matcher: (field: SchemaField) => field is T, expectedDescription: string): T {\n\t\tconst treeLocation = environment.getSubTreeNode()\n\t\tconst entity = treeLocation.entity\n\t\tconst field = entity.fields.get(fieldName)\n\t\tif (!field) {\n\t\t\tconst alternative = this.recommendAlternative(\n\t\t\t\tfieldName,\n\t\t\t\tArray.from(entity.fields)\n\t\t\t\t\t.filter(([, field]) => matcher(field))\n\t\t\t\t\t.map(([fieldName]) => fieldName),\n\t\t\t)\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Field '${fieldName}' doesn't exist on ${this.describeLocation(environment)}. ${didYouMean}`)\n\t\t}\n\t\tif (!matcher(field)) {\n\t\t\tconst actual = field.__typename === '_Column' ? 'an ordinary field' : `a ${field.type} relation`\n\t\t\tthrow new BindingError(\n\t\t\t\t`Invalid field: the name '${field.name}' on ${this.describeLocation(environment)} ` +\n\t\t\t\t`refers to ${actual} but is being used as a ${expectedDescription}.`,\n\t\t\t)\n\t\t}\n\t\treturn field\n\t}\n\n\tpublic static describeLocation(environment: Environment): string {\n\t\tconst path = []\n\t\tconst loc = environment.getSubTreeNode()\n\t\tfor (let env = environment; ; env = env.getParent()) {\n\t\t\tconst node = env.getSubTreeNode()\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn `entity '${loc.entity.name}' in path '${[node.entity.name, ...path.reverse()].join('.')}'`\n\t\t\t}\n\t\t\tpath.push(node.field.name)\n\t\t}\n\t}\n\n\tpublic static recommendAlternative(original: string, possibleAlternatives: Iterable<string>): string | undefined {\n\t\tlet bestAlternative: string | undefined = undefined\n\t\tlet bestAlternativeDistance = Number.MAX_SAFE_INTEGER\n\n\t\tfor (const alternative of possibleAlternatives) {\n\t\t\tconst distance = levenshtein(original, alternative)\n\n\t\t\tif (distance < bestAlternativeDistance) {\n\t\t\t\tbestAlternative = alternative\n\t\t\t\tbestAlternativeDistance = distance\n\t\t\t}\n\t\t}\n\t\treturn bestAlternative\n\t}\n}\n"],"names":["BindingError","field","fieldName"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeUtils.js","sources":["../../../../../packages/binding-common/src/utils/TreeNodeUtils.ts"],"sourcesContent":["import { Environment } from '../environment'\nimport { BaseRelation, Schema, SchemaColumn, SchemaEntity, SchemaField, SchemaRelation } from '../schema'\nimport { BindingError } from '../BindingError'\nimport levenshtein from 'js-levenshtein'\n\nexport class TreeNodeUtils {\n\n\tpublic static resolveEntity(schema: Schema, entityName: string, type: 'entity' | 'entity list'): SchemaEntity {\n\t\tconst entity = schema.getEntityOrUndefined(entityName)\n\t\tif (!entity) {\n\t\t\tconst alternative = this.recommendAlternative(entityName, schema.getEntityNames())\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Invalid ${type} sub tree: Entity '${entityName}' doesn't exist. ${didYouMean}`)\n\t\t}\n\t\treturn entity\n\t}\n\n\tpublic static resolveHasOneRelation(environment: Environment, field: string, isReduced: boolean): SchemaRelation {\n\t\tif (isReduced) {\n\t\t\treturn this.resolveRelation(environment, field, 'reduced has-one relation', ['ManyHasMany', 'OneHasMany'])\n\t\t}\n\t\treturn this.resolveRelation(environment, field, 'a has-one relation', ['ManyHasOne', 'OneHasOne'])\n\t}\n\n\n\tpublic static resolveHasManyRelation(environment: Environment, field: string): SchemaRelation {\n\t\treturn this.resolveRelation(environment, field, 'a has-many relation', ['ManyHasMany', 'OneHasMany'])\n\t}\n\n\tprivate static resolveRelation(environment: Environment, field: string, relationDescription: string, expectedRelationType: BaseRelation['type'][]): SchemaRelation {\n\t\treturn this.resolveField(environment, field, (field): field is SchemaRelation => {\n\t\t\treturn field.__typename === '_Relation' && expectedRelationType.includes(field.type)\n\t\t}, relationDescription)\n\t}\n\n\tpublic static resolveColumn(environment: Environment, fieldName: string): SchemaColumn {\n\t\treturn this.resolveField(environment, fieldName, (field): field is SchemaColumn => field.__typename === '_Column', 'an ordinary field')\n\t\t// TODO check that defaultValue matches the type\n\t\t// TODO run custom validators\n\t}\n\n\tprivate static resolveField<T extends SchemaField>(environment: Environment, fieldName: string, matcher: (field: SchemaField) => field is T, expectedDescription: string): T {\n\t\tconst treeLocation = environment.getSubTreeNode()\n\t\tconst entity = treeLocation.entity\n\t\tconst field = entity.fields.get(fieldName)\n\t\tif (!field) {\n\t\t\tconst alternative = this.recommendAlternative(\n\t\t\t\tfieldName,\n\t\t\t\tArray.from(entity.fields)\n\t\t\t\t\t.filter(([, field]) => matcher(field))\n\t\t\t\t\t.map(([fieldName]) => fieldName),\n\t\t\t)\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Field '${fieldName}' doesn't exist on ${this.describeLocation(environment)}. ${didYouMean}`)\n\t\t}\n\t\tif (!matcher(field)) {\n\t\t\tconst actual = field.__typename === '_Column' ? 'an ordinary field' : `a ${field.type} relation`\n\t\t\tthrow new BindingError(\n\t\t\t\t`Invalid field: the name '${field.name}' on ${this.describeLocation(environment)} ` +\n\t\t\t\t`refers to ${actual} but is being used as a ${expectedDescription}.`,\n\t\t\t)\n\t\t}\n\t\treturn field\n\t}\n\n\tpublic static describeLocation(environment: Environment): string {\n\t\tconst path = []\n\t\tconst loc = environment.getSubTreeNode()\n\t\tfor (let env = environment; ; env = env.getParent()) {\n\t\t\tconst node = env.getSubTreeNode()\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn `entity '${loc.entity.name}' in path '${[node.entity.name, ...path.reverse()].join('.')}'`\n\t\t\t}\n\t\t\tpath.push(node.field.name)\n\t\t}\n\t}\n\n\tpublic static recommendAlternative(original: string, possibleAlternatives: Iterable<string>): string | undefined {\n\t\tlet bestAlternative: string | undefined = undefined\n\t\tlet bestAlternativeDistance = Number.MAX_SAFE_INTEGER\n\n\t\tfor (const alternative of possibleAlternatives) {\n\t\t\tconst distance = levenshtein(original, alternative)\n\n\t\t\tif (distance < bestAlternativeDistance) {\n\t\t\t\tbestAlternative = alternative\n\t\t\t\tbestAlternativeDistance = distance\n\t\t\t}\n\t\t}\n\t\treturn bestAlternative\n\t}\n}\n"],"names":["field","fieldName"],"mappings":"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"}
1
+ {"version":3,"file":"TreeNodeUtils.js","sources":["../../../../../packages/binding-common/src/utils/TreeNodeUtils.ts"],"sourcesContent":["import { Environment } from '../environment'\nimport { BaseRelation, Schema, SchemaColumn, SchemaEntity, SchemaField, SchemaRelation } from '../schema'\nimport { BindingError } from '../BindingError'\nimport levenshtein from 'js-levenshtein'\n\nexport class TreeNodeUtils {\n\n\tpublic static resolveEntity(schema: Schema, entityName: string, type: 'entity' | 'entity list'): SchemaEntity {\n\t\tconst entity = schema.getEntityOrUndefined(entityName)\n\t\tif (!entity) {\n\t\t\tconst alternative = this.recommendAlternative(entityName, schema.getEntityNames())\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Invalid ${type} sub tree: Entity '${entityName}' doesn't exist. ${didYouMean}`)\n\t\t}\n\t\treturn entity\n\t}\n\n\tpublic static resolveHasOneRelation(environment: Environment, field: string, isReduced: boolean): SchemaRelation {\n\t\tif (isReduced) {\n\t\t\treturn this.resolveRelation(environment, field, 'reduced has-one relation', ['ManyHasMany', 'OneHasMany'])\n\t\t}\n\t\treturn this.resolveRelation(environment, field, 'a has-one relation', ['ManyHasOne', 'OneHasOne'])\n\t}\n\n\n\tpublic static resolveHasManyRelation(environment: Environment, field: string): SchemaRelation {\n\t\treturn this.resolveRelation(environment, field, 'a has-many relation', ['ManyHasMany', 'OneHasMany'])\n\t}\n\n\tprivate static resolveRelation(environment: Environment, field: string, relationDescription: string, expectedRelationType: BaseRelation['type'][]): SchemaRelation {\n\t\treturn this.resolveField(environment, field, (field): field is SchemaRelation => {\n\t\t\treturn field.__typename === '_Relation' && expectedRelationType.includes(field.type)\n\t\t}, relationDescription)\n\t}\n\n\tpublic static resolveColumn(environment: Environment, fieldName: string): SchemaColumn {\n\t\treturn this.resolveField(environment, fieldName, (field): field is SchemaColumn => field.__typename === '_Column', 'an ordinary field')\n\t\t// TODO check that defaultValue matches the type\n\t\t// TODO run custom validators\n\t}\n\n\tprivate static resolveField<T extends SchemaField>(environment: Environment, fieldName: string, matcher: (field: SchemaField) => field is T, expectedDescription: string): T {\n\t\tconst treeLocation = environment.getSubTreeNode()\n\t\tconst entity = treeLocation.entity\n\t\tconst field = entity.fields.get(fieldName)\n\t\tif (!field) {\n\t\t\tconst alternative = this.recommendAlternative(\n\t\t\t\tfieldName,\n\t\t\t\tArray.from(entity.fields)\n\t\t\t\t\t.filter(([, field]) => matcher(field))\n\t\t\t\t\t.map(([fieldName]) => fieldName),\n\t\t\t)\n\t\t\tconst didYouMean = alternative ? `Did you mean '${alternative}'?` : ''\n\t\t\tthrow new BindingError(`Field '${fieldName}' doesn't exist on ${this.describeLocation(environment)}. ${didYouMean}`)\n\t\t}\n\t\tif (!matcher(field)) {\n\t\t\tconst actual = field.__typename === '_Column' ? 'an ordinary field' : `a ${field.type} relation`\n\t\t\tthrow new BindingError(\n\t\t\t\t`Invalid field: the name '${field.name}' on ${this.describeLocation(environment)} ` +\n\t\t\t\t`refers to ${actual} but is being used as a ${expectedDescription}.`,\n\t\t\t)\n\t\t}\n\t\treturn field\n\t}\n\n\tpublic static describeLocation(environment: Environment): string {\n\t\tconst path = []\n\t\tconst loc = environment.getSubTreeNode()\n\t\tfor (let env = environment; ; env = env.getParent()) {\n\t\t\tconst node = env.getSubTreeNode()\n\t\t\tif (node.type === 'subtree-entity' || node.type === 'subtree-entity-list') {\n\t\t\t\treturn `entity '${loc.entity.name}' in path '${[node.entity.name, ...path.reverse()].join('.')}'`\n\t\t\t}\n\t\t\tpath.push(node.field.name)\n\t\t}\n\t}\n\n\tpublic static recommendAlternative(original: string, possibleAlternatives: Iterable<string>): string | undefined {\n\t\tlet bestAlternative: string | undefined = undefined\n\t\tlet bestAlternativeDistance = Number.MAX_SAFE_INTEGER\n\n\t\tfor (const alternative of possibleAlternatives) {\n\t\t\tconst distance = levenshtein(original, alternative)\n\n\t\t\tif (distance < bestAlternativeDistance) {\n\t\t\t\tbestAlternative = alternative\n\t\t\t\tbestAlternativeDistance = distance\n\t\t\t}\n\t\t}\n\t\treturn bestAlternative\n\t}\n}\n"],"names":["field","fieldName"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assertNever.cjs","sources":["../../../../../packages/binding-common/src/utils/assertNever.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\n\nexport function assertNever(_: never): never {\n\tthrow new BindingError(\n\t\t`FATAL ERROR. This should absolutely never have happened. Please report this bug.`,\n\t)\n}\n"],"names":["BindingError"],"mappings":";;;AAEO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAIA,aAAA;AAAA,IACT;AAAA,EAAA;AAEF;;"}
1
+ {"version":3,"file":"assertNever.cjs","sources":["../../../../../packages/binding-common/src/utils/assertNever.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\n\nexport function assertNever(_: never): never {\n\tthrow new BindingError(\n\t\t`FATAL ERROR. This should absolutely never have happened. Please report this bug.`,\n\t)\n}\n"],"names":["BindingError"],"mappings":";;;AAEO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAIA,aAAA;AAAA,IACT;AAAA,EACD;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"assertNever.js","sources":["../../../../../packages/binding-common/src/utils/assertNever.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\n\nexport function assertNever(_: never): never {\n\tthrow new BindingError(\n\t\t`FATAL ERROR. This should absolutely never have happened. Please report this bug.`,\n\t)\n}\n"],"names":[],"mappings":";AAEO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI;AAAA,IACT;AAAA,EAAA;AAEF;"}
1
+ {"version":3,"file":"assertNever.js","sources":["../../../../../packages/binding-common/src/utils/assertNever.ts"],"sourcesContent":["import { BindingError } from '../BindingError'\n\nexport function assertNever(_: never): never {\n\tthrow new BindingError(\n\t\t`FATAL ERROR. This should absolutely never have happened. Please report this bug.`,\n\t)\n}\n"],"names":[],"mappings":";AAEO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI;AAAA,IACT;AAAA,EACD;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createQueryBuilder.cjs","sources":["../../../../../packages/binding-common/src/utils/createQueryBuilder.ts"],"sourcesContent":["import { ContentQueryBuilder, SchemaEntityNames, SchemaNames } from '@contember/client-content'\nimport { Schema, SchemaRelation } from '../schema'\n\nexport const createQueryBuilder = (schema: Schema) => {\n\tconst schemaNames: SchemaNames = {\n\t\tentities: Object.fromEntries(schema.getEntityNames().map((it): [string, SchemaEntityNames<string>] => {\n\t\t\tconst entity = schema.getEntity(it)\n\t\t\treturn [it, {\n\t\t\t\tname: it,\n\t\t\t\tscalars: Array.from(entity.fields.values()).filter(it => it.__typename === '_Column').map(it => it.name),\n\t\t\t\tfields: Object.fromEntries(Array.from(entity.fields.values()).map(it => {\n\t\t\t\t\tif (it.__typename === '_Column') {\n\t\t\t\t\t\treturn [it.name, { type: 'column' }]\n\t\t\t\t\t}\n\t\t\t\t\tif (it.__typename === '_Relation') {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: it.type === 'ManyHasMany' || it.type === 'OneHasMany' ? 'many' : 'one',\n\t\t\t\t\t\t\t\tentity: (it as SchemaRelation).targetEntity,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error()\n\t\t\t\t})),\n\t\t\t}]\n\t\t})),\n\t\tenums: Object.fromEntries(schema.getEnumNames().map(it => [it, schema.getEnumValues(it)])),\n\t}\n\n\treturn new ContentQueryBuilder(schemaNames)\n}\n"],"names":["it","ContentQueryBuilder"],"mappings":";;;AAGa,MAAA,qBAAqB,CAAC,WAAmB;AACrD,QAAM,cAA2B;AAAA,IAChC,UAAU,OAAO,YAAY,OAAO,iBAAiB,IAAI,CAAC,OAA4C;AAC/F,YAAA,SAAS,OAAO,UAAU,EAAE;AAClC,aAAO,CAAC,IAAI;AAAA,QACX,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,OAAO,OAAO,OAAA,CAAQ,EAAE,OAAO,CAAAA,QAAMA,IAAG,eAAe,SAAS,EAAE,IAAI,CAAAA,QAAMA,IAAG,IAAI;AAAA,QACvG,QAAQ,OAAO,YAAY,MAAM,KAAK,OAAO,OAAO,OAAQ,CAAA,EAAE,IAAI,CAAAA,QAAM;AACnEA,cAAAA,IAAG,eAAe,WAAW;AAChC,mBAAO,CAACA,IAAG,MAAM,EAAE,MAAM,SAAU,CAAA;AAAA,UACpC;AACIA,cAAAA,IAAG,eAAe,aAAa;AAC3B,mBAAA;AAAA,cACNA,IAAG;AAAA,cACH;AAAA,gBACC,MAAMA,IAAG,SAAS,iBAAiBA,IAAG,SAAS,eAAe,SAAS;AAAA,gBACvE,QAASA,IAAsB;AAAA,cAChC;AAAA,YAAA;AAAA,UAEF;AACA,gBAAM,IAAI,MAAM;AAAA,QAAA,CAChB,CAAC;AAAA,MAAA,CACF;AAAA,IAAA,CACD,CAAC;AAAA,IACF,OAAO,OAAO,YAAY,OAAO,aAAe,EAAA,IAAI,CAAM,OAAA,CAAC,IAAI,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC;AAAA,EAAA;AAGnF,SAAA,IAAIC,cAAAA,oBAAoB,WAAW;AAC3C;;"}
1
+ {"version":3,"file":"createQueryBuilder.cjs","sources":["../../../../../packages/binding-common/src/utils/createQueryBuilder.ts"],"sourcesContent":["import { ContentQueryBuilder, SchemaEntityNames, SchemaNames } from '@contember/client-content'\nimport { Schema, SchemaRelation } from '../schema'\n\nexport const createQueryBuilder = (schema: Schema) => {\n\tconst schemaNames: SchemaNames = {\n\t\tentities: Object.fromEntries(schema.getEntityNames().map((it): [string, SchemaEntityNames<string>] => {\n\t\t\tconst entity = schema.getEntity(it)\n\t\t\treturn [it, {\n\t\t\t\tname: it,\n\t\t\t\tscalars: Array.from(entity.fields.values()).filter(it => it.__typename === '_Column').map(it => it.name),\n\t\t\t\tfields: Object.fromEntries(Array.from(entity.fields.values()).map(it => {\n\t\t\t\t\tif (it.__typename === '_Column') {\n\t\t\t\t\t\treturn [it.name, { type: 'column' }]\n\t\t\t\t\t}\n\t\t\t\t\tif (it.__typename === '_Relation') {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: it.type === 'ManyHasMany' || it.type === 'OneHasMany' ? 'many' : 'one',\n\t\t\t\t\t\t\t\tentity: (it as SchemaRelation).targetEntity,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error()\n\t\t\t\t})),\n\t\t\t}]\n\t\t})),\n\t\tenums: Object.fromEntries(schema.getEnumNames().map(it => [it, schema.getEnumValues(it)])),\n\t}\n\n\treturn new ContentQueryBuilder(schemaNames)\n}\n"],"names":["it","ContentQueryBuilder"],"mappings":";;;AAGa,MAAA,qBAAqB,CAAC,WAAmB;AACrD,QAAM,cAA2B;AAAA,IAChC,UAAU,OAAO,YAAY,OAAO,iBAAiB,IAAI,CAAC,OAA4C;AAC/F,YAAA,SAAS,OAAO,UAAU,EAAE;AAClC,aAAO,CAAC,IAAI;AAAA,QACX,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,OAAO,OAAO,OAAA,CAAQ,EAAE,OAAO,CAAAA,QAAMA,IAAG,eAAe,SAAS,EAAE,IAAI,CAAAA,QAAMA,IAAG,IAAI;AAAA,QACvG,QAAQ,OAAO,YAAY,MAAM,KAAK,OAAO,OAAO,OAAQ,CAAA,EAAE,IAAI,CAAAA,QAAM;AACnEA,cAAAA,IAAG,eAAe,WAAW;AAChC,mBAAO,CAACA,IAAG,MAAM,EAAE,MAAM,UAAU;AAAA,UAAA;AAEhCA,cAAAA,IAAG,eAAe,aAAa;AAC3B,mBAAA;AAAA,cACNA,IAAG;AAAA,cACH;AAAA,gBACC,MAAMA,IAAG,SAAS,iBAAiBA,IAAG,SAAS,eAAe,SAAS;AAAA,gBACvE,QAASA,IAAsB;AAAA,cAAA;AAAA,YAEjC;AAAA,UAAA;AAED,gBAAM,IAAI,MAAM;AAAA,QAAA,CAChB,CAAC;AAAA,MAAA,CACF;AAAA,IAAA,CACD,CAAC;AAAA,IACF,OAAO,OAAO,YAAY,OAAO,aAAe,EAAA,IAAI,CAAM,OAAA,CAAC,IAAI,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC;AAAA,EAC1F;AAEO,SAAA,IAAIC,kCAAoB,WAAW;AAC3C;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createQueryBuilder.js","sources":["../../../../../packages/binding-common/src/utils/createQueryBuilder.ts"],"sourcesContent":["import { ContentQueryBuilder, SchemaEntityNames, SchemaNames } from '@contember/client-content'\nimport { Schema, SchemaRelation } from '../schema'\n\nexport const createQueryBuilder = (schema: Schema) => {\n\tconst schemaNames: SchemaNames = {\n\t\tentities: Object.fromEntries(schema.getEntityNames().map((it): [string, SchemaEntityNames<string>] => {\n\t\t\tconst entity = schema.getEntity(it)\n\t\t\treturn [it, {\n\t\t\t\tname: it,\n\t\t\t\tscalars: Array.from(entity.fields.values()).filter(it => it.__typename === '_Column').map(it => it.name),\n\t\t\t\tfields: Object.fromEntries(Array.from(entity.fields.values()).map(it => {\n\t\t\t\t\tif (it.__typename === '_Column') {\n\t\t\t\t\t\treturn [it.name, { type: 'column' }]\n\t\t\t\t\t}\n\t\t\t\t\tif (it.__typename === '_Relation') {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: it.type === 'ManyHasMany' || it.type === 'OneHasMany' ? 'many' : 'one',\n\t\t\t\t\t\t\t\tentity: (it as SchemaRelation).targetEntity,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error()\n\t\t\t\t})),\n\t\t\t}]\n\t\t})),\n\t\tenums: Object.fromEntries(schema.getEnumNames().map(it => [it, schema.getEnumValues(it)])),\n\t}\n\n\treturn new ContentQueryBuilder(schemaNames)\n}\n"],"names":["it"],"mappings":";AAGa,MAAA,qBAAqB,CAAC,WAAmB;AACrD,QAAM,cAA2B;AAAA,IAChC,UAAU,OAAO,YAAY,OAAO,iBAAiB,IAAI,CAAC,OAA4C;AAC/F,YAAA,SAAS,OAAO,UAAU,EAAE;AAClC,aAAO,CAAC,IAAI;AAAA,QACX,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,OAAO,OAAO,OAAA,CAAQ,EAAE,OAAO,CAAAA,QAAMA,IAAG,eAAe,SAAS,EAAE,IAAI,CAAAA,QAAMA,IAAG,IAAI;AAAA,QACvG,QAAQ,OAAO,YAAY,MAAM,KAAK,OAAO,OAAO,OAAQ,CAAA,EAAE,IAAI,CAAAA,QAAM;AACnEA,cAAAA,IAAG,eAAe,WAAW;AAChC,mBAAO,CAACA,IAAG,MAAM,EAAE,MAAM,SAAU,CAAA;AAAA,UACpC;AACIA,cAAAA,IAAG,eAAe,aAAa;AAC3B,mBAAA;AAAA,cACNA,IAAG;AAAA,cACH;AAAA,gBACC,MAAMA,IAAG,SAAS,iBAAiBA,IAAG,SAAS,eAAe,SAAS;AAAA,gBACvE,QAASA,IAAsB;AAAA,cAChC;AAAA,YAAA;AAAA,UAEF;AACA,gBAAM,IAAI,MAAM;AAAA,QAAA,CAChB,CAAC;AAAA,MAAA,CACF;AAAA,IAAA,CACD,CAAC;AAAA,IACF,OAAO,OAAO,YAAY,OAAO,aAAe,EAAA,IAAI,CAAM,OAAA,CAAC,IAAI,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC;AAAA,EAAA;AAGnF,SAAA,IAAI,oBAAoB,WAAW;AAC3C;"}
1
+ {"version":3,"file":"createQueryBuilder.js","sources":["../../../../../packages/binding-common/src/utils/createQueryBuilder.ts"],"sourcesContent":["import { ContentQueryBuilder, SchemaEntityNames, SchemaNames } from '@contember/client-content'\nimport { Schema, SchemaRelation } from '../schema'\n\nexport const createQueryBuilder = (schema: Schema) => {\n\tconst schemaNames: SchemaNames = {\n\t\tentities: Object.fromEntries(schema.getEntityNames().map((it): [string, SchemaEntityNames<string>] => {\n\t\t\tconst entity = schema.getEntity(it)\n\t\t\treturn [it, {\n\t\t\t\tname: it,\n\t\t\t\tscalars: Array.from(entity.fields.values()).filter(it => it.__typename === '_Column').map(it => it.name),\n\t\t\t\tfields: Object.fromEntries(Array.from(entity.fields.values()).map(it => {\n\t\t\t\t\tif (it.__typename === '_Column') {\n\t\t\t\t\t\treturn [it.name, { type: 'column' }]\n\t\t\t\t\t}\n\t\t\t\t\tif (it.__typename === '_Relation') {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: it.type === 'ManyHasMany' || it.type === 'OneHasMany' ? 'many' : 'one',\n\t\t\t\t\t\t\t\tentity: (it as SchemaRelation).targetEntity,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error()\n\t\t\t\t})),\n\t\t\t}]\n\t\t})),\n\t\tenums: Object.fromEntries(schema.getEnumNames().map(it => [it, schema.getEnumValues(it)])),\n\t}\n\n\treturn new ContentQueryBuilder(schemaNames)\n}\n"],"names":["it"],"mappings":";AAGa,MAAA,qBAAqB,CAAC,WAAmB;AACrD,QAAM,cAA2B;AAAA,IAChC,UAAU,OAAO,YAAY,OAAO,iBAAiB,IAAI,CAAC,OAA4C;AAC/F,YAAA,SAAS,OAAO,UAAU,EAAE;AAClC,aAAO,CAAC,IAAI;AAAA,QACX,MAAM;AAAA,QACN,SAAS,MAAM,KAAK,OAAO,OAAO,OAAA,CAAQ,EAAE,OAAO,CAAAA,QAAMA,IAAG,eAAe,SAAS,EAAE,IAAI,CAAAA,QAAMA,IAAG,IAAI;AAAA,QACvG,QAAQ,OAAO,YAAY,MAAM,KAAK,OAAO,OAAO,OAAQ,CAAA,EAAE,IAAI,CAAAA,QAAM;AACnEA,cAAAA,IAAG,eAAe,WAAW;AAChC,mBAAO,CAACA,IAAG,MAAM,EAAE,MAAM,UAAU;AAAA,UAAA;AAEhCA,cAAAA,IAAG,eAAe,aAAa;AAC3B,mBAAA;AAAA,cACNA,IAAG;AAAA,cACH;AAAA,gBACC,MAAMA,IAAG,SAAS,iBAAiBA,IAAG,SAAS,eAAe,SAAS;AAAA,gBACvE,QAASA,IAAsB;AAAA,cAAA;AAAA,YAEjC;AAAA,UAAA;AAED,gBAAM,IAAI,MAAM;AAAA,QAAA,CAChB,CAAC;AAAA,MAAA,CACF;AAAA,IAAA,CACD,CAAC;AAAA,IACF,OAAO,OAAO,YAAY,OAAO,aAAe,EAAA,IAAI,CAAM,OAAA,CAAC,IAAI,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC;AAAA,EAC1F;AAEO,SAAA,IAAI,oBAAoB,WAAW;AAC3C;"}
@@ -1 +1 @@
1
- {"version":3,"file":"whereToFilter.cjs","sources":["../../../../../packages/binding-common/src/utils/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/client'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere,\n): Input.Where<Input.Condition<Input.ColumnValue>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";;AAEa,MAAA,gBAAgB,CAC5B,OACqD;AACrD,QAAM,QAAmE,CAAA;AACzE,aAAW,OAAO,IAAI;AACf,UAAA,QAAQ,GAAG,GAAG;AAEpB,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,YAAM,GAAG,IAAI,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,GAAG,IAAI,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;;"}
1
+ {"version":3,"file":"whereToFilter.cjs","sources":["../../../../../packages/binding-common/src/utils/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/client'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere,\n): Input.Where<Input.Condition<Input.ColumnValue>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":";;AAEa,MAAA,gBAAgB,CAC5B,OACqD;AACrD,QAAM,QAAmE,CAAC;AAC1E,aAAW,OAAO,IAAI;AACf,UAAA,QAAQ,GAAG,GAAG;AAEpB,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,YAAM,GAAG,IAAI,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,GAAG,IAAI,cAAc,KAAK;AAAA,IAAA;AAAA,EACjC;AAGM,SAAA;AACR;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"whereToFilter.js","sources":["../../../../../packages/binding-common/src/utils/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/client'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere,\n): Input.Where<Input.Condition<Input.ColumnValue>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":"AAEa,MAAA,gBAAgB,CAC5B,OACqD;AACrD,QAAM,QAAmE,CAAA;AACzE,aAAW,OAAO,IAAI;AACf,UAAA,QAAQ,GAAG,GAAG;AAEpB,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,YAAM,GAAG,IAAI,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,GAAG,IAAI,cAAc,KAAK;AAAA,IACjC;AAAA,EACD;AAEO,SAAA;AACR;"}
1
+ {"version":3,"file":"whereToFilter.js","sources":["../../../../../packages/binding-common/src/utils/whereToFilter.ts"],"sourcesContent":["import type { Input, Writable } from '@contember/client'\n\nexport const whereToFilter = (\n\tby: Input.UniqueWhere,\n): Input.Where<Input.Condition<Input.ColumnValue>> => {\n\tconst where: Writable<Input.Where<Input.Condition<Input.ColumnValue>>> = {}\n\tfor (const key in by) {\n\t\tconst value = by[key]\n\n\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\twhere[key] = { eq: value }\n\t\t} else {\n\t\t\twhere[key] = whereToFilter(value)\n\t\t}\n\t}\n\n\treturn where\n}\n"],"names":[],"mappings":"AAEa,MAAA,gBAAgB,CAC5B,OACqD;AACrD,QAAM,QAAmE,CAAC;AAC1E,aAAW,OAAO,IAAI;AACf,UAAA,QAAQ,GAAG,GAAG;AAEpB,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC3D,YAAM,GAAG,IAAI,EAAE,IAAI,MAAM;AAAA,IAAA,OACnB;AACA,YAAA,GAAG,IAAI,cAAc,KAAK;AAAA,IAAA;AAAA,EACjC;AAGM,SAAA;AACR;"}