@itwin/ecschema-metadata 5.1.0-dev.9 → 5.2.0-dev.2

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 (210) hide show
  1. package/CHANGELOG.md +74 -1
  2. package/lib/cjs/Context.d.ts +1 -1
  3. package/lib/cjs/Context.js +1 -1
  4. package/lib/cjs/Context.js.map +1 -1
  5. package/lib/cjs/Deserialization/Helper.d.ts +30 -11
  6. package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
  7. package/lib/cjs/Deserialization/Helper.js +124 -96
  8. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  9. package/lib/cjs/Deserialization/SchemaGraphUtil.d.ts +12 -3
  10. package/lib/cjs/Deserialization/SchemaGraphUtil.d.ts.map +1 -1
  11. package/lib/cjs/Deserialization/SchemaGraphUtil.js +36 -23
  12. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  13. package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
  14. package/lib/cjs/Deserialization/XmlParser.js +14 -5
  15. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  16. package/lib/cjs/Deserialization/XmlSerializationUtils.js +1 -1
  17. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  18. package/lib/cjs/ECName.js +1 -1
  19. package/lib/cjs/ECName.js.map +1 -1
  20. package/lib/cjs/ECObjects.d.ts +1 -1
  21. package/lib/cjs/ECObjects.js +2 -2
  22. package/lib/cjs/ECObjects.js.map +1 -1
  23. package/lib/cjs/IncrementalLoading/ClassParsers.d.ts +60 -0
  24. package/lib/cjs/IncrementalLoading/ClassParsers.d.ts.map +1 -0
  25. package/lib/cjs/IncrementalLoading/ClassParsers.js +111 -0
  26. package/lib/cjs/IncrementalLoading/ClassParsers.js.map +1 -0
  27. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.d.ts +211 -0
  28. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.d.ts.map +1 -0
  29. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js +387 -0
  30. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -0
  31. package/lib/cjs/IncrementalLoading/FullSchemaQueries.d.ts +14 -0
  32. package/lib/cjs/IncrementalLoading/FullSchemaQueries.d.ts.map +1 -0
  33. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js +609 -0
  34. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js.map +1 -0
  35. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.d.ts +109 -0
  36. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.d.ts.map +1 -0
  37. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js +219 -0
  38. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -0
  39. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.d.ts +36 -0
  40. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.d.ts.map +1 -0
  41. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js +77 -0
  42. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js.map +1 -0
  43. package/lib/cjs/IncrementalLoading/PerformanceLogger.d.ts +60 -0
  44. package/lib/cjs/IncrementalLoading/PerformanceLogger.d.ts.map +1 -0
  45. package/lib/cjs/IncrementalLoading/PerformanceLogger.js +82 -0
  46. package/lib/cjs/IncrementalLoading/PerformanceLogger.js.map +1 -0
  47. package/lib/cjs/IncrementalLoading/SchemaItemParsers.d.ts +51 -0
  48. package/lib/cjs/IncrementalLoading/SchemaItemParsers.d.ts.map +1 -0
  49. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js +122 -0
  50. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js.map +1 -0
  51. package/lib/cjs/IncrementalLoading/SchemaItemQueries.d.ts +16 -0
  52. package/lib/cjs/IncrementalLoading/SchemaItemQueries.d.ts.map +1 -0
  53. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js +308 -0
  54. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js.map +1 -0
  55. package/lib/cjs/IncrementalLoading/SchemaParser.d.ts +42 -0
  56. package/lib/cjs/IncrementalLoading/SchemaParser.d.ts.map +1 -0
  57. package/lib/cjs/IncrementalLoading/SchemaParser.js +109 -0
  58. package/lib/cjs/IncrementalLoading/SchemaParser.js.map +1 -0
  59. package/lib/cjs/IncrementalLoading/SchemaStubQueries.d.ts +12 -0
  60. package/lib/cjs/IncrementalLoading/SchemaStubQueries.d.ts.map +1 -0
  61. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js +365 -0
  62. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js.map +1 -0
  63. package/lib/cjs/Metadata/Class.d.ts +5 -16
  64. package/lib/cjs/Metadata/Class.d.ts.map +1 -1
  65. package/lib/cjs/Metadata/Class.js +68 -68
  66. package/lib/cjs/Metadata/Class.js.map +1 -1
  67. package/lib/cjs/Metadata/CustomAttribute.d.ts +7 -1
  68. package/lib/cjs/Metadata/CustomAttribute.d.ts.map +1 -1
  69. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  70. package/lib/cjs/Metadata/CustomAttributeClass.d.ts +1 -1
  71. package/lib/cjs/Metadata/CustomAttributeClass.js +1 -1
  72. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  73. package/lib/cjs/Metadata/EntityClass.d.ts +6 -6
  74. package/lib/cjs/Metadata/EntityClass.d.ts.map +1 -1
  75. package/lib/cjs/Metadata/EntityClass.js +48 -26
  76. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  77. package/lib/cjs/Metadata/Format.d.ts +5 -0
  78. package/lib/cjs/Metadata/Format.d.ts.map +1 -1
  79. package/lib/cjs/Metadata/Format.js +7 -0
  80. package/lib/cjs/Metadata/Format.js.map +1 -1
  81. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  82. package/lib/cjs/Metadata/Schema.d.ts +10 -0
  83. package/lib/cjs/Metadata/Schema.d.ts.map +1 -1
  84. package/lib/cjs/Metadata/Schema.js +13 -0
  85. package/lib/cjs/Metadata/Schema.js.map +1 -1
  86. package/lib/cjs/Metadata/SchemaItem.d.ts +10 -0
  87. package/lib/cjs/Metadata/SchemaItem.d.ts.map +1 -1
  88. package/lib/cjs/Metadata/SchemaItem.js +13 -0
  89. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  90. package/lib/cjs/SchemaFormatsProvider.d.ts +4 -3
  91. package/lib/cjs/SchemaFormatsProvider.d.ts.map +1 -1
  92. package/lib/cjs/SchemaFormatsProvider.js +60 -17
  93. package/lib/cjs/SchemaFormatsProvider.js.map +1 -1
  94. package/lib/cjs/SchemaLoader.d.ts +4 -1
  95. package/lib/cjs/SchemaLoader.d.ts.map +1 -1
  96. package/lib/cjs/SchemaLoader.js +4 -1
  97. package/lib/cjs/SchemaLoader.js.map +1 -1
  98. package/lib/cjs/ecschema-metadata.d.ts +2 -0
  99. package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
  100. package/lib/cjs/ecschema-metadata.js +2 -0
  101. package/lib/cjs/ecschema-metadata.js.map +1 -1
  102. package/lib/cjs/utils/SchemaLoadingController.d.ts +37 -0
  103. package/lib/cjs/utils/SchemaLoadingController.d.ts.map +1 -0
  104. package/lib/cjs/utils/SchemaLoadingController.js +65 -0
  105. package/lib/cjs/utils/SchemaLoadingController.js.map +1 -0
  106. package/lib/esm/Context.d.ts +1 -1
  107. package/lib/esm/Context.js +1 -1
  108. package/lib/esm/Context.js.map +1 -1
  109. package/lib/esm/Deserialization/Helper.d.ts +30 -11
  110. package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
  111. package/lib/esm/Deserialization/Helper.js +124 -96
  112. package/lib/esm/Deserialization/Helper.js.map +1 -1
  113. package/lib/esm/Deserialization/SchemaGraphUtil.d.ts +12 -3
  114. package/lib/esm/Deserialization/SchemaGraphUtil.d.ts.map +1 -1
  115. package/lib/esm/Deserialization/SchemaGraphUtil.js +36 -23
  116. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  117. package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
  118. package/lib/esm/Deserialization/XmlParser.js +14 -5
  119. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  120. package/lib/esm/Deserialization/XmlSerializationUtils.js +1 -1
  121. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  122. package/lib/esm/ECName.js +1 -1
  123. package/lib/esm/ECName.js.map +1 -1
  124. package/lib/esm/ECObjects.d.ts +1 -1
  125. package/lib/esm/ECObjects.js +2 -2
  126. package/lib/esm/ECObjects.js.map +1 -1
  127. package/lib/esm/IncrementalLoading/ClassParsers.d.ts +60 -0
  128. package/lib/esm/IncrementalLoading/ClassParsers.d.ts.map +1 -0
  129. package/lib/esm/IncrementalLoading/ClassParsers.js +104 -0
  130. package/lib/esm/IncrementalLoading/ClassParsers.js.map +1 -0
  131. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.d.ts +211 -0
  132. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.d.ts.map +1 -0
  133. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js +383 -0
  134. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -0
  135. package/lib/esm/IncrementalLoading/FullSchemaQueries.d.ts +14 -0
  136. package/lib/esm/IncrementalLoading/FullSchemaQueries.d.ts.map +1 -0
  137. package/lib/esm/IncrementalLoading/FullSchemaQueries.js +606 -0
  138. package/lib/esm/IncrementalLoading/FullSchemaQueries.js.map +1 -0
  139. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.d.ts +109 -0
  140. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.d.ts.map +1 -0
  141. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js +215 -0
  142. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -0
  143. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.d.ts +36 -0
  144. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.d.ts.map +1 -0
  145. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js +73 -0
  146. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js.map +1 -0
  147. package/lib/esm/IncrementalLoading/PerformanceLogger.d.ts +60 -0
  148. package/lib/esm/IncrementalLoading/PerformanceLogger.d.ts.map +1 -0
  149. package/lib/esm/IncrementalLoading/PerformanceLogger.js +78 -0
  150. package/lib/esm/IncrementalLoading/PerformanceLogger.js.map +1 -0
  151. package/lib/esm/IncrementalLoading/SchemaItemParsers.d.ts +51 -0
  152. package/lib/esm/IncrementalLoading/SchemaItemParsers.d.ts.map +1 -0
  153. package/lib/esm/IncrementalLoading/SchemaItemParsers.js +117 -0
  154. package/lib/esm/IncrementalLoading/SchemaItemParsers.js.map +1 -0
  155. package/lib/esm/IncrementalLoading/SchemaItemQueries.d.ts +16 -0
  156. package/lib/esm/IncrementalLoading/SchemaItemQueries.d.ts.map +1 -0
  157. package/lib/esm/IncrementalLoading/SchemaItemQueries.js +305 -0
  158. package/lib/esm/IncrementalLoading/SchemaItemQueries.js.map +1 -0
  159. package/lib/esm/IncrementalLoading/SchemaParser.d.ts +42 -0
  160. package/lib/esm/IncrementalLoading/SchemaParser.d.ts.map +1 -0
  161. package/lib/esm/IncrementalLoading/SchemaParser.js +104 -0
  162. package/lib/esm/IncrementalLoading/SchemaParser.js.map +1 -0
  163. package/lib/esm/IncrementalLoading/SchemaStubQueries.d.ts +12 -0
  164. package/lib/esm/IncrementalLoading/SchemaStubQueries.d.ts.map +1 -0
  165. package/lib/esm/IncrementalLoading/SchemaStubQueries.js +359 -0
  166. package/lib/esm/IncrementalLoading/SchemaStubQueries.js.map +1 -0
  167. package/lib/esm/Metadata/Class.d.ts +5 -16
  168. package/lib/esm/Metadata/Class.d.ts.map +1 -1
  169. package/lib/esm/Metadata/Class.js +68 -68
  170. package/lib/esm/Metadata/Class.js.map +1 -1
  171. package/lib/esm/Metadata/CustomAttribute.d.ts +7 -1
  172. package/lib/esm/Metadata/CustomAttribute.d.ts.map +1 -1
  173. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  174. package/lib/esm/Metadata/CustomAttributeClass.d.ts +1 -1
  175. package/lib/esm/Metadata/CustomAttributeClass.js +1 -1
  176. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  177. package/lib/esm/Metadata/EntityClass.d.ts +6 -6
  178. package/lib/esm/Metadata/EntityClass.d.ts.map +1 -1
  179. package/lib/esm/Metadata/EntityClass.js +48 -26
  180. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  181. package/lib/esm/Metadata/Format.d.ts +5 -0
  182. package/lib/esm/Metadata/Format.d.ts.map +1 -1
  183. package/lib/esm/Metadata/Format.js +7 -0
  184. package/lib/esm/Metadata/Format.js.map +1 -1
  185. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  186. package/lib/esm/Metadata/Schema.d.ts +10 -0
  187. package/lib/esm/Metadata/Schema.d.ts.map +1 -1
  188. package/lib/esm/Metadata/Schema.js +13 -0
  189. package/lib/esm/Metadata/Schema.js.map +1 -1
  190. package/lib/esm/Metadata/SchemaItem.d.ts +10 -0
  191. package/lib/esm/Metadata/SchemaItem.d.ts.map +1 -1
  192. package/lib/esm/Metadata/SchemaItem.js +13 -0
  193. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  194. package/lib/esm/SchemaFormatsProvider.d.ts +4 -3
  195. package/lib/esm/SchemaFormatsProvider.d.ts.map +1 -1
  196. package/lib/esm/SchemaFormatsProvider.js +61 -18
  197. package/lib/esm/SchemaFormatsProvider.js.map +1 -1
  198. package/lib/esm/SchemaLoader.d.ts +4 -1
  199. package/lib/esm/SchemaLoader.d.ts.map +1 -1
  200. package/lib/esm/SchemaLoader.js +4 -1
  201. package/lib/esm/SchemaLoader.js.map +1 -1
  202. package/lib/esm/ecschema-metadata.d.ts +2 -0
  203. package/lib/esm/ecschema-metadata.d.ts.map +1 -1
  204. package/lib/esm/ecschema-metadata.js +2 -0
  205. package/lib/esm/ecschema-metadata.js.map +1 -1
  206. package/lib/esm/utils/SchemaLoadingController.d.ts +37 -0
  207. package/lib/esm/utils/SchemaLoadingController.d.ts.map +1 -0
  208. package/lib/esm/utils/SchemaLoadingController.js +61 -0
  209. package/lib/esm/utils/SchemaLoadingController.js.map +1 -0
  210. package/package.json +15 -10
