@itwin/core-backend 3.5.0-dev.26 → 3.5.0-dev.27

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 (228) hide show
  1. package/lib/cjs/AliCloudStorageService.d.ts +23 -23
  2. package/lib/cjs/AliCloudStorageService.js +71 -71
  3. package/lib/cjs/AliCloudStorageService.js.map +1 -1
  4. package/lib/cjs/BackendHubAccess.d.ts +224 -224
  5. package/lib/cjs/BackendHubAccess.js +41 -41
  6. package/lib/cjs/BackendHubAccess.js.map +1 -1
  7. package/lib/cjs/BackendLoggerCategory.d.ts +91 -91
  8. package/lib/cjs/BackendLoggerCategory.js +99 -99
  9. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  10. package/lib/cjs/BisCoreSchema.d.ts +21 -21
  11. package/lib/cjs/BisCoreSchema.js +60 -60
  12. package/lib/cjs/BisCoreSchema.js.map +1 -1
  13. package/lib/cjs/BriefcaseManager.d.ts +165 -165
  14. package/lib/cjs/BriefcaseManager.js +405 -405
  15. package/lib/cjs/BriefcaseManager.js.map +1 -1
  16. package/lib/cjs/Category.d.ts +153 -153
  17. package/lib/cjs/Category.js +243 -243
  18. package/lib/cjs/Category.js.map +1 -1
  19. package/lib/cjs/ChangeSummaryManager.d.ts +187 -187
  20. package/lib/cjs/ChangeSummaryManager.js +445 -445
  21. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  22. package/lib/cjs/ChangedElementsDb.d.ts +99 -99
  23. package/lib/cjs/ChangedElementsDb.js +165 -165
  24. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  25. package/lib/cjs/ChangedElementsManager.d.ts +39 -39
  26. package/lib/cjs/ChangedElementsManager.js +88 -88
  27. package/lib/cjs/ChangedElementsManager.js.map +1 -1
  28. package/lib/cjs/CheckpointManager.d.ts +120 -120
  29. package/lib/cjs/CheckpointManager.js +343 -343
  30. package/lib/cjs/CheckpointManager.js.map +1 -1
  31. package/lib/cjs/ClassRegistry.d.ts +72 -72
  32. package/lib/cjs/ClassRegistry.js +243 -243
  33. package/lib/cjs/ClassRegistry.js.map +1 -1
  34. package/lib/cjs/CloudSqlite.d.ts +350 -350
  35. package/lib/cjs/CloudSqlite.js +152 -152
  36. package/lib/cjs/CloudSqlite.js.map +1 -1
  37. package/lib/cjs/CloudStorageBackend.d.ts +58 -58
  38. package/lib/cjs/CloudStorageBackend.js +173 -173
  39. package/lib/cjs/CloudStorageBackend.js.map +1 -1
  40. package/lib/cjs/CodeService.d.ts +396 -396
  41. package/lib/cjs/CodeService.js +63 -63
  42. package/lib/cjs/CodeService.js.map +1 -1
  43. package/lib/cjs/CodeSpecs.d.ts +50 -50
  44. package/lib/cjs/CodeSpecs.js +112 -112
  45. package/lib/cjs/CodeSpecs.js.map +1 -1
  46. package/lib/cjs/ConcurrentQuery.d.ts +11 -11
  47. package/lib/cjs/ConcurrentQuery.js +30 -30
  48. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  49. package/lib/cjs/CustomViewState3dCreator.d.ts +21 -21
  50. package/lib/cjs/CustomViewState3dCreator.js +81 -81
  51. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  52. package/lib/cjs/DevTools.d.ts +71 -71
  53. package/lib/cjs/DevTools.js +154 -154
  54. package/lib/cjs/DevTools.js.map +1 -1
  55. package/lib/cjs/DisplayStyle.d.ts +106 -106
  56. package/lib/cjs/DisplayStyle.js +256 -256
  57. package/lib/cjs/DisplayStyle.js.map +1 -1
  58. package/lib/cjs/ECDb.d.ts +191 -191
  59. package/lib/cjs/ECDb.js +350 -350
  60. package/lib/cjs/ECDb.js.map +1 -1
  61. package/lib/cjs/ECSchemaXmlContext.d.ts +18 -18
  62. package/lib/cjs/ECSchemaXmlContext.js +41 -41
  63. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  64. package/lib/cjs/ECSqlStatement.d.ts +466 -466
  65. package/lib/cjs/ECSqlStatement.js +791 -791
  66. package/lib/cjs/ECSqlStatement.js.map +1 -1
  67. package/lib/cjs/Element.d.ts +1102 -1102
  68. package/lib/cjs/Element.js +1416 -1416
  69. package/lib/cjs/Element.js.map +1 -1
  70. package/lib/cjs/ElementAspect.d.ts +158 -158
  71. package/lib/cjs/ElementAspect.js +186 -186
  72. package/lib/cjs/ElementAspect.js.map +1 -1
  73. package/lib/cjs/ElementGraphics.d.ts +9 -9
  74. package/lib/cjs/ElementGraphics.js +41 -41
  75. package/lib/cjs/ElementGraphics.js.map +1 -1
  76. package/lib/cjs/ElementTreeWalker.d.ts +162 -162
  77. package/lib/cjs/ElementTreeWalker.js +409 -409
  78. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  79. package/lib/cjs/Entity.d.ts +106 -106
  80. package/lib/cjs/Entity.js +134 -134
  81. package/lib/cjs/Entity.js.map +1 -1
  82. package/lib/cjs/EntityReferences.d.ts +49 -49
  83. package/lib/cjs/EntityReferences.js +95 -95
  84. package/lib/cjs/EntityReferences.js.map +1 -1
  85. package/lib/cjs/ExportGraphics.d.ts +317 -317
  86. package/lib/cjs/ExportGraphics.js +208 -208
  87. package/lib/cjs/ExportGraphics.js.map +1 -1
  88. package/lib/cjs/ExternalSource.d.ts +96 -96
  89. package/lib/cjs/ExternalSource.js +131 -131
  90. package/lib/cjs/ExternalSource.js.map +1 -1
  91. package/lib/cjs/GeoCoordConfig.d.ts +19 -19
  92. package/lib/cjs/GeoCoordConfig.js +82 -82
  93. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  94. package/lib/cjs/GeometrySummary.d.ts +4 -4
  95. package/lib/cjs/GeometrySummary.js +380 -380
  96. package/lib/cjs/GeometrySummary.js.map +1 -1
  97. package/lib/cjs/HubMock.d.ts +93 -93
  98. package/lib/cjs/HubMock.js +190 -190
  99. package/lib/cjs/HubMock.js.map +1 -1
  100. package/lib/cjs/IModelCloneContext.d.ts +8 -8
  101. package/lib/cjs/IModelCloneContext.js +15 -15
  102. package/lib/cjs/IModelCloneContext.js.map +1 -1
  103. package/lib/cjs/IModelDb.d.ts +1183 -1183
  104. package/lib/cjs/IModelDb.js +2374 -2374
  105. package/lib/cjs/IModelDb.js.map +1 -1
  106. package/lib/cjs/IModelElementCloneContext.d.ts +89 -89
  107. package/lib/cjs/IModelElementCloneContext.js +159 -159
  108. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  109. package/lib/cjs/IModelHost.d.ts +369 -369
  110. package/lib/cjs/IModelHost.js +492 -492
  111. package/lib/cjs/IModelHost.js.map +1 -1
  112. package/lib/cjs/IModelJsFs.d.ts +62 -62
  113. package/lib/cjs/IModelJsFs.js +140 -140
  114. package/lib/cjs/IModelJsFs.js.map +1 -1
  115. package/lib/cjs/IpcHost.d.ts +98 -98
  116. package/lib/cjs/IpcHost.js +234 -234
  117. package/lib/cjs/IpcHost.js.map +1 -1
  118. package/lib/cjs/LineStyle.d.ts +311 -311
  119. package/lib/cjs/LineStyle.js +295 -295
  120. package/lib/cjs/LineStyle.js.map +1 -1
  121. package/lib/cjs/LocalHub.d.ts +162 -162
  122. package/lib/cjs/LocalHub.js +587 -587
  123. package/lib/cjs/LocalHub.js.map +1 -1
  124. package/lib/cjs/LocalhostIpcHost.d.ts +20 -20
  125. package/lib/cjs/LocalhostIpcHost.js +81 -81
  126. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  127. package/lib/cjs/Material.d.ts +103 -103
  128. package/lib/cjs/Material.js +147 -147
  129. package/lib/cjs/Material.js.map +1 -1
  130. package/lib/cjs/Model.d.ts +392 -392
  131. package/lib/cjs/Model.js +485 -485
  132. package/lib/cjs/Model.js.map +1 -1
  133. package/lib/cjs/NativeAppStorage.d.ts +51 -51
  134. package/lib/cjs/NativeAppStorage.js +202 -202
  135. package/lib/cjs/NativeAppStorage.js.map +1 -1
  136. package/lib/cjs/NativeHost.d.ts +52 -52
  137. package/lib/cjs/NativeHost.js +168 -168
  138. package/lib/cjs/NativeHost.js.map +1 -1
  139. package/lib/cjs/NavigationRelationship.d.ts +156 -156
  140. package/lib/cjs/NavigationRelationship.js +225 -225
  141. package/lib/cjs/NavigationRelationship.js.map +1 -1
  142. package/lib/cjs/PromiseMemoizer.d.ts +51 -51
  143. package/lib/cjs/PromiseMemoizer.js +101 -101
  144. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  145. package/lib/cjs/PropertyStore.d.ts +132 -132
  146. package/lib/cjs/PropertyStore.js +11 -11
  147. package/lib/cjs/PropertyStore.js.map +1 -1
  148. package/lib/cjs/Relationship.d.ts +416 -416
  149. package/lib/cjs/Relationship.js +494 -494
  150. package/lib/cjs/Relationship.js.map +1 -1
  151. package/lib/cjs/RpcBackend.d.ts +28 -28
  152. package/lib/cjs/RpcBackend.js +126 -126
  153. package/lib/cjs/RpcBackend.js.map +1 -1
  154. package/lib/cjs/SQLiteDb.d.ts +219 -219
  155. package/lib/cjs/SQLiteDb.js +214 -214
  156. package/lib/cjs/SQLiteDb.js.map +1 -1
  157. package/lib/cjs/Schema.d.ts +55 -55
  158. package/lib/cjs/Schema.js +83 -83
  159. package/lib/cjs/Schema.js.map +1 -1
  160. package/lib/cjs/ServerBasedLocks.d.ts +57 -57
  161. package/lib/cjs/ServerBasedLocks.js +168 -168
  162. package/lib/cjs/ServerBasedLocks.js.map +1 -1
  163. package/lib/cjs/SqliteStatement.d.ts +360 -360
  164. package/lib/cjs/SqliteStatement.js +586 -586
  165. package/lib/cjs/SqliteStatement.js.map +1 -1
  166. package/lib/cjs/Texture.d.ts +58 -58
  167. package/lib/cjs/Texture.js +82 -82
  168. package/lib/cjs/Texture.js.map +1 -1
  169. package/lib/cjs/TileStorage.d.ts +18 -18
  170. package/lib/cjs/TileStorage.js +90 -90
  171. package/lib/cjs/TileStorage.js.map +1 -1
  172. package/lib/cjs/TxnManager.d.ts +202 -202
  173. package/lib/cjs/TxnManager.js +356 -356
  174. package/lib/cjs/TxnManager.js.map +1 -1
  175. package/lib/cjs/ViewDefinition.d.ts +439 -439
  176. package/lib/cjs/ViewDefinition.js +646 -646
  177. package/lib/cjs/ViewDefinition.js.map +1 -1
  178. package/lib/cjs/ViewStateHydrator.d.ts +13 -13
  179. package/lib/cjs/ViewStateHydrator.js +103 -103
  180. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  181. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  182. package/lib/cjs/assets/Settings/Schemas/Cloud.Schema.json +67 -67
  183. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +31 -31
  184. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +52 -52
  185. package/lib/cjs/assets/Settings/backend.setting.json5 +138 -138
  186. package/lib/cjs/core-backend.d.ts +184 -184
  187. package/lib/cjs/core-backend.js +204 -204
  188. package/lib/cjs/core-backend.js.map +1 -1
  189. package/lib/cjs/domains/FunctionalElements.d.ts +101 -101
  190. package/lib/cjs/domains/FunctionalElements.js +145 -145
  191. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  192. package/lib/cjs/domains/FunctionalSchema.d.ts +13 -13
  193. package/lib/cjs/domains/FunctionalSchema.js +40 -40
  194. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  195. package/lib/cjs/domains/GenericElements.d.ts +177 -177
  196. package/lib/cjs/domains/GenericElements.js +263 -263
  197. package/lib/cjs/domains/GenericElements.js.map +1 -1
  198. package/lib/cjs/domains/GenericSchema.d.ts +10 -10
  199. package/lib/cjs/domains/GenericSchema.js +28 -28
  200. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  201. package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts +15 -15
  202. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js +32 -32
  203. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  204. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +46 -46
  205. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +287 -287
  206. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  207. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts +22 -22
  208. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +202 -202
  209. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  210. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +36 -36
  211. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +168 -168
  212. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  213. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +16 -16
  214. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +43 -43
  215. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  216. package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +15 -15
  217. package/lib/cjs/rpc-impl/WipRpcImpl.js +37 -37
  218. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -1
  219. package/lib/cjs/workspace/Settings.d.ts +186 -186
  220. package/lib/cjs/workspace/Settings.js +155 -155
  221. package/lib/cjs/workspace/Settings.js.map +1 -1
  222. package/lib/cjs/workspace/SettingsSchemas.d.ts +75 -75
  223. package/lib/cjs/workspace/SettingsSchemas.js +191 -191
  224. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  225. package/lib/cjs/workspace/Workspace.d.ts +414 -414
  226. package/lib/cjs/workspace/Workspace.js +543 -543
  227. package/lib/cjs/workspace/Workspace.js.map +1 -1
  228. package/package.json +12 -12
