@itwin/imodel-transformer 2.0.0-dev.72 → 2.0.0-dev.74

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 (180) hide show
  1. package/README.md +11 -0
  2. package/lib/Algo.d.ts.map +1 -0
  3. package/lib/{cjs/Algo.js → Algo.js} +1 -4
  4. package/lib/Algo.js.map +1 -0
  5. package/lib/BigMap.d.ts.map +1 -0
  6. package/lib/{cjs/BigMap.js → BigMap.js} +1 -5
  7. package/lib/BigMap.js.map +1 -0
  8. package/lib/BranchProvenanceInitializer.d.ts.map +1 -0
  9. package/lib/{cjs/BranchProvenanceInitializer.js → BranchProvenanceInitializer.js} +34 -37
  10. package/lib/BranchProvenanceInitializer.js.map +1 -0
  11. package/lib/ChangedElementForest.d.ts.map +1 -0
  12. package/lib/{cjs/ChangedElementForest.js → ChangedElementForest.js} +12 -14
  13. package/lib/ChangedElementForest.js.map +1 -0
  14. package/lib/{cjs/ChangesetScanner.d.ts → ChangesetScanner.d.ts} +2 -2
  15. package/lib/ChangesetScanner.d.ts.map +1 -0
  16. package/lib/{cjs/ChangesetScanner.js → ChangesetScanner.js} +19 -24
  17. package/lib/ChangesetScanner.js.map +1 -0
  18. package/lib/ECReferenceTypesCache.d.ts.map +1 -0
  19. package/lib/{cjs/ECReferenceTypesCache.js → ECReferenceTypesCache.js} +32 -37
  20. package/lib/ECReferenceTypesCache.js.map +1 -0
  21. package/lib/ECSqlReaderAsyncIterableIteratorAdapter.d.ts.map +1 -0
  22. package/lib/{cjs/ECSqlReaderAsyncIterableIteratorAdapter.js → ECSqlReaderAsyncIterableIteratorAdapter.js} +2 -7
  23. package/lib/ECSqlReaderAsyncIterableIteratorAdapter.js.map +1 -0
  24. package/lib/ElementAspectCleanup.d.ts.map +1 -0
  25. package/lib/{cjs/ElementAspectCleanup.js → ElementAspectCleanup.js} +9 -13
  26. package/lib/ElementAspectCleanup.js.map +1 -0
  27. package/lib/ElementAspectExportCoordinator.d.ts.map +1 -0
  28. package/lib/{cjs/ElementAspectExportCoordinator.js → ElementAspectExportCoordinator.js} +1 -5
  29. package/lib/ElementAspectExportCoordinator.js.map +1 -0
  30. package/lib/ElementAspectExportProcessor.d.ts.map +1 -0
  31. package/lib/{cjs/ElementAspectExportProcessor.js → ElementAspectExportProcessor.js} +10 -14
  32. package/lib/ElementAspectExportProcessor.js.map +1 -0
  33. package/lib/ElementBulkDelete.d.ts.map +1 -0
  34. package/lib/{cjs/ElementBulkDelete.js → ElementBulkDelete.js} +9 -12
  35. package/lib/{cjs/ElementBulkDelete.js.map → ElementBulkDelete.js.map} +1 -1
  36. package/lib/EntityExistenceCache.d.ts.map +1 -0
  37. package/lib/{cjs/EntityExistenceCache.js → EntityExistenceCache.js} +4 -8
  38. package/lib/EntityExistenceCache.js.map +1 -0
  39. package/lib/EntityUnifier.d.ts.map +1 -0
  40. package/lib/{cjs/EntityUnifier.js → EntityUnifier.js} +21 -22
  41. package/lib/EntityUnifier.js.map +1 -0
  42. package/lib/{cjs/IModelCloneContext.d.ts → IModelCloneContext.d.ts} +2 -2
  43. package/lib/IModelCloneContext.d.ts.map +1 -0
  44. package/lib/{cjs/IModelCloneContext.js → IModelCloneContext.js} +52 -56
  45. package/lib/IModelCloneContext.js.map +1 -0
  46. package/lib/{cjs/IModelExporter.d.ts → IModelExporter.d.ts} +1 -1
  47. package/lib/IModelExporter.d.ts.map +1 -0
  48. package/lib/{cjs/IModelExporter.js → IModelExporter.js} +165 -174
  49. package/lib/IModelExporter.js.map +1 -0
  50. package/lib/{cjs/IModelImporter.d.ts → IModelImporter.d.ts} +3 -3
  51. package/lib/IModelImporter.d.ts.map +1 -0
  52. package/lib/{cjs/IModelImporter.js → IModelImporter.js} +104 -109
  53. package/lib/IModelImporter.js.map +1 -0
  54. package/lib/IModelTransformContext.d.ts.map +1 -0
  55. package/lib/IModelTransformContext.js +2 -0
  56. package/lib/IModelTransformContext.js.map +1 -0
  57. package/lib/{cjs/IModelTransformer.d.ts → IModelTransformer.d.ts} +9 -6
  58. package/lib/IModelTransformer.d.ts.map +1 -0
  59. package/lib/{cjs/IModelTransformer.js → IModelTransformer.js} +297 -337
  60. package/lib/IModelTransformer.js.map +1 -0
  61. package/lib/IModelTransformerError.d.ts.map +1 -0
  62. package/lib/{cjs/IModelTransformerError.js → IModelTransformerError.js} +3 -6
  63. package/lib/IModelTransformerError.js.map +1 -0
  64. package/lib/{cjs/ProvenanceManager.d.ts → ProvenanceManager.d.ts} +3 -3
  65. package/lib/ProvenanceManager.d.ts.map +1 -0
  66. package/lib/{cjs/ProvenanceManager.js → ProvenanceManager.js} +69 -73
  67. package/lib/ProvenanceManager.js.map +1 -0
  68. package/lib/SourceClassKinds.d.ts.map +1 -0
  69. package/lib/{cjs/SourceClassKinds.js → SourceClassKinds.js} +1 -5
  70. package/lib/SourceClassKinds.js.map +1 -0
  71. package/lib/SyncTypeResolver.d.ts.map +1 -0
  72. package/lib/{cjs/SyncTypeResolver.js → SyncTypeResolver.js} +15 -19
  73. package/lib/SyncTypeResolver.js.map +1 -0
  74. package/lib/TransformerLoggerCategory.d.ts.map +1 -0
  75. package/lib/{cjs/TransformerLoggerCategory.js → TransformerLoggerCategory.js} +2 -5
  76. package/lib/TransformerLoggerCategory.js.map +1 -0
  77. package/lib/TransformerPackageMetadata.d.ts.map +1 -0
  78. package/lib/TransformerPackageMetadata.js +8 -0
  79. package/lib/TransformerPackageMetadata.js.map +1 -0
  80. package/lib/{cjs/imodel-transformer.d.ts → imodel-transformer.d.ts} +9 -9
  81. package/lib/imodel-transformer.d.ts.map +1 -0
  82. package/lib/imodel-transformer.js +88 -0
  83. package/lib/imodel-transformer.js.map +1 -0
  84. package/lib/{cjs/schema-processing → schema-processing}/DynamicSchemaUnionStrategy.d.ts +1 -1
  85. package/lib/schema-processing/DynamicSchemaUnionStrategy.d.ts.map +1 -0
  86. package/lib/{cjs/schema-processing → schema-processing}/DynamicSchemaUnionStrategy.js +16 -20
  87. package/lib/schema-processing/DynamicSchemaUnionStrategy.js.map +1 -0
  88. package/lib/{cjs/schema-processing → schema-processing}/SchemaProcessingCoordinator.d.ts +2 -2
  89. package/lib/schema-processing/SchemaProcessingCoordinator.d.ts.map +1 -0
  90. package/lib/{cjs/schema-processing → schema-processing}/SchemaProcessingCoordinator.js +15 -52
  91. package/lib/schema-processing/SchemaProcessingCoordinator.js.map +1 -0
  92. package/lib/schema-processing/SchemaProcessingStrategy.d.ts.map +1 -0
  93. package/lib/{cjs/schema-processing → schema-processing}/SchemaProcessingStrategy.js +1 -5
  94. package/lib/schema-processing/SchemaProcessingStrategy.js.map +1 -0
  95. package/lib/schema-processing.d.ts +7 -0
  96. package/lib/schema-processing.d.ts.map +1 -0
  97. package/lib/schema-processing.js +11 -0
  98. package/lib/schema-processing.js.map +1 -0
  99. package/package.json +14 -14
  100. package/lib/cjs/Algo.d.ts.map +0 -1
  101. package/lib/cjs/Algo.js.map +0 -1
  102. package/lib/cjs/BigMap.d.ts.map +0 -1
  103. package/lib/cjs/BigMap.js.map +0 -1
  104. package/lib/cjs/BranchProvenanceInitializer.d.ts.map +0 -1
  105. package/lib/cjs/BranchProvenanceInitializer.js.map +0 -1
  106. package/lib/cjs/ChangedElementForest.d.ts.map +0 -1
  107. package/lib/cjs/ChangedElementForest.js.map +0 -1
  108. package/lib/cjs/ChangesetScanner.d.ts.map +0 -1
  109. package/lib/cjs/ChangesetScanner.js.map +0 -1
  110. package/lib/cjs/ECReferenceTypesCache.d.ts.map +0 -1
  111. package/lib/cjs/ECReferenceTypesCache.js.map +0 -1
  112. package/lib/cjs/ECSqlReaderAsyncIterableIteratorAdapter.d.ts.map +0 -1
  113. package/lib/cjs/ECSqlReaderAsyncIterableIteratorAdapter.js.map +0 -1
  114. package/lib/cjs/ElementAspectCleanup.d.ts.map +0 -1
  115. package/lib/cjs/ElementAspectCleanup.js.map +0 -1
  116. package/lib/cjs/ElementAspectExportCoordinator.d.ts.map +0 -1
  117. package/lib/cjs/ElementAspectExportCoordinator.js.map +0 -1
  118. package/lib/cjs/ElementAspectExportProcessor.d.ts.map +0 -1
  119. package/lib/cjs/ElementAspectExportProcessor.js.map +0 -1
  120. package/lib/cjs/ElementBulkDelete.d.ts.map +0 -1
  121. package/lib/cjs/EntityExistenceCache.d.ts.map +0 -1
  122. package/lib/cjs/EntityExistenceCache.js.map +0 -1
  123. package/lib/cjs/EntityUnifier.d.ts.map +0 -1
  124. package/lib/cjs/EntityUnifier.js.map +0 -1
  125. package/lib/cjs/IModelCloneContext.d.ts.map +0 -1
  126. package/lib/cjs/IModelCloneContext.js.map +0 -1
  127. package/lib/cjs/IModelExporter.d.ts.map +0 -1
  128. package/lib/cjs/IModelExporter.js.map +0 -1
  129. package/lib/cjs/IModelImporter.d.ts.map +0 -1
  130. package/lib/cjs/IModelImporter.js.map +0 -1
  131. package/lib/cjs/IModelTransformContext.d.ts.map +0 -1
  132. package/lib/cjs/IModelTransformContext.js +0 -3
  133. package/lib/cjs/IModelTransformContext.js.map +0 -1
  134. package/lib/cjs/IModelTransformer.d.ts.map +0 -1
  135. package/lib/cjs/IModelTransformer.js.map +0 -1
  136. package/lib/cjs/IModelTransformerError.d.ts.map +0 -1
  137. package/lib/cjs/IModelTransformerError.js.map +0 -1
  138. package/lib/cjs/ProvenanceManager.d.ts.map +0 -1
  139. package/lib/cjs/ProvenanceManager.js.map +0 -1
  140. package/lib/cjs/SourceClassKinds.d.ts.map +0 -1
  141. package/lib/cjs/SourceClassKinds.js.map +0 -1
  142. package/lib/cjs/SyncTypeResolver.d.ts.map +0 -1
  143. package/lib/cjs/SyncTypeResolver.js.map +0 -1
  144. package/lib/cjs/TransformerLoggerCategory.d.ts.map +0 -1
  145. package/lib/cjs/TransformerLoggerCategory.js.map +0 -1
  146. package/lib/cjs/TransformerPackageMetadata.d.ts.map +0 -1
  147. package/lib/cjs/TransformerPackageMetadata.js +0 -47
  148. package/lib/cjs/TransformerPackageMetadata.js.map +0 -1
  149. package/lib/cjs/imodel-transformer.d.ts.map +0 -1
  150. package/lib/cjs/imodel-transformer.js +0 -125
  151. package/lib/cjs/imodel-transformer.js.map +0 -1
  152. package/lib/cjs/schema-processing/DynamicSchemaUnionStrategy.d.ts.map +0 -1
  153. package/lib/cjs/schema-processing/DynamicSchemaUnionStrategy.js.map +0 -1
  154. package/lib/cjs/schema-processing/SchemaProcessingCoordinator.d.ts.map +0 -1
  155. package/lib/cjs/schema-processing/SchemaProcessingCoordinator.js.map +0 -1
  156. package/lib/cjs/schema-processing/SchemaProcessingStrategy.d.ts.map +0 -1
  157. package/lib/cjs/schema-processing/SchemaProcessingStrategy.js.map +0 -1
  158. package/lib/cjs/schema-processing.d.ts +0 -7
  159. package/lib/cjs/schema-processing.d.ts.map +0 -1
  160. package/lib/cjs/schema-processing.js +0 -27
  161. package/lib/cjs/schema-processing.js.map +0 -1
  162. /package/lib/{cjs/Algo.d.ts → Algo.d.ts} +0 -0
  163. /package/lib/{cjs/BigMap.d.ts → BigMap.d.ts} +0 -0
  164. /package/lib/{cjs/BranchProvenanceInitializer.d.ts → BranchProvenanceInitializer.d.ts} +0 -0
  165. /package/lib/{cjs/ChangedElementForest.d.ts → ChangedElementForest.d.ts} +0 -0
  166. /package/lib/{cjs/ECReferenceTypesCache.d.ts → ECReferenceTypesCache.d.ts} +0 -0
  167. /package/lib/{cjs/ECSqlReaderAsyncIterableIteratorAdapter.d.ts → ECSqlReaderAsyncIterableIteratorAdapter.d.ts} +0 -0
  168. /package/lib/{cjs/ElementAspectCleanup.d.ts → ElementAspectCleanup.d.ts} +0 -0
  169. /package/lib/{cjs/ElementAspectExportCoordinator.d.ts → ElementAspectExportCoordinator.d.ts} +0 -0
  170. /package/lib/{cjs/ElementAspectExportProcessor.d.ts → ElementAspectExportProcessor.d.ts} +0 -0
  171. /package/lib/{cjs/ElementBulkDelete.d.ts → ElementBulkDelete.d.ts} +0 -0
  172. /package/lib/{cjs/EntityExistenceCache.d.ts → EntityExistenceCache.d.ts} +0 -0
  173. /package/lib/{cjs/EntityUnifier.d.ts → EntityUnifier.d.ts} +0 -0
  174. /package/lib/{cjs/IModelTransformContext.d.ts → IModelTransformContext.d.ts} +0 -0
  175. /package/lib/{cjs/IModelTransformerError.d.ts → IModelTransformerError.d.ts} +0 -0
  176. /package/lib/{cjs/SourceClassKinds.d.ts → SourceClassKinds.d.ts} +0 -0
  177. /package/lib/{cjs/SyncTypeResolver.d.ts → SyncTypeResolver.d.ts} +0 -0
  178. /package/lib/{cjs/TransformerLoggerCategory.d.ts → TransformerLoggerCategory.d.ts} +0 -0
  179. /package/lib/{cjs/TransformerPackageMetadata.d.ts → TransformerPackageMetadata.d.ts} +0 -0
  180. /package/lib/{cjs/schema-processing → schema-processing}/SchemaProcessingStrategy.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProvenanceManager.js","sourceRoot":"","sources":["../../src/ProvenanceManager.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 {\n GuidString,\n Id64String,\n ITwinError,\n Logger,\n} from \"@itwin/core-bentley\";\nimport {\n EditTxn,\n ElementOwnsExternalSourceAspects,\n type Entity,\n ExternalSource,\n ExternalSourceAspect,\n ExternalSourceAttachment,\n FolderLink,\n IModelDb,\n SynchronizationConfigLink,\n} from \"@itwin/core-backend\";\nimport {\n ChangesetIndexAndId,\n ExternalSourceAspectProps,\n IModel,\n QueryBinder,\n} from \"@itwin/core-common\";\nimport { TransformerLoggerCategory } from \"./TransformerLoggerCategory\";\nimport type {\n IModelTransformOptions,\n TargetScopeProvenanceJsonProps,\n} from \"./IModelTransformer\";\nimport type { SyncTypeResolver } from \"./SyncTypeResolver\";\nimport type { IModelTransformContext } from \"./IModelTransformContext\";\nimport {\n IModelTransformerError,\n IModelTransformerErrorScope,\n} from \"./IModelTransformerError\";\n\nconst loggerCategory: string = TransformerLoggerCategory.IModelTransformer;\n\ntype ProvenanceContext = Pick<IModelTransformContext, \"findTargetElementId\"> & {\n readonly sourceDb: IModelDb;\n readonly targetDb: IModelDb;\n};\n\n/**\n * Manages provenance scope aspects and synchronization versioning.\n * Encapsulates all ESA scope management, sync version tracking, and\n * provenance DB direction logic extracted from IModelTransformer.\n * @internal\n */\nexport class ProvenanceManager {\n private readonly _context: ProvenanceContext;\n private readonly _targetScopeElementId: Id64String;\n private readonly _transformerOptions: IModelTransformOptions;\n private readonly _syncTypeResolver: SyncTypeResolver;\n private readonly _startingChangesetIndices?: {\n target: number;\n source: number;\n };\n\n /** NOTE: the json properties must be converted to string before insertion */\n private _targetScopeProvenanceProps:\n | (Omit<ExternalSourceAspectProps, \"jsonProperties\"> & {\n jsonProperties: TargetScopeProvenanceJsonProps;\n })\n | undefined = undefined;\n\n private _cachedSynchronizationVersion: ChangesetIndexAndId | undefined =\n undefined;\n\n private _targetClassNameToClassIdCache = new Map<string, string>();\n\n private readonly _targetEditTxn: EditTxn;\n private readonly _sourceEditTxn?: EditTxn;\n\n public constructor(\n targetScopeElementId: Id64String,\n transformerOptions: IModelTransformOptions,\n context: ProvenanceContext,\n syncTypeResolver: SyncTypeResolver,\n targetEditTxn: EditTxn,\n sourceEditTxn?: EditTxn\n ) {\n this._targetScopeElementId = targetScopeElementId;\n this._transformerOptions = transformerOptions;\n this._context = context;\n this._syncTypeResolver = syncTypeResolver;\n this._targetEditTxn = targetEditTxn;\n this._sourceEditTxn = sourceEditTxn;\n\n const sourceDb = this._context.sourceDb;\n const targetDb = this._context.targetDb;\n if (sourceDb.isBriefcase && targetDb.isBriefcase) {\n if (\n sourceDb.changeset.index === undefined ||\n targetDb.changeset.index === undefined\n )\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.ChangesetIndexUnavailable,\n },\n message: \"database has no changeset index\",\n });\n this._startingChangesetIndices = {\n target: targetDb.changeset.index,\n source: sourceDb.changeset.index,\n };\n }\n }\n\n private async _isReverseSynchronization(): Promise<boolean> {\n return (await this._syncTypeResolver.getSyncType()) === \"reverse\";\n }\n\n private async _queryTargetRelId(sourceRelInfo: {\n classFullName: string;\n sourceId: Id64String;\n targetId: Id64String;\n }): Promise<Id64String | undefined> {\n const targetRelInfo = {\n sourceId: this._context.findTargetElementId(sourceRelInfo.sourceId),\n targetId: this._context.findTargetElementId(sourceRelInfo.targetId),\n };\n if (\n targetRelInfo.sourceId === undefined ||\n targetRelInfo.targetId === undefined\n )\n return undefined;\n const sql = `\n select ecinstanceid\n from bis.elementreferstoelements\n where sourceecinstanceid=?\n and targetecinstanceid=?\n and ecclassid=?\n `;\n const params = new QueryBinder();\n params.bindId(1, targetRelInfo.sourceId);\n params.bindId(2, targetRelInfo.targetId);\n params.bindId(\n 3,\n await this._targetClassNameToClassId(sourceRelInfo.classFullName)\n );\n const result = this._context.targetDb.createQueryReader(sql, params, {\n usePrimaryConn: true,\n });\n if (await result.step()) return result.current.id;\n else return undefined;\n }\n\n private async _targetClassNameToClassId(\n classFullName: string\n ): Promise<Id64String> {\n let classId = this._targetClassNameToClassIdCache.get(classFullName);\n if (classId === undefined) {\n classId = await this._getRelClassId(\n this._context.targetDb,\n classFullName\n );\n this._targetClassNameToClassIdCache.set(classFullName, classId);\n }\n return classId;\n }\n\n private async _getRelClassId(\n db: IModelDb,\n classFullName: string\n ): Promise<Id64String> {\n const sql = `\n SELECT c.ECInstanceId\n FROM ECDbMeta.ECClassDef c\n JOIN ECDbMeta.ECSchemaDef s ON c.Schema.Id=s.ECInstanceId\n WHERE s.Name=? AND c.Name=?\n `;\n const [schemaName, className] =\n classFullName.indexOf(\".\") !== -1\n ? classFullName.split(\".\")\n : classFullName.split(\":\");\n const params = new QueryBinder();\n params.bindString(1, schemaName);\n params.bindString(2, className);\n const result = db.createQueryReader(sql, params, { usePrimaryConn: true });\n if (await result.step()) return result.current.id;\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.RelationshipClassNotFound,\n },\n message: `Could not find class ${classFullName} in the db`,\n });\n }\n\n // ── Static provenance metadata ──────────────────────────────────────────\n\n /** The element classes that are considered to define provenance in the iModel */\n public static get provenanceElementClasses(): (typeof Entity)[] {\n return [\n FolderLink,\n SynchronizationConfigLink,\n ExternalSource,\n ExternalSourceAttachment,\n ];\n }\n\n /** The element aspect classes that are considered to define provenance in the iModel */\n public static get provenanceElementAspectClasses(): (typeof Entity)[] {\n return [ExternalSourceAspect];\n }\n\n // ── Static provenance queries ──────────────────────────────────────────\n\n /**\n * Iterate all matching federation guids and ExternalSourceAspects in the provenance iModel (target unless reverse sync)\n * and call a function for each one.\n * @note provenance is done by federation guids where possible\n * @note this may execute on each element more than once! Only use in cases where that is handled\n */\n public static async forEachTrackedElement(args: {\n provenanceSourceDb: IModelDb;\n provenanceDb: IModelDb;\n targetScopeElementId: Id64String;\n isReverseSynchronization: boolean;\n fn: (sourceElementId: Id64String, targetElementId: Id64String) => void;\n skipPropagateChangesToRootElements: boolean;\n }): Promise<void> {\n if (args.provenanceDb === args.provenanceSourceDb) return;\n\n if (!args.provenanceDb.containsClass(ExternalSourceAspect.classFullName)) {\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.ProvenanceSchemaUnsupported,\n },\n message: \"The BisCore schema version of the target database is too old\",\n });\n }\n\n const sourceDb = args.isReverseSynchronization\n ? args.provenanceDb\n : args.provenanceSourceDb;\n const targetDb = args.isReverseSynchronization\n ? args.provenanceSourceDb\n : args.provenanceDb;\n\n // query for provenanceDb\n const elementIdByFedGuidQuery = `\n SELECT e.ECInstanceId, FederationGuid\n FROM bis.Element e\n ${\n args.skipPropagateChangesToRootElements\n ? \"WHERE e.ECInstanceId NOT IN (0x1, 0xe, 0x10) -- special static elements\"\n : \"\"\n }\n ORDER BY FederationGuid\n `;\n\n // iterate through sorted list of fed guids from both dbs to get the intersection\n // NOTE: if we exposed the native attach database support,\n // we could get the intersection of fed guids in one query, not sure if it would be faster\n // OR we could do a raw sqlite query...\n\n const sourceReader = sourceDb.createQueryReader(\n elementIdByFedGuidQuery,\n undefined,\n { usePrimaryConn: true }\n );\n const targetReader = targetDb.createQueryReader(\n elementIdByFedGuidQuery,\n undefined,\n { usePrimaryConn: true }\n );\n let hasSourceRow = await sourceReader.step();\n let hasTargetRow = await targetReader.step();\n while (hasSourceRow && hasTargetRow) {\n const sourceFedGuid = sourceReader.current.federationGuid as\n GuidString | undefined;\n const targetFedGuid = targetReader.current.federationGuid as\n GuidString | undefined;\n if (\n sourceFedGuid !== undefined &&\n targetFedGuid !== undefined &&\n sourceFedGuid === targetFedGuid\n ) {\n // data flow direction is always sourceDb -> targetDb and it does not depend on where the explicit element provenance is stored\n args.fn(\n sourceReader.current.id as Id64String,\n targetReader.current.id as Id64String\n );\n }\n if (\n targetFedGuid === undefined ||\n (sourceFedGuid !== undefined && sourceFedGuid >= targetFedGuid)\n ) {\n hasTargetRow = await targetReader.step();\n }\n if (\n sourceFedGuid === undefined ||\n (targetFedGuid !== undefined && sourceFedGuid <= targetFedGuid)\n ) {\n hasSourceRow = await sourceReader.step();\n }\n }\n\n // query for provenanceDb\n const provenanceAspectsQuery = `\n SELECT esa.Identifier, Element.Id\n FROM bis.ExternalSourceAspect esa\n WHERE Scope.Id=:scopeId\n AND Kind=:kind\n ORDER BY esa.Identifier, esa.ECInstanceId DESC\n `;\n\n // Technically this will a second time call the function (as documented) on\n // victims of the old provenance method that have both fedguids and an inserted aspect.\n // But this is a private function with one known caller where that doesn't matter\n\n const runFnInDataFlowDirection = (\n sourceId: Id64String,\n targetId: Id64String\n ) =>\n args.isReverseSynchronization\n ? args.fn(sourceId, targetId)\n : args.fn(targetId, sourceId);\n const params = new QueryBinder();\n params.bindId(\"scopeId\", args.targetScopeElementId);\n params.bindString(\"kind\", ExternalSourceAspect.Kind.Element);\n const provenanceReader = args.provenanceDb.createQueryReader(\n provenanceAspectsQuery,\n params,\n { usePrimaryConn: true }\n );\n for await (const row of provenanceReader) {\n // ExternalSourceAspect.Identifier is of type string\n const aspectIdentifier: Id64String = row[0];\n const elementId: Id64String = row.id;\n runFnInDataFlowDirection(elementId, aspectIdentifier);\n }\n }\n\n /**\n * Queries for an ESA which matches the props in the provided aspectProps.\n * @param dbToQuery db to run the query on\n * @param aspectProps aspectProps to search for\n */\n public static async queryScopeExternalSourceAspect(\n dbToQuery: IModelDb,\n aspectProps: ExternalSourceAspectProps\n ): Promise<\n | {\n aspectId: Id64String;\n version?: string;\n /** stringified json */\n jsonProperties?: string;\n }\n | undefined\n > {\n const sql = `\n SELECT ECInstanceId, Version, JsonProperties\n FROM ${ExternalSourceAspect.classFullName}\n WHERE Element.Id=:elementId\n AND Scope.Id=:scopeId\n AND Kind=:kind\n AND Identifier=:identifier\n LIMIT 1\n `;\n\n if (aspectProps.scope === undefined) return undefined;\n\n const params = new QueryBinder()\n .bindId(\"elementId\", aspectProps.element.id)\n .bindId(\"scopeId\", aspectProps.scope.id)\n .bindString(\"kind\", aspectProps.kind)\n .bindString(\"identifier\", aspectProps.identifier);\n\n return dbToQuery.withQueryReader(\n sql,\n (reader) => {\n if (!reader.step()) return undefined;\n const aspectId = reader.current[0] as Id64String;\n const version = reader.current[1] as string | undefined;\n const jsonProperties = reader.current[2] as string | undefined;\n return { aspectId, version, jsonProperties };\n },\n params\n );\n }\n\n // ── Provenance DB direction ────────────────────────────────────────────\n\n /** Return the IModelDb where provenance is stored (for reads/queries).\n * This will be targetDb except when it is a reverse synchronization, in which case it will be sourceDb.\n */\n private async getProvenanceDb(): Promise<IModelDb> {\n return (await this._isReverseSynchronization())\n ? this._context.sourceDb\n : this._context.targetDb;\n }\n\n /** Return the EditTxn for writing provenance.\n * This will be targetEditTxn except when it is a reverse synchronization, in which case it will be sourceEditTxn.\n */\n public async getProvenanceEditTxn(): Promise<EditTxn> {\n if (await this._isReverseSynchronization()) {\n if (!this._sourceEditTxn) {\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.SourceEditTxnRequired,\n },\n message:\n \"A reverse synchronization requires a sourceEditTxn to write provenance back to the source iModel. \" +\n \"Pass sourceEditTxn in IModelTransformOptions.\",\n });\n }\n return this._sourceEditTxn;\n }\n return this._targetEditTxn;\n }\n\n /** Return the IModelDb where entities referred to by stored provenance live.\n * This will be sourceDb except when it is a reverse synchronization, in which case it will be targetDb.\n */\n public async getProvenanceSourceDb(): Promise<IModelDb> {\n return (await this._isReverseSynchronization())\n ? this._context.targetDb\n : this._context.sourceDb;\n }\n\n // ── Scope aspect management ────────────────────────────────────────────\n\n /**\n * @returns provenance scope aspect if it exists in the provenanceDb.\n * Provenance scope aspect is created and inserted into provenanceDb when [[initScopeProvenance]] is invoked.\n */\n public async tryGetProvenanceScopeAspect(): Promise<\n ExternalSourceAspect | undefined\n > {\n const scopeProvenanceAspectProps =\n await ProvenanceManager.queryScopeExternalSourceAspect(\n await this.getProvenanceDb(),\n {\n id: undefined,\n classFullName: ExternalSourceAspect.classFullName,\n scope: { id: IModel.rootSubjectId },\n kind: ExternalSourceAspect.Kind.Scope,\n element: {\n id: this._targetScopeElementId ?? IModel.rootSubjectId,\n },\n identifier: (await this.getProvenanceSourceDb()).iModelId,\n }\n );\n\n return scopeProvenanceAspectProps !== undefined\n ? ((await this.getProvenanceDb()).elements.getAspect(\n scopeProvenanceAspectProps.aspectId\n ) as ExternalSourceAspect)\n : undefined;\n }\n\n /**\n * Make sure there are no conflicting other scope-type external source aspects on the target scope element.\n * If there are none at all, insert one (this must be a first synchronization).\n */\n public async initScopeProvenance(): Promise<void> {\n const provenanceDb = await this.getProvenanceDb();\n const provenanceEditTxn = await this.getProvenanceEditTxn();\n const sourceProvenanceDb = await this.getProvenanceSourceDb();\n const aspectProps = {\n id: undefined as string | undefined,\n version: undefined as string | undefined,\n classFullName: ExternalSourceAspect.classFullName,\n element: {\n id: this._targetScopeElementId,\n relClassName: ElementOwnsExternalSourceAspects.classFullName,\n },\n scope: { id: IModel.rootSubjectId },\n identifier: sourceProvenanceDb.iModelId,\n kind: ExternalSourceAspect.Kind.Scope,\n jsonProperties: undefined as TargetScopeProvenanceJsonProps | undefined,\n };\n\n const foundEsaProps =\n await ProvenanceManager.queryScopeExternalSourceAspect(\n provenanceDb,\n aspectProps\n );\n\n if (foundEsaProps === undefined) {\n aspectProps.version = \"\";\n aspectProps.jsonProperties = {\n pendingReverseSyncChangesetIndices: [],\n pendingSyncChangesetIndices: [],\n reverseSyncVersion: \"\",\n };\n\n // query without \"identifier\" to find possible conflicts\n const sql = `\n SELECT ECInstanceId\n FROM ${ExternalSourceAspect.classFullName}\n WHERE Element.Id=:elementId\n AND Scope.Id=:scopeId\n AND Kind=:kind\n LIMIT 1\n `;\n\n const params = new QueryBinder();\n params.bindId(\"elementId\", aspectProps.element.id);\n params.bindId(\"scopeId\", aspectProps.scope.id);\n params.bindString(\"kind\", aspectProps.kind);\n const reader = provenanceDb.createQueryReader(sql, params, {\n usePrimaryConn: true,\n });\n const hasConflictingScope = await reader.step();\n\n if (hasConflictingScope) {\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.ProvenanceScopeConflict,\n },\n message: \"Provenance scope conflict\",\n });\n }\n if (!this._transformerOptions.noProvenance) {\n const id = provenanceEditTxn.insertAspect({\n ...aspectProps,\n jsonProperties: JSON.stringify(aspectProps.jsonProperties) as any,\n });\n aspectProps.id = id;\n this.clearCachedSynchronizationVersion();\n }\n } else {\n aspectProps.id = foundEsaProps.aspectId;\n aspectProps.version = foundEsaProps.version;\n aspectProps.jsonProperties = foundEsaProps.jsonProperties\n ? JSON.parse(foundEsaProps.jsonProperties)\n : undefined;\n const oldProps = JSON.parse(JSON.stringify(aspectProps));\n if (this.handleUnsafeMigrate(aspectProps)) {\n Logger.logInfo(\n loggerCategory,\n \"Unsafe migrate made a change to the target scope's external source aspect. Updating aspect in database.\",\n { oldProps, newProps: aspectProps }\n );\n provenanceEditTxn.updateAspect({\n ...aspectProps,\n jsonProperties: JSON.stringify(aspectProps.jsonProperties) as any,\n });\n this.clearCachedSynchronizationVersion();\n }\n }\n\n this._targetScopeProvenanceProps =\n aspectProps as typeof this._targetScopeProvenanceProps;\n }\n\n /** Returns true if a change was made to the aspectProps. */\n private handleUnsafeMigrate(aspectProps: {\n version?: string;\n jsonProperties?: TargetScopeProvenanceJsonProps;\n }): boolean {\n let madeChange = false;\n if (\n this._transformerOptions.branchRelationshipDataBehavior !==\n \"unsafe-migrate\"\n )\n return madeChange;\n const fallbackSyncVersionToUse =\n this._transformerOptions.argsForProcessChanges\n ?.unsafeFallbackSyncVersion ?? \"\";\n const fallbackReverseSyncVersionToUse =\n this._transformerOptions.argsForProcessChanges\n ?.unsafeFallbackReverseSyncVersion ?? \"\";\n\n if (\n aspectProps.version === undefined ||\n (aspectProps.version === \"\" &&\n aspectProps.version !== fallbackSyncVersionToUse)\n ) {\n aspectProps.version = fallbackSyncVersionToUse;\n madeChange = true;\n }\n\n if (aspectProps.jsonProperties === undefined) {\n aspectProps.jsonProperties = {\n pendingReverseSyncChangesetIndices: [],\n pendingSyncChangesetIndices: [],\n reverseSyncVersion: fallbackReverseSyncVersionToUse,\n };\n madeChange = true;\n } else if (\n aspectProps.jsonProperties.reverseSyncVersion === undefined ||\n (aspectProps.jsonProperties.reverseSyncVersion === \"\" &&\n aspectProps.jsonProperties.reverseSyncVersion !==\n fallbackReverseSyncVersionToUse)\n ) {\n aspectProps.jsonProperties.reverseSyncVersion =\n fallbackReverseSyncVersionToUse;\n madeChange = true;\n }\n\n if (\n aspectProps.jsonProperties.pendingReverseSyncChangesetIndices ===\n undefined\n ) {\n Logger.logWarning(\n loggerCategory,\n \"Property pendingReverseSyncChangesetIndices missing on the jsonProperties of the scoping ESA. Setting to [].\"\n );\n aspectProps.jsonProperties.pendingReverseSyncChangesetIndices = [];\n madeChange = true;\n }\n if (aspectProps.jsonProperties.pendingSyncChangesetIndices === undefined) {\n Logger.logWarning(\n loggerCategory,\n \"Property pendingSyncChangesetIndices missing on the jsonProperties of the scoping ESA. Setting to [].\"\n );\n aspectProps.jsonProperties.pendingSyncChangesetIndices = [];\n madeChange = true;\n }\n return madeChange;\n }\n\n // ── Synchronization version ────────────────────────────────────────────\n\n /**\n * We cache the synchronization version to avoid querying the target scoping ESA multiple times.\n * Clears the cached value so the next call to getSynchronizationVersion re-queries.\n */\n public clearCachedSynchronizationVersion() {\n this._cachedSynchronizationVersion = undefined;\n }\n\n /** The changeset version in the scoping element's source version found for this transformation.\n * @note the version depends on whether this is a reverse synchronization or not.\n * @note empty string and -1 for changeset and index if it has never been transformed.\n */\n public async getSynchronizationVersion(): Promise<ChangesetIndexAndId> {\n if (this._cachedSynchronizationVersion === undefined) {\n const provenanceScopeAspect = await this.tryGetProvenanceScopeAspect();\n if (!provenanceScopeAspect) {\n return { index: -1, id: \"\" };\n }\n\n const version = (await this._isReverseSynchronization())\n ? (\n JSON.parse(\n provenanceScopeAspect.jsonProperties ?? \"{}\"\n ) as TargetScopeProvenanceJsonProps\n ).reverseSyncVersion\n : provenanceScopeAspect.version;\n if (\n !version &&\n this._transformerOptions.branchRelationshipDataBehavior ===\n \"unsafe-migrate\"\n ) {\n return { index: -1, id: \"\" };\n }\n if (version === undefined) {\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.SynchronizationVersionMissing,\n },\n message: `Could not find synchronization version in scope aspect. This may be due to the last successful run of the transformer being done with an older version.\n Consider running the transformer with branchRelationshipDataBehavior set to 'unsafe-migrate'`,\n });\n }\n const [id, index] = version === \"\" ? [\"\", -1] : version.split(\";\");\n if (Number.isNaN(Number(index)))\n throw new Error(\"Could not parse version data from scope aspect\");\n this._cachedSynchronizationVersion = { index: Number(index), id };\n }\n return this._cachedSynchronizationVersion;\n }\n\n /**\n * Returns the pending changeset indices to skip for the current synchronization direction.\n * Used by changeset initialization to determine which changesets have already been processed.\n */\n public async getChangesetsToSkip(): Promise<number[]> {\n if (this._targetScopeProvenanceProps === undefined)\n throw new Error(\"_targetScopeProvenanceProps should be set by now\");\n const props = this._targetScopeProvenanceProps;\n return (await this._isReverseSynchronization())\n ? props.jsonProperties.pendingReverseSyncChangesetIndices\n : props.jsonProperties.pendingSyncChangesetIndices;\n }\n\n /**\n * Updates the synchronization version on the scope ESA.\n *\n * Called at the end of a transformation, updates the target scope element to record\n * that transformation up through the source's changeset has been performed. Also stores\n * all changesets that occurred during the transformation as \"pending synchronization\n * changeset indices\" @see TargetScopeProvenanceJsonProps\n *\n * @param initializeReverseSyncVersion When true, saves the reverse sync version as the\n * current changeset of the targetDb. This is typically used for the first transformation\n * between a master and branch iModel. Setting this to true has the effect of making it so\n * any changesets in the branch iModel at the time of the first transformation will be\n * ignored during any future reverse synchronizations from the branch to the master iModel.\n *\n * Note that typically, the reverseSyncVersion is saved as the last changeset merged from\n * the branch into master. Setting initializeReverseSyncVersion to true during a forward\n * transformation could overwrite this correct reverseSyncVersion and should only be done\n * during the first transformation between a master and branch iModel.\n *\n * @param sourceChangeDataState The current state of change data — used to skip updates\n * when there are no changes.\n */\n public async updateSynchronizationVersion({\n initializeReverseSyncVersion = false,\n sourceChangeDataState,\n }: {\n initializeReverseSyncVersion?: boolean;\n sourceChangeDataState:\n \"uninited\" | \"has-changes\" | \"no-changes\" | \"unconnected\";\n }) {\n const shouldSkipSyncVersionUpdate =\n !initializeReverseSyncVersion && sourceChangeDataState !== \"has-changes\";\n if (shouldSkipSyncVersionUpdate) return;\n\n // If noProvenance is set, there's no scope ESA to update\n if (this._transformerOptions.noProvenance) return;\n\n if (this._targetScopeProvenanceProps === undefined)\n throw new Error(\"_targetScopeProvenanceProps should be set by now\");\n const scopeProps = this._targetScopeProvenanceProps;\n\n const sourceVersion = `${this._context.sourceDb.changeset.id};${this._context.sourceDb.changeset.index}`;\n const targetVersion = `${this._context.targetDb.changeset.id};${this._context.targetDb.changeset.index}`;\n\n if (await this._isReverseSynchronization()) {\n const oldVersion = scopeProps.jsonProperties.reverseSyncVersion;\n\n Logger.logInfo(\n loggerCategory,\n `updating reverse version from ${oldVersion} to ${sourceVersion}`\n );\n scopeProps.jsonProperties.reverseSyncVersion = sourceVersion;\n } else {\n Logger.logInfo(\n loggerCategory,\n `updating sync version from ${scopeProps.version} to ${sourceVersion}`\n );\n scopeProps.version = sourceVersion;\n\n if (initializeReverseSyncVersion) {\n Logger.logInfo(\n loggerCategory,\n `updating reverse sync version from ${scopeProps.jsonProperties.reverseSyncVersion} to ${targetVersion}`\n );\n scopeProps.jsonProperties.reverseSyncVersion = targetVersion;\n }\n }\n\n const startingChangesetIndices = this._startingChangesetIndices;\n if (\n !!this._transformerOptions.argsForProcessChanges ||\n (startingChangesetIndices && initializeReverseSyncVersion)\n ) {\n if (\n this._context.targetDb.changeset.index === undefined ||\n startingChangesetIndices === undefined\n )\n throw new Error(\n \"updateSynchronizationVersion was called without change history\"\n );\n\n const jsonProps = scopeProps.jsonProperties;\n\n Logger.logTrace(\n loggerCategory,\n `previous pendingReverseSyncChanges: ${String(jsonProps.pendingReverseSyncChangesetIndices)}`\n );\n Logger.logTrace(\n loggerCategory,\n `previous pendingSyncChanges: ${String(jsonProps.pendingSyncChangesetIndices)}`\n );\n\n const pendingSyncChangesetIndicesKey =\n \"pendingSyncChangesetIndices\" as const;\n const pendingReverseSyncChangesetIndicesKey =\n \"pendingReverseSyncChangesetIndices\" as const;\n\n let syncChangesetsToClearKey;\n let syncChangesetsToUpdateKey;\n\n if (await this._isReverseSynchronization()) {\n syncChangesetsToClearKey = pendingReverseSyncChangesetIndicesKey;\n syncChangesetsToUpdateKey = pendingSyncChangesetIndicesKey;\n } else {\n syncChangesetsToClearKey = pendingSyncChangesetIndicesKey;\n syncChangesetsToUpdateKey = pendingReverseSyncChangesetIndicesKey;\n }\n\n for (\n let i = startingChangesetIndices.target + 1;\n i <= this._context.targetDb.changeset.index + 1;\n i++\n )\n jsonProps[syncChangesetsToUpdateKey].push(i);\n jsonProps[syncChangesetsToClearKey] = jsonProps[\n syncChangesetsToClearKey\n ].filter((csIndex) => {\n return csIndex > startingChangesetIndices.source;\n });\n\n if (await this._isReverseSynchronization()) {\n if (this._context.sourceDb.changeset.index === undefined)\n throw new Error(\"changeset didn't exist\");\n for (\n let i = startingChangesetIndices.source + 1;\n i <= this._context.sourceDb.changeset.index + 1;\n i++\n )\n jsonProps.pendingReverseSyncChangesetIndices.push(i);\n }\n\n Logger.logTrace(\n loggerCategory,\n `new pendingReverseSyncChanges: ${String(jsonProps.pendingReverseSyncChangesetIndices)}`\n );\n Logger.logTrace(\n loggerCategory,\n `new pendingSyncChanges: ${String(jsonProps.pendingSyncChangesetIndices)}`\n );\n }\n\n (await this.getProvenanceEditTxn()).updateAspect({\n ...scopeProps,\n jsonProperties: JSON.stringify(scopeProps.jsonProperties) as any,\n });\n this.clearCachedSynchronizationVersion();\n }\n\n // ── Element/Relationship provenance creation ───────────────────────────\n\n /** Create ExternalSourceAspectProps for an element in an iModel → iModel transformation. */\n public static initElementProvenanceOptions(\n sourceElementId: Id64String,\n targetElementId: Id64String,\n args: {\n sourceDb: IModelDb;\n targetDb: IModelDb;\n isReverseSynchronization: boolean;\n targetScopeElementId: Id64String;\n }\n ): ExternalSourceAspectProps {\n const elementId = args.isReverseSynchronization\n ? sourceElementId\n : targetElementId;\n const version = args.isReverseSynchronization\n ? args.targetDb.elements.queryLastModifiedTime(targetElementId)\n : args.sourceDb.elements.queryLastModifiedTime(sourceElementId);\n const aspectIdentifier = args.isReverseSynchronization\n ? targetElementId\n : sourceElementId;\n const aspectProps: ExternalSourceAspectProps = {\n classFullName: ExternalSourceAspect.classFullName,\n element: {\n id: elementId,\n relClassName: ElementOwnsExternalSourceAspects.classFullName,\n },\n scope: { id: args.targetScopeElementId },\n identifier: aspectIdentifier,\n kind: ExternalSourceAspect.Kind.Element,\n version,\n };\n return aspectProps;\n }\n\n /** Create ExternalSourceAspectProps for a relationship in an iModel → iModel transformation. */\n public static async initRelationshipProvenanceOptions(\n sourceRelInstanceId: Id64String,\n targetRelInstanceId: Id64String,\n args: {\n sourceDb: IModelDb;\n targetDb: IModelDb;\n isReverseSynchronization: boolean;\n targetScopeElementId: Id64String;\n forceOldRelationshipProvenanceMethod: boolean;\n /** Already-known source-endpoint element ids of the relationships, used to skip the\n * per-relationship endpoint query when the caller knows the needed id.\n */\n knownEndpoints?: {\n /** `SourceECInstanceId` of the relationship identified by `sourceRelInstanceId` in `sourceDb`. */\n sourceRelSourceElementId?: Id64String;\n /** `SourceECInstanceId` of the relationship identified by `targetRelInstanceId` in `targetDb`. */\n targetRelSourceElementId?: Id64String;\n };\n }\n ): Promise<ExternalSourceAspectProps> {\n const provenanceDb = args.isReverseSynchronization\n ? args.sourceDb\n : args.targetDb;\n const aspectIdentifier = args.isReverseSynchronization\n ? targetRelInstanceId\n : sourceRelInstanceId;\n const provenanceRelInstanceId = args.isReverseSynchronization\n ? sourceRelInstanceId\n : targetRelInstanceId;\n\n // the provenance relationship lives in the provenanceDb, so its known source-endpoint id is\n // the source rel's on reverse synchronization and the target rel's otherwise\n let elementId = args.isReverseSynchronization\n ? args.knownEndpoints?.sourceRelSourceElementId\n : args.knownEndpoints?.targetRelSourceElementId;\n if (undefined === elementId) {\n const sql =\n \"SELECT SourceECInstanceId FROM bis.ElementRefersToElements WHERE ECInstanceId=?\";\n const params = new QueryBinder().bindId(1, provenanceRelInstanceId);\n const reader = provenanceDb.createQueryReader(sql, params, {\n usePrimaryConn: true,\n });\n if (!(await reader.step()))\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.RelationshipProvenanceNotFound,\n },\n message: \"relationship provenance query returned no rows\",\n });\n elementId = reader.current[0] as Id64String;\n }\n\n const jsonProperties = args.forceOldRelationshipProvenanceMethod\n ? { targetRelInstanceId }\n : { provenanceRelInstanceId };\n\n const aspectProps: ExternalSourceAspectProps = {\n classFullName: ExternalSourceAspect.classFullName,\n element: {\n id: elementId,\n relClassName: ElementOwnsExternalSourceAspects.classFullName,\n },\n scope: { id: args.targetScopeElementId },\n identifier: aspectIdentifier,\n kind: ExternalSourceAspect.Kind.Relationship,\n jsonProperties: JSON.stringify(jsonProperties),\n };\n\n return aspectProps;\n }\n\n /** Create an ExternalSourceAspectProps for an element using this manager's context. */\n public async initElementProvenance(\n sourceElementId: Id64String,\n targetElementId: Id64String\n ): Promise<ExternalSourceAspectProps> {\n return ProvenanceManager.initElementProvenanceOptions(\n sourceElementId,\n targetElementId,\n {\n isReverseSynchronization: await this._isReverseSynchronization(),\n targetScopeElementId: this._targetScopeElementId,\n sourceDb: this._context.sourceDb,\n targetDb: this._context.targetDb,\n }\n );\n }\n\n /** Create an ExternalSourceAspectProps for a relationship using this manager's context. */\n public async initRelationshipProvenance(\n sourceRelInstanceId: Id64String,\n targetRelInstanceId: Id64String,\n forceOldRelationshipProvenanceMethod: boolean,\n knownEndpoints?: {\n sourceRelSourceElementId?: Id64String;\n targetRelSourceElementId?: Id64String;\n }\n ): Promise<ExternalSourceAspectProps> {\n return ProvenanceManager.initRelationshipProvenanceOptions(\n sourceRelInstanceId,\n targetRelInstanceId,\n {\n sourceDb: this._context.sourceDb,\n targetDb: this._context.targetDb,\n isReverseSynchronization: await this._isReverseSynchronization(),\n targetScopeElementId: this._targetScopeElementId,\n forceOldRelationshipProvenanceMethod,\n knownEndpoints,\n }\n );\n }\n\n // ── Provenance queries ─────────────────────────────────────────────────\n\n /**\n * Queries the provenanceDb for an ESA whose identifier matches the provided relationship ID.\n * @param entityInProvenanceSourceId ID of the relationship in the provenanceSourceDb\n * @param sourceRelInfo Source relationship class and endpoint info (for legacy fallback)\n */\n public async queryProvenanceForRelationship(\n entityInProvenanceSourceId: Id64String,\n sourceRelInfo: {\n classFullName: string;\n sourceId: Id64String;\n targetId: Id64String;\n }\n ): Promise<\n | {\n aspectId: Id64String;\n /** if undefined, the relationship could not be found, perhaps it was deleted */\n relationshipId: Id64String | undefined;\n }\n | undefined\n > {\n const sql = `\n SELECT\n ECInstanceId,\n JSON_EXTRACT(JsonProperties, '$.provenanceRelInstanceId') AS provenanceRelInstId\n FROM Bis.ExternalSourceAspect\n WHERE Kind=?\n AND Scope.Id=?\n AND Identifier=?\n `;\n const params = new QueryBinder();\n params.bindString(1, ExternalSourceAspect.Kind.Relationship);\n params.bindId(2, this._targetScopeElementId);\n params.bindString(3, entityInProvenanceSourceId);\n const result = (await this.getProvenanceDb()).createQueryReader(\n sql,\n params,\n {\n usePrimaryConn: true,\n }\n );\n if (await result.step()) {\n const aspectId = result.current.id;\n const provenanceRelInstId = result.current.provenanceRelInstId;\n const provenanceRelInstanceId =\n provenanceRelInstId !== undefined\n ? (provenanceRelInstId as string)\n : await this._queryTargetRelId(sourceRelInfo);\n return {\n aspectId,\n relationshipId: provenanceRelInstanceId,\n };\n } else return undefined;\n }\n\n /** Instance convenience that calls the static forEachTrackedElement with this manager's context. */\n public async forEachTrackedElement(\n fn: (sourceElementId: Id64String, targetElementId: Id64String) => void\n ): Promise<void> {\n return ProvenanceManager.forEachTrackedElement({\n provenanceSourceDb: await this.getProvenanceSourceDb(),\n provenanceDb: await this.getProvenanceDb(),\n targetScopeElementId: this._targetScopeElementId,\n isReverseSynchronization: await this._isReverseSynchronization(),\n fn,\n skipPropagateChangesToRootElements:\n this._transformerOptions.skipPropagateChangesToRootElements ?? true,\n });\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceClassKinds.d.ts","sourceRoot":"","sources":["../../src/SourceClassKinds.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,OAAO,GACP,SAAS,GACT,QAAQ,GACR,sBAAsB,GACtB,cAAc,GACd,qBAAqB,CAAC;AAE1B;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAElE,OAAO,eAEN;IAED,OAAoB,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkDrE;IAED,oHAAoH;IAC7G,MAAM,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,CAEhE;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceClassKinds.js","sourceRoot":"","sources":["../../src/SourceClassKinds.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAqBhG;;;GAGG;AACH;IACmB,MAAM,CAA2C;IAElE,YAAoB,KAA+C;QACjE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAgB;QACxC,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;YACvC,MAAM,GAAG,GAAiB,EAAE,CAAC;YAC7B,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE;gBACjE,cAAc,EAAE,IAAI;aACrB,CAAC;gBACA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE,CAC9C,QAAQ,CACN,uEAAuE,SAAS,GAAG,CACpF,CAAC;QACJ,MAAM,CACJ,SAAS,EACT,MAAM,EACN,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACrB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpB,WAAW,CAAC,kBAAkB,CAAC;YAC/B,WAAW,CAAC,eAAe,CAAC;YAC5B,WAAW,CAAC,iBAAiB,CAAC;YAC9B,WAAW,CAAC,6BAA6B,CAAC;YAC1C,WAAW,CAAC,4BAA4B,CAAC;YACzC,QAAQ,CACN,2KAA2K,CAC5K;YACD,WAAW,CAAC,iCAAiC,CAAC;YAC9C,WAAW,CAAC,8BAA8B,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;QACrD,gIAAgI;QAChI,MAAM,OAAO,GAAsC;YACjD,CAAC,SAAS,EAAE,UAAU,CAAC;YACvB,CAAC,MAAM,EAAE,OAAO,CAAC;YACjB,CAAC,QAAQ,EAAE,SAAS,CAAC;YACrB,CAAC,aAAa,EAAE,QAAQ,CAAC;YACzB,CAAC,YAAY,EAAE,QAAQ,CAAC;YACxB,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;YAC/C,CAAC,aAAa,EAAE,cAAc,CAAC;YAC/B,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;SAC9C,CAAC;QACF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO;YAC/B,KAAK,MAAM,EAAE,IAAI,GAAG;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,oHAAoH;IAC7G,MAAM,CAAC,SAAqB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;CACF","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 { IModelDb } from \"@itwin/core-backend\";\nimport { Id64String } from \"@itwin/core-bentley\";\n\n/**\n * What instances of a source EC class are to change processing.\n * - `relationship`: a `BisCore:ElementRefersToElements` relationship.\n * - `skippedRelationship`: a `BisCore:ElementDrivesElement` relationship, which change processing ignores.\n * - `externalSourceAspect`: exactly `BisCore:ExternalSourceAspect`, not a subclass.\n * @internal\n */\nexport type SourceClassKind =\n | \"codeSpec\"\n | \"model\"\n | \"element\"\n | \"aspect\"\n | \"externalSourceAspect\"\n | \"relationship\"\n | \"skippedRelationship\";\n\n/**\n * The [[SourceClassKind]] of every class in an iModel's current schemas that change processing handles.\n * @internal\n */\nexport class SourceClassKinds {\n private readonly _kinds: ReadonlyMap<Id64String, SourceClassKind>;\n\n private constructor(kinds: ReadonlyMap<Id64String, SourceClassKind>) {\n this._kinds = kinds;\n }\n\n public static async query(iModel: IModelDb): Promise<SourceClassKinds> {\n const classIds = async (ecsql: string) => {\n const ids: Id64String[] = [];\n for await (const row of iModel.createQueryReader(ecsql, undefined, {\n usePrimaryConn: true,\n }))\n ids.push(row.ECInstanceId);\n return ids;\n };\n const subclassIds = async (baseClass: string) =>\n classIds(\n `SELECT ECInstanceId FROM ECDbMeta.ECClassDef WHERE ECInstanceId IS (${baseClass})`\n );\n const [\n codeSpecs,\n models,\n elements,\n uniqueAspects,\n multiAspects,\n externalSourceAspects,\n relationships,\n skippedRelationships,\n ] = await Promise.all([\n subclassIds(\"BisCore.CodeSpec\"),\n subclassIds(\"BisCore.Model\"),\n subclassIds(\"BisCore.Element\"),\n subclassIds(\"BisCore.ElementUniqueAspect\"),\n subclassIds(\"BisCore.ElementMultiAspect\"),\n classIds(\n \"SELECT c.ECInstanceId FROM ECDbMeta.ECClassDef c JOIN ECDbMeta.ECSchemaDef s ON c.Schema.Id = s.ECInstanceId WHERE s.Name = 'BisCore' AND c.Name = 'ExternalSourceAspect'\"\n ),\n subclassIds(\"BisCore.ElementRefersToElements\"),\n subclassIds(\"BisCore.ElementDrivesElement\"),\n ]);\n\n const kinds = new Map<Id64String, SourceClassKind>();\n // Later entries refine earlier ones: ExternalSourceAspect is an aspect, and ElementDrivesElement is an ElementRefersToElements.\n const entries: [Id64String[], SourceClassKind][] = [\n [codeSpecs, \"codeSpec\"],\n [models, \"model\"],\n [elements, \"element\"],\n [uniqueAspects, \"aspect\"],\n [multiAspects, \"aspect\"],\n [externalSourceAspects, \"externalSourceAspect\"],\n [relationships, \"relationship\"],\n [skippedRelationships, \"skippedRelationship\"],\n ];\n for (const [ids, kind] of entries)\n for (const id of ids) kinds.set(id, kind);\n return new SourceClassKinds(kinds);\n }\n\n /** Returns undefined for classes that change processing doesn't handle and for classes missing from the schemas. */\n public kindOf(ecClassId: Id64String): SourceClassKind | undefined {\n return this._kinds.get(ecClassId);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncTypeResolver.d.ts","sourceRoot":"","sources":["../../src/SyncTypeResolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAc,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAGL,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAS7B,gBAAgB;AAChB,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAc,8BAA8B,SAC8L;IAE1O,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAU;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAE3C,YACE,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,UAAU,EAChC,yBAAyB,GAAE,OAAe,EAC1C,eAAe,GAAE,OAAe,EAOjC;IAED;;;;;;;OAOG;IACH,OAAoB,iBAAiB,CACnC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,UAAU,GAC/B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA0ChC;IAED,gEAAgE;IACnD,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAe5C;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncTypeResolver.js","sourceRoot":"","sources":["../../src/SyncTypeResolver.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG,sDAA6D;AAC7D,sDAI6B;AAC7B,oDAA4C;AAE5C,2DAAwD;AACxD,qEAGkC;AAKlC;;;;;GAKG;AACH;IACS,MAAM,CAAC,8BAA8B,GAC1C,uOAAuO,CAAC;IAElO,SAAS,CAAY;IACZ,SAAS,CAAW;IACpB,SAAS,CAAW;IACpB,qBAAqB,CAAa;IAClC,0BAA0B,CAAU;IACpC,gBAAgB,CAAU;IAE3C,YACE,QAAkB,EAClB,QAAkB,EAClB,oBAAgC,EAChC,yBAAyB,GAAY,KAAK,EAC1C,eAAe,GAAY,KAAK;QAEhC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;QAC5D,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CACnC,QAAkB,EAClB,QAAkB,EAClB,oBAAgC;QAEhC,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,SAA+B;YACnC,OAAO,EAAE,SAA+B;YACxC,aAAa,EAAE,mCAAoB,CAAC,aAAa;YACjD,OAAO,EAAE;gBACP,EAAE,EAAE,oBAAoB;gBACxB,YAAY,EAAE,+CAAgC,CAAC,aAAa;aAC7D;YACD,KAAK,EAAE,EAAE,EAAE,EAAE,oBAAM,CAAC,aAAa,EAAE;YACnC,UAAU,EAAE,QAAQ,CAAC,QAAQ;YAC7B,IAAI,EAAE,mCAAoB,CAAC,IAAI,CAAC,KAAK;YACrC,cAAc,EAAE,SAAuD;SACxE,CAAC;QACF,yEAAyE;QACzE,MAAM,oBAAoB,GACxB,MAAM,qCAAiB,CAAC,8BAA8B,CACpD,QAAQ,EACR,WAAW,CACZ,CAAC;QACJ,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,0CAA0C;QAC1C,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC3C,MAAM,oBAAoB,GACxB,MAAM,qCAAiB,CAAC,8BAA8B,CACpD,QAAQ,EACR,WAAW,CACZ,CAAC;QAEJ,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,yBAAU,CAAC,UAAU,CAAC;YACpB,YAAY,EAAE;gBACZ,KAAK,EAAE,oDAA2B;gBAClC,GAAG,EAAE,+CAAsB,CAAC,gCAAgC;aAC7D;YACD,OAAO,EAAE,gBAAgB,CAAC,8BAA8B;SACzD,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IACzD,KAAK,CAAC,WAAW;QACtB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC7B,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,GAAG,MAAM,gBAAgB,CAAC,iBAAiB,CACvD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,qBAAqB,CAC3B,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF","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 { Id64String, ITwinError } from \"@itwin/core-bentley\";\nimport {\n ElementOwnsExternalSourceAspects,\n ExternalSourceAspect,\n IModelDb,\n} from \"@itwin/core-backend\";\nimport { IModel } from \"@itwin/core-common\";\nimport type { TargetScopeProvenanceJsonProps } from \"./IModelTransformer\";\nimport { ProvenanceManager } from \"./ProvenanceManager\";\nimport {\n IModelTransformerError,\n IModelTransformerErrorScope,\n} from \"./IModelTransformerError\";\n\n/** @internal */\nexport type SyncType = \"not-sync\" | \"forward\" | \"reverse\";\n\n/**\n * Encapsulates sync direction determination logic.\n * Given a source and target iModel, resolves whether the transformation is\n * a forward sync, reverse sync, or not a sync at all.\n * @internal\n */\nexport class SyncTypeResolver {\n public static noEsaSyncDirectionErrorMessage =\n \"Couldn't find an external source aspect to determine sync direction. This often means that the master->branch relationship has not been established. Consider running the transformer with wasSourceIModelCopiedToTarget set to true.\";\n\n private _syncType?: SyncType;\n private readonly _sourceDb: IModelDb;\n private readonly _targetDb: IModelDb;\n private readonly _targetScopeElementId: Id64String;\n private readonly _isProvenanceInitTransform: boolean;\n private readonly _isSyncTransform: boolean;\n\n public constructor(\n sourceDb: IModelDb,\n targetDb: IModelDb,\n targetScopeElementId: Id64String,\n isProvenanceInitTransform: boolean = false,\n isSyncTransform: boolean = false\n ) {\n this._sourceDb = sourceDb;\n this._targetDb = targetDb;\n this._targetScopeElementId = targetScopeElementId;\n this._isProvenanceInitTransform = isProvenanceInitTransform;\n this._isSyncTransform = isSyncTransform;\n }\n\n /**\n * Determines the sync direction \"forward\" or \"reverse\" of a given sourceDb and targetDb by looking for the scoping ESA.\n * If the sourceDb's iModelId is found as the identifier of the expected scoping ESA in the targetDb, then it is a forward synchronization.\n * If the targetDb's iModelId is found as the identifier of the expected scoping ESA in the sourceDb, then it is a reverse synchronization.\n * @note This is a standalone utility that does not depend on instance state.\n * @throws if no scoping ESA can be found in either the sourceDb or targetDb which describes a master branch relationship between the two databases.\n * @returns \"forward\" or \"reverse\"\n */\n public static async determineSyncType(\n sourceDb: IModelDb,\n targetDb: IModelDb,\n targetScopeElementId: Id64String\n ): Promise<\"forward\" | \"reverse\"> {\n const aspectProps = {\n id: undefined as string | undefined,\n version: undefined as string | undefined,\n classFullName: ExternalSourceAspect.classFullName,\n element: {\n id: targetScopeElementId,\n relClassName: ElementOwnsExternalSourceAspects.classFullName,\n },\n scope: { id: IModel.rootSubjectId },\n identifier: sourceDb.iModelId,\n kind: ExternalSourceAspect.Kind.Scope,\n jsonProperties: undefined as TargetScopeProvenanceJsonProps | undefined,\n };\n // First check if the targetDb is the branch (branch is the provenanceDb)\n const esaPropsFromTargetDb =\n await ProvenanceManager.queryScopeExternalSourceAspect(\n targetDb,\n aspectProps\n );\n if (esaPropsFromTargetDb !== undefined) {\n return \"forward\";\n }\n\n // Now check if the sourceDb is the branch\n aspectProps.identifier = targetDb.iModelId;\n const esaPropsFromSourceDb =\n await ProvenanceManager.queryScopeExternalSourceAspect(\n sourceDb,\n aspectProps\n );\n\n if (esaPropsFromSourceDb !== undefined) {\n return \"reverse\";\n }\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.SynchronizationTypeNotDetermined,\n },\n message: SyncTypeResolver.noEsaSyncDirectionErrorMessage,\n });\n }\n\n /** Returns the sync type, lazily resolving it on first call. */\n public async getSyncType(): Promise<SyncType> {\n if (this._syncType === undefined) {\n if (this._isProvenanceInitTransform) {\n this._syncType = \"forward\";\n } else if (!this._isSyncTransform) {\n this._syncType = \"not-sync\";\n } else {\n this._syncType = await SyncTypeResolver.determineSyncType(\n this._sourceDb,\n this._targetDb,\n this._targetScopeElementId\n );\n }\n }\n return this._syncType;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransformerLoggerCategory.d.ts","sourceRoot":"","sources":["../../src/TransformerLoggerCategory.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;;;GAIG;AACH,oBAAY,yBAAyB;IACnC;;OAEG;IACH,cAAc,sCAAsC;IAEpD;;OAEG;IACH,cAAc,sCAAsC;IAEpD;;OAEG;IACH,iBAAiB,yCAAyC;IAE1D;;OAEG;IACH,kBAAkB,0CAA0C;IAE5D,qBAAqB,6CAA6C;CACnE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransformerLoggerCategory.js","sourceRoot":"","sources":["../../src/TransformerLoggerCategory.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH;;;;GAIG;AACH,IAAY,yBAsBX;AAtBD,WAAY,yBAAyB;IACnC;;OAEG;IACH,iFAAoD,CAAA;IAEpD;;OAEG;IACH,iFAAoD,CAAA;IAEpD;;OAEG;IACH,uFAA0D,CAAA;IAE1D;;OAEG;IACH,yFAA4D,CAAA;IAE5D,+FAAkE,CAAA;AACpE,CAAC,EAtBW,yBAAyB,aAAzB,yBAAyB,GAAzB,yBAAyB,QAsBpC","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/** @packageDocumentation\n * @module Logging\n */\n\n/** Logger categories used by this package\n * @note All logger categories in this package start with the `imodel-transformer` prefix.\n * @see [Logger]($bentley)\n * @public\n */\nexport enum TransformerLoggerCategory {\n /** The logger category used by the [IModelExporter]($transformer) class.\n * @beta\n */\n IModelExporter = \"imodel-transformer.IModelExporter\",\n\n /** The logger category used by the [IModelImporter]($transformer) class.\n * @beta\n */\n IModelImporter = \"imodel-transformer.IModelImporter\",\n\n /** The logger category used by the [IModelTransformer]($transformer) class.\n * @beta\n */\n IModelTransformer = \"imodel-transformer.IModelTransformer\",\n\n /** The logger category used while cloning entities and remapping their references.\n * @beta\n */\n IModelCloneContext = \"imodel-transformer.IModelCloneContext\",\n\n ECReferenceTypesCache = \"imodel-transformer.ECReferenceTypesCache\",\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransformerPackageMetadata.d.ts","sourceRoot":"","sources":["../../src/TransformerPackageMetadata.ts"],"names":[],"mappings":"AAOA,UAAU,0BAA0B;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAQD,eAAO,MAAM,0BAA0B,EAElC,0BAA0B,CAAC"}
@@ -1,47 +0,0 @@
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
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.transformerPackageMetadata = void 0;
41
- const path = __importStar(require("node:path"));
42
- const packageRoot = path.basename(__dirname) === "src"
43
- ? path.resolve(__dirname, "..")
44
- : path.resolve(__dirname, "../..");
45
- // eslint-disable-next-line @typescript-eslint/no-require-imports
46
- exports.transformerPackageMetadata = require(path.join(packageRoot, "package.json"));
47
- //# sourceMappingURL=TransformerPackageMetadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransformerPackageMetadata.js","sourceRoot":"","sources":["../../src/TransformerPackageMetadata.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhG,MAAY,IAAI,sCAAkB;AAQlC,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK;IAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;IAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAEvC,iEAAiE;AACpD,QAAA,0BAA0B,GAAG,OAAO,CAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CACT,CAAC","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 * as path from \"node:path\";\n\ninterface TransformerPackageMetadata {\n name: string;\n version: string;\n peerDependencies: Record<string, string>;\n}\n\nconst packageRoot =\n path.basename(__dirname) === \"src\"\n ? path.resolve(__dirname, \"..\")\n : path.resolve(__dirname, \"../..\");\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nexport const transformerPackageMetadata = require(\n path.join(packageRoot, \"package.json\")\n) as TransformerPackageMetadata;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"imodel-transformer.d.ts","sourceRoot":"","sources":["../../src/imodel-transformer.ts"],"names":[],"mappings":"AAIA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,kCAAkC,EAClC,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAmD5B;;;;;;GAMG;AACH;;;;GAIG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
@@ -1,125 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
- };
21
- var __importStar = (this && this.__importStar) || (function () {
22
- var ownKeys = function(o) {
23
- ownKeys = Object.getOwnPropertyNames || function (o) {
24
- var ar = [];
25
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
- return ar;
27
- };
28
- return ownKeys(o);
29
- };
30
- return function (mod) {
31
- if (mod && mod.__esModule) return mod;
32
- var result = {};
33
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
- __setModuleDefault(result, mod);
35
- return result;
36
- };
37
- })();
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- /*---------------------------------------------------------------------------------------------
40
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
41
- * See LICENSE.md in the project root for license terms and full copyright notice.
42
- *--------------------------------------------------------------------------------------------*/
43
- __exportStar(require("./TransformerLoggerCategory"), exports);
44
- __exportStar(require("./IModelExporter"), exports);
45
- __exportStar(require("./IModelImporter"), exports);
46
- __exportStar(require("./IModelTransformer"), exports);
47
- __exportStar(require("./IModelTransformContext"), exports);
48
- __exportStar(require("./schema-processing/SchemaProcessingStrategy"), exports);
49
- __exportStar(require("./IModelTransformerError"), exports);
50
- __exportStar(require("./BranchProvenanceInitializer"), exports);
51
- const semver = __importStar(require("semver"));
52
- const core_bentley_1 = require("@itwin/core-bentley");
53
- const package_json_1 = require("@itwin/core-backend/package.json");
54
- const IModelTransformerError_1 = require("./IModelTransformerError");
55
- const TransformerPackageMetadata_1 = require("./TransformerPackageMetadata");
56
- const { version: ourVersion, name: ourName, peerDependencies, } = TransformerPackageMetadata_1.transformerPackageMetadata;
57
- const ourITwinCoreBackendDepRange = peerDependencies["@itwin/core-backend"];
58
- const noStrictDepCheckEnvVar = "TRANSFORMER_NO_STRICT_DEP_CHECK";
59
- // warn if using a prerelease or dev version
60
- if (semver.prerelease(package_json_1.version)) {
61
- // eslint-disable-next-line no-console
62
- console.warn(`Warning: dev version detected (${package_json_1.version}). ` +
63
- "This version is most likely fine, but it may introduce new behavior that could cause " +
64
- "unexpected issues or changes in the transformer's functionality. Please proceed with caution.");
65
- }
66
- if (process.env[noStrictDepCheckEnvVar] !== "1" &&
67
- !semver.satisfies(package_json_1.version, ourITwinCoreBackendDepRange, {
68
- includePrerelease: true,
69
- })) {
70
- const errHeader = `${ourName}@${ourVersion} only supports @itwin/core-backend@${ourITwinCoreBackendDepRange}, ` +
71
- `but @itwin/core-backend${package_json_1.version} was resolved when looking for the peer dependency.\n` +
72
- `If you know exactly what you are doing, you can disable this check by setting ${noStrictDepCheckEnvVar}=1 in the environment\n`;
73
- core_bentley_1.ITwinError.throwError({
74
- iTwinErrorId: {
75
- scope: IModelTransformerError_1.IModelTransformerErrorScope,
76
- key: IModelTransformerError_1.IModelTransformerError.DependencyVersionMismatch,
77
- },
78
- message: errHeader,
79
- });
80
- }
81
- /** @docs-package-description
82
- * The @itwin/imodel-transformer package contains classes that [backend code]($docs/learning/backend/index.md) can use to
83
- * traverse iModels, as well as *transform* an iModel into another existing or empty one, by exporting elements from one during
84
- * traversal and importing them into another.
85
- *
86
- * You can read further in [iModelTransformation and Data Exchange]($docs/learning/transformer/index.md) here.
87
- */
88
- /**
89
- * @docs-group-description iModels
90
- * Classes for working with [iModels]($docs/learning/iModels.md).
91
- * See [the learning article]($docs/learning/backend/index.md).
92
- */
93
- /**
94
- * @docs-group-description Utils
95
- * Miscellaneous utility classes.
96
- */
97
- /**
98
- * @docs-group-description Logging
99
- * Logger categories used by this package.
100
- */
101
- /**
102
- * @docs-group-description ChangedElementForest
103
- * Internal indexing of changed elements and their ancestors for incremental export traversal.
104
- */
105
- /**
106
- * @docs-group-description ElementAspectExportCoordinator
107
- * Internal coordination for scoped, owner-batched ElementAspect export.
108
- */
109
- /**
110
- * @docs-group-description ElementAspectExportProcessor
111
- * Internal source queries, filtering, and export callbacks for ElementAspects owned by accepted elements.
112
- */
113
- /**
114
- * @docs-group-description ChangedElementForest
115
- * Internal index of changed elements and their ancestors for incremental traversal.
116
- */
117
- /**
118
- * @docs-group-description IModelTransformerError
119
- * Stable identifiers for errors originating from this package.
120
- */
121
- /**
122
- * @docs-group-description TransformerPackageMetadata
123
- * Internal metadata describing this package and its peer dependencies.
124
- */
125
- //# sourceMappingURL=imodel-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"imodel-transformer.js","sourceRoot":"","sources":["../../src/imodel-transformer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,8DAA4C;AAC5C,mDAAiC;AACjC,mDAAiC;AACjC,sDAAoC;AACpC,2DAAyC;AACzC,+EAA6D;AAC7D,2DAAyC;AACzC,gEAA8C;AAW9C,MAAY,MAAM,mCAAe;AACjC,sDAAiD;AACjD,mEAAsF;AACtF,qEAGkC;AAClC,6EAA0E;AAE1E,MAAM,EACJ,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,EACb,gBAAgB,GACjB,GAAG,uDAA0B,CAAC;AAE/B,MAAM,2BAA2B,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;AAE5E,MAAM,sBAAsB,GAAG,iCAAiC,CAAC;AAEjE,4CAA4C;AAC5C,IAAI,MAAM,CAAC,UAAU,CAAC,sBAAuB,CAAC,EAAE,CAAC;IAC/C,sCAAsC;IACtC,OAAO,CAAC,IAAI,CACV,kCAAkC,sBAAuB,KAAK;QAC5D,uFAAuF;QACvF,+FAA+F,CAClG,CAAC;AACJ,CAAC;AAED,IACE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,GAAG;IAC3C,CAAC,MAAM,CAAC,SAAS,CAAC,sBAAuB,EAAE,2BAA2B,EAAE;QACtE,iBAAiB,EAAE,IAAI;KACxB,CAAC,EACF,CAAC;IACD,MAAM,SAAS,GACb,GAAG,OAAO,IAAI,UAAU,sCAAsC,2BAA2B,IAAI;QAC7F,0BAA0B,sBAAuB,uDAAuD;QACxG,iFAAiF,sBAAsB,yBAAyB,CAAC;IAEnI,yBAAU,CAAC,UAAU,CAAC;QACpB,YAAY,EAAE;YACZ,KAAK,EAAE,oDAA2B;YAClC,GAAG,EAAE,+CAAsB,CAAC,yBAAyB;SACtD;QACD,OAAO,EAAE,SAAS;KACnB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH;;;;GAIG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","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 *--------------------------------------------------------------------------------------------*/\nexport * from \"./TransformerLoggerCategory\";\nexport * from \"./IModelExporter\";\nexport * from \"./IModelImporter\";\nexport * from \"./IModelTransformer\";\nexport * from \"./IModelTransformContext\";\nexport * from \"./schema-processing/SchemaProcessingStrategy\";\nexport * from \"./IModelTransformerError\";\nexport * from \"./BranchProvenanceInitializer\";\nexport type {\n CollectedChanges,\n DeletionBatch,\n DeletionRecordBase,\n ElementDeletionRecord,\n ExternalSourceAspectDeletionRecord,\n ModelDeletionRecord,\n RelationshipDeletionRecord,\n} from \"./ChangesetScanner\";\n\nimport * as semver from \"semver\";\nimport { ITwinError } from \"@itwin/core-bentley\";\nimport { version as iTwinCoreBackendVersion } from \"@itwin/core-backend/package.json\";\nimport {\n IModelTransformerError,\n IModelTransformerErrorScope,\n} from \"./IModelTransformerError\";\nimport { transformerPackageMetadata } from \"./TransformerPackageMetadata\";\n\nconst {\n version: ourVersion,\n name: ourName,\n peerDependencies,\n} = transformerPackageMetadata;\n\nconst ourITwinCoreBackendDepRange = peerDependencies[\"@itwin/core-backend\"];\n\nconst noStrictDepCheckEnvVar = \"TRANSFORMER_NO_STRICT_DEP_CHECK\";\n\n// warn if using a prerelease or dev version\nif (semver.prerelease(iTwinCoreBackendVersion)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Warning: dev version detected (${iTwinCoreBackendVersion}). ` +\n \"This version is most likely fine, but it may introduce new behavior that could cause \" +\n \"unexpected issues or changes in the transformer's functionality. Please proceed with caution.\"\n );\n}\n\nif (\n process.env[noStrictDepCheckEnvVar] !== \"1\" &&\n !semver.satisfies(iTwinCoreBackendVersion, ourITwinCoreBackendDepRange, {\n includePrerelease: true,\n })\n) {\n const errHeader =\n `${ourName}@${ourVersion} only supports @itwin/core-backend@${ourITwinCoreBackendDepRange}, ` +\n `but @itwin/core-backend${iTwinCoreBackendVersion} was resolved when looking for the peer dependency.\\n` +\n `If you know exactly what you are doing, you can disable this check by setting ${noStrictDepCheckEnvVar}=1 in the environment\\n`;\n\n ITwinError.throwError({\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.DependencyVersionMismatch,\n },\n message: errHeader,\n });\n}\n\n/** @docs-package-description\n * The @itwin/imodel-transformer package contains classes that [backend code]($docs/learning/backend/index.md) can use to\n * traverse iModels, as well as *transform* an iModel into another existing or empty one, by exporting elements from one during\n * traversal and importing them into another.\n *\n * You can read further in [iModelTransformation and Data Exchange]($docs/learning/transformer/index.md) here.\n */\n/**\n * @docs-group-description iModels\n * Classes for working with [iModels]($docs/learning/iModels.md).\n * See [the learning article]($docs/learning/backend/index.md).\n */\n/**\n * @docs-group-description Utils\n * Miscellaneous utility classes.\n */\n/**\n * @docs-group-description Logging\n * Logger categories used by this package.\n */\n/**\n * @docs-group-description ChangedElementForest\n * Internal indexing of changed elements and their ancestors for incremental export traversal.\n */\n/**\n * @docs-group-description ElementAspectExportCoordinator\n * Internal coordination for scoped, owner-batched ElementAspect export.\n */\n/**\n * @docs-group-description ElementAspectExportProcessor\n * Internal source queries, filtering, and export callbacks for ElementAspects owned by accepted elements.\n */\n/**\n * @docs-group-description ChangedElementForest\n * Internal index of changed elements and their ancestors for incremental traversal.\n */\n/**\n * @docs-group-description IModelTransformerError\n * Stable identifiers for errors originating from this package.\n */\n/**\n * @docs-group-description TransformerPackageMetadata\n * Internal metadata describing this package and its peer dependencies.\n */\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicSchemaUnionStrategy.d.ts","sourceRoot":"","sources":["../../../src/schema-processing/DynamicSchemaUnionStrategy.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAKL,sBAAsB,EAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,MAAM,EAGP,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAEL,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAsBpC;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,wBAAwB;IACzE;;;;;;;;;OASG;IACH,UAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,sBAAsB,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAEjC;IAED,+EAA+E;IAClE,cAAc,CACzB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA2EnC;YAEa,UAAU;CAwDzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicSchemaUnionStrategy.js","sourceRoot":"","sources":["../../../src/schema-processing/DynamicSchemaUnionStrategy.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,sDAAiD;AACjD,8DAOiC;AACjC,gEAKkC;AAClC,sEAGmC;AA4BnC;;;;;GAKG;AACH;IACE;;;;;;;;;OASG;IACO,KAAK,CAAC,mBAAmB,CACjC,aAAqB,EACrB,aAAqB,EACrB,WAAmC;QAEnC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,+EAA+E;IACxE,KAAK,CAAC,cAAc,CACzB,OAAgC;QAEhC,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAY,EAAE,CAAC;QAC9B,KAAK,MAAM,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IACE,yBAAU,CAAC,OAAO,CAChB,KAAK,EACL,oDAA2B,EAC3B,+CAAsB,CAAC,cAAc,CACtC,EACD,CAAC;oBACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtB,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,oBAAoB,GAAG,IAAI,iCAAa,EAAE,CAAC;QACjD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAClC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBAC7D,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACxC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBAC9D,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,MAAM,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,+BAAY,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,KAAK;oBACR,IACE,IAAI,CAAC,MAAM,CAAC,SAAS;wBACrB,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EACzD,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM;gBACR,KAAK,UAAU;oBACb,IAAI,MAAM,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM;gBACR,KAAK,cAAc;oBACjB,MAAM;gBACR,KAAK,eAAe,EAAE,CAAC;oBACrB,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC;wBAC5C,GAAG,IAAI,CAAC,WAAW;wBACnB,SAAS,EAAE,SAAS;qBACrB,CAAC,CAAC;oBACH,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;oBACpD,YAAY,CAAC,UAAU,CACrB,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,KAAK,EACnB,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CACpE,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC1D,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,MAAc,EACd,aAAqC;QAErC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAEzD,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,yBAAyB,CAC7B,MAAM,EACN,qCAAqC,EACrC,IAAI,KAAK,CAAC,qDAAqD,CAAC,CACjE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAEnE,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QAC/C,IACE,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YACzC,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,EAC3C,CAAC;YACD,MAAM,yBAAyB,CAC7B,MAAM,EACN,+CAA+C,EAC/C,IAAI,KAAK,CACP,UAAU,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CACnF,CACF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAChD,MAAM,EACN,MAAM,EACN,MAAM,IAAA,uCAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,CAC3C,CAAC;QACF,MAAM,mBAAmB,GAAG,CAAC,WAAW,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,oCAAoC,CAAC,QAAQ,CAAC,CAC9D,CAAC;QACF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,yBAAyB,CAC7B,MAAM,EACN,iBAAiB,EACjB,IAAI,uCAAoB,CACtB,WAAW,MAAM,CAAC,IAAI,4BAA4B,EAClD,mBAAmB,EACnB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,CACjB,CACF,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YACzC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE;YAC1C,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC7D,CAAC;CACF;;AAED,SAAS,yBAAyB,CAChC,MAAc,EACd,SAAiB,EACjB,KAAY;IAEZ,OAAO,yBAAU,CAAC,MAAM,CAAsB;QAC5C,OAAO,EAAE,GAAG,SAAS,SAAS,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE;QACnF,YAAY,EAAE;YACZ,KAAK,EAAE,oDAA2B;YAClC,GAAG,EAAE,+CAAsB,CAAC,cAAc;SAC3C;QACD,KAAK;QACL,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAkB;IAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QACtB,MAAM,IAAI,cAAc,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAiC,EACjC,KAAmB;IAEnB,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,KAAK;SACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;SAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAChE,CAAC;IACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,UAAU,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;gBACjE,SAAS;YAEX,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,aAAwB,EACxB,aAAwB;IAExB,MAAM,cAAc,GAClB,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;IAC5E,IAAI,cAAc,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,mCAAmC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,oCAAoC,CAC3C,QAAqC;IAErC,IAAI,QAAQ,CAAC,IAAI,KAAK,+BAAY,CAAC,2BAA2B;QAAE,OAAO,KAAK,CAAC;IAC7E,IACE,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACnC,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAEnC,OAAO,KAAK,CAAC;IAEf,MAAM,aAAa,GAAG,6BAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IACrE,MAAM,aAAa,GAAG,6BAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IACrE,OAAO,CACL,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;QACzC,aAAa,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAc,EACd,UAAwC,EACxC,YAAqB,EACrB,OAAO,GAAgB,IAAI,GAAG,EAAU;IAExC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IACjD,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO;IACtC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE1B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;SAAM,IACL,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;QACxE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAC1E,CAAC;QACD,MAAM,yBAAyB,CAC7B,MAAM,EACN,uDAAuD,EACvD,IAAI,KAAK,CACP,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG;YACrF,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,WAAW;YACjF,yDAAyD,CAC5D,CACF,CAAC;IACJ,CAAC;SAAM,IACL,YAAY;QACZ,CAAC,CAAC,QAAQ,CAAC,YAAY;YACrB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAC1E,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,uBAAuB,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAc,EACd,UAAwC;IAExC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,uBAAuB,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC","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/** @packageDocumentation\n * @module iModels\n */\n\nimport { ITwinError } from \"@itwin/core-bentley\";\nimport {\n AnySchemaDifferenceConflict,\n ConflictCode,\n getSchemaDifferences,\n SchemaConflictsError,\n SchemaDifferenceResult,\n SchemaMerger,\n} from \"@itwin/ecschema-editing\";\nimport {\n ECVersion,\n Schema,\n SchemaContext,\n SchemaKey,\n} from \"@itwin/ecschema-metadata\";\nimport {\n IModelTransformerError,\n IModelTransformerErrorScope,\n} from \"../IModelTransformerError\";\nimport {\n ReadonlySchemaAccessor,\n SchemaProcessingContext,\n SchemaProcessingResult,\n SchemaProcessingStrategy,\n} from \"./SchemaProcessingStrategy\";\n\ntype SchemaPlan =\n | { kind: \"new\"; source: Schema }\n | { kind: \"ordinary\"; source: Schema; target: Schema }\n | { kind: \"dynamic-noop\"; source: Schema; target: Schema }\n | {\n kind: \"dynamic-merge\";\n source: Schema;\n target: Schema;\n differences: SchemaDifferenceResult;\n };\n\ninterface SchemaCandidate {\n schema: Schema;\n isTargetRoot: boolean;\n}\n\ninterface SchemaConflictError extends ITwinError {\n schemaKey: string;\n}\n\n/**\n * Processes ordinary schemas with newer-version selection and unions compatible\n * differences for existing dynamic schemas. Dynamic schema root read and write\n * versions must match; only the minor version may differ.\n * @beta\n */\nexport class DynamicSchemaUnionStrategy implements SchemaProcessingStrategy {\n /**\n * Transform schema differences before conflict validation and merging.\n * A subclass that changes the differencing result is responsible for ensuring\n * that its changes are safe for the source and target schemas.\n * @param sourceSchema The source schema being processed.\n * @param targetSchema The existing target schema.\n * @param differences The complete result from [[getSchemaDifferences]].\n * @returns The differencing result to validate and merge.\n * @beta\n */\n protected async onSchemaDifferences(\n _sourceSchema: Schema,\n _targetSchema: Schema,\n differences: SchemaDifferenceResult\n ): Promise<SchemaDifferenceResult> {\n return differences;\n }\n\n /** Select ordinary schemas and union compatible dynamic schema differences. */\n public async processSchemas(\n context: SchemaProcessingContext\n ): Promise<SchemaProcessingResult[]> {\n const plans: SchemaPlan[] = [];\n const conflicts: Error[] = [];\n for (const sourceSchema of context.sourceSchemas) {\n try {\n plans.push(await this.createPlan(sourceSchema, context.targetSchemas));\n } catch (error: unknown) {\n if (\n ITwinError.isError(\n error,\n IModelTransformerErrorScope,\n IModelTransformerError.SchemaConflict\n )\n ) {\n conflicts.push(error);\n continue;\n }\n throw error;\n }\n }\n throwSchemaConflicts(conflicts);\n\n const schemaEditingContext = new SchemaContext();\n const schemaCandidates = new Map<string, SchemaCandidate>();\n for (const plan of plans) {\n if (plan.kind === \"dynamic-merge\") {\n collectSchemaCandidates(plan.target, schemaCandidates, true);\n collectSchemaReferences(plan.source, schemaCandidates);\n } else if (plan.kind === \"dynamic-noop\") {\n collectSchemaCandidates(plan.source, schemaCandidates, false);\n collectSchemaReferences(plan.source, schemaCandidates);\n }\n }\n for (const { schema } of schemaCandidates.values()) {\n await schemaEditingContext.addSchema(schema);\n }\n\n const schemaMerger = new SchemaMerger(schemaEditingContext);\n const results: SchemaProcessingResult[] = [];\n for (const plan of plans) {\n switch (plan.kind) {\n case \"new\":\n if (\n plan.source.isDynamic ||\n (await context.shouldExportSchema(plan.source.schemaKey))\n ) {\n results.push({ kind: \"source\", schema: plan.source });\n }\n break;\n case \"ordinary\":\n if (await context.shouldExportSchema(plan.source.schemaKey)) {\n results.push({ kind: \"source\", schema: plan.source });\n }\n break;\n case \"dynamic-noop\":\n break;\n case \"dynamic-merge\": {\n const mergedSchema = await schemaMerger.merge({\n ...plan.differences,\n conflicts: undefined,\n });\n const sourceVersion = plan.source.schemaKey.version;\n mergedSchema.setVersion(\n sourceVersion.read,\n sourceVersion.write,\n incrementMinorVersion(sourceVersion, plan.target.schemaKey.version)\n );\n results.push({ kind: \"generated\", schema: mergedSchema });\n break;\n }\n }\n }\n\n appendRequiredNoOpSchemas(results, plans);\n return results;\n }\n\n private async createPlan(\n source: Schema,\n targetSchemas: ReadonlySchemaAccessor\n ): Promise<SchemaPlan> {\n const target = await targetSchemas.getSchema(source.name);\n if (target === undefined) return { kind: \"new\", source };\n\n if (source.isDynamic !== target.isDynamic) {\n throw createSchemaConflictError(\n source,\n \"Schema DynamicSchema marker changed\",\n new Error(\"The source and target DynamicSchema markers differ.\")\n );\n }\n if (!source.isDynamic) return { kind: \"ordinary\", source, target };\n\n const sourceVersion = source.schemaKey.version;\n const targetVersion = target.schemaKey.version;\n if (\n sourceVersion.read !== targetVersion.read ||\n sourceVersion.write !== targetVersion.write\n ) {\n throw createSchemaConflictError(\n source,\n \"Dynamic schema has incompatible root versions\",\n new Error(\n `source ${sourceVersion.toString(false)}, target ${targetVersion.toString(false)}`\n )\n );\n }\n\n const differences = await this.onSchemaDifferences(\n source,\n target,\n await getSchemaDifferences(target, source)\n );\n const unresolvedConflicts = (differences.conflicts ?? []).filter(\n (conflict) => !isCompatibleReferenceVersionConflict(conflict)\n );\n if (unresolvedConflicts.length > 0) {\n throw createSchemaConflictError(\n source,\n \"Schema conflict\",\n new SchemaConflictsError(\n `Schema '${source.name}' has unresolved conflicts`,\n unresolvedConflicts,\n source.schemaKey,\n target.schemaKey\n )\n );\n }\n\n return differences.differences.length === 0\n ? { kind: \"dynamic-noop\", source, target }\n : { kind: \"dynamic-merge\", source, target, differences };\n }\n}\n\nfunction createSchemaConflictError(\n schema: Schema,\n operation: string,\n cause: Error\n): Error {\n return ITwinError.create<SchemaConflictError>({\n message: `${operation} for '${schema.schemaKey.toString(false)}': ${cause.message}`,\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.SchemaConflict,\n },\n cause,\n schemaKey: schema.schemaKey.toString(false),\n });\n}\n\nfunction throwSchemaConflicts(conflicts: Error[]): void {\n if (conflicts.length === 1) throw conflicts[0];\n if (conflicts.length > 1)\n throw new AggregateError(conflicts, \"Schema processing failed\");\n}\n\nfunction appendRequiredNoOpSchemas(\n results: SchemaProcessingResult[],\n plans: SchemaPlan[]\n): void {\n const noOpSchemas = new Map(\n plans\n .filter((plan) => plan.kind === \"dynamic-noop\")\n .map((plan) => [plan.source.name.toLowerCase(), plan.source])\n );\n const requiredNoOpSchemas = new Set<string>();\n const schemasToVisit = results.map((result) => result.schema);\n for (const schema of schemasToVisit) {\n for (const reference of schema.references) {\n const schemaName = reference.name.toLowerCase();\n const noOpSchema = noOpSchemas.get(schemaName);\n if (noOpSchema === undefined || requiredNoOpSchemas.has(schemaName))\n continue;\n\n requiredNoOpSchemas.add(schemaName);\n schemasToVisit.push(noOpSchema);\n }\n }\n for (const schemaName of requiredNoOpSchemas) {\n const schema = noOpSchemas.get(schemaName);\n if (schema !== undefined) results.push({ kind: \"source\", schema });\n }\n}\n\nfunction incrementMinorVersion(\n sourceVersion: ECVersion,\n targetVersion: ECVersion\n): number {\n const maximumVersion =\n sourceVersion.compare(targetVersion) >= 0 ? sourceVersion : targetVersion;\n if (maximumVersion.minor >= 9_999_999) {\n throw new Error(\n `Cannot increment schema version ${maximumVersion.toString(false)}`\n );\n }\n return maximumVersion.minor + 1;\n}\n\nfunction isCompatibleReferenceVersionConflict(\n conflict: AnySchemaDifferenceConflict\n): boolean {\n if (conflict.code !== ConflictCode.ConflictingReferenceVersion) return false;\n if (\n typeof conflict.source !== \"string\" ||\n typeof conflict.target !== \"string\"\n )\n return false;\n\n const sourceVersion = SchemaKey.parseString(conflict.source).version;\n const targetVersion = SchemaKey.parseString(conflict.target).version;\n return (\n sourceVersion.read === targetVersion.read &&\n sourceVersion.write === targetVersion.write\n );\n}\n\nfunction collectSchemaCandidates(\n schema: Schema,\n candidates: Map<string, SchemaCandidate>,\n isTargetRoot: boolean,\n visited: Set<string> = new Set<string>()\n): void {\n const traversalKey = schema.schemaKey.toString();\n if (visited.has(traversalKey)) return;\n visited.add(traversalKey);\n\n const schemaName = schema.name.toLowerCase();\n const existing = candidates.get(schemaName);\n if (existing === undefined) {\n candidates.set(schemaName, { schema, isTargetRoot });\n } else if (\n existing.schema.schemaKey.version.read !== schema.schemaKey.version.read ||\n existing.schema.schemaKey.version.write !== schema.schemaKey.version.write\n ) {\n throw createSchemaConflictError(\n schema,\n \"Schema reference has incompatible read/write versions\",\n new Error(\n `${existing.schema.schemaKey.version.read}.${existing.schema.schemaKey.version.write} ` +\n `and ${schema.schemaKey.version.read}.${schema.schemaKey.version.write} differ. ` +\n \"Only minor-version reference differences are supported.\"\n )\n );\n } else if (\n isTargetRoot ||\n (!existing.isTargetRoot &&\n schema.schemaKey.version.compare(existing.schema.schemaKey.version) > 0)\n ) {\n candidates.set(schemaName, { schema, isTargetRoot });\n }\n\n for (const reference of schema.references) {\n collectSchemaCandidates(reference, candidates, false, visited);\n }\n}\n\nfunction collectSchemaReferences(\n schema: Schema,\n candidates: Map<string, SchemaCandidate>\n): void {\n for (const reference of schema.references) {\n collectSchemaCandidates(reference, candidates, false);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaProcessingCoordinator.d.ts","sourceRoot":"","sources":["../../../src/schema-processing/SchemaProcessingCoordinator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAsB,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAgB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKvE,OAAO,EAGL,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAEpC,UAAU,+BAA+B;IACvC,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wBAAwB,EAAE,MAAM,MAAM,CAAC;IACvC,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC;CAC/E;AAED,gBAAgB;AAChB,qBAAa,2BAA2B;IAGnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAE/D,YAAoC,KAAK,EAAE,+BAA+B,EAAI;IAEjE,OAAO,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEtE;IAEY,qBAAqB,CAChC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC,CAU7B;IAED,OAAO,KAAK,sBAAsB,GAEjC;YAEa,eAAe;IAe7B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,oCAAoC;CAU7C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaProcessingCoordinator.js","sourceRoot":"","sources":["../../../src/schema-processing/SchemaProcessingCoordinator.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 *--------------------------------------------------------------------------------------------*/\n\nimport * as path from \"node:path\";\nimport { ITwinError } from \"@itwin/core-bentley\";\nimport { ECSchemaXmlContext, IModelDb, IModelJsFs } from \"@itwin/core-backend\";\nimport { Schema, SchemaKey, SchemaLoader } from \"@itwin/ecschema-metadata\";\nimport { ExportSchemaResult, IModelExporter } from \"../IModelExporter\";\nimport {\n IModelTransformerError,\n IModelTransformerErrorScope,\n} from \"../IModelTransformerError\";\nimport {\n ReadonlySchemaAccessor,\n SchemaProcessingResult,\n SchemaProcessingStrategy,\n} from \"./SchemaProcessingStrategy\";\n\ninterface SchemaProcessingCoordinatorArgs {\n exporter: IModelExporter;\n targetDb: IModelDb;\n getSchemaExportDirectory: () => string;\n shouldExportSchema: (schemaKey: SchemaKey) => Promise<boolean>;\n serializeSourceSchema: (schema: Schema) => Promise<void | ExportSchemaResult>;\n}\n\n/** @internal */\nexport class SchemaProcessingCoordinator {\n private readonly _longNamedSchemas = new Map<string, string>();\n\n public constructor(private readonly _args: SchemaProcessingCoordinatorArgs) {}\n\n public async process(strategy: SchemaProcessingStrategy): Promise<void> {\n let processingFailure: unknown;\n try {\n IModelJsFs.mkdirSync(this._schemaExportDirectory);\n this._longNamedSchemas.clear();\n\n const sourceSchemas: Schema[] = [];\n for await (const schema of this._args.exporter.enumerateSchemas()) {\n sourceSchemas.push(schema);\n }\n const targetSchemaLoader = new SchemaLoader((name) =>\n this._args.targetDb.getSchemaProps(name)\n );\n const targetSchemas: ReadonlySchemaAccessor = {\n getSchema: async (schemaName) =>\n targetSchemaLoader.tryGetSchema(schemaName),\n };\n const processedSchemas = await strategy.processSchemas({\n sourceSchemas: orderSchemasByDependencies(sourceSchemas),\n targetSchemas,\n shouldExportSchema: this._args.shouldExportSchema,\n });\n\n for (const result of processedSchemas) {\n await this.serializeSchema(result);\n }\n const exportedSchemaFiles = IModelJsFs.readdirSync(\n this._schemaExportDirectory\n );\n if (exportedSchemaFiles.length > 0) {\n await this._args.targetDb.importSchemas(\n exportedSchemaFiles.map((fileName) =>\n path.join(this._schemaExportDirectory, fileName)\n ),\n {\n ecSchemaXmlContext:\n this._longNamedSchemas.size > 0\n ? this.createLongNameResolvingSchemaContext()\n : undefined,\n }\n );\n }\n } catch (error: unknown) {\n processingFailure = error;\n }\n\n let cleanupFailure: unknown;\n try {\n IModelJsFs.removeSync(this._schemaExportDirectory);\n } catch (error: unknown) {\n cleanupFailure = error;\n } finally {\n this._longNamedSchemas.clear();\n }\n\n if (processingFailure !== undefined && cleanupFailure !== undefined) {\n throw new AggregateError(\n [processingFailure, cleanupFailure],\n \"Schema processing and cleanup failed\",\n { cause: processingFailure }\n );\n }\n // Preserve failures from custom strategies and upstream libraries exactly.\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n if (processingFailure !== undefined) throw processingFailure;\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n if (cleanupFailure !== undefined) throw cleanupFailure;\n }\n\n public async serializeSourceSchema(\n schema: Schema\n ): Promise<ExportSchemaResult> {\n const schemaFileName = this.getSchemaExportFileName(schema.name);\n this._args.exporter.sourceDb.exportSchema({\n schemaName: schema.name,\n outputDirectory: this._schemaExportDirectory,\n outputFileName: schemaFileName,\n });\n return {\n schemaPath: path.join(this._schemaExportDirectory, schemaFileName),\n };\n }\n\n private get _schemaExportDirectory(): string {\n return this._args.getSchemaExportDirectory();\n }\n\n private async serializeSchema(result: SchemaProcessingResult): Promise<void> {\n if (result.kind === \"source\") {\n await this._args.serializeSourceSchema(result.schema);\n return;\n }\n\n const schemaLocaters = await import(\"@itwin/ecschema-locaters\");\n const schemaFileName = this.getSchemaExportFileName(result.schema.name);\n const schemaXml = await schemaLocaters.SchemaXml.writeString(result.schema);\n IModelJsFs.writeFileSync(\n path.join(this._schemaExportDirectory, schemaFileName),\n schemaXml\n );\n }\n\n private getSchemaExportFileName(schemaName: string): string {\n const extension = \".ecschema.xml\";\n let schemaFileName = schemaName + extension;\n const systemMaxPathSegmentSize = 255;\n const windowsMaxPathLimit = 260;\n if (\n schemaFileName.length > systemMaxPathSegmentSize ||\n path.join(this._schemaExportDirectory, schemaFileName).length >=\n windowsMaxPathLimit\n ) {\n schemaFileName = `${schemaName.slice(0, 100)}${\n this._longNamedSchemas.size\n }${extension}`;\n this._longNamedSchemas.set(schemaName, schemaFileName);\n }\n return schemaFileName;\n }\n\n private createLongNameResolvingSchemaContext(): ECSchemaXmlContext {\n const context = new ECSchemaXmlContext();\n context.setSchemaLocater((key) => {\n const schemaFileName = this._longNamedSchemas.get(key.name);\n return schemaFileName === undefined\n ? undefined\n : path.join(this._schemaExportDirectory, schemaFileName);\n });\n return context;\n }\n}\n\ninterface SchemaDependencyCycleError extends ITwinError {\n schemaNames: readonly string[];\n}\n\nfunction orderSchemasByDependencies(schemas: Schema[]): Schema[] {\n const schemasByName = new Map(\n schemas.map((schema) => [schema.name.toLowerCase(), schema])\n );\n const state = new Map<string, \"visiting\" | \"visited\">();\n const orderedSchemas: Schema[] = [];\n const stack: string[] = [];\n\n const visit = (schema: Schema): void => {\n const schemaName = schema.name.toLowerCase();\n const currentState = state.get(schemaName);\n if (currentState === \"visited\") return;\n if (currentState === \"visiting\") {\n const cycleStart = stack.indexOf(schemaName);\n const schemaNames = stack.slice(cycleStart);\n throw ITwinError.create<SchemaDependencyCycleError>({\n message: `Schema dependency cycle detected: ${[\n ...schemaNames,\n schemaName,\n ].join(\" -> \")}`,\n iTwinErrorId: {\n scope: IModelTransformerErrorScope,\n key: IModelTransformerError.SchemaDependencyCycle,\n },\n schemaNames,\n });\n }\n\n state.set(schemaName, \"visiting\");\n stack.push(schemaName);\n for (const reference of schema.references) {\n const referencedSchema = schemasByName.get(reference.name.toLowerCase());\n if (referencedSchema !== undefined) visit(referencedSchema);\n }\n stack.pop();\n state.set(schemaName, \"visited\");\n orderedSchemas.push(schema);\n };\n\n for (const schema of schemas) visit(schema);\n return orderedSchemas;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaProcessingStrategy.d.ts","sourceRoot":"","sources":["../../../src/schema-processing/SchemaProcessingStrategy.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5D;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAC;IAC/C,sEAAsE;IACtE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,uFAAuF;IACvF,cAAc,CACZ,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,gCAAiC,YAAW,wBAAwB;IAC/E,8EAA8E;IACjE,cAAc,CACzB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAQnC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaProcessingStrategy.js","sourceRoot":"","sources":["../../../src/schema-processing/SchemaProcessingStrategy.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAoDH;;;GAGG;AACH;IACE,8EAA8E;IACvE,KAAK,CAAC,cAAc,CACzB,OAAgC;QAEhC,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3C,IAAI,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF","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/** @packageDocumentation\n * @module iModels\n */\n\nimport { Schema, SchemaKey } from \"@itwin/ecschema-metadata\";\n\n/**\n * The result of processing one schema.\n * @beta\n */\nexport type SchemaProcessingResult =\n { kind: \"source\"; schema: Schema } | { kind: \"generated\"; schema: Schema };\n\n/** Read-only access to schemas already present in the target iModel.\n * @beta\n */\nexport interface ReadonlySchemaAccessor {\n /** Load a target schema by name, or return `undefined` when it is absent. */\n getSchema(schemaName: string): Promise<Schema | undefined>;\n}\n\n/**\n * Context supplied to a [[SchemaProcessingStrategy]].\n * @beta\n */\nexport interface SchemaProcessingContext {\n /** Source schemas in dependency order. */\n readonly sourceSchemas: readonly Schema[];\n /** Read-only access to schemas already present in the target. */\n readonly targetSchemas: ReadonlySchemaAccessor;\n /** The schema-selection hook used by the default transformer path. */\n readonly shouldExportSchema: (schemaKey: SchemaKey) => Promise<boolean>;\n}\n\n/**\n * Selects source schemas and produces definitions for import into a target iModel.\n * @beta\n */\nexport interface SchemaProcessingStrategy {\n /** Select source schemas and produce definitions for import into the target iModel. */\n processSchemas(\n context: SchemaProcessingContext\n ): Promise<SchemaProcessingResult[]>;\n}\n\n/**\n * Options for [[IModelTransformer.processSchemas]].\n * @beta\n */\nexport interface ProcessSchemasOptions {\n /** Strategy used to select and process source schemas. */\n strategy?: SchemaProcessingStrategy;\n}\n\n/**\n * Selects source schemas that are absent from the target or have a newer version.\n * @beta\n */\nexport class NewerVersionSchemaImportStrategy implements SchemaProcessingStrategy {\n /** Select schemas that are absent from the target or have a newer version. */\n public async processSchemas(\n context: SchemaProcessingContext\n ): Promise<SchemaProcessingResult[]> {\n const results: SchemaProcessingResult[] = [];\n for (const schema of context.sourceSchemas) {\n if (await context.shouldExportSchema(schema.schemaKey)) {\n results.push({ kind: \"source\", schema });\n }\n }\n return results;\n }\n}\n"]}
@@ -1,7 +0,0 @@
1
- /** @packageDocumentation
2
- * Optional schema-processing strategies for `@itwin/imodel-transformer`.
3
- * @module iModels
4
- */
5
- export * from "./schema-processing/SchemaProcessingStrategy";
6
- export * from "./schema-processing/DynamicSchemaUnionStrategy";
7
- //# sourceMappingURL=schema-processing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-processing.d.ts","sourceRoot":"","sources":["../../src/schema-processing.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gDAAgD,CAAC"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- /*---------------------------------------------------------------------------------------------
18
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
19
- * See LICENSE.md in the project root for license terms and full copyright notice.
20
- *--------------------------------------------------------------------------------------------*/
21
- /** @packageDocumentation
22
- * Optional schema-processing strategies for `@itwin/imodel-transformer`.
23
- * @module iModels
24
- */
25
- __exportStar(require("./schema-processing/SchemaProcessingStrategy"), exports);
26
- __exportStar(require("./schema-processing/DynamicSchemaUnionStrategy"), exports);
27
- //# sourceMappingURL=schema-processing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-processing.js","sourceRoot":"","sources":["../../src/schema-processing.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG;;;GAGG;AACH,+EAA6D;AAC7D,iFAA+D","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/** @packageDocumentation\n * Optional schema-processing strategies for `@itwin/imodel-transformer`.\n * @module iModels\n */\nexport * from \"./schema-processing/SchemaProcessingStrategy\";\nexport * from \"./schema-processing/DynamicSchemaUnionStrategy\";\n"]}
File without changes
File without changes