@@ -0,0 +1,606 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { SchemaItemQueries } from "./SchemaItemQueries";
6
+ import { modifier, strength, strengthDirection } from "./SchemaStubQueries";
7
+ /**
8
+ * Queries that return full Schema JSON data are found here. Shared SELECTS and
9
+ * WITH clauses are broken down into individual variables.
10
+ */
11
+ const propertyType = (alias) => {
12
+ return `
13
+ CASE
14
+ WHEN [${alias}].[Kind] = 0 THEN 'PrimitiveProperty'
15
+ WHEN [${alias}].[Kind] = 1 THEN 'StructProperty'
16
+ WHEN [${alias}].[Kind] = 2 THEN 'PrimitiveArrayProperty'
17
+ WHEN [${alias}].[Kind] = 3 THEN 'StructArrayProperty'
18
+ WHEN [${alias}].[Kind] = 4 THEN 'NavigationProperty'
19
+ ELSE NULL
20
+ END
21
+ `;
22
+ };
23
+ const navigationDirection = (alias) => {
24
+ return `
25
+ CASE
26
+ WHEN [${alias}].[NavigationDirection] = 1 THEN 'Forward'
27
+ WHEN [${alias}].[NavigationDirection] = 2 THEN 'Backward'
28
+ ELSE NULL
29
+ END
30
+ `;
31
+ };
32
+ const schemaCustomAttribute = (alias) => {
33
+ return `
34
+ SELECT
35
+ json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
36
+ FROM [meta].[CustomAttribute] [ca]
37
+ WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 1
38
+ ORDER BY [ca].[Ordinal]
39
+ `;
40
+ };
41
+ /**
42
+ * Selects customAttribute data for each class type.
43
+ */
44
+ const classCustomAttribute = (alias) => {
45
+ return `
46
+ SELECT
47
+ json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
48
+ FROM [meta].[CustomAttribute] [ca]
49
+ WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 30
50
+ ORDER BY [ca].[Ordinal]
51
+ `;
52
+ };
53
+ const propertyCustomAttribute = (alias) => {
54
+ return `
55
+ SELECT
56
+ json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
57
+ FROM [meta].[CustomAttribute] [ca]
58
+ WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 992
59
+ ORDER BY [ca].[Ordinal]
60
+ `;
61
+ };
62
+ /**
63
+ * Selects base class data for each class type.
64
+ */
65
+ const selectBaseClasses = `
66
+ SELECT
67
+ ec_classname([baseClass].[ECInstanceId], 's.c')
68
+ FROM
69
+ [meta].[ECClassDef] [baseClass]
70
+ INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]
71
+ ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]
72
+ WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]
73
+ LIMIT 1
74
+ `;
75
+ /**
76
+ * Selects class property data for each class type. ClassProperties
77
+ * is a common table expression (CTE or WITH clause) defined below.
78
+ */
79
+ const selectProperties = `
80
+ SELECT
81
+ json_group_array(json([classProperties].[property]))
82
+ FROM
83
+ [ClassProperties] [classProperties]
84
+ WHERE
85
+ [classProperties].[ClassId] = [class].[ECInstanceId]
86
+ `;
87
+ /**
88
+ * A CTE used to select AppliesTo from IsMixin CustomAttributes for a given Mixin.
89
+ */
90
+ const withAppliesTo = `
91
+ AppliesToCTE AS (
92
+ SELECT
93
+ [mixinAppliesTo].[ECInstanceId] AS [AppliesToId],
94
+ [appliesToSchema].[name] as [AppliesToSchema],
95
+ json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]
96
+ FROM [meta].[CustomAttribute] [ca]
97
+ JOIN [meta].[ECClassDef] [mixinAppliesTo]
98
+ ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]
99
+ JOIN [meta].[ECSchemaDef] [appliesToSchema]
100
+ ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]
101
+ WHERE [ca].[ContainerType] = 30
102
+ AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'
103
+ )
104
+ `;
105
+ /**
106
+ * A CTE used to select Schema reference data for a given Schema.
107
+ */
108
+ const withSchemaReferences = `
109
+ SchemaReferences as (
110
+ SELECT
111
+ [ref].[SourceECInstanceId] as [SchemaId],
112
+ json_object(
113
+ 'name', [Name],
114
+ 'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor]))
115
+ ) as [reference]
116
+ FROM
117
+ [meta].[ECSchemaDef] as [refSchema]
118
+ INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]
119
+ ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]
120
+ )
121
+ `;
122
+ /**
123
+ * A CTE used to select Relationship constraints for a given RelationshipClass.
124
+ */
125
+ const withRelationshipConstraints = `
126
+ ClassRelationshipConstraints as (
127
+ SELECT
128
+ [rhc].[SourceECInstanceId] as [ClassId],
129
+ [constraintDef].[ECInstanceId] as [ConstraintId],
130
+ [RelationshipEnd],
131
+ CONCAT('(', [MultiplicityLowerLimit], '..', IIF([MultiplicityUpperLimit] IS NULL, '*', [MultiplicityUpperLimit]), ')') as [Multiplicity],
132
+ [IsPolyMorphic],
133
+ [RoleLabel],
134
+ IIF([constraintDef].[AbstractConstraintClass] IS NOT NULL, ec_classname([constraintDef].[AbstractConstraintClass].[Id], 's.c'), null) as [AbstractConstraint],
135
+ IIF ([rchc].[TargetECInstanceId] IS NOT NULL, JSON_GROUP_ARRAY(ec_classname([rchc].[TargetECInstanceId], 's.c')), null) as [ConstraintClasses]
136
+ FROM
137
+ [meta].[ECRelationshipConstraintDef] [constraintDef]
138
+ JOIN [meta].[RelationshipHasConstraints] [rhc]
139
+ ON [rhc].[TargetECInstanceId] = [constraintDef].[ECInstanceId]
140
+ JOIN [meta].[RelationshipConstraintHasClasses] [rchc]
141
+ ON [rchc].[SourceECInstanceId] = [constraintDef].[ECInstanceId]
142
+ GROUP BY [constraintDef].[ECInstanceId]
143
+ )
144
+ `;
145
+ /**
146
+ * A CTE used to select Class property data for a given Class.
147
+ */
148
+ const withClassProperties = `
149
+ ClassProperties as (
150
+ SELECT
151
+ [cop].[SourceECInstanceId] as [ClassId],
152
+ json_object(
153
+ 'name', [pd].[Name],
154
+ 'label', [pd].[DisplayLabel],
155
+ 'description', [pd].[Description],
156
+ 'isReadOnly', IIF([pd].[IsReadOnly] = 1, json('true'), NULL),
157
+ 'priority', [pd].[Priority],
158
+ 'category', IIF([categoryDef].[Name] IS NULL, NULL, CONCAT([categorySchemaDef].[Name], '.', [categoryDef].[Name])),
159
+ 'kindOfQuantity', IIF([koqDef].[Name] IS NULL, NULL, CONCAT([koqSchemaDef].[Name], '.', [koqDef].[Name])),
160
+ 'typeName',
161
+ CASE
162
+ WHEN [pd].[Kind] = 0 OR [pd].[Kind] = 2 Then
163
+ CASE
164
+ WHEN [enumDef].[Name] IS NOT NULL Then CONCAT([enumSchemaDef].[Name], '.', [enumDef].[Name])
165
+ WHEN [pd].[PrimitiveType] = 257 Then 'binary'
166
+ WHEN [pd].[PrimitiveType] = 513 Then 'boolean'
167
+ WHEN [pd].[PrimitiveType] = 769 Then 'dateTime'
168
+ WHEN [pd].[PrimitiveType] = 1025 Then 'double'
169
+ WHEN [pd].[PrimitiveType] = 1281 Then 'int'
170
+ WHEN [pd].[PrimitiveType] = 1537 Then 'long'
171
+ WHEN [pd].[PrimitiveType] = 1793 Then 'point2d'
172
+ WHEN [pd].[PrimitiveType] = 2049 Then 'point3d'
173
+ WHEN [pd].[PrimitiveType] = 2305 Then 'string'
174
+ WHEN [pd].[PrimitiveType] = 2561 Then 'Bentley.Geometry.Common.IGeometry'
175
+ ELSE null
176
+ END
177
+ WHEN [pd].[Kind] = 1 OR [pd].[Kind] = 3 Then
178
+ CONCAT([structSchemaDef].[Name], '.', [structDef].[Name])
179
+ ELSE null
180
+ END,
181
+ 'type', ${propertyType("pd")},
182
+ 'minLength', [pd].[PrimitiveTypeMinLength],
183
+ 'maxLength', [pd].[PrimitiveTypeMaxLength],
184
+ 'minValue', [pd].[PrimitiveTypeMinValue],
185
+ 'maxValue', [pd].[PrimitiveTypeMaxValue],
186
+ 'extendedTypeName', [pd].[ExtendedTypeName],
187
+ 'minOccurs', [pd].[ArrayMinOccurs],
188
+ 'maxOccurs', [pd].[ArrayMaxOccurs],
189
+ 'direction', ${navigationDirection("pd")},
190
+ 'relationshipName', IIF([navRelDef].[Name] IS NULL, NULL, CONCAT([navSchemaDef].[Name], '.', [navRelDef].[Name])),
191
+ 'customAttributes', (${propertyCustomAttribute("pd")})
192
+ ) as [property]
193
+ FROM
194
+ [meta].[ECPropertyDef] as [pd]
195
+ JOIN [meta].[ClassOwnsLocalProperties] [cop]
196
+ ON cop.[TargetECInstanceId] = [pd].[ECInstanceId]
197
+ LEFT JOIN [meta].[ECEnumerationDef] [enumDef]
198
+ ON [enumDef].[ECInstanceId] = [pd].[Enumeration].[Id]
199
+ LEFT JOIN [meta].[ECSchemaDef] enumSchemaDef
200
+ ON [enumSchemaDef].[ECInstanceId] = [enumDef].[Schema].[Id]
201
+ LEFT JOIN [meta].[PropertyCategoryDef] [categoryDef]
202
+ ON [categoryDef].[ECInstanceId] = [pd].[Category].[Id]
203
+ LEFT JOIN [meta].[ECSchemaDef] [categorySchemaDef]
204
+ ON [categorySchemaDef].[ECInstanceId] = [categoryDef].[Schema].[Id]
205
+ LEFT JOIN [meta].[KindOfQuantityDef] [koqDef]
206
+ ON [koqDef].[ECInstanceId] = [pd].[KindOfQuantity].[Id]
207
+ LEFT JOIN [meta].[ECSchemaDef] [koqSchemaDef]
208
+ ON [koqSchemaDef].[ECInstanceId] = [koqDef].[Schema].[Id]
209
+ LEFT JOIN [meta].[ECClassDef] [structDef]
210
+ ON structDef.[ECInstanceId] = [pd].[StructClass].[Id]
211
+ LEFT JOIN [meta].[ECSchemaDef] [structSchemaDef]
212
+ ON [structSchemaDef].[ECInstanceId] = [structDef].[Schema].[Id]
213
+ LEFT JOIN [meta].[ECClassDef] [navRelDef]
214
+ ON [navRelDef].[ECInstanceId] = [pd].[NavigationRelationshipClass].[Id]
215
+ LEFT JOIN [meta].[ECSchemaDef] [navSchemaDef]
216
+ ON [navSchemaDef].[ECInstanceId] = [navRelDef].[Schema].[Id]
217
+ )
218
+ `;
219
+ /**
220
+ * Query that provides EntityClass data and is shared by two cases:
221
+ * 1. A single query to return a full schema.
222
+ * 2. When querying a full schema with multiple schema item queries or
223
+ * when just querying for Entity classes.
224
+ */
225
+ const baseEntityQuery = `
226
+ SELECT
227
+ [sd].[Name] as [schema],
228
+ json_object (
229
+ 'schemaItemType', 'EntityClass',
230
+ 'name', [class].[Name],
231
+ 'label', [class].[DisplayLabel],
232
+ 'description', [class].[Description],
233
+ 'modifier', ${modifier("class")},
234
+ 'baseClass', (
235
+ ${selectBaseClasses}
236
+ ),
237
+ 'mixins', (
238
+ SELECT
239
+ json_group_array(
240
+ ec_classname([baseClass].[ECInstanceId], 's.c')
241
+ )
242
+ FROM
243
+ [meta].[ECClassDef] [baseClass]
244
+ INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]
245
+ ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]
246
+ WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]
247
+ AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]
248
+ AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))
249
+ ),
250
+ 'customAttributes', (${classCustomAttribute("class")}),
251
+ 'properties', (
252
+ ${selectProperties}
253
+ )
254
+ ) AS [item]
255
+ FROM [meta].[ECClassDef] [class]
256
+ JOIN
257
+ [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
258
+ WHERE [class].[Type] = 0 AND
259
+ [sd].[Name] = :schemaName
260
+ AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]
261
+ AND [ca].[CustomAttributeClass].Id Is ([CoreCA].[IsMixin]))
262
+ `;
263
+ /**
264
+ * EntityClass query used to when querying for EntityClass data only. Not used
265
+ * for full Schema load via single query.
266
+ */
267
+ const entityQuery = `
268
+ WITH
269
+ ${withClassProperties}
270
+ ${baseEntityQuery}
271
+ `;
272
+ /**
273
+ * Query that provides Mixin data and is shared by two cases:
274
+ * 1. A single query to return a full schema.
275
+ * 2. When querying a full schema with multiple schema item queries or
276
+ * when just querying for Mixin classes.
277
+ */
278
+ const baseMixinQuery = `
279
+ SELECT
280
+ [sd].[Name] as [schema],
281
+ json_object (
282
+ 'schemaItemType', 'Mixin',
283
+ 'name', [class].[Name],
284
+ 'label', [class].[DisplayLabel],
285
+ 'description', [class].[Description],
286
+ 'modifier', ${modifier("class")},
287
+ 'baseClass', (
288
+ ${selectBaseClasses}
289
+ ),
290
+ 'appliesTo', (
291
+ SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))
292
+ FROM [AppliesToCTE] [atCTE]
293
+ WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]
294
+ ),
295
+ 'customAttributes', (
296
+ SELECT
297
+ json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
298
+ FROM [meta].[CustomAttribute] [ca]
299
+ WHERE [ca].[ContainerId] = [class].[ECInstanceId] AND [ca].[ContainerType] = 30
300
+ AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') <> 'IsMixin'
301
+ ),
302
+ 'properties', (
303
+ SELECT
304
+ json_group_array(json([classProperties].[property]))
305
+ FROM
306
+ [ClassProperties] [classProperties]
307
+ WHERE
308
+ [classProperties].[ClassId] = [class].[ECInstanceId]
309
+ )
310
+ ) AS [item]
311
+ FROM [meta].[ECClassDef] [class]
312
+ JOIN
313
+ [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
314
+ WHERE [class].[Type] = 0 AND
315
+ [sd].[Name] = :schemaName
316
+ AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]
317
+ AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))
318
+ `;
319
+ /**
320
+ * Mixin query used to when querying for Mixin data only. Not used
321
+ * for full Schema load via single query.
322
+ */
323
+ const mixinQuery = `
324
+ WITH
325
+ ${withAppliesTo},
326
+ ${withClassProperties}
327
+ ${baseMixinQuery}
328
+ `;
329
+ /**
330
+ * Query that provides RelationshipClass data and is shared by two cases:
331
+ * 1. A single query to return a full schema.
332
+ * 2. When querying a full schema with multiple schema item queries or
333
+ * when just querying for Relationship classes.
334
+ */
335
+ const baseRelationshipClassQuery = `
336
+ SELECT
337
+ [sd].Name as schema,
338
+ json_object (
339
+ 'schemaItemType', 'RelationshipClass',
340
+ 'name', [class].[Name],
341
+ 'label', [class].[DisplayLabel],
342
+ 'description', [class].[Description],
343
+ 'strength', ${strength("class")},
344
+ 'strengthDirection', ${strengthDirection("class")},
345
+ 'modifier', ${modifier("class")},
346
+ 'baseClass', (
347
+ ${selectBaseClasses}
348
+ ),
349
+ 'customAttributes', (${classCustomAttribute("class")}),
350
+ 'properties', (
351
+ ${selectProperties}
352
+ ),
353
+ 'source', (
354
+ SELECT
355
+ json_object (
356
+ 'multiplicity', [sourceConst].[Multiplicity],
357
+ 'roleLabel', [sourceConst].[RoleLabel],
358
+ 'polymorphic', IIF([sourceConst].[IsPolyMorphic] = 1, json('true'), json('false')),
359
+ 'abstractConstraint', [sourceConst].[AbstractConstraint],
360
+ 'constraintClasses', json([sourceConst].[ConstraintClasses]),
361
+ 'customAttributes', (
362
+ SELECT
363
+ json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
364
+ FROM [meta].[CustomAttribute] [ca]
365
+ WHERE [ca].[ContainerId] = [sourceConst].[ConstraintId] AND [ca].[ContainerType] = 1024
366
+ ORDER BY [ca].[Ordinal]
367
+ )
368
+ )
369
+ FROM
370
+ [ClassRelationshipConstraints] [sourceConst]
371
+ WHERE [sourceConst].[relationshipEnd] = 0
372
+ AND [sourceConst].[ClassId] = [class].[ECInstanceId]
373
+ ),
374
+ 'target', (
375
+ SELECT
376
+ json_object (
377
+ 'multiplicity', [targetConst].[Multiplicity],
378
+ 'roleLabel', [targetConst].[RoleLabel],
379
+ 'polymorphic', IIF([targetConst].[IsPolyMorphic] = 1, json('true'), json('false')),
380
+ 'abstractConstraint', [targetConst].[AbstractConstraint],
381
+ 'constraintClasses', json([targetConst].[ConstraintClasses]),
382
+ 'customAttributes', (
383
+ SELECT
384
+ json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
385
+ FROM [meta].[CustomAttribute] [ca]
386
+ WHERE [ca].[ContainerId] = [targetConst].[ConstraintId] AND [ca].[ContainerType] = 2048
387
+ ORDER BY [ca].[Ordinal]
388
+ )
389
+ )
390
+ FROM
391
+ [ClassRelationshipConstraints] [targetConst]
392
+ WHERE [targetConst].[relationshipEnd] = 1
393
+ AND [targetConst].[ClassId] = [class].[ECInstanceId]
394
+ )
395
+ ) AS [item]
396
+ FROM [meta].[ECClassDef] [class]
397
+ JOIN
398
+ [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
399
+ WHERE [class].[Type] = 1 AND
400
+ [sd].[Name] = :schemaName
401
+ `;
402
+ /**
403
+ * RelationshipClass query used to when querying for RelationshipClass data only. Not used
404
+ * for full Schema load via single query.
405
+ */
406
+ const relationshipClassQuery = `
407
+ WITH
408
+ ${withClassProperties},
409
+ ${withRelationshipConstraints}
410
+ ${baseRelationshipClassQuery}
411
+ `;
412
+ /**
413
+ * Query that provides StructClass data and is shared by two cases:
414
+ * 1. A single query to return a full schema.
415
+ * 2. When querying a full schema with multiple schema item queries or
416
+ * when just querying for Struct classes.
417
+ */
418
+ const baseStructQuery = `
419
+ SELECT
420
+ [sd].Name as schema,
421
+ json_object (
422
+ 'schemaItemType', 'StructClass',
423
+ 'name', [class].[Name],
424
+ 'label', [class].[DisplayLabel],
425
+ 'description', [class].[Description],
426
+ 'modifier', ${modifier("class")},
427
+ 'baseClass', (
428
+ ${selectBaseClasses}
429
+ ),
430
+ 'customAttributes', (${classCustomAttribute("class")}),
431
+ 'properties', (
432
+ ${selectProperties}
433
+ )
434
+ ) AS item
435
+ FROM [meta].[ECClassDef] [class]
436
+ JOIN
437
+ [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
438
+ WHERE [class].[Type] = 2 AND
439
+ [sd].[Name] = :schemaName
440
+ `;
441
+ /**
442
+ * StructClass query used to when querying for StructClass data only. Not used
443
+ * for full Schema load via single query.
444
+ */
445
+ const structQuery = `
446
+ WITH
447
+ ${withClassProperties}
448
+ ${baseStructQuery}
449
+ `;
450
+ /**
451
+ * Query that provides CustomAttributeClass data and is shared by two cases:
452
+ * 1. A single query to return a full schema.
453
+ * 2. When querying a full schema with multiple schema item queries or
454
+ * when just querying for CustomAttribute classes.
455
+ */
456
+ const baseCustomAttributeQuery = `
457
+ SELECT
458
+ [sd].Name as schema,
459
+ json_object (
460
+ 'schemaItemType', 'CustomAttributeClass',
461
+ 'name', [class].[Name],
462
+ 'label', [class].[DisplayLabel],
463
+ 'description', [class].[Description],
464
+ 'appliesTo', [class].[CustomAttributeContainerType],
465
+ 'modifier', ${modifier("class")},
466
+ 'baseClass', (
467
+ ${selectBaseClasses}
468
+ ),
469
+ 'customAttributes', (${classCustomAttribute("class")}),
470
+ 'properties', (
471
+ ${selectProperties}
472
+ )
473
+ ) AS [item]
474
+ FROM [meta].[ECClassDef] [class]
475
+ JOIN
476
+ [meta].[ECSchemaDef] sd ON [sd].[ECInstanceId] = [class].[Schema].[Id]
477
+ WHERE [class].[Type] = 3 AND
478
+ [sd].[Name] = :schemaName
479
+ `;
480
+ /**
481
+ * CustomAttributeClass query used to when querying for CustomAttributeClass data only. Not used
482
+ * for full Schema load via single query.
483
+ */
484
+ const customAttributeQuery = `
485
+ WITH
486
+ ${withClassProperties}
487
+ ${baseCustomAttributeQuery}
488
+ `;
489
+ /**
490
+ * Used by full schema load query via single query. Allows
491
+ * all SchemaItemTypes to be queried at once.
492
+ */
493
+ const withSchemaItems = `
494
+ SchemaItems AS (
495
+ ${baseEntityQuery}
496
+ UNION ALL
497
+ ${baseRelationshipClassQuery}
498
+ UNION ALL
499
+ ${baseStructQuery}
500
+ UNION ALL
501
+ ${baseMixinQuery}
502
+ UNION ALL
503
+ ${baseCustomAttributeQuery}
504
+ UNION ALL
505
+ ${SchemaItemQueries.kindOfQuantity(true)}
506
+ UNION ALL
507
+ ${SchemaItemQueries.enumeration(true)}
508
+ UNION ALL
509
+ ${SchemaItemQueries.propertyCategory(true)}
510
+ UNION ALL
511
+ ${SchemaItemQueries.unit(true)}
512
+ UNION ALL
513
+ ${SchemaItemQueries.invertedUnit(true)}
514
+ UNION ALL
515
+ ${SchemaItemQueries.unitSystem(true)}
516
+ UNION ALL
517
+ ${SchemaItemQueries.constant(true)}
518
+ UNION ALL
519
+ ${SchemaItemQueries.phenomenon(true)}
520
+ UNION ALL
521
+ ${SchemaItemQueries.format(true)}
522
+ )
523
+ `;
524
+ /**
525
+ * Query for Schema data without SchemaItems
526
+ */
527
+ const schemaNoItemsQuery = `
528
+ WITH
529
+ ${withSchemaReferences}
530
+ SELECT
531
+ json_object (
532
+ 'name', [schemaDef].[Name],
533
+ 'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),
534
+ 'alias', [schemaDef].[Alias],
535
+ 'label', [schemaDef].[DisplayLabel],
536
+ 'description', [schemaDef].[Description],
537
+ 'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],
538
+ 'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],
539
+ 'customAttributes', (${schemaCustomAttribute("schemaDef")}),
540
+ 'references', (
541
+ SELECT
542
+ json_group_array(json([schemaReferences].[reference]))
543
+ FROM
544
+ [SchemaReferences] [schemaReferences]
545
+ WHERE
546
+ [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
547
+ )
548
+ ) as [schema]
549
+ FROM
550
+ [meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName
551
+ `;
552
+ /**
553
+ * Query to load a full Schema via a single query.
554
+ */
555
+ const schemaQuery = `
556
+ WITH
557
+ ${withAppliesTo},
558
+ ${withSchemaReferences},
559
+ ${withClassProperties},
560
+ ${withRelationshipConstraints},
561
+ ${withSchemaItems}
562
+ SELECT
563
+ json_object (
564
+ 'name', [schemaDef].[Name],
565
+ 'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),
566
+ 'alias', [schemaDef].[Alias],
567
+ 'label', [schemaDef].[DisplayLabel],
568
+ 'description', [schemaDef].[Description],
569
+ 'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],
570
+ 'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],
571
+ 'customAttributes', (${schemaCustomAttribute("schemaDef")}),
572
+ 'references', (
573
+ SELECT
574
+ json_group_array(json([schemaReferences].[reference]))
575
+ FROM
576
+ [SchemaReferences] [schemaReferences]
577
+ WHERE
578
+ [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
579
+ ),
580
+ 'items', (
581
+ SELECT
582
+ json_group_array(json(json_object(
583
+ 'item', json([items].[item])
584
+ )))
585
+ FROM
586
+ [SchemaItems] [items]
587
+ )
588
+ ) as [schema]
589
+ FROM
590
+ [meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName
591
+ `;
592
+ /**
593
+ * Queries for loading full Schema JSON.
594
+ * @internal
595
+ */
596
+ // eslint-disable-next-line @typescript-eslint/naming-convention
597
+ export const FullSchemaQueries = {
598
+ schemaQuery,
599
+ schemaNoItemsQuery,
600
+ entityQuery,
601
+ relationshipClassQuery,
602
+ mixinQuery,
603
+ structQuery,
604
+ customAttributeQuery
605
+ };
606
+ //# sourceMappingURL=FullSchemaQueries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullSchemaQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/FullSchemaQueries.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\nimport { modifier, strength, strengthDirection } from \"./SchemaStubQueries\";\n\n/**\n * Queries that return full Schema JSON data are found here. Shared SELECTS and\n * WITH clauses are broken down into individual variables.\n */\n\nconst propertyType = (alias: string) => {\n return `\n CASE\n WHEN [${alias}].[Kind] = 0 THEN 'PrimitiveProperty'\n WHEN [${alias}].[Kind] = 1 THEN 'StructProperty'\n WHEN [${alias}].[Kind] = 2 THEN 'PrimitiveArrayProperty'\n WHEN [${alias}].[Kind] = 3 THEN 'StructArrayProperty'\n WHEN [${alias}].[Kind] = 4 THEN 'NavigationProperty'\n ELSE NULL\n END\n `;\n};\n\nconst navigationDirection = (alias: string) => {\n return `\n CASE\n WHEN [${alias}].[NavigationDirection] = 1 THEN 'Forward'\n WHEN [${alias}].[NavigationDirection] = 2 THEN 'Backward'\n ELSE NULL\n END\n `;\n};\n\nconst schemaCustomAttribute = (alias: string) => {\n return `\n SELECT\n json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))\n FROM [meta].[CustomAttribute] [ca]\n WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 1\n ORDER BY [ca].[Ordinal]\n `;\n};\n\n/**\n * Selects customAttribute data for each class type.\n */\nconst classCustomAttribute = (alias: string) => {\n return `\n SELECT\n json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))\n FROM [meta].[CustomAttribute] [ca]\n WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 30\n ORDER BY [ca].[Ordinal]\n `;\n};\n\nconst propertyCustomAttribute = (alias: string) => {\n return `\n SELECT\n json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))\n FROM [meta].[CustomAttribute] [ca]\n WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 992\n ORDER BY [ca].[Ordinal]\n `;\n};\n\n\n/**\n * Selects base class data for each class type.\n */\nconst selectBaseClasses = `\n SELECT\n ec_classname([baseClass].[ECInstanceId], 's.c')\n FROM\n [meta].[ECClassDef] [baseClass]\n INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]\n ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\n LIMIT 1\n`;\n\n/**\n * Selects class property data for each class type. ClassProperties\n * is a common table expression (CTE or WITH clause) defined below.\n */\nconst selectProperties = `\n SELECT\n json_group_array(json([classProperties].[property]))\n FROM\n [ClassProperties] [classProperties]\n WHERE\n [classProperties].[ClassId] = [class].[ECInstanceId]\n`;\n\n/**\n * A CTE used to select AppliesTo from IsMixin CustomAttributes for a given Mixin.\n */\nconst withAppliesTo = `\n AppliesToCTE AS (\n SELECT\n [mixinAppliesTo].[ECInstanceId] AS [AppliesToId],\n [appliesToSchema].[name] as [AppliesToSchema],\n json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]\n FROM [meta].[CustomAttribute] [ca]\n JOIN [meta].[ECClassDef] [mixinAppliesTo]\n ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]\n JOIN [meta].[ECSchemaDef] [appliesToSchema]\n ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]\n WHERE [ca].[ContainerType] = 30\n AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'\n )\n`;\n\n/**\n * A CTE used to select Schema reference data for a given Schema.\n */\nconst withSchemaReferences = `\nSchemaReferences as (\n SELECT\n [ref].[SourceECInstanceId] as [SchemaId],\n json_object(\n 'name', [Name],\n 'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor]))\n ) as [reference]\n FROM\n [meta].[ECSchemaDef] as [refSchema]\n INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]\n ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]\n)\n`;\n\n/**\n * A CTE used to select Relationship constraints for a given RelationshipClass.\n */\nconst withRelationshipConstraints = `\nClassRelationshipConstraints as (\n SELECT\n [rhc].[SourceECInstanceId] as [ClassId],\n [constraintDef].[ECInstanceId] as [ConstraintId],\n [RelationshipEnd],\n CONCAT('(', [MultiplicityLowerLimit], '..', IIF([MultiplicityUpperLimit] IS NULL, '*', [MultiplicityUpperLimit]), ')') as [Multiplicity],\n [IsPolyMorphic],\n [RoleLabel],\n IIF([constraintDef].[AbstractConstraintClass] IS NOT NULL, ec_classname([constraintDef].[AbstractConstraintClass].[Id], 's.c'), null) as [AbstractConstraint],\n IIF ([rchc].[TargetECInstanceId] IS NOT NULL, JSON_GROUP_ARRAY(ec_classname([rchc].[TargetECInstanceId], 's.c')), null) as [ConstraintClasses]\n FROM\n [meta].[ECRelationshipConstraintDef] [constraintDef]\n JOIN [meta].[RelationshipHasConstraints] [rhc]\n ON [rhc].[TargetECInstanceId] = [constraintDef].[ECInstanceId]\n JOIN [meta].[RelationshipConstraintHasClasses] [rchc]\n ON [rchc].[SourceECInstanceId] = [constraintDef].[ECInstanceId]\n GROUP BY [constraintDef].[ECInstanceId]\n)\n`;\n\n/**\n * A CTE used to select Class property data for a given Class.\n */\nconst withClassProperties = `\nClassProperties as (\nSELECT\n [cop].[SourceECInstanceId] as [ClassId],\n json_object(\n 'name', [pd].[Name],\n 'label', [pd].[DisplayLabel],\n 'description', [pd].[Description],\n 'isReadOnly', IIF([pd].[IsReadOnly] = 1, json('true'), NULL),\n 'priority', [pd].[Priority],\n 'category', IIF([categoryDef].[Name] IS NULL, NULL, CONCAT([categorySchemaDef].[Name], '.', [categoryDef].[Name])),\n 'kindOfQuantity', IIF([koqDef].[Name] IS NULL, NULL, CONCAT([koqSchemaDef].[Name], '.', [koqDef].[Name])),\n 'typeName',\n CASE\n WHEN [pd].[Kind] = 0 OR [pd].[Kind] = 2 Then\n CASE\n WHEN [enumDef].[Name] IS NOT NULL Then CONCAT([enumSchemaDef].[Name], '.', [enumDef].[Name])\n WHEN [pd].[PrimitiveType] = 257 Then 'binary'\n WHEN [pd].[PrimitiveType] = 513 Then 'boolean'\n WHEN [pd].[PrimitiveType] = 769 Then 'dateTime'\n WHEN [pd].[PrimitiveType] = 1025 Then 'double'\n WHEN [pd].[PrimitiveType] = 1281 Then 'int'\n WHEN [pd].[PrimitiveType] = 1537 Then 'long'\n WHEN [pd].[PrimitiveType] = 1793 Then 'point2d'\n WHEN [pd].[PrimitiveType] = 2049 Then 'point3d'\n WHEN [pd].[PrimitiveType] = 2305 Then 'string'\n WHEN [pd].[PrimitiveType] = 2561 Then 'Bentley.Geometry.Common.IGeometry'\n ELSE null\n END\n WHEN [pd].[Kind] = 1 OR [pd].[Kind] = 3 Then\n CONCAT([structSchemaDef].[Name], '.', [structDef].[Name])\n ELSE null\n END,\n 'type', ${propertyType(\"pd\")},\n 'minLength', [pd].[PrimitiveTypeMinLength],\n 'maxLength', [pd].[PrimitiveTypeMaxLength],\n 'minValue', [pd].[PrimitiveTypeMinValue],\n 'maxValue', [pd].[PrimitiveTypeMaxValue],\n 'extendedTypeName', [pd].[ExtendedTypeName],\n 'minOccurs', [pd].[ArrayMinOccurs],\n 'maxOccurs', [pd].[ArrayMaxOccurs],\n 'direction', ${navigationDirection(\"pd\")},\n 'relationshipName', IIF([navRelDef].[Name] IS NULL, NULL, CONCAT([navSchemaDef].[Name], '.', [navRelDef].[Name])),\n 'customAttributes', (${propertyCustomAttribute(\"pd\")})\n ) as [property]\nFROM\n [meta].[ECPropertyDef] as [pd]\nJOIN [meta].[ClassOwnsLocalProperties] [cop]\n ON cop.[TargetECInstanceId] = [pd].[ECInstanceId]\nLEFT JOIN [meta].[ECEnumerationDef] [enumDef]\n ON [enumDef].[ECInstanceId] = [pd].[Enumeration].[Id]\nLEFT JOIN [meta].[ECSchemaDef] enumSchemaDef\n ON [enumSchemaDef].[ECInstanceId] = [enumDef].[Schema].[Id]\nLEFT JOIN [meta].[PropertyCategoryDef] [categoryDef]\n ON [categoryDef].[ECInstanceId] = [pd].[Category].[Id]\nLEFT JOIN [meta].[ECSchemaDef] [categorySchemaDef]\n ON [categorySchemaDef].[ECInstanceId] = [categoryDef].[Schema].[Id]\nLEFT JOIN [meta].[KindOfQuantityDef] [koqDef]\n ON [koqDef].[ECInstanceId] = [pd].[KindOfQuantity].[Id]\nLEFT JOIN [meta].[ECSchemaDef] [koqSchemaDef]\n ON [koqSchemaDef].[ECInstanceId] = [koqDef].[Schema].[Id]\nLEFT JOIN [meta].[ECClassDef] [structDef]\n ON structDef.[ECInstanceId] = [pd].[StructClass].[Id]\nLEFT JOIN [meta].[ECSchemaDef] [structSchemaDef]\n ON [structSchemaDef].[ECInstanceId] = [structDef].[Schema].[Id]\nLEFT JOIN [meta].[ECClassDef] [navRelDef]\n ON [navRelDef].[ECInstanceId] = [pd].[NavigationRelationshipClass].[Id]\nLEFT JOIN [meta].[ECSchemaDef] [navSchemaDef]\n ON [navSchemaDef].[ECInstanceId] = [navRelDef].[Schema].[Id]\n)\n`;\n\n/**\n * Query that provides EntityClass data and is shared by two cases:\n * 1. A single query to return a full schema.\n * 2. When querying a full schema with multiple schema item queries or\n * when just querying for Entity classes.\n */\nconst baseEntityQuery = `\n SELECT\n [sd].[Name] as [schema],\n json_object (\n 'schemaItemType', 'EntityClass',\n 'name', [class].[Name],\n 'label', [class].[DisplayLabel],\n 'description', [class].[Description],\n 'modifier', ${modifier(\"class\")},\n 'baseClass', (\n ${selectBaseClasses}\n ),\n 'mixins', (\n SELECT\n json_group_array(\n ec_classname([baseClass].[ECInstanceId], 's.c')\n )\n FROM\n [meta].[ECClassDef] [baseClass]\n INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]\n ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\n AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\n ),\n 'customAttributes', (${classCustomAttribute(\"class\")}),\n 'properties', (\n ${selectProperties}\n )\n ) AS [item]\n FROM [meta].[ECClassDef] [class]\n JOIN\n [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]\n WHERE [class].[Type] = 0 AND\n [sd].[Name] = :schemaName\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\n AND [ca].[CustomAttributeClass].Id Is ([CoreCA].[IsMixin]))\n `;\n\n/**\n * EntityClass query used to when querying for EntityClass data only. Not used\n * for full Schema load via single query.\n */\nconst entityQuery = `\n WITH\n ${withClassProperties}\n ${baseEntityQuery}\n `\n\n/**\n * Query that provides Mixin data and is shared by two cases:\n * 1. A single query to return a full schema.\n * 2. When querying a full schema with multiple schema item queries or\n * when just querying for Mixin classes.\n */\nconst baseMixinQuery = `\n SELECT\n [sd].[Name] as [schema],\n json_object (\n 'schemaItemType', 'Mixin',\n 'name', [class].[Name],\n 'label', [class].[DisplayLabel],\n 'description', [class].[Description],\n 'modifier', ${modifier(\"class\")},\n 'baseClass', (\n ${selectBaseClasses}\n ),\n 'appliesTo', (\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\n FROM [AppliesToCTE] [atCTE]\n WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]\n ),\n 'customAttributes', (\n SELECT\n json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))\n FROM [meta].[CustomAttribute] [ca]\n WHERE [ca].[ContainerId] = [class].[ECInstanceId] AND [ca].[ContainerType] = 30\n AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') <> 'IsMixin'\n ),\n 'properties', (\n SELECT\n json_group_array(json([classProperties].[property]))\n FROM\n [ClassProperties] [classProperties]\n WHERE\n [classProperties].[ClassId] = [class].[ECInstanceId]\n )\n ) AS [item]\n FROM [meta].[ECClassDef] [class]\n JOIN\n [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]\n WHERE [class].[Type] = 0 AND\n [sd].[Name] = :schemaName\n AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\n `;\n\n/**\n* Mixin query used to when querying for Mixin data only. Not used\n* for full Schema load via single query.\n*/\nconst mixinQuery = `\n WITH\n ${withAppliesTo},\n ${withClassProperties}\n${baseMixinQuery}\n`\n\n/**\n * Query that provides RelationshipClass data and is shared by two cases:\n * 1. A single query to return a full schema.\n * 2. When querying a full schema with multiple schema item queries or\n * when just querying for Relationship classes.\n */\nconst baseRelationshipClassQuery = `\n SELECT\n [sd].Name as schema,\n json_object (\n 'schemaItemType', 'RelationshipClass',\n 'name', [class].[Name],\n 'label', [class].[DisplayLabel],\n 'description', [class].[Description],\n 'strength', ${strength(\"class\")},\n 'strengthDirection', ${strengthDirection(\"class\")},\n 'modifier', ${modifier(\"class\")},\n 'baseClass', (\n ${selectBaseClasses}\n ),\n 'customAttributes', (${classCustomAttribute(\"class\")}),\n 'properties', (\n ${selectProperties}\n ),\n 'source', (\n SELECT\n json_object (\n 'multiplicity', [sourceConst].[Multiplicity],\n 'roleLabel', [sourceConst].[RoleLabel],\n 'polymorphic', IIF([sourceConst].[IsPolyMorphic] = 1, json('true'), json('false')),\n 'abstractConstraint', [sourceConst].[AbstractConstraint],\n 'constraintClasses', json([sourceConst].[ConstraintClasses]),\n 'customAttributes', (\n SELECT\n json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))\n FROM [meta].[CustomAttribute] [ca]\n WHERE [ca].[ContainerId] = [sourceConst].[ConstraintId] AND [ca].[ContainerType] = 1024\n ORDER BY [ca].[Ordinal]\n )\n )\n FROM\n [ClassRelationshipConstraints] [sourceConst]\n WHERE [sourceConst].[relationshipEnd] = 0\n AND [sourceConst].[ClassId] = [class].[ECInstanceId]\n ),\n 'target', (\n SELECT\n json_object (\n 'multiplicity', [targetConst].[Multiplicity],\n 'roleLabel', [targetConst].[RoleLabel],\n 'polymorphic', IIF([targetConst].[IsPolyMorphic] = 1, json('true'), json('false')),\n 'abstractConstraint', [targetConst].[AbstractConstraint],\n 'constraintClasses', json([targetConst].[ConstraintClasses]),\n 'customAttributes', (\n SELECT\n json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))\n FROM [meta].[CustomAttribute] [ca]\n WHERE [ca].[ContainerId] = [targetConst].[ConstraintId] AND [ca].[ContainerType] = 2048\n ORDER BY [ca].[Ordinal]\n )\n )\n FROM\n [ClassRelationshipConstraints] [targetConst]\n WHERE [targetConst].[relationshipEnd] = 1\n AND [targetConst].[ClassId] = [class].[ECInstanceId]\n )\n ) AS [item]\n FROM [meta].[ECClassDef] [class]\n JOIN\n [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]\n WHERE [class].[Type] = 1 AND\n [sd].[Name] = :schemaName\n `;\n\n/**\n* RelationshipClass query used to when querying for RelationshipClass data only. Not used\n* for full Schema load via single query.\n*/\nconst relationshipClassQuery = `\n WITH\n ${withClassProperties},\n ${withRelationshipConstraints}\n${baseRelationshipClassQuery}\n`\n\n/**\n * Query that provides StructClass data and is shared by two cases:\n * 1. A single query to return a full schema.\n * 2. When querying a full schema with multiple schema item queries or\n * when just querying for Struct classes.\n */\nconst baseStructQuery = `\n SELECT\n [sd].Name as schema,\n json_object (\n 'schemaItemType', 'StructClass',\n 'name', [class].[Name],\n 'label', [class].[DisplayLabel],\n 'description', [class].[Description],\n 'modifier', ${modifier(\"class\")},\n 'baseClass', (\n ${selectBaseClasses}\n ),\n 'customAttributes', (${classCustomAttribute(\"class\")}),\n 'properties', (\n ${selectProperties}\n )\n ) AS item\n FROM [meta].[ECClassDef] [class]\n JOIN\n [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]\n WHERE [class].[Type] = 2 AND\n [sd].[Name] = :schemaName\n `;\n\n/**\n * StructClass query used to when querying for StructClass data only. Not used\n * for full Schema load via single query.\n */\nconst structQuery = `\n WITH\n ${withClassProperties}\n${baseStructQuery}\n`\n\n/**\n * Query that provides CustomAttributeClass data and is shared by two cases:\n * 1. A single query to return a full schema.\n * 2. When querying a full schema with multiple schema item queries or\n * when just querying for CustomAttribute classes.\n */\nconst baseCustomAttributeQuery = `\n SELECT\n [sd].Name as schema,\n json_object (\n 'schemaItemType', 'CustomAttributeClass',\n 'name', [class].[Name],\n 'label', [class].[DisplayLabel],\n 'description', [class].[Description],\n 'appliesTo', [class].[CustomAttributeContainerType],\n 'modifier', ${modifier(\"class\")},\n 'baseClass', (\n ${selectBaseClasses}\n ),\n 'customAttributes', (${classCustomAttribute(\"class\")}),\n 'properties', (\n ${selectProperties}\n )\n ) AS [item]\n FROM [meta].[ECClassDef] [class]\n JOIN\n [meta].[ECSchemaDef] sd ON [sd].[ECInstanceId] = [class].[Schema].[Id]\n WHERE [class].[Type] = 3 AND\n [sd].[Name] = :schemaName\n `;\n\n/**\n * CustomAttributeClass query used to when querying for CustomAttributeClass data only. Not used\n * for full Schema load via single query.\n */\nconst customAttributeQuery = `\nWITH\n ${withClassProperties}\n${baseCustomAttributeQuery}\n`\n\n/**\n * Used by full schema load query via single query. Allows\n * all SchemaItemTypes to be queried at once.\n */\nconst withSchemaItems = `\nSchemaItems AS (\n ${baseEntityQuery}\n UNION ALL\n ${baseRelationshipClassQuery}\n UNION ALL\n ${baseStructQuery}\n UNION ALL\n ${baseMixinQuery}\n UNION ALL\n ${baseCustomAttributeQuery}\n UNION ALL\n ${SchemaItemQueries.kindOfQuantity(true)}\n UNION ALL\n ${SchemaItemQueries.enumeration(true)}\n UNION ALL\n ${SchemaItemQueries.propertyCategory(true)}\n UNION ALL\n ${SchemaItemQueries.unit(true)}\n UNION ALL\n ${SchemaItemQueries.invertedUnit(true)}\n UNION ALL\n ${SchemaItemQueries.unitSystem(true)}\n UNION ALL\n ${SchemaItemQueries.constant(true)}\n UNION ALL\n ${SchemaItemQueries.phenomenon(true)}\n UNION ALL\n ${SchemaItemQueries.format(true)}\n)\n`;\n\n/**\n * Query for Schema data without SchemaItems\n */\nconst schemaNoItemsQuery = `\nWITH\n ${withSchemaReferences}\nSELECT\n json_object (\n 'name', [schemaDef].[Name],\n 'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),\n 'alias', [schemaDef].[Alias],\n 'label', [schemaDef].[DisplayLabel],\n 'description', [schemaDef].[Description],\n 'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],\n 'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],\n 'customAttributes', (${schemaCustomAttribute(\"schemaDef\")}),\n 'references', (\n SELECT\n json_group_array(json([schemaReferences].[reference]))\n FROM\n [SchemaReferences] [schemaReferences]\n WHERE\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\n )\n ) as [schema]\nFROM\n [meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName\n`;\n\n/**\n * Query to load a full Schema via a single query.\n */\nconst schemaQuery = `\nWITH\n ${withAppliesTo},\n ${withSchemaReferences},\n ${withClassProperties},\n ${withRelationshipConstraints},\n ${withSchemaItems}\nSELECT\n json_object (\n 'name', [schemaDef].[Name],\n 'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),\n 'alias', [schemaDef].[Alias],\n 'label', [schemaDef].[DisplayLabel],\n 'description', [schemaDef].[Description],\n 'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],\n 'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],\n 'customAttributes', (${schemaCustomAttribute(\"schemaDef\")}),\n 'references', (\n SELECT\n json_group_array(json([schemaReferences].[reference]))\n FROM\n [SchemaReferences] [schemaReferences]\n WHERE\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\n ),\n 'items', (\n SELECT\n json_group_array(json(json_object(\n 'item', json([items].[item])\n )))\n FROM\n [SchemaItems] [items]\n )\n) as [schema]\nFROM\n [meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName\n`;\n\n/**\n * Queries for loading full Schema JSON.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const FullSchemaQueries = {\n schemaQuery,\n schemaNoItemsQuery,\n entityQuery,\n relationshipClassQuery,\n mixinQuery,\n structQuery,\n customAttributeQuery\n};\n"]}