@@ -1,64 +1,64 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.CodeService = void 0;
8
- const core_bentley_1 = require("@itwin/core-bentley");
9
- /** @alpha */
10
- var CodeService;
11
- (function (CodeService) {
12
- /** @internal */
13
- const codeSequences = new Map();
14
- /** Register an instance of a`CodeSequence` so it can be looked up by name. */
15
- function registerSequence(seq) {
16
- codeSequences.set(seq.sequenceName, seq);
17
- }
18
- CodeService.registerSequence = registerSequence;
19
- /** Get a previously registered `CodeSequence` by its name.
20
- * @throws if no sequence by that name was registered.
21
- */
22
- function getSequence(name) {
23
- const seq = codeSequences.get(name);
24
- if (!seq)
25
- throw new Error("SequenceNotFound", -1, `code sequence ${name} not found`);
26
- return seq;
27
- }
28
- CodeService.getSequence = getSequence;
29
- /**
30
- * Turn a `CodePops` for the briefcase of this CodeService into a `ScopeAndSpec` object for use with a CodeService.
31
- * This is necessary because the `spec` member of `CodeProps` refers to the id of a code spec in the iModel, and
32
- * the `scope` member refers to the element Id of the scope element in the iModel. This helper function
33
- * converts the spec Id to the spec name and looks up the `FederationGuid` of the scope element.
34
- */
35
- function makeScopeAndSpec(iModel, code) {
36
- const scope = iModel.elements.getElementProps({ id: code.scope, onlyBaseProperties: true }).federationGuid;
37
- if (undefined === scope)
38
- throw new CodeService.Error("MissingGuid", core_bentley_1.IModelStatus.InvalidCode, "code scope element has no federationGuid");
39
- return { scope, spec: iModel.codeSpecs.getById(code.spec).name };
40
- }
41
- CodeService.makeScopeAndSpec = makeScopeAndSpec;
42
- /** Turn a `CodeProps` and `ProposedCodeProps` into a `ProposedCode` for use with a CodeService.
43
- * @see [[makeScopeAndSpec]] for explanation of why this is necessary.
44
- */
45
- function makeProposedCode(arg) {
46
- return {
47
- ...arg.props,
48
- value: arg.code.value,
49
- ...makeScopeAndSpec(arg.iModel, arg.code),
50
- };
51
- }
52
- CodeService.makeProposedCode = makeProposedCode;
53
- /** Exception class thrown by `CodeService` methods. */
54
- class Error extends core_bentley_1.BentleyError {
55
- /** @internal */
56
- constructor(errorId, errNum, message, problems) {
57
- super(errNum, message);
58
- this.errorId = errorId;
59
- this.problems = problems;
60
- }
61
- }
62
- CodeService.Error = Error;
63
- })(CodeService = exports.CodeService || (exports.CodeService = {}));
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CodeService = void 0;
8
+ const core_bentley_1 = require("@itwin/core-bentley");
9
+ /** @alpha */
10
+ var CodeService;
11
+ (function (CodeService) {
12
+ /** @internal */
13
+ const codeSequences = new Map();
14
+ /** Register an instance of a`CodeSequence` so it can be looked up by name. */
15
+ function registerSequence(seq) {
16
+ codeSequences.set(seq.sequenceName, seq);
17
+ }
18
+ CodeService.registerSequence = registerSequence;
19
+ /** Get a previously registered `CodeSequence` by its name.
20
+ * @throws if no sequence by that name was registered.
21
+ */
22
+ function getSequence(name) {
23
+ const seq = codeSequences.get(name);
24
+ if (!seq)
25
+ throw new Error("SequenceNotFound", -1, `code sequence ${name} not found`);
26
+ return seq;
27
+ }
28
+ CodeService.getSequence = getSequence;
29
+ /**
30
+ * Turn a `CodePops` for the briefcase of this CodeService into a `ScopeAndSpec` object for use with a CodeService.
31
+ * This is necessary because the `spec` member of `CodeProps` refers to the id of a code spec in the iModel, and
32
+ * the `scope` member refers to the element Id of the scope element in the iModel. This helper function
33
+ * converts the spec Id to the spec name and looks up the `FederationGuid` of the scope element.
34
+ */
35
+ function makeScopeAndSpec(iModel, code) {
36
+ const scope = iModel.elements.getElementProps({ id: code.scope, onlyBaseProperties: true }).federationGuid;
37
+ if (undefined === scope)
38
+ throw new CodeService.Error("MissingGuid", core_bentley_1.IModelStatus.InvalidCode, "code scope element has no federationGuid");
39
+ return { scope, spec: iModel.codeSpecs.getById(code.spec).name };
40
+ }
41
+ CodeService.makeScopeAndSpec = makeScopeAndSpec;
42
+ /** Turn a `CodeProps` and `ProposedCodeProps` into a `ProposedCode` for use with a CodeService.
43
+ * @see [[makeScopeAndSpec]] for explanation of why this is necessary.
44
+ */
45
+ function makeProposedCode(arg) {
46
+ return {
47
+ ...arg.props,
48
+ value: arg.code.value,
49
+ ...makeScopeAndSpec(arg.iModel, arg.code),
50
+ };
51
+ }
52
+ CodeService.makeProposedCode = makeProposedCode;
53
+ /** Exception class thrown by `CodeService` methods. */
54
+ class Error extends core_bentley_1.BentleyError {
55
+ /** @internal */
56
+ constructor(errorId, errNum, message, problems) {
57
+ super(errNum, message);
58
+ this.errorId = errorId;
59
+ this.problems = problems;
60
+ }
61
+ }
62
+ CodeService.Error = Error;
63
+ })(CodeService = exports.CodeService || (exports.CodeService = {}));
64
64
  //# sourceMappingURL=CodeService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodeService.js","sourceRoot":"","sources":["../../src/CodeService.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAiH;AA+KjH,aAAa;AACb,IAAiB,WAAW,CA6U3B;AA7UD,WAAiB,WAAW;IAC1B,gBAAgB;IAChB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IAKtD,8EAA8E;IAC9E,SAAgB,gBAAgB,CAAC,GAAiB;QAChD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAFe,4BAAgB,mBAE/B,CAAA;IAED;;MAEE;IACF,SAAgB,WAAW,CAAC,IAAY;QACtC,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,iBAAiB,IAAI,YAAY,CAAC,CAAC;QAC7E,OAAO,GAAG,CAAC;IACb,CAAC;IALe,uBAAW,cAK1B,CAAA;IAED;;;;;OAKG;IACH,SAAgB,gBAAgB,CAAC,MAAgB,EAAE,IAAe;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,CAAC;QAC3G,IAAI,SAAS,KAAK,KAAK;YACrB,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,2BAAY,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;QAEnH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC;IANe,4BAAgB,mBAM/B,CAAA;IAED;;OAEG;IACH,SAAgB,gBAAgB,CAAC,GAAqC;QACpE,OAAO;YACL,GAAG,GAAG,CAAC,KAAK;YACZ,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;YACrB,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;SAC1C,CAAC;IACJ,CAAC;IANe,4BAAgB,mBAM/B,CAAA;IAqPD,uDAAuD;IACvD,MAAa,KAAM,SAAQ,2BAAY;QAMrC,gBAAgB;QAChB,YAAY,OAAgB,EAAE,MAAc,EAAE,OAAe,EAAE,QAA6C;YAC1G,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;KACF;IAZY,iBAAK,QAYjB,CAAA;AA8BH,CAAC,EA7UgB,WAAW,GAAX,mBAAW,KAAX,mBAAW,QA6U3B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { AccessToken, BentleyError, GuidString, IModelStatus, MarkRequired, Mutable } from \"@itwin/core-bentley\";\r\nimport { CodeProps } from \"@itwin/core-common\";\r\nimport { CloudSqlite } from \"./CloudSqlite\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { SettingObject } from \"./workspace/Settings\";\r\n\r\n/**\r\n * A readonly index of all known Codes for an iTwin. The CodeIndex may be slightly out-of-date\r\n * with the master copy in the cloud, but it should be periodically synchronized. Whenever codes are reserved/updated/deleted\r\n * locally, this copy is always up-to-date as of those changes.\r\n * @alpha\r\n */\r\nexport interface CodeIndex {\r\n /**\r\n * Find the next available value for the supplied `SequenceScope`.\r\n * If the sequence is full (there are no available values), this will throw an exception with `errorId=\"SequenceFull\"`\r\n * @param from the sequence and scope to search\r\n * @returns the next available CodeValue in the sequence.\r\n */\r\n findNextAvailable(from: CodeService.SequenceScope): CodeService.CodeValue;\r\n\r\n /**\r\n * Find the highest currently used value for the supplied `SequenceScope`\r\n * @param from the sequence and scope to search\r\n * @returns the highest used value, or undefined if no values have been used.\r\n */\r\n findHighestUsed(from: CodeService.SequenceScope): CodeService.CodeValue | undefined;\r\n\r\n /** Determine whether a code is present in this CodeIndex by its Guid. */\r\n isCodePresent(guid: CodeService.CodeGuid): boolean;\r\n\r\n /** Get the data for a code in this CodeIndex by its Guid.\r\n * @returns the data for the code or undefined if no code is present for the supplied Guid.\r\n */\r\n getCode(guid: CodeService.CodeGuid): CodeService.CodeEntry | undefined;\r\n\r\n /** Look up a code by its Scope, Spec, and Value.\r\n * @returns the Guid of the code, or undefined if not present.\r\n */\r\n findCode(code: CodeService.ScopeSpecAndValue): CodeService.CodeGuid | undefined;\r\n\r\n /** Look up a code spec by its name\r\n * @throws if the spec is not present.\r\n */\r\n getCodeSpec(props: CodeService.CodeSpecName): CodeService.NameAndJson;\r\n\r\n /** Call a `CodeIteration` function for all codes in this index, optionally filtered by a `CodeFilter ` */\r\n forAllCodes(iter: CodeService.CodeIteration, filter?: CodeService.CodeFilter): void;\r\n\r\n /** Call an iteration function for all code specs in this index, optionally filtered by a `ValueFilter ` */\r\n forAllCodeSpecs(iter: CodeService.NameAndJsonIteration, filter?: CodeService.ValueFilter): void;\r\n}\r\n\r\n/**\r\n * The services for querying, reserving, updating, and deleting codes for a BriefcaseDb (available via `BriefcaseDb.codeService`) whenever it is opened for write access.\r\n * @alpha\r\n */\r\nexport interface CodeService {\r\n /** @internal */\r\n close: () => void;\r\n\r\n /** @internal */\r\n addAllCodeSpecs(iModel: IModelDb): Promise<void>;\r\n\r\n /** the code index for this CodeService */\r\n readonly codeIndex: CodeIndex;\r\n\r\n /**\r\n * Application-supplied parameters for obtaining the write lock on the container.\r\n * Applications should set these parameters by adding a listener for `BriefcaseDb.onCodeServiceCreated`\r\n * that is called every time a BriefcaseDb that uses code services is opened for write access.\r\n */\r\n readonly lockParams: CloudSqlite.ObtainLockParams;\r\n\r\n /**\r\n * Application-supplied parameters for reserving new codes.\r\n * @see lockParams\r\n */\r\n readonly appParams: CodeService.AuthorAndOrigin;\r\n\r\n /**\r\n * The token that grants access to the cloud container for this CodeService.\r\n * It should be established in a listener for `BriefcaseDb.onCodeServiceCreated`, and should be refreshed (via a\r\n * timer) before it expires.\r\n */\r\n sasToken: AccessToken;\r\n\r\n /**\r\n * Synchronize the local index with any changes by made by others.\r\n * @note This is called automatically whenever any write operation is performed on the code index. It is only necessary to\r\n * call this directly if you have not changed the code index recently, but wish to perform a readonly operation and want to\r\n * ensure it is up-to-date as of now.\r\n * @note There is no guarantee that a readonly index is up-to-date even immediately after calling this method, since others\r\n * may be modifying it at any time.\r\n */\r\n synchronizeWithCloud(): void;\r\n\r\n /**\r\n * Verify that the Code of a to-be-inserted or to-be-updated Element:\r\n * 1. has already been reserved,\r\n * 2. if the element has a `federationGuid`, it must match the reserved value. If the federationGuid is undefined,\r\n * the value from the code index is returned.\r\n *\r\n * If not, throw an exception. Elements with no CodeValue are ignored.\r\n * @note this method is automatically called whenever elements are added or updated by a BriefcaseDb with a CodeService.\r\n */\r\n verifyCode(props: CodeService.ElementCodeProps): void;\r\n\r\n /** Add a new code spec to this code service.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n */\r\n addCodeSpec(val: CodeService.NameAndJson): Promise<void>;\r\n\r\n /**\r\n * Add all of the codes and code specs from this CodeService's BriefcaseDb into the code index.\r\n * @returns the number of codes actually added.\r\n * @note It is not necessary to call this method unless the BriefcaseDb somehow becomes out of sync with its CodeService,\r\n * for example when migrating iModels to a new code service. It is safe (but relatively expensive) to call this method multiple times, since\r\n * any codes or code specs that are already in the index are ignored.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n */\r\n addAllCodes(iModel: IModelDb): Promise<number>;\r\n\r\n /**\r\n * Attempt to reserve a single proposed code.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n * @throws `CodeService.Error` if the proposed code cannot be reserved.\r\n */\r\n reserveCode(code: CodeService.ProposedCode): Promise<void>;\r\n\r\n /**\r\n * Attempt to reserve an array of proposed codes.\r\n * @returns number of codes actually reserved.\r\n * @see the `problems` member of the `CodeService.Error` exception\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n * @note If you have a set of codes to reserve, it is considerably more efficient to do them as an array rather than one at a time.\r\n * @throws `CodeService.Error` if any of the proposed code cannot be reserved. The details for each failed code are in the `problems` member.\r\n */\r\n reserveCodes(arg: CodeService.ReserveCodesArgs): Promise<number>;\r\n\r\n /**\r\n * Attempt to reserve the next available code for a code sequence and scope.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n */\r\n reserveNextAvailableCode(arg: CodeService.ReserveNextArgs): Promise<void>;\r\n\r\n /**\r\n * Attempt to reserve an array of the next available codes for a code sequence and scope.\r\n * The length of the array determines the number of codes requested. The values for the new codes are returned\r\n * in the array, so they can be associated with the supplied GUIDs.\r\n * @returns number of codes actually reserved.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n */\r\n reserveNextAvailableCodes(arg: CodeService.ReserveNextArrayArgs): Promise<number>;\r\n\r\n /**\r\n * Update the properties of a single code.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n */\r\n updateCode(props: CodeService.UpdatedCode): Promise<void>;\r\n\r\n /**\r\n * Update the properties of an array codes.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n * @note If you have a set of codes to update, it is considerably more efficient to do them as an array rather than one at a time.\r\n * @returns number of codes actually updated.\r\n */\r\n updateCodes(arg: CodeService.UpdateCodesArgs): Promise<number>;\r\n\r\n /** Delete an array of codes by their guids.\r\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\r\n */\r\n deleteCodes(guid: CodeService.CodeGuid[]): Promise<void>;\r\n}\r\n\r\n/** @alpha */\r\nexport namespace CodeService {\r\n /** @internal */\r\n const codeSequences = new Map<string, CodeSequence>();\r\n\r\n /** @internal */\r\n export let createForIModel: ((db: IModelDb) => CodeService) | undefined;\r\n\r\n /** Register an instance of a`CodeSequence` so it can be looked up by name. */\r\n export function registerSequence(seq: CodeSequence) {\r\n codeSequences.set(seq.sequenceName, seq);\r\n }\r\n\r\n /** Get a previously registered `CodeSequence` by its name.\r\n * @throws if no sequence by that name was registered.\r\n */\r\n export function getSequence(name: string): CodeSequence {\r\n const seq = codeSequences.get(name);\r\n if (!seq)\r\n throw new Error(\"SequenceNotFound\", -1, `code sequence ${name} not found`);\r\n return seq;\r\n }\r\n\r\n /**\r\n * Turn a `CodePops` for the briefcase of this CodeService into a `ScopeAndSpec` object for use with a CodeService.\r\n * This is necessary because the `spec` member of `CodeProps` refers to the id of a code spec in the iModel, and\r\n * the `scope` member refers to the element Id of the scope element in the iModel. This helper function\r\n * converts the spec Id to the spec name and looks up the `FederationGuid` of the scope element.\r\n */\r\n export function makeScopeAndSpec(iModel: IModelDb, code: CodeProps): CodeService.ScopeAndSpec {\r\n const scope = iModel.elements.getElementProps({ id: code.scope, onlyBaseProperties: true }).federationGuid;\r\n if (undefined === scope)\r\n throw new CodeService.Error(\"MissingGuid\", IModelStatus.InvalidCode, \"code scope element has no federationGuid\");\r\n\r\n return { scope, spec: iModel.codeSpecs.getById(code.spec).name };\r\n }\r\n\r\n /** Turn a `CodeProps` and `ProposedCodeProps` into a `ProposedCode` for use with a CodeService.\r\n * @see [[makeScopeAndSpec]] for explanation of why this is necessary.\r\n */\r\n export function makeProposedCode(arg: CodeService.MakeProposedCodeArgs): CodeService.ProposedCode {\r\n return {\r\n ...arg.props,\r\n value: arg.code.value,\r\n ...makeScopeAndSpec(arg.iModel, arg.code),\r\n };\r\n }\r\n\r\n /** The name of a code spec */\r\n export type CodeSpecName = string;\r\n\r\n /** The name that identifies the \"originator\" of a code. Usually this is the Guid of the iModel from which a code was added,\r\n * but can also be used to identify a system or type from an external code service. */\r\n export type CodeOriginName = string;\r\n\r\n /** The name that identifies the \"author\" of a code. Generally, this is intended to be the name of a person or group that helps identify the purpose of the code. */\r\n export type AuthorName = string;\r\n\r\n /** The value for a code. */\r\n export type CodeValue = string;\r\n\r\n /** The guid for a code. This identifies the real-world entity associated with the code. */\r\n export type CodeGuid = GuidString;\r\n\r\n /** The guid of the scope for a code. This identifies the real-world entity that provides the uniqueness scope for code values. */\r\n export type ScopeGuid = GuidString;\r\n\r\n /** An optional number associated with a code that may be used for \"status\" information. Values must be defined by applications. */\r\n export type CodeState = number;\r\n\r\n /** The return status of an iteration function. The value \"stop\" causes the iteration to terminate. */\r\n export type IterationReturn = void | \"stop\";\r\n\r\n /** An iteration function over codes in a code index. It is called with the Guid of a each code. */\r\n export type CodeIteration = (guid: GuidString) => IterationReturn;\r\n\r\n /** An iteration function over code specs in a code index. It is called with the name and json of a each code spec. */\r\n export type NameAndJsonIteration = (nameAndJson: NameAndJson) => IterationReturn;\r\n\r\n /** Argument for reserving an array of new codes. */\r\n export interface ReserveCodesArgs {\r\n /** an array of proposed codes to reserve.\r\n * @note the guid of each proposed code must be supplied by the caller.\r\n */\r\n readonly codes: CodeService.ProposedCode[];\r\n /** If true, unless all codes are available, don't reserve any codes. Otherwise reserve all available codes. */\r\n readonly allOrNothing?: true;\r\n }\r\n\r\n /** Argument for reserving a code from a code sequence. */\r\n export interface ReserveNextArgs {\r\n /** the properties of the new code */\r\n readonly code: CodeService.ProposedCodeProps;\r\n /** The code sequence and scope for the new code. */\r\n readonly from: SequenceScope;\r\n }\r\n\r\n /** Argument for reserving an array of codes from a code sequence. */\r\n export interface ReserveNextArrayArgs {\r\n /** an array of proposed codes to reserve. */\r\n readonly codes: CodeService.ProposedCodeProps[];\r\n /** The code sequence and scope for the new codes. */\r\n readonly from: CodeService.SequenceScope;\r\n /** If true, and in the event that the code sequence does not have enough available codes to fulfill all the entries in `codes`,\r\n * return as many as possible. Otherwise no codes are reserved. The `problems` member of the exception can be used to determine how many codes were available.\r\n * @note if `asManyAsPossible` is true, no error is thrown if the sequence becomes full. You must check the return value to see how many\r\n * were actually available. The `value` member will be undefined for any proposed codes that were not reserved.\r\n */\r\n readonly asManyAsPossible?: true;\r\n }\r\n\r\n /** Argument for updating an array of codes. */\r\n export interface UpdateCodesArgs {\r\n /** Properties of the codes to update */\r\n readonly props: CodeService.UpdatedCode[];\r\n /** If true, unless all codes are updated, don't update any codes. Otherwise update all possible codes. */\r\n readonly allOrNothing?: true;\r\n }\r\n\r\n /** Arguments for CodeService.makeProposedCode */\r\n export interface MakeProposedCodeArgs {\r\n readonly iModel: IModelDb;\r\n readonly code: Required<CodeProps>;\r\n readonly props: CodeService.CodeGuidStateJson;\r\n }\r\n\r\n /** The properties of an Element to be checked against the code index.\r\n * @see CodeService.verifyCode\r\n */\r\n export interface ElementCodeProps {\r\n /** iModel from which the code is being inserted/updated. */\r\n readonly iModel: IModelDb;\r\n /** Properties of the code */\r\n readonly props: {\r\n /** The imodel-specific code properties. */\r\n readonly code: CodeProps;\r\n /**\r\n * The federationGuid of the element being inserted or updated.\r\n * If federationGuid is defined, it is must match the value in the code index or an error is thrown.\r\n * If it is undefined, the value from the code index is returned here.\r\n */\r\n federationGuid?: GuidString;\r\n };\r\n }\r\n\r\n /** a name and a json object. Used for code specs, authors and origins. */\r\n export interface NameAndJson {\r\n readonly name: string;\r\n readonly json?: SettingObject;\r\n }\r\n\r\n /** A code Scope guid, and code spec name. */\r\n export interface ScopeAndSpec {\r\n readonly spec: CodeSpecName;\r\n readonly scope: ScopeGuid;\r\n }\r\n\r\n /** A code Scope guid, code spec, and code value. */\r\n export interface ScopeSpecAndValue extends ScopeAndSpec {\r\n readonly value: CodeValue;\r\n }\r\n\r\n /** The data held in a code index for a single code. */\r\n export interface CodeEntry {\r\n /** The name of the code spec for this code. */\r\n readonly spec: CodeSpecName;\r\n /** The guid of the entity that provides the scope for this code. */\r\n readonly scope: ScopeGuid;\r\n /** The value of this code. */\r\n readonly value: CodeValue;\r\n /** The guid of the entity this code identifies. */\r\n readonly guid: CodeGuid;\r\n /** the state of the code. May be undefined. */\r\n readonly state?: CodeState;\r\n /** The name of the originating source of this code (usually an iModel Guid). May be undefined. */\r\n readonly origin: CodeOriginName;\r\n /** The name of the author of this code. May be undefined. */\r\n readonly author?: AuthorName;\r\n /** Option json properties associated with this code. May be undefined. */\r\n readonly json?: SettingObject;\r\n }\r\n\r\n /** A filter used to limit and/or sort the values returned by an iteration. */\r\n export interface ValueFilter {\r\n /** A value filter. May include wild cards when used with `GLOB` or `LIKE` */\r\n readonly value?: string;\r\n /** The comparison operator for `value`. Default is `=` */\r\n readonly valueCompare?: \"GLOB\" | \"LIKE\" | \"NOT GLOB\" | \"NOT LIKE\" | \"=\" | \"<\" | \">\";\r\n /** Order results ascending or descending. If not supplied, the results are unordered (random). */\r\n readonly orderBy?: \"ASC\" | \"DESC\";\r\n /** An SQL expression to further filter results. This string is appended to the `WHERE` clause with an `AND` (that should not be part of the sqlExpression) */\r\n readonly sqlExpression?: string;\r\n }\r\n\r\n /** A filter to limit and/or sort the values for the [[CodeIndex.forAllCodes]] iteration. */\r\n export interface CodeFilter extends ValueFilter {\r\n /** If supplied, limit results to only those with this spec */\r\n readonly spec?: CodeSpecName;\r\n /** If supplied, limit results to only those with this scope Guid */\r\n readonly scope?: ScopeGuid;\r\n /** If supplied, limit results to only those with this origin */\r\n readonly origin?: CodeOriginName;\r\n }\r\n\r\n /** Author and origin information supplied when codes are reserved. */\r\n export interface AuthorAndOrigin {\r\n /** The name of the individual or group for whom the code was reserved. */\r\n readonly author: Mutable<NameAndJson>;\r\n /** The identity of the \"originator\" of the code. This is usually a guid of an iModel, but can be any unique string. */\r\n readonly origin: Mutable<NameAndJson>;\r\n }\r\n\r\n /** The Guid, state, and json properties of a code. */\r\n export interface CodeGuidStateJson {\r\n /** The Guid of the new code. This must be always be supplied by the application. */\r\n readonly guid: CodeGuid;\r\n /** An optional value for the state of the code. */\r\n readonly state?: CodeState;\r\n /** An optional json object to be stored with the code. */\r\n readonly json?: SettingObject;\r\n }\r\n\r\n /** Properties of a \"proposed\" new code to be reserved.\r\n * @note the Guid of the entity identified by this code *must* be supplied, but `value` is optional, since\r\n * this may be used to reserve codes from a sequence where the value is generated.\r\n */\r\n export interface ProposedCodeProps extends CodeGuidStateJson {\r\n /** The value for the proposed code.\r\n * @note For code sequence operations, this value is ignored on input and is set with a new value from the sequence on successful return.\r\n */\r\n value?: CodeValue;\r\n }\r\n\r\n /** Properties of a proposed new code that is not from a code sequence (its `value` is required). */\r\n export type ProposedCode = ProposedCodeProps & ScopeSpecAndValue;\r\n\r\n /** Properties that describe a code sequence and a scope and spec for a proposed code or array of codes from a sequence. */\r\n export interface SequenceScope extends ScopeAndSpec {\r\n /** The code sequence. */\r\n readonly seq: CodeSequence;\r\n /** A valid current value. If supplied, the returned value will always be later in the sequence than this. */\r\n readonly start?: CodeValue;\r\n }\r\n\r\n /** Properties of a code to be updated.\r\n * @note The `guid` member identifies the code to be updated and is required.\r\n * All other properties are optional - if `undefined`, its value is not changed.\r\n */\r\n export type UpdatedCode = MarkRequired<Partial<ProposedCode>, \"guid\">;\r\n\r\n /** A proposed code that could not be reserved due to some error. */\r\n export interface ReserveProblem {\r\n /** the proposed code that failed. */\r\n readonly code: ProposedCode;\r\n /** the reason for the failure */\r\n readonly errorId: ErrorId;\r\n /** the error message from the exception for this proposed code. */\r\n readonly message: string;\r\n }\r\n\r\n /** A update to a code that failed for some error. */\r\n export interface UpdateProblem {\r\n /** The properties of the code that was to be updated */\r\n readonly prop: UpdatedCode;\r\n /** the reason for the failure */\r\n readonly errorId: ErrorId;\r\n /** the error message from the exception for the update request. */\r\n readonly message: string;\r\n }\r\n\r\n /**\r\n * A sequence of code values following a increasing pattern. Valid code sequences must have a first value, a last value, and\r\n * a way to get the next valid value from an existing valid value.\r\n * Code sequences have a `sequenceName` so they can be registered using `CodeService.registerSequence`.\r\n */\r\n export interface CodeSequence {\r\n /** the name of this CodeSequence. */\r\n get sequenceName(): string;\r\n /** Get the first valid value for this CodeSequence */\r\n getFirstValue(): CodeValue;\r\n /** Get the last valid value for this CodeSequence */\r\n getLastValue(): CodeValue;\r\n /** Get the next valid value for this CodeSequence from the supplied value.\r\n * If the sequence is full (that is, the next value is greater than the last value, this method should throw with errorId=\"SequenceFull\".\r\n * @return the next valid value according to the rules of this CodeSequence.\r\n */\r\n getNextValue(code: CodeValue): CodeValue;\r\n /** Determine whether this supplied value is valid for this sequence. */\r\n isValidCode(code: CodeValue): boolean;\r\n }\r\n\r\n /** Exception class thrown by `CodeService` methods. */\r\n export class Error extends BentleyError {\r\n /** A string that indicates the type of problem that caused the exception. */\r\n public readonly errorId: ErrorId;\r\n /** For [[CodeService.reserveCodes]] and [[CodeService.updateCodes]], a list of the problem details. */\r\n public readonly problems?: ReserveProblem[] | UpdateProblem[];\r\n\r\n /** @internal */\r\n constructor(errorId: ErrorId, errNum: number, message: string, problems?: ReserveProblem[] | UpdateProblem[]) {\r\n super(errNum, message);\r\n this.errorId = errorId;\r\n this.problems = problems;\r\n }\r\n }\r\n\r\n /** Identifiers for exceptions thrown by `CodeService` methods.\r\n * @see [[CodeService.Error.errorId]]\r\n */\r\n export type ErrorId =\r\n \"BadIndexProps\" |\r\n \"CorruptIModel\" |\r\n \"CorruptIndex\" |\r\n \"DuplicateValue\" |\r\n \"GuidIsInUse\" |\r\n \"GuidMismatch\" |\r\n \"IllegalValue\" |\r\n \"IndexReadonly\" |\r\n \"InvalidCodeScope\" |\r\n \"InvalidGuid\" |\r\n \"InvalidSequence\" |\r\n \"MissingCode\" |\r\n \"MissingGuid\" |\r\n \"MissingInput\" |\r\n \"MissingSpec\" |\r\n \"NoCodeIndex\" |\r\n \"SequenceFull\" |\r\n \"ReserveErrors\" |\r\n \"SequenceNotFound\" |\r\n \"SqlLogicError\" |\r\n \"UpdateErrors\" |\r\n \"ValueIsInUse\" |\r\n \"WrongVersion\";\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"CodeService.js","sourceRoot":"","sources":["../../src/CodeService.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAiH;AA+KjH,aAAa;AACb,IAAiB,WAAW,CA6U3B;AA7UD,WAAiB,WAAW;IAC1B,gBAAgB;IAChB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IAKtD,8EAA8E;IAC9E,SAAgB,gBAAgB,CAAC,GAAiB;QAChD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAFe,4BAAgB,mBAE/B,CAAA;IAED;;MAEE;IACF,SAAgB,WAAW,CAAC,IAAY;QACtC,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,iBAAiB,IAAI,YAAY,CAAC,CAAC;QAC7E,OAAO,GAAG,CAAC;IACb,CAAC;IALe,uBAAW,cAK1B,CAAA;IAED;;;;;OAKG;IACH,SAAgB,gBAAgB,CAAC,MAAgB,EAAE,IAAe;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,cAAc,CAAC;QAC3G,IAAI,SAAS,KAAK,KAAK;YACrB,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,2BAAY,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;QAEnH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC;IANe,4BAAgB,mBAM/B,CAAA;IAED;;OAEG;IACH,SAAgB,gBAAgB,CAAC,GAAqC;QACpE,OAAO;YACL,GAAG,GAAG,CAAC,KAAK;YACZ,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;YACrB,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;SAC1C,CAAC;IACJ,CAAC;IANe,4BAAgB,mBAM/B,CAAA;IAqPD,uDAAuD;IACvD,MAAa,KAAM,SAAQ,2BAAY;QAMrC,gBAAgB;QAChB,YAAY,OAAgB,EAAE,MAAc,EAAE,OAAe,EAAE,QAA6C;YAC1G,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;KACF;IAZY,iBAAK,QAYjB,CAAA;AA8BH,CAAC,EA7UgB,WAAW,GAAX,mBAAW,KAAX,mBAAW,QA6U3B","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*--------------------------------------------------------------------------------------------*/\n\nimport { AccessToken, BentleyError, GuidString, IModelStatus, MarkRequired, Mutable } from \"@itwin/core-bentley\";\nimport { CodeProps } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"./CloudSqlite\";\nimport { IModelDb } from \"./IModelDb\";\nimport { SettingObject } from \"./workspace/Settings\";\n\n/**\n * A readonly index of all known Codes for an iTwin. The CodeIndex may be slightly out-of-date\n * with the master copy in the cloud, but it should be periodically synchronized. Whenever codes are reserved/updated/deleted\n * locally, this copy is always up-to-date as of those changes.\n * @alpha\n */\nexport interface CodeIndex {\n /**\n * Find the next available value for the supplied `SequenceScope`.\n * If the sequence is full (there are no available values), this will throw an exception with `errorId=\"SequenceFull\"`\n * @param from the sequence and scope to search\n * @returns the next available CodeValue in the sequence.\n */\n findNextAvailable(from: CodeService.SequenceScope): CodeService.CodeValue;\n\n /**\n * Find the highest currently used value for the supplied `SequenceScope`\n * @param from the sequence and scope to search\n * @returns the highest used value, or undefined if no values have been used.\n */\n findHighestUsed(from: CodeService.SequenceScope): CodeService.CodeValue | undefined;\n\n /** Determine whether a code is present in this CodeIndex by its Guid. */\n isCodePresent(guid: CodeService.CodeGuid): boolean;\n\n /** Get the data for a code in this CodeIndex by its Guid.\n * @returns the data for the code or undefined if no code is present for the supplied Guid.\n */\n getCode(guid: CodeService.CodeGuid): CodeService.CodeEntry | undefined;\n\n /** Look up a code by its Scope, Spec, and Value.\n * @returns the Guid of the code, or undefined if not present.\n */\n findCode(code: CodeService.ScopeSpecAndValue): CodeService.CodeGuid | undefined;\n\n /** Look up a code spec by its name\n * @throws if the spec is not present.\n */\n getCodeSpec(props: CodeService.CodeSpecName): CodeService.NameAndJson;\n\n /** Call a `CodeIteration` function for all codes in this index, optionally filtered by a `CodeFilter ` */\n forAllCodes(iter: CodeService.CodeIteration, filter?: CodeService.CodeFilter): void;\n\n /** Call an iteration function for all code specs in this index, optionally filtered by a `ValueFilter ` */\n forAllCodeSpecs(iter: CodeService.NameAndJsonIteration, filter?: CodeService.ValueFilter): void;\n}\n\n/**\n * The services for querying, reserving, updating, and deleting codes for a BriefcaseDb (available via `BriefcaseDb.codeService`) whenever it is opened for write access.\n * @alpha\n */\nexport interface CodeService {\n /** @internal */\n close: () => void;\n\n /** @internal */\n addAllCodeSpecs(iModel: IModelDb): Promise<void>;\n\n /** the code index for this CodeService */\n readonly codeIndex: CodeIndex;\n\n /**\n * Application-supplied parameters for obtaining the write lock on the container.\n * Applications should set these parameters by adding a listener for `BriefcaseDb.onCodeServiceCreated`\n * that is called every time a BriefcaseDb that uses code services is opened for write access.\n */\n readonly lockParams: CloudSqlite.ObtainLockParams;\n\n /**\n * Application-supplied parameters for reserving new codes.\n * @see lockParams\n */\n readonly appParams: CodeService.AuthorAndOrigin;\n\n /**\n * The token that grants access to the cloud container for this CodeService.\n * It should be established in a listener for `BriefcaseDb.onCodeServiceCreated`, and should be refreshed (via a\n * timer) before it expires.\n */\n sasToken: AccessToken;\n\n /**\n * Synchronize the local index with any changes by made by others.\n * @note This is called automatically whenever any write operation is performed on the code index. It is only necessary to\n * call this directly if you have not changed the code index recently, but wish to perform a readonly operation and want to\n * ensure it is up-to-date as of now.\n * @note There is no guarantee that a readonly index is up-to-date even immediately after calling this method, since others\n * may be modifying it at any time.\n */\n synchronizeWithCloud(): void;\n\n /**\n * Verify that the Code of a to-be-inserted or to-be-updated Element:\n * 1. has already been reserved,\n * 2. if the element has a `federationGuid`, it must match the reserved value. If the federationGuid is undefined,\n * the value from the code index is returned.\n *\n * If not, throw an exception. Elements with no CodeValue are ignored.\n * @note this method is automatically called whenever elements are added or updated by a BriefcaseDb with a CodeService.\n */\n verifyCode(props: CodeService.ElementCodeProps): void;\n\n /** Add a new code spec to this code service.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n */\n addCodeSpec(val: CodeService.NameAndJson): Promise<void>;\n\n /**\n * Add all of the codes and code specs from this CodeService's BriefcaseDb into the code index.\n * @returns the number of codes actually added.\n * @note It is not necessary to call this method unless the BriefcaseDb somehow becomes out of sync with its CodeService,\n * for example when migrating iModels to a new code service. It is safe (but relatively expensive) to call this method multiple times, since\n * any codes or code specs that are already in the index are ignored.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n */\n addAllCodes(iModel: IModelDb): Promise<number>;\n\n /**\n * Attempt to reserve a single proposed code.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n * @throws `CodeService.Error` if the proposed code cannot be reserved.\n */\n reserveCode(code: CodeService.ProposedCode): Promise<void>;\n\n /**\n * Attempt to reserve an array of proposed codes.\n * @returns number of codes actually reserved.\n * @see the `problems` member of the `CodeService.Error` exception\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n * @note If you have a set of codes to reserve, it is considerably more efficient to do them as an array rather than one at a time.\n * @throws `CodeService.Error` if any of the proposed code cannot be reserved. The details for each failed code are in the `problems` member.\n */\n reserveCodes(arg: CodeService.ReserveCodesArgs): Promise<number>;\n\n /**\n * Attempt to reserve the next available code for a code sequence and scope.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n */\n reserveNextAvailableCode(arg: CodeService.ReserveNextArgs): Promise<void>;\n\n /**\n * Attempt to reserve an array of the next available codes for a code sequence and scope.\n * The length of the array determines the number of codes requested. The values for the new codes are returned\n * in the array, so they can be associated with the supplied GUIDs.\n * @returns number of codes actually reserved.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n */\n reserveNextAvailableCodes(arg: CodeService.ReserveNextArrayArgs): Promise<number>;\n\n /**\n * Update the properties of a single code.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n */\n updateCode(props: CodeService.UpdatedCode): Promise<void>;\n\n /**\n * Update the properties of an array codes.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n * @note If you have a set of codes to update, it is considerably more efficient to do them as an array rather than one at a time.\n * @returns number of codes actually updated.\n */\n updateCodes(arg: CodeService.UpdateCodesArgs): Promise<number>;\n\n /** Delete an array of codes by their guids.\n * @note This will automatically attempt to obtain, perform the operation, and then release the write lock.\n */\n deleteCodes(guid: CodeService.CodeGuid[]): Promise<void>;\n}\n\n/** @alpha */\nexport namespace CodeService {\n /** @internal */\n const codeSequences = new Map<string, CodeSequence>();\n\n /** @internal */\n export let createForIModel: ((db: IModelDb) => CodeService) | undefined;\n\n /** Register an instance of a`CodeSequence` so it can be looked up by name. */\n export function registerSequence(seq: CodeSequence) {\n codeSequences.set(seq.sequenceName, seq);\n }\n\n /** Get a previously registered `CodeSequence` by its name.\n * @throws if no sequence by that name was registered.\n */\n export function getSequence(name: string): CodeSequence {\n const seq = codeSequences.get(name);\n if (!seq)\n throw new Error(\"SequenceNotFound\", -1, `code sequence ${name} not found`);\n return seq;\n }\n\n /**\n * Turn a `CodePops` for the briefcase of this CodeService into a `ScopeAndSpec` object for use with a CodeService.\n * This is necessary because the `spec` member of `CodeProps` refers to the id of a code spec in the iModel, and\n * the `scope` member refers to the element Id of the scope element in the iModel. This helper function\n * converts the spec Id to the spec name and looks up the `FederationGuid` of the scope element.\n */\n export function makeScopeAndSpec(iModel: IModelDb, code: CodeProps): CodeService.ScopeAndSpec {\n const scope = iModel.elements.getElementProps({ id: code.scope, onlyBaseProperties: true }).federationGuid;\n if (undefined === scope)\n throw new CodeService.Error(\"MissingGuid\", IModelStatus.InvalidCode, \"code scope element has no federationGuid\");\n\n return { scope, spec: iModel.codeSpecs.getById(code.spec).name };\n }\n\n /** Turn a `CodeProps` and `ProposedCodeProps` into a `ProposedCode` for use with a CodeService.\n * @see [[makeScopeAndSpec]] for explanation of why this is necessary.\n */\n export function makeProposedCode(arg: CodeService.MakeProposedCodeArgs): CodeService.ProposedCode {\n return {\n ...arg.props,\n value: arg.code.value,\n ...makeScopeAndSpec(arg.iModel, arg.code),\n };\n }\n\n /** The name of a code spec */\n export type CodeSpecName = string;\n\n /** The name that identifies the \"originator\" of a code. Usually this is the Guid of the iModel from which a code was added,\n * but can also be used to identify a system or type from an external code service. */\n export type CodeOriginName = string;\n\n /** The name that identifies the \"author\" of a code. Generally, this is intended to be the name of a person or group that helps identify the purpose of the code. */\n export type AuthorName = string;\n\n /** The value for a code. */\n export type CodeValue = string;\n\n /** The guid for a code. This identifies the real-world entity associated with the code. */\n export type CodeGuid = GuidString;\n\n /** The guid of the scope for a code. This identifies the real-world entity that provides the uniqueness scope for code values. */\n export type ScopeGuid = GuidString;\n\n /** An optional number associated with a code that may be used for \"status\" information. Values must be defined by applications. */\n export type CodeState = number;\n\n /** The return status of an iteration function. The value \"stop\" causes the iteration to terminate. */\n export type IterationReturn = void | \"stop\";\n\n /** An iteration function over codes in a code index. It is called with the Guid of a each code. */\n export type CodeIteration = (guid: GuidString) => IterationReturn;\n\n /** An iteration function over code specs in a code index. It is called with the name and json of a each code spec. */\n export type NameAndJsonIteration = (nameAndJson: NameAndJson) => IterationReturn;\n\n /** Argument for reserving an array of new codes. */\n export interface ReserveCodesArgs {\n /** an array of proposed codes to reserve.\n * @note the guid of each proposed code must be supplied by the caller.\n */\n readonly codes: CodeService.ProposedCode[];\n /** If true, unless all codes are available, don't reserve any codes. Otherwise reserve all available codes. */\n readonly allOrNothing?: true;\n }\n\n /** Argument for reserving a code from a code sequence. */\n export interface ReserveNextArgs {\n /** the properties of the new code */\n readonly code: CodeService.ProposedCodeProps;\n /** The code sequence and scope for the new code. */\n readonly from: SequenceScope;\n }\n\n /** Argument for reserving an array of codes from a code sequence. */\n export interface ReserveNextArrayArgs {\n /** an array of proposed codes to reserve. */\n readonly codes: CodeService.ProposedCodeProps[];\n /** The code sequence and scope for the new codes. */\n readonly from: CodeService.SequenceScope;\n /** If true, and in the event that the code sequence does not have enough available codes to fulfill all the entries in `codes`,\n * return as many as possible. Otherwise no codes are reserved. The `problems` member of the exception can be used to determine how many codes were available.\n * @note if `asManyAsPossible` is true, no error is thrown if the sequence becomes full. You must check the return value to see how many\n * were actually available. The `value` member will be undefined for any proposed codes that were not reserved.\n */\n readonly asManyAsPossible?: true;\n }\n\n /** Argument for updating an array of codes. */\n export interface UpdateCodesArgs {\n /** Properties of the codes to update */\n readonly props: CodeService.UpdatedCode[];\n /** If true, unless all codes are updated, don't update any codes. Otherwise update all possible codes. */\n readonly allOrNothing?: true;\n }\n\n /** Arguments for CodeService.makeProposedCode */\n export interface MakeProposedCodeArgs {\n readonly iModel: IModelDb;\n readonly code: Required<CodeProps>;\n readonly props: CodeService.CodeGuidStateJson;\n }\n\n /** The properties of an Element to be checked against the code index.\n * @see CodeService.verifyCode\n */\n export interface ElementCodeProps {\n /** iModel from which the code is being inserted/updated. */\n readonly iModel: IModelDb;\n /** Properties of the code */\n readonly props: {\n /** The imodel-specific code properties. */\n readonly code: CodeProps;\n /**\n * The federationGuid of the element being inserted or updated.\n * If federationGuid is defined, it is must match the value in the code index or an error is thrown.\n * If it is undefined, the value from the code index is returned here.\n */\n federationGuid?: GuidString;\n };\n }\n\n /** a name and a json object. Used for code specs, authors and origins. */\n export interface NameAndJson {\n readonly name: string;\n readonly json?: SettingObject;\n }\n\n /** A code Scope guid, and code spec name. */\n export interface ScopeAndSpec {\n readonly spec: CodeSpecName;\n readonly scope: ScopeGuid;\n }\n\n /** A code Scope guid, code spec, and code value. */\n export interface ScopeSpecAndValue extends ScopeAndSpec {\n readonly value: CodeValue;\n }\n\n /** The data held in a code index for a single code. */\n export interface CodeEntry {\n /** The name of the code spec for this code. */\n readonly spec: CodeSpecName;\n /** The guid of the entity that provides the scope for this code. */\n readonly scope: ScopeGuid;\n /** The value of this code. */\n readonly value: CodeValue;\n /** The guid of the entity this code identifies. */\n readonly guid: CodeGuid;\n /** the state of the code. May be undefined. */\n readonly state?: CodeState;\n /** The name of the originating source of this code (usually an iModel Guid). May be undefined. */\n readonly origin: CodeOriginName;\n /** The name of the author of this code. May be undefined. */\n readonly author?: AuthorName;\n /** Option json properties associated with this code. May be undefined. */\n readonly json?: SettingObject;\n }\n\n /** A filter used to limit and/or sort the values returned by an iteration. */\n export interface ValueFilter {\n /** A value filter. May include wild cards when used with `GLOB` or `LIKE` */\n readonly value?: string;\n /** The comparison operator for `value`. Default is `=` */\n readonly valueCompare?: \"GLOB\" | \"LIKE\" | \"NOT GLOB\" | \"NOT LIKE\" | \"=\" | \"<\" | \">\";\n /** Order results ascending or descending. If not supplied, the results are unordered (random). */\n readonly orderBy?: \"ASC\" | \"DESC\";\n /** An SQL expression to further filter results. This string is appended to the `WHERE` clause with an `AND` (that should not be part of the sqlExpression) */\n readonly sqlExpression?: string;\n }\n\n /** A filter to limit and/or sort the values for the [[CodeIndex.forAllCodes]] iteration. */\n export interface CodeFilter extends ValueFilter {\n /** If supplied, limit results to only those with this spec */\n readonly spec?: CodeSpecName;\n /** If supplied, limit results to only those with this scope Guid */\n readonly scope?: ScopeGuid;\n /** If supplied, limit results to only those with this origin */\n readonly origin?: CodeOriginName;\n }\n\n /** Author and origin information supplied when codes are reserved. */\n export interface AuthorAndOrigin {\n /** The name of the individual or group for whom the code was reserved. */\n readonly author: Mutable<NameAndJson>;\n /** The identity of the \"originator\" of the code. This is usually a guid of an iModel, but can be any unique string. */\n readonly origin: Mutable<NameAndJson>;\n }\n\n /** The Guid, state, and json properties of a code. */\n export interface CodeGuidStateJson {\n /** The Guid of the new code. This must be always be supplied by the application. */\n readonly guid: CodeGuid;\n /** An optional value for the state of the code. */\n readonly state?: CodeState;\n /** An optional json object to be stored with the code. */\n readonly json?: SettingObject;\n }\n\n /** Properties of a \"proposed\" new code to be reserved.\n * @note the Guid of the entity identified by this code *must* be supplied, but `value` is optional, since\n * this may be used to reserve codes from a sequence where the value is generated.\n */\n export interface ProposedCodeProps extends CodeGuidStateJson {\n /** The value for the proposed code.\n * @note For code sequence operations, this value is ignored on input and is set with a new value from the sequence on successful return.\n */\n value?: CodeValue;\n }\n\n /** Properties of a proposed new code that is not from a code sequence (its `value` is required). */\n export type ProposedCode = ProposedCodeProps & ScopeSpecAndValue;\n\n /** Properties that describe a code sequence and a scope and spec for a proposed code or array of codes from a sequence. */\n export interface SequenceScope extends ScopeAndSpec {\n /** The code sequence. */\n readonly seq: CodeSequence;\n /** A valid current value. If supplied, the returned value will always be later in the sequence than this. */\n readonly start?: CodeValue;\n }\n\n /** Properties of a code to be updated.\n * @note The `guid` member identifies the code to be updated and is required.\n * All other properties are optional - if `undefined`, its value is not changed.\n */\n export type UpdatedCode = MarkRequired<Partial<ProposedCode>, \"guid\">;\n\n /** A proposed code that could not be reserved due to some error. */\n export interface ReserveProblem {\n /** the proposed code that failed. */\n readonly code: ProposedCode;\n /** the reason for the failure */\n readonly errorId: ErrorId;\n /** the error message from the exception for this proposed code. */\n readonly message: string;\n }\n\n /** A update to a code that failed for some error. */\n export interface UpdateProblem {\n /** The properties of the code that was to be updated */\n readonly prop: UpdatedCode;\n /** the reason for the failure */\n readonly errorId: ErrorId;\n /** the error message from the exception for the update request. */\n readonly message: string;\n }\n\n /**\n * A sequence of code values following a increasing pattern. Valid code sequences must have a first value, a last value, and\n * a way to get the next valid value from an existing valid value.\n * Code sequences have a `sequenceName` so they can be registered using `CodeService.registerSequence`.\n */\n export interface CodeSequence {\n /** the name of this CodeSequence. */\n get sequenceName(): string;\n /** Get the first valid value for this CodeSequence */\n getFirstValue(): CodeValue;\n /** Get the last valid value for this CodeSequence */\n getLastValue(): CodeValue;\n /** Get the next valid value for this CodeSequence from the supplied value.\n * If the sequence is full (that is, the next value is greater than the last value, this method should throw with errorId=\"SequenceFull\".\n * @return the next valid value according to the rules of this CodeSequence.\n */\n getNextValue(code: CodeValue): CodeValue;\n /** Determine whether this supplied value is valid for this sequence. */\n isValidCode(code: CodeValue): boolean;\n }\n\n /** Exception class thrown by `CodeService` methods. */\n export class Error extends BentleyError {\n /** A string that indicates the type of problem that caused the exception. */\n public readonly errorId: ErrorId;\n /** For [[CodeService.reserveCodes]] and [[CodeService.updateCodes]], a list of the problem details. */\n public readonly problems?: ReserveProblem[] | UpdateProblem[];\n\n /** @internal */\n constructor(errorId: ErrorId, errNum: number, message: string, problems?: ReserveProblem[] | UpdateProblem[]) {\n super(errNum, message);\n this.errorId = errorId;\n this.problems = problems;\n }\n }\n\n /** Identifiers for exceptions thrown by `CodeService` methods.\n * @see [[CodeService.Error.errorId]]\n */\n export type ErrorId =\n \"BadIndexProps\" |\n \"CorruptIModel\" |\n \"CorruptIndex\" |\n \"DuplicateValue\" |\n \"GuidIsInUse\" |\n \"GuidMismatch\" |\n \"IllegalValue\" |\n \"IndexReadonly\" |\n \"InvalidCodeScope\" |\n \"InvalidGuid\" |\n \"InvalidSequence\" |\n \"MissingCode\" |\n \"MissingGuid\" |\n \"MissingInput\" |\n \"MissingSpec\" |\n \"NoCodeIndex\" |\n \"SequenceFull\" |\n \"ReserveErrors\" |\n \"SequenceNotFound\" |\n \"SqlLogicError\" |\n \"UpdateErrors\" |\n \"ValueIsInUse\" |\n \"WrongVersion\";\n\n}\n"]}
@@ -1,51 +1,51 @@
1
- /** @packageDocumentation
2
- * @module Codes
3
- */
4
- import { Id64String } from "@itwin/core-bentley";
5
- import { CodeScopeSpec, CodeSpec } from "@itwin/core-common";
6
- import { IModelDb } from "./IModelDb";
7
- /** Manages [CodeSpecs]($docs/BIS/guide/fundamentals/element-fundamentals.md#codespec) within an [[IModelDb]]
8
- * @public
9
- */
10
- export declare class CodeSpecs {
11
- private _imodel;
12
- private _loadedCodeSpecs;
13
- constructor(imodel: IModelDb);
14
- /** Look up the Id of the CodeSpec with the specified name. */
15
- queryId(name: string): Id64String;
16
- /** Look up a CodeSpec by Id. The CodeSpec will be loaded from the database if necessary.
17
- * @param codeSpecId The Id of the CodeSpec to load
18
- * @returns The CodeSpec with the specified Id
19
- * @throws [[IModelError]] if the Id is invalid or if no CodeSpec with that Id could be found.
20
- */
21
- getById(codeSpecId: Id64String): CodeSpec;
22
- /** Returns true if the IModelDb has a CodeSpec of the specified Id. */
23
- hasId(codeSpecId: Id64String): boolean;
24
- /** Look up a CodeSpec by name. The CodeSpec will be loaded from the database if necessary.
25
- * @param name The name of the CodeSpec to load
26
- * @returns The CodeSpec with the specified name
27
- * @throws [[IModelError]] if no CodeSpec with the specified name could be found.
28
- */
29
- getByName(name: string): CodeSpec;
30
- /** Returns true if the IModelDb has a CodeSpec of the specified name. */
31
- hasName(name: string): boolean;
32
- /** Add a new CodeSpec to the iModel.
33
- * @param codeSpec The CodeSpec to insert
34
- * @returns The Id of the persistent CodeSpec.
35
- * @note If successful, this method will assign a valid CodeSpecId to the supplied CodeSpec
36
- * @throws IModelError if the insertion fails
37
- */
38
- insert(codeSpec: CodeSpec): Id64String;
39
- /** Add a new CodeSpec to the IModelDb.
40
- * @param name The name for the new CodeSpec.
41
- * @param scopeType The scope type
42
- * @returns The Id of the persistent CodeSpec.
43
- * @throws IModelError if the insertion fails
44
- */
45
- insert(name: string, scopeType: CodeScopeSpec.Type): Id64String;
46
- /** Load a CodeSpec from the iModel
47
- * @param id The persistent Id of the CodeSpec to load
48
- */
49
- load(id: Id64String): CodeSpec;
50
- }
1
+ /** @packageDocumentation
2
+ * @module Codes
3
+ */
4
+ import { Id64String } from "@itwin/core-bentley";
5
+ import { CodeScopeSpec, CodeSpec } from "@itwin/core-common";
6
+ import { IModelDb } from "./IModelDb";
7
+ /** Manages [CodeSpecs]($docs/BIS/guide/fundamentals/element-fundamentals.md#codespec) within an [[IModelDb]]
8
+ * @public
9
+ */
10
+ export declare class CodeSpecs {
11
+ private _imodel;
12
+ private _loadedCodeSpecs;
13
+ constructor(imodel: IModelDb);
14
+ /** Look up the Id of the CodeSpec with the specified name. */
15
+ queryId(name: string): Id64String;
16
+ /** Look up a CodeSpec by Id. The CodeSpec will be loaded from the database if necessary.
17
+ * @param codeSpecId The Id of the CodeSpec to load
18
+ * @returns The CodeSpec with the specified Id
19
+ * @throws [[IModelError]] if the Id is invalid or if no CodeSpec with that Id could be found.
20
+ */
21
+ getById(codeSpecId: Id64String): CodeSpec;
22
+ /** Returns true if the IModelDb has a CodeSpec of the specified Id. */
23
+ hasId(codeSpecId: Id64String): boolean;
24
+ /** Look up a CodeSpec by name. The CodeSpec will be loaded from the database if necessary.
25
+ * @param name The name of the CodeSpec to load
26
+ * @returns The CodeSpec with the specified name
27
+ * @throws [[IModelError]] if no CodeSpec with the specified name could be found.
28
+ */
29
+ getByName(name: string): CodeSpec;
30
+ /** Returns true if the IModelDb has a CodeSpec of the specified name. */
31
+ hasName(name: string): boolean;
32
+ /** Add a new CodeSpec to the iModel.
33
+ * @param codeSpec The CodeSpec to insert
34
+ * @returns The Id of the persistent CodeSpec.
35
+ * @note If successful, this method will assign a valid CodeSpecId to the supplied CodeSpec
36
+ * @throws IModelError if the insertion fails
37
+ */
38
+ insert(codeSpec: CodeSpec): Id64String;
39
+ /** Add a new CodeSpec to the IModelDb.
40
+ * @param name The name for the new CodeSpec.
41
+ * @param scopeType The scope type
42
+ * @returns The Id of the persistent CodeSpec.
43
+ * @throws IModelError if the insertion fails
44
+ */
45
+ insert(name: string, scopeType: CodeScopeSpec.Type): Id64String;
46
+ /** Load a CodeSpec from the iModel
47
+ * @param id The persistent Id of the CodeSpec to load
48
+ */
49
+ load(id: Id64String): CodeSpec;
50
+ }
51
51
  //# sourceMappingURL=CodeSpecs.d.ts.map
@@ -1,113 +1,113 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module Codes
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.CodeSpecs = void 0;
11
- const core_bentley_1 = require("@itwin/core-bentley");
12
- const core_common_1 = require("@itwin/core-common");
13
- /** Manages [CodeSpecs]($docs/BIS/guide/fundamentals/element-fundamentals.md#codespec) within an [[IModelDb]]
14
- * @public
15
- */
16
- class CodeSpecs {
17
- constructor(imodel) {
18
- this._loadedCodeSpecs = [];
19
- this._imodel = imodel;
20
- if (imodel.isBriefcaseDb()) {
21
- imodel.onChangesetApplied.addListener(() => this._loadedCodeSpecs.length = 0);
22
- }
23
- }
24
- /** Look up the Id of the CodeSpec with the specified name. */
25
- queryId(name) {
26
- return this._imodel.withPreparedStatement("SELECT ECInstanceId FROM BisCore.CodeSpec WHERE Name=:name", (stmt) => {
27
- stmt.bindString("name", name);
28
- if (core_bentley_1.DbResult.BE_SQLITE_ROW !== stmt.step())
29
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "CodeSpec not found", () => ({ name }));
30
- return stmt.getValue(0).getId();
31
- });
32
- }
33
- /** Look up a CodeSpec by Id. The CodeSpec will be loaded from the database if necessary.
34
- * @param codeSpecId The Id of the CodeSpec to load
35
- * @returns The CodeSpec with the specified Id
36
- * @throws [[IModelError]] if the Id is invalid or if no CodeSpec with that Id could be found.
37
- */
38
- getById(codeSpecId) {
39
- if (core_bentley_1.Id64.isInvalid(codeSpecId))
40
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.InvalidId, "Invalid codeSpecId");
41
- // good chance it is already loaded - check there before running a query
42
- const found = this._loadedCodeSpecs.find((codeSpec) => codeSpec.id === codeSpecId);
43
- if (found !== undefined)
44
- return found;
45
- // must load this codespec
46
- const loadedCodeSpec = this.load(codeSpecId);
47
- this._loadedCodeSpecs.push(loadedCodeSpec);
48
- return loadedCodeSpec;
49
- }
50
- /** Returns true if the IModelDb has a CodeSpec of the specified Id. */
51
- hasId(codeSpecId) {
52
- try {
53
- return undefined !== this.getById(codeSpecId);
54
- }
55
- catch (error) {
56
- return false;
57
- }
58
- }
59
- /** Look up a CodeSpec by name. The CodeSpec will be loaded from the database if necessary.
60
- * @param name The name of the CodeSpec to load
61
- * @returns The CodeSpec with the specified name
62
- * @throws [[IModelError]] if no CodeSpec with the specified name could be found.
63
- */
64
- getByName(name) {
65
- // good chance it is already loaded - check there before running a query
66
- const found = this._loadedCodeSpecs.find((codeSpec) => codeSpec.name === name);
67
- if (found !== undefined)
68
- return found;
69
- const codeSpecId = this.queryId(name);
70
- if (codeSpecId === undefined)
71
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "CodeSpec not found", () => ({ name }));
72
- return this.getById(codeSpecId);
73
- }
74
- /** Returns true if the IModelDb has a CodeSpec of the specified name. */
75
- hasName(name) {
76
- try {
77
- return undefined !== this.getByName(name);
78
- }
79
- catch (error) {
80
- return false;
81
- }
82
- }
83
- insert(codeSpecOrName, scopeType) {
84
- if (codeSpecOrName instanceof core_common_1.CodeSpec) {
85
- const codeSpec = codeSpecOrName;
86
- const id = this._imodel.insertCodeSpec(codeSpec);
87
- codeSpec.id = id;
88
- return id;
89
- }
90
- if (typeof codeSpecOrName === "string") {
91
- const name = codeSpecOrName;
92
- if (scopeType)
93
- return this._imodel.insertCodeSpec(core_common_1.CodeSpec.create(this._imodel, name, scopeType));
94
- }
95
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.BadArg, "Invalid argument");
96
- }
97
- /** Load a CodeSpec from the iModel
98
- * @param id The persistent Id of the CodeSpec to load
99
- */
100
- load(id) {
101
- if (core_bentley_1.Id64.isInvalid(id))
102
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.InvalidId, "Invalid codeSpecId");
103
- return this._imodel.withPreparedStatement("SELECT name,jsonProperties FROM BisCore.CodeSpec WHERE ECInstanceId=?", (stmt) => {
104
- stmt.bindId(1, id);
105
- if (core_bentley_1.DbResult.BE_SQLITE_ROW !== stmt.step())
106
- throw new core_common_1.IModelError(core_bentley_1.IModelStatus.InvalidId, "Invalid codeSpecId");
107
- const row = stmt.getRow();
108
- return core_common_1.CodeSpec.createFromJson(this._imodel, id, row.name, JSON.parse(row.jsonProperties));
109
- });
110
- }
111
- }
112
- exports.CodeSpecs = CodeSpecs;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Codes
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.CodeSpecs = void 0;
11
+ const core_bentley_1 = require("@itwin/core-bentley");
12
+ const core_common_1 = require("@itwin/core-common");
13
+ /** Manages [CodeSpecs]($docs/BIS/guide/fundamentals/element-fundamentals.md#codespec) within an [[IModelDb]]
14
+ * @public
15
+ */
16
+ class CodeSpecs {
17
+ constructor(imodel) {
18
+ this._loadedCodeSpecs = [];
19
+ this._imodel = imodel;
20
+ if (imodel.isBriefcaseDb()) {
21
+ imodel.onChangesetApplied.addListener(() => this._loadedCodeSpecs.length = 0);
22
+ }
23
+ }
24
+ /** Look up the Id of the CodeSpec with the specified name. */
25
+ queryId(name) {
26
+ return this._imodel.withPreparedStatement("SELECT ECInstanceId FROM BisCore.CodeSpec WHERE Name=:name", (stmt) => {
27
+ stmt.bindString("name", name);
28
+ if (core_bentley_1.DbResult.BE_SQLITE_ROW !== stmt.step())
29
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "CodeSpec not found", () => ({ name }));
30
+ return stmt.getValue(0).getId();
31
+ });
32
+ }
33
+ /** Look up a CodeSpec by Id. The CodeSpec will be loaded from the database if necessary.
34
+ * @param codeSpecId The Id of the CodeSpec to load
35
+ * @returns The CodeSpec with the specified Id
36
+ * @throws [[IModelError]] if the Id is invalid or if no CodeSpec with that Id could be found.
37
+ */
38
+ getById(codeSpecId) {
39
+ if (core_bentley_1.Id64.isInvalid(codeSpecId))
40
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.InvalidId, "Invalid codeSpecId");
41
+ // good chance it is already loaded - check there before running a query
42
+ const found = this._loadedCodeSpecs.find((codeSpec) => codeSpec.id === codeSpecId);
43
+ if (found !== undefined)
44
+ return found;
45
+ // must load this codespec
46
+ const loadedCodeSpec = this.load(codeSpecId);
47
+ this._loadedCodeSpecs.push(loadedCodeSpec);
48
+ return loadedCodeSpec;
49
+ }
50
+ /** Returns true if the IModelDb has a CodeSpec of the specified Id. */
51
+ hasId(codeSpecId) {
52
+ try {
53
+ return undefined !== this.getById(codeSpecId);
54
+ }
55
+ catch (error) {
56
+ return false;
57
+ }
58
+ }
59
+ /** Look up a CodeSpec by name. The CodeSpec will be loaded from the database if necessary.
60
+ * @param name The name of the CodeSpec to load
61
+ * @returns The CodeSpec with the specified name
62
+ * @throws [[IModelError]] if no CodeSpec with the specified name could be found.
63
+ */
64
+ getByName(name) {
65
+ // good chance it is already loaded - check there before running a query
66
+ const found = this._loadedCodeSpecs.find((codeSpec) => codeSpec.name === name);
67
+ if (found !== undefined)
68
+ return found;
69
+ const codeSpecId = this.queryId(name);
70
+ if (codeSpecId === undefined)
71
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.NotFound, "CodeSpec not found", () => ({ name }));
72
+ return this.getById(codeSpecId);
73
+ }
74
+ /** Returns true if the IModelDb has a CodeSpec of the specified name. */
75
+ hasName(name) {
76
+ try {
77
+ return undefined !== this.getByName(name);
78
+ }
79
+ catch (error) {
80
+ return false;
81
+ }
82
+ }
83
+ insert(codeSpecOrName, scopeType) {
84
+ if (codeSpecOrName instanceof core_common_1.CodeSpec) {
85
+ const codeSpec = codeSpecOrName;
86
+ const id = this._imodel.insertCodeSpec(codeSpec);
87
+ codeSpec.id = id;
88
+ return id;
89
+ }
90
+ if (typeof codeSpecOrName === "string") {
91
+ const name = codeSpecOrName;
92
+ if (scopeType)
93
+ return this._imodel.insertCodeSpec(core_common_1.CodeSpec.create(this._imodel, name, scopeType));
94
+ }
95
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.BadArg, "Invalid argument");
96
+ }
97
+ /** Load a CodeSpec from the iModel
98
+ * @param id The persistent Id of the CodeSpec to load
99
+ */
100
+ load(id) {
101
+ if (core_bentley_1.Id64.isInvalid(id))
102
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.InvalidId, "Invalid codeSpecId");
103
+ return this._imodel.withPreparedStatement("SELECT name,jsonProperties FROM BisCore.CodeSpec WHERE ECInstanceId=?", (stmt) => {
104
+ stmt.bindId(1, id);
105
+ if (core_bentley_1.DbResult.BE_SQLITE_ROW !== stmt.step())
106
+ throw new core_common_1.IModelError(core_bentley_1.IModelStatus.InvalidId, "Invalid codeSpecId");
107
+ const row = stmt.getRow();
108
+ return core_common_1.CodeSpec.createFromJson(this._imodel, id, row.name, JSON.parse(row.jsonProperties));
109
+ });
110
+ }
111
+ }
112
+ exports.CodeSpecs = CodeSpecs;
113
113
  //# sourceMappingURL=CodeSpecs.js.map