@itwin/imodel-transformer 1.0.1-customchanges.3 → 1.0.1-customchanges.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"IModelExporter.js","sourceRoot":"","sources":["../../src/IModelExporter.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/** @packageDocumentation\n * @module iModels\n */\n\nimport {\n BriefcaseDb,\n BriefcaseManager,\n ChangedECInstance,\n ChangesetECAdaptor,\n DefinitionModel,\n ECSqlStatement,\n // eslint-disable-next-line @typescript-eslint/no-redeclare\n Element,\n ElementAspect,\n ElementMultiAspect,\n ElementRefersToElements,\n ElementUniqueAspect,\n EntityReferences,\n GeometricElement,\n IModelDb,\n IModelHost,\n IModelJsNative,\n Model,\n PartialECChangeUnifier,\n RecipeDefinitionElement,\n Relationship,\n SqliteChangeOp,\n SqliteChangesetReader,\n} from \"@itwin/core-backend\";\nimport {\n assert,\n CompressedId64Set,\n DbResult,\n Id64,\n Id64Arg,\n Id64String,\n IModelStatus,\n Logger,\n YieldManager,\n} from \"@itwin/core-bentley\";\nimport {\n ChangesetFileProps,\n CodeSpec,\n ConcreteEntityTypes,\n EntityReference,\n FontProps,\n IModel,\n IModelError,\n QueryBinder,\n} from \"@itwin/core-common\";\nimport {\n ECVersion,\n Schema,\n SchemaKey,\n SchemaLoader,\n} from \"@itwin/ecschema-metadata\";\nimport { TransformerLoggerCategory } from \"./TransformerLoggerCategory\";\nimport * as nodeAssert from \"assert\";\nimport {\n ElementAspectsHandler,\n ExportElementAspectsStrategy,\n} from \"./ExportElementAspectsStrategy\";\nimport { ExportElementAspectsWithElementsStrategy } from \"./ExportElementAspectsWithElementsStrategy\";\n\nconst loggerCategory = TransformerLoggerCategory.IModelExporter;\n\n/**\n * @beta\n * The (optional) result of [[IModelExportHandler.onExportSchema]]\n */\nexport interface ExportSchemaResult {\n /** set this property to notify subclasses where you wrote a schema for later import */\n schemaPath?: string;\n}\n\n/**\n * Arguments for [[IModelExporter.initialize]], usually in case you want to query changedata early\n * such as in the case of the IModelTransformer\n * @beta\n */\nexport type ExporterInitOptions = ExportChangesOptions;\n\n/**\n * Arguments for [[IModelExporter.exportChanges]]\n * @public\n */\nexport type ExportChangesOptions = {\n skipPropagateChangesToRootElements?: boolean;\n} /**\n * an array of ChangesetFileProps which are used to read the changesets and populate the ChangedInstanceIds using [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]]\n * @note mutually exclusive with @see changesetRanges, @see startChangeset and @see changedInstanceIds, so define one of the four, never more\n */ & (\n | { csFileProps: ChangesetFileProps[] }\n /**\n * Class instance that contains modified elements between 2 versions of an iModel.\n * If this parameter is not provided, then [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]]\n * will be called to discover changed elements.\n * @note mutually exclusive with @see changesetRanges, @see csFileProps and @see startChangeset, so define one of the four, never more\n */\n | { changedInstanceIds: ChangedInstanceIds }\n /**\n * An ordered array of changeset index ranges, e.g. [[2,2], [4,5]] is [2,4,5]\n * @note mutually exclusive with @see changedInstanceIds, @see csFileProps and @see startChangeset, so define one of the four, never more\n */\n | { changesetRanges: [number, number][] }\n /**\n * Include changes from this changeset up through and including the current changeset.\n * @note To form a range of versions to process, set `startChangeset` for the start (inclusive)\n * of the desired range and open the source iModel as of the end (inclusive) of the desired range.\n * @default the current changeset of the sourceDb, if undefined\n */\n | { startChangeset: { id?: string; index?: number } }\n | {}\n);\n\n/** Handles the events generated by IModelExporter.\n * @note Change information is available when `IModelExportHandler` methods are invoked via [IModelExporter.exportChanges]($transformer), but not available when invoked via [IModelExporter.exportAll]($transformer).\n * @note The handler is intended to be owned by (registered with) and called from the IModelExporter exclusively\n * @see [iModel Transformation and Data Exchange]($docs/learning/transformer/index.md), [IModelExporter]($transformer)\n * @beta\n */\nexport abstract class IModelExportHandler {\n /** If `true` is returned, then the CodeSpec will be exported.\n * @note This method can optionally be overridden to exclude an individual CodeSpec from the export. The base implementation always returns `true`.\n */\n public shouldExportCodeSpec(_codeSpec: CodeSpec): boolean {\n return true;\n }\n\n /** Called when a CodeSpec should be exported.\n * @param codeSpec The CodeSpec to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportCodeSpec(\n _codeSpec: CodeSpec,\n _isUpdate: boolean | undefined\n ): void {}\n\n /** Called when a font should be exported.\n * @param font The font to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportFont(_font: FontProps, _isUpdate: boolean | undefined): void {}\n\n /** Called when a model should be exported.\n * @param model The model to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportModel(_model: Model, _isUpdate: boolean | undefined): void {}\n\n /** Called when a model should be deleted. */\n public onDeleteModel(_modelId: Id64String): void {}\n\n /** If `true` is returned, then the element will be exported.\n * @note This method can optionally be overridden to exclude an individual Element (and its children and ElementAspects) from the export. The base implementation always returns `true`.\n */\n public shouldExportElement(_element: Element): boolean {\n return true;\n }\n\n /** Called when element is skipped instead of exported.\n * @note When an element is skipped, exporter will not export any of its child elements. Because of this, [[onSkipElement]] will not be invoked for any children of a \"skipped\" element.\n */\n public onSkipElement(_elementId: Id64String): void {}\n\n /** Called when an element should be exported.\n * @param element The element to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportElement(\n _element: Element,\n _isUpdate: boolean | undefined\n ): void {}\n\n /**\n * Do any asynchronous actions before exporting an element\n * @note Do not implement this handler manually, it is internal, it will be removed.\n * This will become a part of onExportElement once that becomes async\n * @internal\n */\n public async preExportElement(_element: Element): Promise<void> {}\n\n /** Called when an element should be deleted. */\n public onDeleteElement(_elementId: Id64String): void {}\n\n /** If `true` is returned, then the ElementAspect will be exported.\n * @note This method can optionally be overridden to exclude an individual ElementAspect from the export. The base implementation always returns `true`.\n */\n public shouldExportElementAspect(_aspect: ElementAspect): boolean {\n return true;\n }\n\n /** Called when an ElementUniqueAspect should be exported.\n * @param aspect The ElementUniqueAspect to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportElementUniqueAspect(\n _aspect: ElementUniqueAspect,\n _isUpdate: boolean | undefined\n ): void {}\n\n /** Called when ElementMultiAspects should be exported.\n * @note This should be overridden to actually do the export.\n */\n public onExportElementMultiAspects(_aspects: ElementMultiAspect[]): void {}\n\n /** If `true` is returned, then the relationship will be exported.\n * @note This method can optionally be overridden to exclude an individual CodeSpec from the export. The base implementation always returns `true`.\n */\n public shouldExportRelationship(_relationship: Relationship): boolean {\n return true;\n }\n\n /** Called when a Relationship should be exported.\n * @param relationship The Relationship to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportRelationship(\n _relationship: Relationship,\n _isUpdate: boolean | undefined\n ): void {}\n\n /** Called when a relationship should be deleted. */\n public onDeleteRelationship(_relInstanceId: Id64String): void {}\n\n /** If `true` is returned, then the schema will be exported.\n * @note This method can optionally be overridden to exclude an individual schema from the export. The base implementation always returns `true`.\n */\n public shouldExportSchema(_schemaKey: SchemaKey): boolean {\n return true;\n }\n\n /** Called when a schema should be exported.\n * @param schema The schema to export\n * @note This should be overridden to actually do the export.\n * @note return an [[ExportSchemaResult]] with a `schemaPath` property to notify overrides that call `super`\n * where a schema was written for import.\n */\n public async onExportSchema(\n _schema: Schema\n ): Promise<void | ExportSchemaResult> {}\n\n /** This method is called when IModelExporter has made incremental progress based on the [[IModelExporter.progressInterval]] setting.\n * This method is `async` to make it easier to integrate with asynchronous status and health reporting services.\n * @note A subclass may override this method to report custom progress. The base implementation does nothing.\n */\n public async onProgress(): Promise<void> {}\n}\n\n/** Base class for exporting data from an iModel.\n * @note Most uses cases will not require a custom subclass of `IModelExporter`. Instead, it is more typical to subclass/customize [IModelExportHandler]($transformer).\n * @see [iModel Transformation and Data Exchange]($docs/learning/transformer/index.md), [[registerHandler]], [IModelTransformer]($transformer), [IModelImporter]($transformer)\n * @beta\n */\nexport class IModelExporter {\n /** The read-only source iModel. */\n public readonly sourceDb: IModelDb;\n /** A flag that indicates whether element GeometryStreams are loaded or not.\n * @note As an optimization, exporters that don't need geometry can set this flag to `false`. The default is `true`.\n * @note The transformer by default sets this to `false` as an optimization.\n * @note This implies the `wantBRepData` option when loading elements.\n * @see [ElementLoadProps.wantGeometry]($common)\n */\n public wantGeometry: boolean = true;\n /** A flag that indicates whether template models should be exported or not. The default is `true`.\n * @note If only exporting *instances* then template models can be skipped since they are just definitions that are cloned to create new instances.\n * @see [Model.isTemplate]($backend)\n */\n public wantTemplateModels: boolean = true;\n /** A flag that indicates whether *system* schemas should be exported or not. The default is `true` (previously false).\n * This can be set to false for the legacy default behavior, but it may cause errors during schema processing in some cases.\n * @see [[exportSchemas]]\n */\n public wantSystemSchemas: boolean = true;\n /** A flag that determines whether this IModelExporter should visit Elements or not. The default is `true`.\n * @note This flag is available as an optimization when the exporter doesn't need to visit elements, so can skip loading them.\n */\n public visitElements: boolean = true;\n /** A flag that determines whether this IModelExporter should visit Relationships or not. The default is `true`.\n * @note This flag is available as an optimization when the exporter doesn't need to visit relationships, so can skip loading them.\n */\n public visitRelationships: boolean = true;\n /** The number of entities exported before incremental progress should be reported via the [[onProgress]] callback. */\n public progressInterval: number = 1000;\n /** Tracks the current total number of entities exported. */\n private _progressCounter: number = 0;\n /** Optionally cached entity change information */\n private _sourceDbChanges?: ChangedInstanceIds;\n\n /**\n * Retrieve the cached entity change information.\n * @note This will only be initialized after [IModelExporter.exportChanges] is invoked or [IModelExporter.initialize] is called.\n */\n public get sourceDbChanges(): ChangedInstanceIds | undefined {\n return this._sourceDbChanges;\n }\n /** The handler called by this IModelExporter. */\n private _handler: IModelExportHandler | undefined;\n /** The handler called by this IModelExporter. */\n protected get handler(): IModelExportHandler {\n if (undefined === this._handler) {\n throw new Error(\"IModelExportHandler not registered\");\n }\n\n return this._handler;\n }\n\n /** The set of CodeSpecs to exclude from the export. */\n private _excludedCodeSpecNames = new Set<string>();\n /** The set of specific Elements to exclude from the export. */\n private _excludedElementIds = new Set<Id64String>();\n /** The set of Categories where Elements in that Category will be excluded from transformation to the target iModel. */\n private _excludedElementCategoryIds = new Set<Id64String>();\n /** The set of classes of Elements that will be excluded (polymorphically) from transformation to the target iModel. */\n private _excludedElementClasses = new Set<typeof Element>();\n /** The set of classes of Relationships that will be excluded (polymorphically) from transformation to the target iModel. */\n private _excludedRelationshipClasses = new Set<typeof Relationship>();\n\n /** Strategy for how ElementAspects are exported */\n private _exportElementAspectsStrategy: ExportElementAspectsStrategy;\n\n /** Construct a new IModelExporter\n * @param sourceDb The source IModelDb\n * @see registerHandler\n */\n public constructor(\n sourceDb: IModelDb,\n elementAspectsStrategy: new (\n source: IModelDb,\n handler: ElementAspectsHandler\n ) => ExportElementAspectsStrategy = ExportElementAspectsWithElementsStrategy\n ) {\n this.sourceDb = sourceDb;\n this._exportElementAspectsStrategy = new elementAspectsStrategy(\n this.sourceDb,\n {\n onExportElementMultiAspects: (aspects) =>\n this.handler.onExportElementMultiAspects(aspects),\n onExportElementUniqueAspect: (aspect, isUpdate) =>\n this.handler.onExportElementUniqueAspect(aspect, isUpdate),\n shouldExportElementAspect: (aspect) =>\n this.handler.shouldExportElementAspect(aspect),\n trackProgress: async () => this.trackProgress(),\n }\n );\n }\n\n /**\n * Initialize prerequisites of exporting. This is implicitly done by any `export*` calls that need initialization\n * which is currently just `exportChanges`.\n * Prefer to not call this explicitly (e.g. just call [[IModelExporter.exportChanges]])\n * @note that if you do call this explicitly, you must do so with the same options that\n * you pass to [[IModelExporter.exportChanges]]\n */\n public async initialize(options: ExporterInitOptions): Promise<void> {\n if (!this.sourceDb.isBriefcaseDb() || this._sourceDbChanges) return;\n\n this._sourceDbChanges = await ChangedInstanceIds.initialize({\n iModel: this.sourceDb,\n ...options,\n });\n if (this._sourceDbChanges === undefined) return;\n\n this._exportElementAspectsStrategy.setAspectChanges(\n this._sourceDbChanges.aspect\n );\n }\n\n /** Register the handler that will be called by IModelExporter. */\n public registerHandler(handler: IModelExportHandler): void {\n this._handler = handler;\n }\n\n /** Add a rule to exclude a CodeSpec */\n public excludeCodeSpec(codeSpecName: string): void {\n this._excludedCodeSpecNames.add(codeSpecName);\n }\n\n /** Add a rule to exclude a specific Element. */\n public excludeElement(elementId: Id64String): void {\n this._excludedElementIds.add(elementId);\n }\n\n /** Add a rule to exclude all Elements in a specified Category. */\n public excludeElementsInCategory(categoryId: Id64String): void {\n this._excludedElementCategoryIds.add(categoryId);\n }\n\n /** Add a rule to exclude all Elements of a specified class. */\n public excludeElementClass(classFullName: string): void {\n this._excludedElementClasses.add(\n this.sourceDb.getJsClass<typeof Element>(classFullName)\n );\n }\n\n /** Add a rule to exclude all ElementAspects of a specified class. */\n public excludeElementAspectClass(classFullName: string): void {\n this._exportElementAspectsStrategy.excludeElementAspectClass(classFullName);\n }\n\n /** Add a rule to exclude all Relationships of a specified class. */\n public excludeRelationshipClass(classFullName: string): void {\n this._excludedRelationshipClasses.add(\n this.sourceDb.getJsClass<typeof Relationship>(classFullName)\n );\n }\n\n /** Export all entity instance types from the source iModel.\n * @note [[exportSchemas]] must be called separately.\n */\n public async exportAll(): Promise<void> {\n await this.initialize({});\n\n await this.exportCodeSpecs();\n await this.exportFonts();\n await this.exportModel(IModel.repositoryModelId);\n await this.exportRelationships(ElementRefersToElements.classFullName);\n }\n\n /** Export changes from the source iModel.\n * Inserts, updates, and deletes are determined by inspecting the changeset(s).\n * @note To form a range of versions to process, set `startChangesetId` for the start (inclusive) of the desired\n * range and open the source iModel as of the end (inclusive) of the desired range.\n * @note the changedInstanceIds are just for this call to exportChanges, so you must continue to pass it in\n * for consecutive calls\n * @note Passing {} or undefined to exportChanges will result in the current changeset of the source iModel being exported.\n */\n public async exportChanges(args?: ExportChangesOptions): Promise<void> {\n if (!this.sourceDb.isBriefcaseDb())\n throw new IModelError(\n IModelStatus.BadRequest,\n \"Must be a briefcase to export changes\"\n );\n\n if (\"\" === this.sourceDb.changeset.id) {\n await this.exportAll(); // no changesets, so revert to exportAll\n return;\n }\n\n const isEmptyObject = (obj: object): boolean =>\n Object.keys(obj).length === 0;\n\n let initOpts: ExporterInitOptions;\n if (args === undefined || isEmptyObject(args)) {\n // Fallback behavior for exportChanges with no args / empty object, this.initialize will process the current changeset of the source iModel being exported when startChangeset.id is undefined.\n initOpts = {\n startChangeset: { id: undefined },\n };\n } else {\n initOpts = args;\n }\n\n await this.initialize(initOpts);\n\n // _sourceDbChanges are initialized in this.initialize\n nodeAssert(\n this._sourceDbChanges !== undefined,\n \"sourceDbChanges must be initialized.\"\n );\n\n await this.exportCodeSpecs();\n await this.exportFonts();\n if (initOpts.skipPropagateChangesToRootElements) {\n await this.exportModelContents(IModel.repositoryModelId);\n await this.exportSubModels(IModel.repositoryModelId);\n } else {\n await this.exportModel(IModel.repositoryModelId);\n }\n await this.exportAllAspects();\n await this.exportRelationships(ElementRefersToElements.classFullName);\n\n // handle deletes\n if (this.visitElements) {\n // must delete models first since they have a constraint on the submodeling element which may also be deleted\n for (const modelId of this._sourceDbChanges.model.deleteIds) {\n this.handler.onDeleteModel(modelId);\n }\n for (const elementId of this._sourceDbChanges.element.deleteIds) {\n // We don't know how the handler wants to handle deletions, and we don't have enough information\n // to know if deleted entities were related, so when processing changes, ignore errors from deletion.\n // Technically, to keep the ignored error scope small, we ignore only the error of looking up a missing element,\n // that approach works at least for the IModelTransformer.\n // In the future, the handler may be responsible for doing the work of finding out which elements were cascade deleted,\n // and returning them for the exporter to use to avoid double-deleting with error ignoring\n try {\n this.handler.onDeleteElement(elementId);\n } catch (err: unknown) {\n const isMissingErr =\n err instanceof IModelError &&\n err.errorNumber === IModelStatus.NotFound;\n if (!isMissingErr) throw err;\n }\n }\n }\n\n if (this.visitRelationships) {\n for (const relInstanceId of this._sourceDbChanges.relationship\n .deleteIds) {\n this.handler.onDeleteRelationship(relInstanceId);\n }\n }\n\n // Enable consecutive exportChanges runs without the need to re-instantiate the exporter.\n // You can counteract the obvious impact of losing this expensive data by always calling\n // exportChanges with the [[ExportChangesOptions.changedInstanceIds]] option set to\n // whatever you want\n if (this._resetChangeDataOnExport) this._sourceDbChanges = undefined;\n }\n\n private _resetChangeDataOnExport = true;\n\n /** Export schemas from the source iModel.\n * @note This must be called separately from [[exportAll]] or [[exportChanges]].\n */\n public async exportSchemas(): Promise<void> {\n /* eslint-disable @typescript-eslint/indent */\n const sql = `\n SELECT s.Name, s.VersionMajor, s.VersionWrite, s.VersionMinor\n FROM ECDbMeta.ECSchemaDef s\n ${\n this.wantSystemSchemas\n ? \"\"\n : `\n WHERE ECInstanceId >= (SELECT ECInstanceId FROM ECDbMeta.ECSchemaDef WHERE Name='BisCore')\n `\n }\n ORDER BY ECInstanceId\n `;\n /* eslint-enable @typescript-eslint/indent */\n const schemaNamesToExport: string[] = [];\n this.sourceDb.withPreparedStatement(sql, (statement: ECSqlStatement) => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const schemaName = statement.getValue(0).getString();\n const versionMajor = statement.getValue(1).getInteger();\n const versionWrite = statement.getValue(2).getInteger();\n const versionMinor = statement.getValue(3).getInteger();\n const schemaKey = new SchemaKey(\n schemaName,\n new ECVersion(versionMajor, versionWrite, versionMinor)\n );\n if (this.handler.shouldExportSchema(schemaKey)) {\n schemaNamesToExport.push(schemaName);\n }\n }\n });\n\n if (schemaNamesToExport.length === 0) return;\n\n const schemaLoader = new SchemaLoader((name: string) =>\n this.sourceDb.getSchemaProps(name)\n );\n await Promise.all(\n schemaNamesToExport.map(async (schemaName) => {\n const schema = schemaLoader.getSchema(schemaName);\n Logger.logTrace(loggerCategory, `exportSchema(${schemaName})`);\n return this.handler.onExportSchema(schema);\n })\n );\n }\n\n /** For logging, indicate the change type if known. */\n private getChangeOpSuffix(isUpdate: boolean | undefined): string {\n return isUpdate ? \" UPDATE\" : undefined === isUpdate ? \"\" : \" INSERT\";\n }\n\n /** Export all CodeSpecs from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportCodeSpecs(): Promise<void> {\n Logger.logTrace(loggerCategory, \"exportCodeSpecs()\");\n const sql = \"SELECT Name FROM BisCore:CodeSpec ORDER BY ECInstanceId\";\n await this.sourceDb.withPreparedStatement(\n sql,\n async (statement: ECSqlStatement): Promise<void> => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const codeSpecName: string = statement.getValue(0).getString();\n await this.exportCodeSpecByName(codeSpecName);\n }\n }\n );\n }\n\n /** Export a single CodeSpec from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportCodeSpecByName(codeSpecName: string): Promise<void> {\n const codeSpec: CodeSpec = this.sourceDb.codeSpecs.getByName(codeSpecName);\n let isUpdate: boolean | undefined;\n if (this._sourceDbChanges !== undefined) {\n // is changeset information available?\n if (this._sourceDbChanges.codeSpec.insertIds.has(codeSpec.id)) {\n isUpdate = false;\n } else if (this._sourceDbChanges.codeSpec.updateIds.has(codeSpec.id)) {\n isUpdate = true;\n } else {\n return; // not in changeset, don't export\n }\n }\n // passed changeset test, now apply standard exclusion rules\n if (this._excludedCodeSpecNames.has(codeSpec.name)) {\n Logger.logInfo(loggerCategory, `Excluding CodeSpec: ${codeSpec.name}`);\n return;\n }\n // CodeSpec has passed standard exclusion rules, now give handler a chance to accept/reject export\n if (this.handler.shouldExportCodeSpec(codeSpec)) {\n Logger.logTrace(\n loggerCategory,\n `exportCodeSpec(${codeSpecName})${this.getChangeOpSuffix(isUpdate)}`\n );\n this.handler.onExportCodeSpec(codeSpec, isUpdate);\n return this.trackProgress();\n }\n }\n\n /** Export a single CodeSpec from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportCodeSpecById(codeSpecId: Id64String): Promise<void> {\n const codeSpec: CodeSpec = this.sourceDb.codeSpecs.getById(codeSpecId);\n return this.exportCodeSpecByName(codeSpec.name);\n }\n\n /** Export all fonts from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportFonts(): Promise<void> {\n Logger.logTrace(loggerCategory, \"exportFonts()\");\n for (const font of this.sourceDb.fontMap.fonts.values()) {\n await this.exportFontByNumber(font.id);\n }\n }\n\n /** Export a single font from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportFontByName(fontName: string): Promise<void> {\n Logger.logTrace(loggerCategory, `exportFontByName(${fontName})`);\n const font: FontProps | undefined = this.sourceDb.fontMap.getFont(fontName);\n if (undefined !== font) {\n await this.exportFontByNumber(font.id);\n }\n }\n\n /** Export a single font from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportFontByNumber(fontNumber: number): Promise<void> {\n /** sourceDbChanges now works by using TS ChangesetECAdaptor which doesn't pick up changes to fonts since fonts is not an ec table.\n * So lets always export fonts for the time being by always setting isUpdate = true.\n * It is very rare and even problematic for the font table to reach a large size, so it is not a bottleneck in transforming changes.\n * See https://github.com/iTwin/imodel-transformer/pull/135 for removed code.\n */\n const isUpdate = true;\n Logger.logTrace(loggerCategory, `exportFontById(${fontNumber})`);\n const font: FontProps | undefined =\n this.sourceDb.fontMap.getFont(fontNumber);\n if (undefined !== font) {\n this.handler.onExportFont(font, isUpdate);\n return this.trackProgress();\n }\n }\n\n /** Export the model container, contents, and sub-models from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportModel(modeledElementId: Id64String): Promise<void> {\n const model: Model = this.sourceDb.models.getModel(modeledElementId);\n if (model.isTemplate && !this.wantTemplateModels) {\n return;\n }\n const modeledElement: Element = this.sourceDb.elements.getElement({\n id: modeledElementId,\n wantGeometry: this.wantGeometry,\n wantBRepData: this.wantGeometry,\n });\n Logger.logTrace(loggerCategory, `exportModel(${modeledElementId})`);\n if (this.shouldExportElement(modeledElement)) {\n await this.exportModelContainer(model);\n if (this.visitElements) {\n await this.exportModelContents(modeledElementId);\n }\n await this.exportSubModels(modeledElementId);\n }\n }\n\n /** Export the model (the container only) from the source iModel. */\n private async exportModelContainer(model: Model): Promise<void> {\n let isUpdate: boolean | undefined;\n if (this._sourceDbChanges !== undefined) {\n // is changeset information available?\n if (this._sourceDbChanges.model.insertIds.has(model.id)) {\n isUpdate = false;\n } else if (this._sourceDbChanges.model.updateIds.has(model.id)) {\n isUpdate = true;\n } else {\n return; // not in changeset, don't export\n }\n }\n this.handler.onExportModel(model, isUpdate);\n return this.trackProgress();\n }\n\n private _yieldManager = new YieldManager();\n\n /** Export the model contents.\n * @param modelId The only required parameter\n * @param elementClassFullName Can be optionally specified if the goal is to export a subset of the model contents\n * @param skipRootSubject Decides whether or not to export the root Subject. It is normally left undefined except for internal implementation purposes.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportModelContents(\n modelId: Id64String,\n elementClassFullName: string = Element.classFullName,\n skipRootSubject?: boolean\n ): Promise<void> {\n if (skipRootSubject) {\n // NOTE: IModelTransformer.processAll should skip the root Subject since it is specific to the individual iModel and is not part of the changes that need to be synchronized\n // NOTE: IModelExporter.exportAll should not skip the root Subject since the goal is to export everything\n assert(modelId === IModel.repositoryModelId); // flag is only relevant when processing the RepositoryModel\n }\n if (!this.visitElements) {\n Logger.logTrace(\n loggerCategory,\n `visitElements=false, skipping exportModelContents(${modelId})`\n );\n return;\n }\n if (this._sourceDbChanges !== undefined) {\n // is changeset information available?\n if (\n !this._sourceDbChanges.model.insertIds.has(modelId) &&\n !this._sourceDbChanges.model.updateIds.has(modelId)\n ) {\n return; // this optimization assumes that the Model changes (LastMod) any time an Element in the Model changes\n }\n }\n Logger.logTrace(loggerCategory, `exportModelContents(${modelId})`);\n let sql: string;\n if (skipRootSubject) {\n sql = `SELECT ECInstanceId FROM ${elementClassFullName} WHERE Parent.Id IS NULL AND Model.Id=:modelId AND ECInstanceId!=:rootSubjectId ORDER BY ECInstanceId`;\n } else {\n sql = `SELECT ECInstanceId FROM ${elementClassFullName} WHERE Parent.Id IS NULL AND Model.Id=:modelId ORDER BY ECInstanceId`;\n }\n await this.sourceDb.withPreparedStatement(\n sql,\n async (statement: ECSqlStatement): Promise<void> => {\n statement.bindId(\"modelId\", modelId);\n if (skipRootSubject) {\n statement.bindId(\"rootSubjectId\", IModel.rootSubjectId);\n }\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n await this.exportElement(statement.getValue(0).getId());\n await this._yieldManager.allowYield();\n }\n }\n );\n }\n\n /** Export the sub-models directly below the specified model.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportSubModels(parentModelId: Id64String): Promise<void> {\n Logger.logTrace(loggerCategory, `exportSubModels(${parentModelId})`);\n const definitionModelIds: Id64String[] = [];\n const otherModelIds: Id64String[] = [];\n const sql = `SELECT ECInstanceId FROM ${Model.classFullName} WHERE ParentModel.Id=:parentModelId ORDER BY ECInstanceId`;\n this.sourceDb.withPreparedStatement(\n sql,\n (statement: ECSqlStatement): void => {\n statement.bindId(\"parentModelId\", parentModelId);\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const modelId: Id64String = statement.getValue(0).getId();\n const model: Model = this.sourceDb.models.getModel(modelId);\n if (model instanceof DefinitionModel) {\n definitionModelIds.push(modelId);\n } else {\n otherModelIds.push(modelId);\n }\n }\n }\n );\n // export DefinitionModels before other types of Models\n for (const definitionModelId of definitionModelIds) {\n await this.exportModel(definitionModelId);\n }\n for (const otherModelId of otherModelIds) {\n await this.exportModel(otherModelId);\n }\n }\n\n /** Returns true if the specified element should be exported.\n * This considers the standard IModelExporter exclusion rules plus calls [IModelExportHandler.shouldExportElement]($transformer) for any custom exclusion rules.\n * @note This method is called from within [[exportChanges]] and [[exportAll]], so usually does not need to be called directly.\n */\n public shouldExportElement(element: Element): boolean {\n if (this._excludedElementIds.has(element.id)) {\n Logger.logInfo(loggerCategory, `Excluded element ${element.id} by Id`);\n return false;\n }\n if (element instanceof GeometricElement) {\n if (this._excludedElementCategoryIds.has(element.category)) {\n Logger.logInfo(\n loggerCategory,\n `Excluded element ${element.id} by Category`\n );\n return false;\n }\n }\n if (\n !this.wantTemplateModels &&\n element instanceof RecipeDefinitionElement\n ) {\n Logger.logInfo(\n loggerCategory,\n `Excluded RecipeDefinitionElement ${element.id} because wantTemplate=false`\n );\n return false;\n }\n for (const excludedElementClass of this._excludedElementClasses) {\n if (element instanceof excludedElementClass) {\n Logger.logInfo(\n loggerCategory,\n `Excluded element ${element.id} by class: ${excludedElementClass.classFullName}`\n );\n return false;\n }\n }\n // element has passed standard exclusion rules, now give handler a chance to accept/reject\n return this.handler.shouldExportElement(element);\n }\n\n /** Export the specified element, its child elements (if applicable), and any owned ElementAspects.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportElement(elementId: Id64String): Promise<void> {\n if (!this.visitElements) {\n Logger.logTrace(\n loggerCategory,\n `visitElements=false, skipping exportElement(${elementId})`\n );\n return;\n }\n\n // Return early if the elementId is already in the excludedElementIds, that way we don't need to load the element from the db.\n if (this._excludedElementIds.has(elementId)) {\n Logger.logInfo(loggerCategory, `Excluded element ${elementId} by Id`);\n this.handler.onSkipElement(elementId);\n return;\n }\n\n // are we processing changes?\n const isUpdate = this._sourceDbChanges?.element.insertIds.has(elementId)\n ? false\n : this._sourceDbChanges?.element.updateIds.has(elementId)\n ? true\n : undefined;\n\n const element = this.sourceDb.elements.getElement({\n id: elementId,\n wantGeometry: this.wantGeometry,\n wantBRepData: this.wantGeometry,\n });\n Logger.logTrace(\n loggerCategory,\n `exportElement(${\n element.id\n }, \"${element.getDisplayLabel()}\")${this.getChangeOpSuffix(isUpdate)}`\n );\n // the order and `await`ing of calls beyond here is depended upon by the IModelTransformer for a current bug workaround\n if (this.shouldExportElement(element)) {\n await this.handler.preExportElement(element);\n this.handler.onExportElement(element, isUpdate);\n await this.trackProgress();\n await this._exportElementAspectsStrategy.exportElementAspectsForElement(\n elementId\n );\n return this.exportChildElements(elementId);\n } else {\n this.handler.onSkipElement(element.id);\n }\n }\n\n /** Export the child elements of the specified element from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportChildElements(elementId: Id64String): Promise<void> {\n if (!this.visitElements) {\n Logger.logTrace(\n loggerCategory,\n `visitElements=false, skipping exportChildElements(${elementId})`\n );\n return;\n }\n const childElementIds: Id64String[] =\n this.sourceDb.elements.queryChildren(elementId);\n if (childElementIds.length > 0) {\n Logger.logTrace(loggerCategory, `exportChildElements(${elementId})`);\n for (const childElementId of childElementIds) {\n await this.exportElement(childElementId);\n }\n }\n }\n\n /** Exports all aspects present in the iModel.\n */\n private async exportAllAspects(): Promise<void> {\n return this._exportElementAspectsStrategy.exportAllElementAspects();\n }\n\n /** Exports all relationships that subclass from the specified base class.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportRelationships(\n baseRelClassFullName: string\n ): Promise<void> {\n if (!this.visitRelationships) {\n Logger.logTrace(\n loggerCategory,\n \"visitRelationships=false, skipping exportRelationships()\"\n );\n return;\n }\n Logger.logTrace(\n loggerCategory,\n `exportRelationships(${baseRelClassFullName})`\n );\n const sql = `SELECT r.ECInstanceId, r.ECClassId FROM ${baseRelClassFullName} r\n JOIN bis.Element s ON s.ECInstanceId = r.SourceECInstanceId\n JOIN bis.Element t ON t.ECInstanceId = r.TargetECInstanceId\n WHERE s.ECInstanceId IS NOT NULL AND t.ECInstanceId IS NOT NULL`;\n await this.sourceDb.withPreparedStatement(\n sql,\n async (statement: ECSqlStatement): Promise<void> => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const relationshipId = statement.getValue(0).getId();\n const relationshipClass = statement\n .getValue(1)\n .getClassNameForClassId();\n await this.exportRelationship(relationshipClass, relationshipId); // must call exportRelationship using the actual classFullName, not baseRelClassFullName\n await this._yieldManager.allowYield();\n }\n }\n );\n }\n\n /** Export a relationship from the source iModel. */\n public async exportRelationship(\n relClassFullName: string,\n relInstanceId: Id64String\n ): Promise<void> {\n if (!this.visitRelationships) {\n Logger.logTrace(\n loggerCategory,\n `visitRelationships=false, skipping exportRelationship(${relClassFullName}, ${relInstanceId})`\n );\n return;\n }\n let isUpdate: boolean | undefined;\n if (this._sourceDbChanges !== undefined) {\n // is changeset information available?\n if (this._sourceDbChanges.relationship.insertIds.has(relInstanceId)) {\n isUpdate = false;\n } else if (\n this._sourceDbChanges.relationship.updateIds.has(relInstanceId)\n ) {\n isUpdate = true;\n } else {\n return; // not in changeset, don't export\n }\n }\n // passed changeset test, now apply standard exclusion rules\n Logger.logTrace(\n loggerCategory,\n `exportRelationship(${relClassFullName}, ${relInstanceId})`\n );\n const relationship: Relationship = this.sourceDb.relationships.getInstance(\n relClassFullName,\n relInstanceId\n );\n for (const excludedRelationshipClass of this._excludedRelationshipClasses) {\n if (relationship instanceof excludedRelationshipClass) {\n Logger.logInfo(\n loggerCategory,\n `Excluded relationship by class: ${excludedRelationshipClass.classFullName}`\n );\n return;\n }\n }\n // relationship has passed standard exclusion rules, now give handler a chance to accept/reject export\n if (this.handler.shouldExportRelationship(relationship)) {\n this.handler.onExportRelationship(relationship, isUpdate);\n await this.trackProgress();\n }\n }\n\n /** Tracks incremental progress */\n private async trackProgress(): Promise<void> {\n this._progressCounter++;\n if (0 === this._progressCounter % this.progressInterval) {\n return this.handler.onProgress();\n }\n }\n}\n\n/**\n * Arguments for [[ChangedInstanceIds.initialize]]\n * @public\n */\nexport type ChangedInstanceIdsInitOptions = ExportChangesOptions & {\n iModel: BriefcaseDb;\n};\n\n/** Class for holding change information.\n * @public\n */\nexport class ChangedInstanceOps {\n public insertIds = new Set<Id64String>();\n public updateIds = new Set<Id64String>();\n public deleteIds = new Set<Id64String>();\n\n /** Initializes the object from IModelJsNative.ChangedInstanceOpsProps. */\n public addFromJson(\n val: IModelJsNative.ChangedInstanceOpsProps | undefined\n ): void {\n if (undefined !== val) {\n if (undefined !== val.insert && Array.isArray(val.insert))\n val.insert.forEach((id: Id64String) => this.insertIds.add(id));\n\n if (undefined !== val.update && Array.isArray(val.update))\n val.update.forEach((id: Id64String) => this.updateIds.add(id));\n\n if (undefined !== val.delete && Array.isArray(val.delete))\n val.delete.forEach((id: Id64String) => this.deleteIds.add(id));\n }\n }\n\n public get isEmpty(): boolean {\n return (\n 0 === this.insertIds.size &&\n 0 === this.updateIds.size &&\n 0 === this.deleteIds.size\n );\n }\n}\n\n/**\n * Interface to describe a 'custom' change. A custom change is one which isn't found by reading changesets, but instead added by a user calling the 'addCustomChange' API on the ChangedInstanceIds instance.\n * The purpose a custom change would serve is to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @beta\n */\nexport interface ChangedInstanceCustomRelationshipData {\n sourceIdOfRelationship: Id64String;\n targetIdOfRelationship: Id64String;\n ecClassId: Id64String;\n classFullName: string;\n}\n\n/**\n * Class for discovering modified elements between 2 versions of an iModel.\n * @public\n */\nexport class ChangedInstanceIds {\n public codeSpec = new ChangedInstanceOps();\n public model = new ChangedInstanceOps();\n public element = new ChangedInstanceOps();\n public aspect = new ChangedInstanceOps();\n public relationship = new ChangedInstanceOps();\n public font = new ChangedInstanceOps();\n private _codeSpecSubclassIds?: Set<string>;\n private _modelSubclassIds?: Set<string>;\n private _elementSubclassIds?: Set<string>;\n private _aspectSubclassIds?: Set<string>;\n private _relationshipSubclassIds?: Set<string>;\n private _relationshipSubclassIdsToSkip?: Set<string>;\n private _ecClassIdsToClassFullNames?: Map<string, string>;\n /** c${string} is used to represent codeSpecs since they do not currently have a representation in the EntityReference class. This map holds information passed to the 'addCustom' functions. */\n private _entityReferenceToCustomDataMap: Map<\n EntityReference | `c${string}`,\n ChangedInstanceCustomRelationshipData\n >;\n private _hasCustomRelationshipChanges: boolean;\n\n private _db: IModelDb;\n public constructor(db: IModelDb) {\n this._db = db;\n this._hasCustomRelationshipChanges = false;\n this._entityReferenceToCustomDataMap = new Map<\n EntityReference,\n ChangedInstanceCustomRelationshipData\n >();\n }\n\n private async setupECClassIds(): Promise<void> {\n this._codeSpecSubclassIds = new Set<string>();\n this._modelSubclassIds = new Set<string>();\n this._elementSubclassIds = new Set<string>();\n this._aspectSubclassIds = new Set<string>();\n this._relationshipSubclassIds = new Set<string>();\n this._relationshipSubclassIdsToSkip = new Set<string>();\n this._ecClassIdsToClassFullNames = new Map<string, string>();\n\n const addECClassIdsToSet = async (\n setToModify: Set<string>,\n baseClass: string\n ) => {\n for await (const row of this._db.createQueryReader(\n `SELECT c.ECInstanceId ECClassId, c.Name className, s.Name schemaName FROM ECDbMeta.ECClassDef c JOIN ECDbMeta.ECSchemaDef s ON s.ECInstanceId = c.Schema.Id WHERE c.ECInstanceId IS (${baseClass})`\n )) {\n setToModify.add(row.ECClassId);\n this._ecClassIdsToClassFullNames?.set(\n row.ECClassId,\n `${row.schemaName}:${row.className}`\n );\n }\n };\n const promises = [\n addECClassIdsToSet(this._codeSpecSubclassIds, \"BisCore.CodeSpec\"),\n addECClassIdsToSet(this._modelSubclassIds, \"BisCore.Model\"),\n addECClassIdsToSet(this._elementSubclassIds, \"BisCore.Element\"),\n addECClassIdsToSet(\n this._aspectSubclassIds,\n \"BisCore.ElementUniqueAspect\"\n ),\n addECClassIdsToSet(this._aspectSubclassIds, \"BisCore.ElementMultiAspect\"),\n addECClassIdsToSet(\n this._relationshipSubclassIds,\n \"BisCore.ElementRefersToElements\"\n ),\n addECClassIdsToSet(\n this._relationshipSubclassIdsToSkip,\n \"BisCore.ElementDrivesElement\"\n ),\n ];\n await Promise.all(promises);\n }\n\n private get _ecClassIdsInitialized() {\n return (\n this._codeSpecSubclassIds &&\n this._modelSubclassIds &&\n this._elementSubclassIds &&\n this._aspectSubclassIds &&\n this._relationshipSubclassIds &&\n this._relationshipSubclassIdsToSkip\n );\n }\n\n private isRelationship(ecClassId: string) {\n return this._relationshipSubclassIds?.has(ecClassId);\n }\n\n private isCodeSpec(ecClassId: string) {\n return this._codeSpecSubclassIds?.has(ecClassId);\n }\n\n private isAspect(ecClassId: string) {\n return this._aspectSubclassIds?.has(ecClassId);\n }\n\n private isModel(ecClassId: string) {\n return this._modelSubclassIds?.has(ecClassId);\n }\n\n private isElement(ecClassId: string) {\n return this._elementSubclassIds?.has(ecClassId);\n }\n\n public get hasCustomRelationshipChanges(): boolean {\n return this._hasCustomRelationshipChanges;\n }\n\n public get hasChanges(): boolean {\n return (\n !this.codeSpec.isEmpty ||\n !this.model.isEmpty ||\n !this.element.isEmpty ||\n !this.aspect.isEmpty ||\n !this.relationship.isEmpty ||\n !this.font.isEmpty\n );\n }\n\n /**\n * Adds the provided [[ChangedECInstance]] to the appropriate set of changes by class type (codeSpec, model, element, aspect, or relationship) maintained by this instance of ChangedInstanceIds.\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @param change ChangedECInstance which has the ECInstanceId, changeType (insert, update, delete) and ECClassId of the changed entity\n */\n public async addChange(change: ChangedECInstance): Promise<void> {\n if (!this._ecClassIdsInitialized) await this.setupECClassIds();\n const ecClassId = change.ECClassId ?? change.$meta?.fallbackClassId;\n if (ecClassId === undefined)\n throw new Error(\n `ECClassId was not found for id: ${change.ECInstanceId}! Table is : ${change?.$meta?.tables}`\n );\n const changeType: SqliteChangeOp | undefined = change.$meta?.op;\n if (changeType === undefined)\n throw new Error(\n `ChangeType was undefined for id: ${change.ECInstanceId}.`\n );\n if (this._relationshipSubclassIdsToSkip?.has(ecClassId)) return;\n\n if (this.isRelationship(ecClassId))\n this.handleChange(this.relationship, changeType, change.ECInstanceId);\n else if (this.isCodeSpec(ecClassId))\n this.handleChange(this.codeSpec, changeType, change.ECInstanceId);\n else if (this.isAspect(ecClassId))\n this.handleChange(this.aspect, changeType, change.ECInstanceId);\n else if (this.isModel(ecClassId))\n this.handleChange(this.model, changeType, change.ECInstanceId);\n else if (this.isElement(ecClassId))\n this.handleChange(this.element, changeType, change.ECInstanceId);\n }\n\n /**\n * Adds the provided change to the element changes maintained by this instance of ChangedInstanceIds\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note element changes will also cause the element's model to be marked as updated in [[ChangedInstanceIds.model]], so that the element does not get skipped by the transformer.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact an element.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @beta\n */\n public async addCustomElementChange(\n changeType: SqliteChangeOp,\n ids: Id64Arg\n ): Promise<void> {\n // if delete unnecessary?\n await this.addModelsToUpdated(ids);\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.element, changeType, id);\n }\n }\n\n /**\n * Adds the provided change to the codespec changes maintained by this instance of ChangedInstanceIds\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact a codespec.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @beta\n */\n public addCustomCodeSpecChange(\n changeType: SqliteChangeOp,\n ids: Id64Arg\n ): void {\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.codeSpec, changeType, id);\n }\n }\n\n /**\n * Adds the provided change to the model changes maintained by this instance of ChangedInstanceIds.\n * Also adds the model's modeledElement to the element changes. This is to ensure the changes from the model and its modeledElement get exported together.\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact a model.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @beta\n */\n public async addCustomModelChange(\n changeType: SqliteChangeOp,\n ids: Id64Arg\n ): Promise<void> {\n // Also add the model's modeledElement to the element changes. The modeledElement and model go hand in hand and have the same id.\n await this.addCustomElementChange(changeType, ids);\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.model, changeType, id);\n }\n }\n\n /**\n * Adds the provided change to the aspect changes maintained by this instance of ChangedInstanceIds\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact an aspect.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @beta\n */\n public addCustomAspectChange(changeType: SqliteChangeOp, ids: Id64Arg): void {\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.aspect, changeType, id);\n }\n }\n\n /**\n * TODO: Think more about permutations of model updated / inserted / deleted. Can you delete a model without deleting its elements? \n * What if model delete but custom change si to insert element into target?\n * // It is possible and apparently occasionally sensical to delete a model without deleting its underlying element.\n // - If only the model is deleted, [[initFromExternalSourceAspects]] will have already remapped the underlying element since it still exists.\n // - If both were deleted, [[remapDeletedSourceEntities]] will find and remap the deleted element making this operation valid\n * TODO: If the element is a custom delete we probably shouldnt be calling this?\n * There is an optimization in [IModelExporter.exportModelContents] which doesn't try to export elements within a model unless the model itself is part of\n * the sourceDbChanges. This method is used in addCustomChange to add the model to the updatedIds set so that the custom element changes are exported.\n */\n private async addModelsToUpdated(elementIds: Id64Arg) {\n const compressedIds = CompressedId64Set.sortAndCompress(\n Id64.iterable(elementIds)\n );\n const params = new QueryBinder().bindIdSet(\n \"elementIds\",\n CompressedId64Set.iterable(compressedIds)\n );\n for await (const row of this._db.createQueryReader(\n \"SELECT Model.Id FROM BisCore.Element WHERE InVirtualSet(:elementIds, ECInstanceId)\",\n params\n )) {\n this.handleChange(this.model, \"Updated\", row.id);\n }\n }\n\n /** TODO: Maybe relationships only? maybe not.\n * @beta\n */\n public getCustomRelationshipDataFromId(\n id: Id64String\n ): ChangedInstanceCustomRelationshipData | undefined {\n return this._entityReferenceToCustomDataMap.get(\n EntityReferences.fromEntityType(id, ConcreteEntityTypes.Relationship)\n );\n }\n\n /**\n * Adds the provided change to the set of relationship changes maintained by this instance of ChangedInstanceIds.\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @throws if the ecClassId is NOT a relationship classId\n * @param ecClassId class id of the custom change\n * @param changeType insert, update or delete\n * @param id ECInstanceID of the custom change\n * @param sourceECInstanceId source ECInstanceId of the relationship\n * @param targetECInstanceId target ECInstanceId of the relationship\n * @beta\n */\n public async addCustomRelationshipChange(\n ecClassId: string,\n changeType: SqliteChangeOp,\n id: Id64String,\n sourceECInstanceId: Id64String,\n targetECInstanceId: Id64String\n ): Promise<void> {\n if (!this._ecClassIdsInitialized) await this.setupECClassIds();\n if (this._relationshipSubclassIdsToSkip?.has(ecClassId)) return;\n if (!this._relationshipSubclassIds?.has(ecClassId))\n throw new Error(\n `Misuse. id: ${id}, ecClassId: ${ecClassId} is not a relationship class. Use 'addCustomChange' instead.`\n );\n\n this._hasCustomRelationshipChanges = true;\n const classFullName = this._ecClassIdsToClassFullNames?.get(ecClassId);\n assert(classFullName !== undefined); // setupECClassIds adds an entry to the above map for every single ECClassId.\n this._entityReferenceToCustomDataMap.set(\n EntityReferences.fromEntityType(id, ConcreteEntityTypes.Relationship),\n {\n sourceIdOfRelationship: sourceECInstanceId,\n targetIdOfRelationship: targetECInstanceId,\n ecClassId,\n classFullName,\n }\n );\n this.handleChange(this.relationship, changeType, id);\n }\n\n private handleChange(\n changedInstanceOps: ChangedInstanceOps,\n changeType: SqliteChangeOp,\n id: Id64String\n ) {\n // if changeType is a delete and we already have the id in the inserts then we can remove the id from the inserts.\n // if changeType is a delete and we already have the id in the updates then we can remove the id from the updates AND add it to the deletes.\n // if changeType is an insert and we already have the id in the deletes then we can remove the id from the deletes AND add it to the inserts.\n if (changeType === \"Inserted\") {\n changedInstanceOps.insertIds.add(id);\n changedInstanceOps.deleteIds.delete(id);\n } else if (changeType === \"Updated\") {\n if (!changedInstanceOps.insertIds.has(id))\n changedInstanceOps.updateIds.add(id);\n } else if (changeType === \"Deleted\") {\n // If we've inserted the entity at some point already and now we're seeing a delete. We can simply remove the entity from our inserted ids without adding it to deletedIds.\n if (changedInstanceOps.insertIds.has(id))\n changedInstanceOps.insertIds.delete(id);\n else {\n changedInstanceOps.updateIds.delete(id);\n changedInstanceOps.deleteIds.add(id);\n }\n }\n }\n\n /**\n * Initializes a new ChangedInstanceIds object with information taken from a range of changesets.\n * @public\n */\n public static async initialize(\n opts: ChangedInstanceIdsInitOptions\n ): Promise<ChangedInstanceIds | undefined> {\n if (\"changedInstanceIds\" in opts) return opts.changedInstanceIds;\n\n const iModelId = opts.iModel.iModelId;\n\n const startChangeset =\n \"startChangeset\" in opts ? opts.startChangeset : undefined;\n const changesetRanges =\n startChangeset !== undefined\n ? [\n [\n startChangeset.index ??\n (\n await IModelHost.hubAccess.queryChangeset({\n iModelId,\n changeset: {\n id: startChangeset.id ?? opts.iModel.changeset.id,\n },\n })\n ).index,\n opts.iModel.changeset.index ??\n (\n await IModelHost.hubAccess.queryChangeset({\n iModelId,\n changeset: { id: opts.iModel.changeset.id },\n })\n ).index,\n ],\n ]\n : \"changesetRanges\" in opts\n ? opts.changesetRanges\n : undefined;\n const csFileProps =\n changesetRanges !== undefined\n ? (\n await Promise.all(\n changesetRanges.map(async ([first, end]) =>\n IModelHost.hubAccess.downloadChangesets({\n iModelId,\n range: { first, end },\n targetDir: BriefcaseManager.getChangeSetsPath(iModelId),\n })\n )\n )\n ).flat()\n : \"csFileProps\" in opts\n ? opts.csFileProps\n : undefined;\n\n if (csFileProps === undefined) return undefined;\n\n const changedInstanceIds = new ChangedInstanceIds(opts.iModel);\n\n for (const csFile of csFileProps) {\n const csReader = SqliteChangesetReader.openFile({\n fileName: csFile.pathname,\n db: opts.iModel,\n disableSchemaCheck: true,\n });\n const csAdaptor = new ChangesetECAdaptor(csReader);\n const ecChangeUnifier = new PartialECChangeUnifier();\n while (csAdaptor.step()) {\n ecChangeUnifier.appendFrom(csAdaptor);\n }\n const changes: ChangedECInstance[] = [...ecChangeUnifier.instances];\n\n for (const change of changes) {\n await changedInstanceIds.addChange(change);\n }\n csReader.close();\n }\n return changedInstanceIds;\n }\n}\n"]}
1
+ {"version":3,"file":"IModelExporter.js","sourceRoot":"","sources":["../../src/IModelExporter.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/** @packageDocumentation\n * @module iModels\n */\n\nimport {\n BriefcaseDb,\n BriefcaseManager,\n ChangedECInstance,\n ChangesetECAdaptor,\n DefinitionModel,\n ECSqlStatement,\n // eslint-disable-next-line @typescript-eslint/no-redeclare\n Element,\n ElementAspect,\n ElementMultiAspect,\n ElementRefersToElements,\n ElementUniqueAspect,\n GeometricElement,\n IModelDb,\n IModelHost,\n IModelJsNative,\n Model,\n PartialECChangeUnifier,\n RecipeDefinitionElement,\n Relationship,\n SqliteChangeOp,\n SqliteChangesetReader,\n} from \"@itwin/core-backend\";\nimport {\n assert,\n DbResult,\n Id64,\n Id64Arg,\n Id64Set,\n Id64String,\n IModelStatus,\n Logger,\n YieldManager,\n} from \"@itwin/core-bentley\";\nimport {\n ChangesetFileProps,\n CodeSpec,\n FontProps,\n IModel,\n IModelError,\n QueryBinder,\n} from \"@itwin/core-common\";\nimport {\n ECVersion,\n Schema,\n SchemaKey,\n SchemaLoader,\n} from \"@itwin/ecschema-metadata\";\nimport { TransformerLoggerCategory } from \"./TransformerLoggerCategory\";\nimport * as nodeAssert from \"assert\";\nimport {\n ElementAspectsHandler,\n ExportElementAspectsStrategy,\n} from \"./ExportElementAspectsStrategy\";\nimport { ExportElementAspectsWithElementsStrategy } from \"./ExportElementAspectsWithElementsStrategy\";\n\nconst loggerCategory = TransformerLoggerCategory.IModelExporter;\n\n/**\n * @beta\n * The (optional) result of [[IModelExportHandler.onExportSchema]]\n */\nexport interface ExportSchemaResult {\n /** set this property to notify subclasses where you wrote a schema for later import */\n schemaPath?: string;\n}\n\n/**\n * Arguments for [[IModelExporter.initialize]], usually in case you want to query changedata early\n * such as in the case of the IModelTransformer\n * @beta\n */\nexport type ExporterInitOptions = ExportChangesOptions;\n\n/**\n * Arguments for [[IModelExporter.exportChanges]]\n * @public\n */\nexport type ExportChangesOptions = {\n skipPropagateChangesToRootElements?: boolean;\n} /**\n * an array of ChangesetFileProps which are used to read the changesets and populate the ChangedInstanceIds using [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]]\n * @note mutually exclusive with @see changesetRanges, @see startChangeset and @see changedInstanceIds, so define one of the four, never more\n */ & (\n | { csFileProps: ChangesetFileProps[] }\n /**\n * Class instance that contains modified elements between 2 versions of an iModel.\n * If this parameter is not provided, then [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]]\n * will be called to discover changed elements.\n * @note mutually exclusive with @see changesetRanges, @see csFileProps and @see startChangeset, so define one of the four, never more\n */\n | { changedInstanceIds: ChangedInstanceIds }\n /**\n * An ordered array of changeset index ranges, e.g. [[2,2], [4,5]] is [2,4,5]\n * @note mutually exclusive with @see changedInstanceIds, @see csFileProps and @see startChangeset, so define one of the four, never more\n */\n | { changesetRanges: [number, number][] }\n /**\n * Include changes from this changeset up through and including the current changeset.\n * @note To form a range of versions to process, set `startChangeset` for the start (inclusive)\n * of the desired range and open the source iModel as of the end (inclusive) of the desired range.\n * @default the current changeset of the sourceDb, if undefined\n */\n | { startChangeset: { id?: string; index?: number } }\n | {}\n);\n\n/** Handles the events generated by IModelExporter.\n * @note Change information is available when `IModelExportHandler` methods are invoked via [IModelExporter.exportChanges]($transformer), but not available when invoked via [IModelExporter.exportAll]($transformer).\n * @note The handler is intended to be owned by (registered with) and called from the IModelExporter exclusively\n * @see [iModel Transformation and Data Exchange]($docs/learning/transformer/index.md), [IModelExporter]($transformer)\n * @beta\n */\nexport abstract class IModelExportHandler {\n /** If `true` is returned, then the CodeSpec will be exported.\n * @note This method can optionally be overridden to exclude an individual CodeSpec from the export. The base implementation always returns `true`.\n */\n public shouldExportCodeSpec(_codeSpec: CodeSpec): boolean {\n return true;\n }\n\n /** Called when a CodeSpec should be exported.\n * @param codeSpec The CodeSpec to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportCodeSpec(\n _codeSpec: CodeSpec,\n _isUpdate: boolean | undefined\n ): void {}\n\n /** Called when a font should be exported.\n * @param font The font to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportFont(_font: FontProps, _isUpdate: boolean | undefined): void {}\n\n /** Called when a model should be exported.\n * @param model The model to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportModel(_model: Model, _isUpdate: boolean | undefined): void {}\n\n /** Called when a model should be deleted. */\n public onDeleteModel(_modelId: Id64String): void {}\n\n /** If `true` is returned, then the element will be exported.\n * @note This method can optionally be overridden to exclude an individual Element (and its children and ElementAspects) from the export. The base implementation always returns `true`.\n */\n public shouldExportElement(_element: Element): boolean {\n return true;\n }\n\n /** Called when element is skipped instead of exported.\n * @note When an element is skipped, exporter will not export any of its child elements. Because of this, [[onSkipElement]] will not be invoked for any children of a \"skipped\" element.\n */\n public onSkipElement(_elementId: Id64String): void {}\n\n /** Called when an element should be exported.\n * @param element The element to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportElement(\n _element: Element,\n _isUpdate: boolean | undefined\n ): void {}\n\n /**\n * Do any asynchronous actions before exporting an element\n * @note Do not implement this handler manually, it is internal, it will be removed.\n * This will become a part of onExportElement once that becomes async\n * @internal\n */\n public async preExportElement(_element: Element): Promise<void> {}\n\n /** Called when an element should be deleted. */\n public onDeleteElement(_elementId: Id64String): void {}\n\n /** If `true` is returned, then the ElementAspect will be exported.\n * @note This method can optionally be overridden to exclude an individual ElementAspect from the export. The base implementation always returns `true`.\n */\n public shouldExportElementAspect(_aspect: ElementAspect): boolean {\n return true;\n }\n\n /** Called when an ElementUniqueAspect should be exported.\n * @param aspect The ElementUniqueAspect to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportElementUniqueAspect(\n _aspect: ElementUniqueAspect,\n _isUpdate: boolean | undefined\n ): void {}\n\n /** Called when ElementMultiAspects should be exported.\n * @note This should be overridden to actually do the export.\n */\n public onExportElementMultiAspects(_aspects: ElementMultiAspect[]): void {}\n\n /** If `true` is returned, then the relationship will be exported.\n * @note This method can optionally be overridden to exclude an individual CodeSpec from the export. The base implementation always returns `true`.\n */\n public shouldExportRelationship(_relationship: Relationship): boolean {\n return true;\n }\n\n /** Called when a Relationship should be exported.\n * @param relationship The Relationship to export\n * @param isUpdate If defined, then `true` indicates an UPDATE operation while `false` indicates an INSERT operation. If not defined, then INSERT vs. UPDATE is not known.\n * @note This should be overridden to actually do the export.\n */\n public onExportRelationship(\n _relationship: Relationship,\n _isUpdate: boolean | undefined\n ): void {}\n\n /** Called when a relationship should be deleted. */\n public onDeleteRelationship(_relInstanceId: Id64String): void {}\n\n /** If `true` is returned, then the schema will be exported.\n * @note This method can optionally be overridden to exclude an individual schema from the export. The base implementation always returns `true`.\n */\n public shouldExportSchema(_schemaKey: SchemaKey): boolean {\n return true;\n }\n\n /** Called when a schema should be exported.\n * @param schema The schema to export\n * @note This should be overridden to actually do the export.\n * @note return an [[ExportSchemaResult]] with a `schemaPath` property to notify overrides that call `super`\n * where a schema was written for import.\n */\n public async onExportSchema(\n _schema: Schema\n ): Promise<void | ExportSchemaResult> {}\n\n /** This method is called when IModelExporter has made incremental progress based on the [[IModelExporter.progressInterval]] setting.\n * This method is `async` to make it easier to integrate with asynchronous status and health reporting services.\n * @note A subclass may override this method to report custom progress. The base implementation does nothing.\n */\n public async onProgress(): Promise<void> {}\n}\n\n/** Base class for exporting data from an iModel.\n * @note Most uses cases will not require a custom subclass of `IModelExporter`. Instead, it is more typical to subclass/customize [IModelExportHandler]($transformer).\n * @see [iModel Transformation and Data Exchange]($docs/learning/transformer/index.md), [[registerHandler]], [IModelTransformer]($transformer), [IModelImporter]($transformer)\n * @beta\n */\nexport class IModelExporter {\n /** The read-only source iModel. */\n public readonly sourceDb: IModelDb;\n /** A flag that indicates whether element GeometryStreams are loaded or not.\n * @note As an optimization, exporters that don't need geometry can set this flag to `false`. The default is `true`.\n * @note The transformer by default sets this to `false` as an optimization.\n * @note This implies the `wantBRepData` option when loading elements.\n * @see [ElementLoadProps.wantGeometry]($common)\n */\n public wantGeometry: boolean = true;\n /** A flag that indicates whether template models should be exported or not. The default is `true`.\n * @note If only exporting *instances* then template models can be skipped since they are just definitions that are cloned to create new instances.\n * @see [Model.isTemplate]($backend)\n */\n public wantTemplateModels: boolean = true;\n /** A flag that indicates whether *system* schemas should be exported or not. The default is `true` (previously false).\n * This can be set to false for the legacy default behavior, but it may cause errors during schema processing in some cases.\n * @see [[exportSchemas]]\n */\n public wantSystemSchemas: boolean = true;\n /** A flag that determines whether this IModelExporter should visit Elements or not. The default is `true`.\n * @note This flag is available as an optimization when the exporter doesn't need to visit elements, so can skip loading them.\n */\n public visitElements: boolean = true;\n /** A flag that determines whether this IModelExporter should visit Relationships or not. The default is `true`.\n * @note This flag is available as an optimization when the exporter doesn't need to visit relationships, so can skip loading them.\n */\n public visitRelationships: boolean = true;\n /** The number of entities exported before incremental progress should be reported via the [[onProgress]] callback. */\n public progressInterval: number = 1000;\n /** Tracks the current total number of entities exported. */\n private _progressCounter: number = 0;\n /** Optionally cached entity change information */\n private _sourceDbChanges?: ChangedInstanceIds;\n\n /**\n * Retrieve the cached entity change information.\n * @note This will only be initialized after [IModelExporter.exportChanges] is invoked or [IModelExporter.initialize] is called.\n */\n public get sourceDbChanges(): ChangedInstanceIds | undefined {\n return this._sourceDbChanges;\n }\n /** The handler called by this IModelExporter. */\n private _handler: IModelExportHandler | undefined;\n /** The handler called by this IModelExporter. */\n protected get handler(): IModelExportHandler {\n if (undefined === this._handler) {\n throw new Error(\"IModelExportHandler not registered\");\n }\n\n return this._handler;\n }\n\n /** The set of CodeSpecs to exclude from the export. */\n private _excludedCodeSpecNames = new Set<string>();\n /** The set of specific Elements to exclude from the export. */\n private _excludedElementIds = new Set<Id64String>();\n /** The set of Categories where Elements in that Category will be excluded from transformation to the target iModel. */\n private _excludedElementCategoryIds = new Set<Id64String>();\n /** The set of classes of Elements that will be excluded (polymorphically) from transformation to the target iModel. */\n private _excludedElementClasses = new Set<typeof Element>();\n /** The set of classes of Relationships that will be excluded (polymorphically) from transformation to the target iModel. */\n private _excludedRelationshipClasses = new Set<typeof Relationship>();\n\n /** Strategy for how ElementAspects are exported */\n private _exportElementAspectsStrategy: ExportElementAspectsStrategy;\n\n /** Construct a new IModelExporter\n * @param sourceDb The source IModelDb\n * @see registerHandler\n */\n public constructor(\n sourceDb: IModelDb,\n elementAspectsStrategy: new (\n source: IModelDb,\n handler: ElementAspectsHandler\n ) => ExportElementAspectsStrategy = ExportElementAspectsWithElementsStrategy\n ) {\n this.sourceDb = sourceDb;\n this._exportElementAspectsStrategy = new elementAspectsStrategy(\n this.sourceDb,\n {\n onExportElementMultiAspects: (aspects) =>\n this.handler.onExportElementMultiAspects(aspects),\n onExportElementUniqueAspect: (aspect, isUpdate) =>\n this.handler.onExportElementUniqueAspect(aspect, isUpdate),\n shouldExportElementAspect: (aspect) =>\n this.handler.shouldExportElementAspect(aspect),\n trackProgress: async () => this.trackProgress(),\n }\n );\n }\n\n /**\n * Initialize prerequisites of exporting. This is implicitly done by any `export*` calls that need initialization\n * which is currently just `exportChanges`.\n * Prefer to not call this explicitly (e.g. just call [[IModelExporter.exportChanges]])\n * @note that if you do call this explicitly, you must do so with the same options that\n * you pass to [[IModelExporter.exportChanges]]\n */\n public async initialize(options: ExporterInitOptions): Promise<void> {\n if (!this.sourceDb.isBriefcaseDb() || this._sourceDbChanges) return;\n\n this._sourceDbChanges = await ChangedInstanceIds.initialize({\n iModel: this.sourceDb,\n ...options,\n });\n if (this._sourceDbChanges === undefined) return;\n\n this._exportElementAspectsStrategy.setAspectChanges(\n this._sourceDbChanges.aspect\n );\n }\n\n /** Register the handler that will be called by IModelExporter. */\n public registerHandler(handler: IModelExportHandler): void {\n this._handler = handler;\n }\n\n /** Add a rule to exclude a CodeSpec */\n public excludeCodeSpec(codeSpecName: string): void {\n this._excludedCodeSpecNames.add(codeSpecName);\n }\n\n /** Add a rule to exclude a specific Element. */\n public excludeElement(elementId: Id64String): void {\n this._excludedElementIds.add(elementId);\n }\n\n /** Add a rule to exclude all Elements in a specified Category. */\n public excludeElementsInCategory(categoryId: Id64String): void {\n this._excludedElementCategoryIds.add(categoryId);\n }\n\n /** Add a rule to exclude all Elements of a specified class. */\n public excludeElementClass(classFullName: string): void {\n this._excludedElementClasses.add(\n this.sourceDb.getJsClass<typeof Element>(classFullName)\n );\n }\n\n /** Add a rule to exclude all ElementAspects of a specified class. */\n public excludeElementAspectClass(classFullName: string): void {\n this._exportElementAspectsStrategy.excludeElementAspectClass(classFullName);\n }\n\n /** Add a rule to exclude all Relationships of a specified class. */\n public excludeRelationshipClass(classFullName: string): void {\n this._excludedRelationshipClasses.add(\n this.sourceDb.getJsClass<typeof Relationship>(classFullName)\n );\n }\n\n /** Export all entity instance types from the source iModel.\n * @note [[exportSchemas]] must be called separately.\n */\n public async exportAll(): Promise<void> {\n await this.initialize({});\n\n await this.exportCodeSpecs();\n await this.exportFonts();\n await this.exportModel(IModel.repositoryModelId);\n await this.exportRelationships(ElementRefersToElements.classFullName);\n }\n\n /** Export changes from the source iModel.\n * Inserts, updates, and deletes are determined by inspecting the changeset(s).\n * @note To form a range of versions to process, set `startChangesetId` for the start (inclusive) of the desired\n * range and open the source iModel as of the end (inclusive) of the desired range.\n * @note the changedInstanceIds are just for this call to exportChanges, so you must continue to pass it in\n * for consecutive calls\n */\n public async exportChanges(args?: ExportChangesOptions): Promise<void> {\n if (!this.sourceDb.isBriefcaseDb())\n throw new IModelError(\n IModelStatus.BadRequest,\n \"Must be a briefcase to export changes\"\n );\n\n if (\"\" === this.sourceDb.changeset.id) {\n await this.exportAll(); // no changesets, so revert to exportAll\n return;\n }\n\n const startChangeset =\n args && \"startChangeset\" in args ? args.startChangeset : undefined;\n\n const initOpts: ExporterInitOptions = {\n startChangeset: { id: startChangeset?.id },\n };\n await this.initialize(initOpts);\n // _sourceDbChanges are initialized in this.initialize\n nodeAssert(\n this._sourceDbChanges !== undefined,\n \"sourceDbChanges must be initialized.\"\n );\n\n await this.exportCodeSpecs();\n await this.exportFonts();\n if (initOpts.skipPropagateChangesToRootElements) {\n await this.exportModelContents(IModel.repositoryModelId);\n await this.exportSubModels(IModel.repositoryModelId);\n } else {\n await this.exportModel(IModel.repositoryModelId);\n }\n await this.exportAllAspects();\n await this.exportRelationships(ElementRefersToElements.classFullName);\n\n // handle deletes\n if (this.visitElements) {\n // must delete models first since they have a constraint on the submodeling element which may also be deleted\n for (const modelId of this._sourceDbChanges.model.deleteIds) {\n this.handler.onDeleteModel(modelId);\n }\n for (const elementId of this._sourceDbChanges.element.deleteIds) {\n // We don't know how the handler wants to handle deletions, and we don't have enough information\n // to know if deleted entities were related, so when processing changes, ignore errors from deletion.\n // Technically, to keep the ignored error scope small, we ignore only the error of looking up a missing element,\n // that approach works at least for the IModelTransformer.\n // In the future, the handler may be responsible for doing the work of finding out which elements were cascade deleted,\n // and returning them for the exporter to use to avoid double-deleting with error ignoring\n try {\n this.handler.onDeleteElement(elementId);\n } catch (err: unknown) {\n const isMissingErr =\n err instanceof IModelError &&\n err.errorNumber === IModelStatus.NotFound;\n if (!isMissingErr) throw err;\n }\n }\n }\n\n if (this.visitRelationships) {\n for (const relInstanceId of this._sourceDbChanges.relationship\n .deleteIds) {\n this.handler.onDeleteRelationship(relInstanceId);\n }\n }\n\n // Enable consecutive exportChanges runs without the need to re-instantiate the exporter.\n // You can counteract the obvious impact of losing this expensive data by always calling\n // exportChanges with the [[ExportChangesOptions.changedInstanceIds]] option set to\n // whatever you want\n if (this._resetChangeDataOnExport) this._sourceDbChanges = undefined;\n }\n\n private _resetChangeDataOnExport = true;\n\n /** Export schemas from the source iModel.\n * @note This must be called separately from [[exportAll]] or [[exportChanges]].\n */\n public async exportSchemas(): Promise<void> {\n /* eslint-disable @typescript-eslint/indent */\n const sql = `\n SELECT s.Name, s.VersionMajor, s.VersionWrite, s.VersionMinor\n FROM ECDbMeta.ECSchemaDef s\n ${\n this.wantSystemSchemas\n ? \"\"\n : `\n WHERE ECInstanceId >= (SELECT ECInstanceId FROM ECDbMeta.ECSchemaDef WHERE Name='BisCore')\n `\n }\n ORDER BY ECInstanceId\n `;\n /* eslint-enable @typescript-eslint/indent */\n const schemaNamesToExport: string[] = [];\n this.sourceDb.withPreparedStatement(sql, (statement: ECSqlStatement) => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const schemaName = statement.getValue(0).getString();\n const versionMajor = statement.getValue(1).getInteger();\n const versionWrite = statement.getValue(2).getInteger();\n const versionMinor = statement.getValue(3).getInteger();\n const schemaKey = new SchemaKey(\n schemaName,\n new ECVersion(versionMajor, versionWrite, versionMinor)\n );\n if (this.handler.shouldExportSchema(schemaKey)) {\n schemaNamesToExport.push(schemaName);\n }\n }\n });\n\n if (schemaNamesToExport.length === 0) return;\n\n const schemaLoader = new SchemaLoader((name: string) =>\n this.sourceDb.getSchemaProps(name)\n );\n await Promise.all(\n schemaNamesToExport.map(async (schemaName) => {\n const schema = schemaLoader.getSchema(schemaName);\n Logger.logTrace(loggerCategory, `exportSchema(${schemaName})`);\n return this.handler.onExportSchema(schema);\n })\n );\n }\n\n /** For logging, indicate the change type if known. */\n private getChangeOpSuffix(isUpdate: boolean | undefined): string {\n return isUpdate ? \" UPDATE\" : undefined === isUpdate ? \"\" : \" INSERT\";\n }\n\n /** Export all CodeSpecs from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportCodeSpecs(): Promise<void> {\n Logger.logTrace(loggerCategory, \"exportCodeSpecs()\");\n const sql = \"SELECT Name FROM BisCore:CodeSpec ORDER BY ECInstanceId\";\n await this.sourceDb.withPreparedStatement(\n sql,\n async (statement: ECSqlStatement): Promise<void> => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const codeSpecName: string = statement.getValue(0).getString();\n await this.exportCodeSpecByName(codeSpecName);\n }\n }\n );\n }\n\n /** Export a single CodeSpec from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportCodeSpecByName(codeSpecName: string): Promise<void> {\n const codeSpec: CodeSpec = this.sourceDb.codeSpecs.getByName(codeSpecName);\n let isUpdate: boolean | undefined;\n if (undefined !== this._sourceDbChanges) {\n // is changeset information available?\n if (this._sourceDbChanges.codeSpec.insertIds.has(codeSpec.id)) {\n isUpdate = false;\n } else if (this._sourceDbChanges.codeSpec.updateIds.has(codeSpec.id)) {\n isUpdate = true;\n } else {\n return; // not in changeset, don't export\n }\n }\n // passed changeset test, now apply standard exclusion rules\n if (this._excludedCodeSpecNames.has(codeSpec.name)) {\n Logger.logInfo(loggerCategory, `Excluding CodeSpec: ${codeSpec.name}`);\n return;\n }\n // CodeSpec has passed standard exclusion rules, now give handler a chance to accept/reject export\n if (this.handler.shouldExportCodeSpec(codeSpec)) {\n Logger.logTrace(\n loggerCategory,\n `exportCodeSpec(${codeSpecName})${this.getChangeOpSuffix(isUpdate)}`\n );\n this.handler.onExportCodeSpec(codeSpec, isUpdate);\n return this.trackProgress();\n }\n }\n\n /** Export a single CodeSpec from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportCodeSpecById(codeSpecId: Id64String): Promise<void> {\n const codeSpec: CodeSpec = this.sourceDb.codeSpecs.getById(codeSpecId);\n return this.exportCodeSpecByName(codeSpec.name);\n }\n\n /** Export all fonts from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportFonts(): Promise<void> {\n Logger.logTrace(loggerCategory, \"exportFonts()\");\n for (const font of this.sourceDb.fontMap.fonts.values()) {\n await this.exportFontByNumber(font.id);\n }\n }\n\n /** Export a single font from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportFontByName(fontName: string): Promise<void> {\n Logger.logTrace(loggerCategory, `exportFontByName(${fontName})`);\n const font: FontProps | undefined = this.sourceDb.fontMap.getFont(fontName);\n if (undefined !== font) {\n await this.exportFontByNumber(font.id);\n }\n }\n\n /** Export a single font from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportFontByNumber(fontNumber: number): Promise<void> {\n /** sourceDbChanges now works by using TS ChangesetECAdaptor which doesn't pick up changes to fonts since fonts is not an ec table.\n * So lets always export fonts for the time being by always setting isUpdate = true.\n * It is very rare and even problematic for the font table to reach a large size, so it is not a bottleneck in transforming changes.\n * See https://github.com/iTwin/imodel-transformer/pull/135 for removed code.\n */\n const isUpdate = true;\n Logger.logTrace(loggerCategory, `exportFontById(${fontNumber})`);\n const font: FontProps | undefined =\n this.sourceDb.fontMap.getFont(fontNumber);\n if (undefined !== font) {\n this.handler.onExportFont(font, isUpdate);\n return this.trackProgress();\n }\n }\n\n /** Export the model container, contents, and sub-models from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportModel(modeledElementId: Id64String): Promise<void> {\n const model: Model = this.sourceDb.models.getModel(modeledElementId);\n if (model.isTemplate && !this.wantTemplateModels) {\n return;\n }\n const modeledElement: Element = this.sourceDb.elements.getElement({\n id: modeledElementId,\n wantGeometry: this.wantGeometry,\n wantBRepData: this.wantGeometry,\n });\n Logger.logTrace(loggerCategory, `exportModel(${modeledElementId})`);\n if (this.shouldExportElement(modeledElement)) {\n await this.exportModelContainer(model);\n if (this.visitElements) {\n await this.exportModelContents(modeledElementId);\n }\n await this.exportSubModels(modeledElementId);\n }\n }\n\n /** Export the model (the container only) from the source iModel. */\n private async exportModelContainer(model: Model): Promise<void> {\n let isUpdate: boolean | undefined;\n if (undefined !== this._sourceDbChanges) {\n // is changeset information available?\n if (this._sourceDbChanges.model.insertIds.has(model.id)) {\n isUpdate = false;\n } else if (this._sourceDbChanges.model.updateIds.has(model.id)) {\n isUpdate = true;\n } else {\n return; // not in changeset, don't export\n }\n }\n this.handler.onExportModel(model, isUpdate);\n return this.trackProgress();\n }\n\n private _yieldManager = new YieldManager();\n\n /** Export the model contents.\n * @param modelId The only required parameter\n * @param elementClassFullName Can be optionally specified if the goal is to export a subset of the model contents\n * @param skipRootSubject Decides whether or not to export the root Subject. It is normally left undefined except for internal implementation purposes.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportModelContents(\n modelId: Id64String,\n elementClassFullName: string = Element.classFullName,\n skipRootSubject?: boolean\n ): Promise<void> {\n if (skipRootSubject) {\n // NOTE: IModelTransformer.processAll should skip the root Subject since it is specific to the individual iModel and is not part of the changes that need to be synchronized\n // NOTE: IModelExporter.exportAll should not skip the root Subject since the goal is to export everything\n assert(modelId === IModel.repositoryModelId); // flag is only relevant when processing the RepositoryModel\n }\n if (!this.visitElements) {\n Logger.logTrace(\n loggerCategory,\n `visitElements=false, skipping exportModelContents(${modelId})`\n );\n return;\n }\n if (undefined !== this._sourceDbChanges) {\n // is changeset information available?\n if (\n !this._sourceDbChanges.model.insertIds.has(modelId) &&\n !this._sourceDbChanges.model.updateIds.has(modelId)\n ) {\n return; // this optimization assumes that the Model changes (LastMod) any time an Element in the Model changes\n }\n }\n Logger.logTrace(loggerCategory, `exportModelContents(${modelId})`);\n let sql: string;\n if (skipRootSubject) {\n sql = `SELECT ECInstanceId FROM ${elementClassFullName} WHERE Parent.Id IS NULL AND Model.Id=:modelId AND ECInstanceId!=:rootSubjectId ORDER BY ECInstanceId`;\n } else {\n sql = `SELECT ECInstanceId FROM ${elementClassFullName} WHERE Parent.Id IS NULL AND Model.Id=:modelId ORDER BY ECInstanceId`;\n }\n await this.sourceDb.withPreparedStatement(\n sql,\n async (statement: ECSqlStatement): Promise<void> => {\n statement.bindId(\"modelId\", modelId);\n if (skipRootSubject) {\n statement.bindId(\"rootSubjectId\", IModel.rootSubjectId);\n }\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n await this.exportElement(statement.getValue(0).getId());\n await this._yieldManager.allowYield();\n }\n }\n );\n }\n\n /** Export the sub-models directly below the specified model.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportSubModels(parentModelId: Id64String): Promise<void> {\n Logger.logTrace(loggerCategory, `exportSubModels(${parentModelId})`);\n const definitionModelIds: Id64String[] = [];\n const otherModelIds: Id64String[] = [];\n const sql = `SELECT ECInstanceId FROM ${Model.classFullName} WHERE ParentModel.Id=:parentModelId ORDER BY ECInstanceId`;\n this.sourceDb.withPreparedStatement(\n sql,\n (statement: ECSqlStatement): void => {\n statement.bindId(\"parentModelId\", parentModelId);\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const modelId: Id64String = statement.getValue(0).getId();\n const model: Model = this.sourceDb.models.getModel(modelId);\n if (model instanceof DefinitionModel) {\n definitionModelIds.push(modelId);\n } else {\n otherModelIds.push(modelId);\n }\n }\n }\n );\n // export DefinitionModels before other types of Models\n for (const definitionModelId of definitionModelIds) {\n await this.exportModel(definitionModelId);\n }\n for (const otherModelId of otherModelIds) {\n await this.exportModel(otherModelId);\n }\n }\n\n /** Returns true if the specified element should be exported.\n * This considers the standard IModelExporter exclusion rules plus calls [IModelExportHandler.shouldExportElement]($transformer) for any custom exclusion rules.\n * @note This method is called from within [[exportChanges]] and [[exportAll]], so usually does not need to be called directly.\n */\n public shouldExportElement(element: Element): boolean {\n if (this._excludedElementIds.has(element.id)) {\n Logger.logInfo(loggerCategory, `Excluded element ${element.id} by Id`);\n return false;\n }\n if (element instanceof GeometricElement) {\n if (this._excludedElementCategoryIds.has(element.category)) {\n Logger.logInfo(\n loggerCategory,\n `Excluded element ${element.id} by Category`\n );\n return false;\n }\n }\n if (\n !this.wantTemplateModels &&\n element instanceof RecipeDefinitionElement\n ) {\n Logger.logInfo(\n loggerCategory,\n `Excluded RecipeDefinitionElement ${element.id} because wantTemplate=false`\n );\n return false;\n }\n for (const excludedElementClass of this._excludedElementClasses) {\n if (element instanceof excludedElementClass) {\n Logger.logInfo(\n loggerCategory,\n `Excluded element ${element.id} by class: ${excludedElementClass.classFullName}`\n );\n return false;\n }\n }\n // element has passed standard exclusion rules, now give handler a chance to accept/reject\n return this.handler.shouldExportElement(element);\n }\n\n /** Export the specified element, its child elements (if applicable), and any owned ElementAspects.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportElement(elementId: Id64String): Promise<void> {\n if (!this.visitElements) {\n Logger.logTrace(\n loggerCategory,\n `visitElements=false, skipping exportElement(${elementId})`\n );\n return;\n }\n\n // Return early if the elementId is already in the excludedElementIds, that way we don't need to load the element from the db.\n if (this._excludedElementIds.has(elementId)) {\n Logger.logInfo(loggerCategory, `Excluded element ${elementId} by Id`);\n this.handler.onSkipElement(elementId);\n return;\n }\n\n // are we processing changes?\n const isUpdate = this._sourceDbChanges?.element.insertIds.has(elementId)\n ? false\n : this._sourceDbChanges?.element.updateIds.has(elementId)\n ? true\n : undefined;\n\n const element = this.sourceDb.elements.getElement({\n id: elementId,\n wantGeometry: this.wantGeometry,\n wantBRepData: this.wantGeometry,\n });\n Logger.logTrace(\n loggerCategory,\n `exportElement(${\n element.id\n }, \"${element.getDisplayLabel()}\")${this.getChangeOpSuffix(isUpdate)}`\n );\n // the order and `await`ing of calls beyond here is depended upon by the IModelTransformer for a current bug workaround\n if (this.shouldExportElement(element)) {\n await this.handler.preExportElement(element);\n this.handler.onExportElement(element, isUpdate);\n await this.trackProgress();\n await this._exportElementAspectsStrategy.exportElementAspectsForElement(\n elementId\n );\n return this.exportChildElements(elementId);\n } else {\n this.handler.onSkipElement(element.id);\n }\n }\n\n /** Export the child elements of the specified element from the source iModel.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportChildElements(elementId: Id64String): Promise<void> {\n if (!this.visitElements) {\n Logger.logTrace(\n loggerCategory,\n `visitElements=false, skipping exportChildElements(${elementId})`\n );\n return;\n }\n const childElementIds: Id64String[] =\n this.sourceDb.elements.queryChildren(elementId);\n if (childElementIds.length > 0) {\n Logger.logTrace(loggerCategory, `exportChildElements(${elementId})`);\n for (const childElementId of childElementIds) {\n await this.exportElement(childElementId);\n }\n }\n }\n\n /** Exports all aspects present in the iModel.\n */\n private async exportAllAspects(): Promise<void> {\n return this._exportElementAspectsStrategy.exportAllElementAspects();\n }\n\n /** Exports all relationships that subclass from the specified base class.\n * @note This method is called from [[exportChanges]] and [[exportAll]], so it only needs to be called directly when exporting a subset of an iModel.\n */\n public async exportRelationships(\n baseRelClassFullName: string\n ): Promise<void> {\n if (!this.visitRelationships) {\n Logger.logTrace(\n loggerCategory,\n \"visitRelationships=false, skipping exportRelationships()\"\n );\n return;\n }\n Logger.logTrace(\n loggerCategory,\n `exportRelationships(${baseRelClassFullName})`\n );\n const sql = `SELECT r.ECInstanceId, r.ECClassId FROM ${baseRelClassFullName} r\n JOIN bis.Element s ON s.ECInstanceId = r.SourceECInstanceId\n JOIN bis.Element t ON t.ECInstanceId = r.TargetECInstanceId\n WHERE s.ECInstanceId IS NOT NULL AND t.ECInstanceId IS NOT NULL`;\n await this.sourceDb.withPreparedStatement(\n sql,\n async (statement: ECSqlStatement): Promise<void> => {\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const relationshipId = statement.getValue(0).getId();\n const relationshipClass = statement\n .getValue(1)\n .getClassNameForClassId();\n await this.exportRelationship(relationshipClass, relationshipId); // must call exportRelationship using the actual classFullName, not baseRelClassFullName\n await this._yieldManager.allowYield();\n }\n }\n );\n }\n\n /** Export a relationship from the source iModel. */\n public async exportRelationship(\n relClassFullName: string,\n relInstanceId: Id64String\n ): Promise<void> {\n if (!this.visitRelationships) {\n Logger.logTrace(\n loggerCategory,\n `visitRelationships=false, skipping exportRelationship(${relClassFullName}, ${relInstanceId})`\n );\n return;\n }\n let isUpdate: boolean | undefined;\n if (undefined !== this._sourceDbChanges) {\n // is changeset information available?\n if (this._sourceDbChanges.relationship.insertIds.has(relInstanceId)) {\n isUpdate = false;\n } else if (\n this._sourceDbChanges.relationship.updateIds.has(relInstanceId)\n ) {\n isUpdate = true;\n } else {\n return; // not in changeset, don't export\n }\n }\n // passed changeset test, now apply standard exclusion rules\n Logger.logTrace(\n loggerCategory,\n `exportRelationship(${relClassFullName}, ${relInstanceId})`\n );\n const relationship: Relationship = this.sourceDb.relationships.getInstance(\n relClassFullName,\n relInstanceId\n );\n for (const excludedRelationshipClass of this._excludedRelationshipClasses) {\n if (relationship instanceof excludedRelationshipClass) {\n Logger.logInfo(\n loggerCategory,\n `Excluded relationship by class: ${excludedRelationshipClass.classFullName}`\n );\n return;\n }\n }\n // relationship has passed standard exclusion rules, now give handler a chance to accept/reject export\n if (this.handler.shouldExportRelationship(relationship)) {\n this.handler.onExportRelationship(relationship, isUpdate);\n await this.trackProgress();\n }\n }\n\n /** Tracks incremental progress */\n private async trackProgress(): Promise<void> {\n this._progressCounter++;\n if (0 === this._progressCounter % this.progressInterval) {\n return this.handler.onProgress();\n }\n }\n}\n\n/**\n * Arguments for [[ChangedInstanceIds.initialize]]\n * @public\n */\nexport type ChangedInstanceIdsInitOptions = ExportChangesOptions & {\n iModel: BriefcaseDb;\n};\n\n/** Class for holding change information.\n * @public\n */\nexport class ChangedInstanceOps {\n public insertIds = new Set<Id64String>();\n public updateIds = new Set<Id64String>();\n public deleteIds = new Set<Id64String>();\n\n /** Initializes the object from IModelJsNative.ChangedInstanceOpsProps. */\n public addFromJson(\n val: IModelJsNative.ChangedInstanceOpsProps | undefined\n ): void {\n if (undefined !== val) {\n if (undefined !== val.insert && Array.isArray(val.insert))\n val.insert.forEach((id: Id64String) => this.insertIds.add(id));\n\n if (undefined !== val.update && Array.isArray(val.update))\n val.update.forEach((id: Id64String) => this.updateIds.add(id));\n\n if (undefined !== val.delete && Array.isArray(val.delete))\n val.delete.forEach((id: Id64String) => this.deleteIds.add(id));\n }\n }\n\n /**\n * Checks if empty.\n * @returns true if there no ids in the ChangedInstanceOps object.\n */\n public get isEmpty(): boolean {\n return (\n 0 === this.insertIds.size &&\n 0 === this.updateIds.size &&\n 0 === this.deleteIds.size\n );\n }\n}\n\n/**\n * Class for discovering modified elements between 2 versions of an iModel.\n * @public\n */\nexport class ChangedInstanceIds {\n public codeSpec = new ChangedInstanceOps();\n public model = new ChangedInstanceOps();\n public element = new ChangedInstanceOps();\n public aspect = new ChangedInstanceOps();\n public relationship = new ChangedInstanceOps();\n public font = new ChangedInstanceOps();\n private _codeSpecSubclassIds?: Set<string>;\n private _modelSubclassIds?: Set<string>;\n private _elementSubclassIds?: Set<string>;\n private _aspectSubclassIds?: Set<string>;\n private _relationshipSubclassIds?: Set<string>;\n private _relationshipSubclassIdsToSkip?: Set<string>;\n\n private _db: IModelDb;\n public constructor(db: IModelDb) {\n this._db = db;\n }\n\n private async setupECClassIds(): Promise<void> {\n this._codeSpecSubclassIds = new Set<string>();\n this._modelSubclassIds = new Set<string>();\n this._elementSubclassIds = new Set<string>();\n this._aspectSubclassIds = new Set<string>();\n this._relationshipSubclassIds = new Set<string>();\n this._relationshipSubclassIdsToSkip = new Set<string>();\n\n const addECClassIdsToSet = async (\n setToModify: Set<string>,\n baseClass: string\n ) => {\n for await (const row of this._db.createQueryReader(\n `SELECT ECInstanceId FROM ECDbMeta.ECClassDef where ECInstanceId IS (${baseClass})`\n )) {\n setToModify.add(row.ECInstanceId);\n }\n };\n const promises = [\n addECClassIdsToSet(this._codeSpecSubclassIds, \"BisCore.CodeSpec\"),\n addECClassIdsToSet(this._modelSubclassIds, \"BisCore.Model\"),\n addECClassIdsToSet(this._elementSubclassIds, \"BisCore.Element\"),\n addECClassIdsToSet(\n this._aspectSubclassIds,\n \"BisCore.ElementUniqueAspect\"\n ),\n addECClassIdsToSet(this._aspectSubclassIds, \"BisCore.ElementMultiAspect\"),\n addECClassIdsToSet(\n this._relationshipSubclassIds,\n \"BisCore.ElementRefersToElements\"\n ),\n addECClassIdsToSet(\n this._relationshipSubclassIdsToSkip,\n \"BisCore.ElementDrivesElement\"\n ),\n ];\n await Promise.all(promises);\n }\n\n private get _ecClassIdsInitialized() {\n return (\n this._codeSpecSubclassIds &&\n this._modelSubclassIds &&\n this._elementSubclassIds &&\n this._aspectSubclassIds &&\n this._relationshipSubclassIds &&\n this._relationshipSubclassIdsToSkip\n );\n }\n\n private isRelationship(ecClassId: string) {\n return this._relationshipSubclassIds?.has(ecClassId);\n }\n\n private isCodeSpec(ecClassId: string) {\n return this._codeSpecSubclassIds?.has(ecClassId);\n }\n\n private isAspect(ecClassId: string) {\n return this._aspectSubclassIds?.has(ecClassId);\n }\n\n private isModel(ecClassId: string) {\n return this._modelSubclassIds?.has(ecClassId);\n }\n\n private isElement(ecClassId: string) {\n return this._elementSubclassIds?.has(ecClassId);\n }\n\n /** Checks if there are any changes.\n * @returns true if there are any changes in the ChangedInstanceIds object.\n */\n public get hasChanges(): boolean {\n return (\n !this.codeSpec.isEmpty ||\n !this.model.isEmpty ||\n !this.element.isEmpty ||\n !this.aspect.isEmpty ||\n !this.relationship.isEmpty ||\n !this.font.isEmpty\n );\n }\n\n /**\n * Adds the provided [[ChangedECInstance]] to the appropriate set of changes by class type (codeSpec, model, element, aspect, or relationship) maintained by this instance of ChangedInstanceIds.\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @param change ChangedECInstance which has the ECInstanceId, changeType (insert, update, delete) and ECClassId of the changed entity\n */\n public async addChange(change: ChangedECInstance): Promise<void> {\n if (!this._ecClassIdsInitialized) await this.setupECClassIds();\n const ecClassId = change.ECClassId ?? change.$meta?.fallbackClassId;\n if (ecClassId === undefined)\n throw new Error(\n `ECClassId was not found for id: ${change.ECInstanceId}! Table is : ${change?.$meta?.tables}`\n );\n const changeType: SqliteChangeOp | undefined = change.$meta?.op;\n if (changeType === undefined)\n throw new Error(\n `ChangeType was undefined for id: ${change.ECInstanceId}.`\n );\n if (this._relationshipSubclassIdsToSkip?.has(ecClassId)) return;\n\n if (this.isRelationship(ecClassId))\n this.handleChange(this.relationship, changeType, change.ECInstanceId);\n else if (this.isCodeSpec(ecClassId))\n this.handleChange(this.codeSpec, changeType, change.ECInstanceId);\n else if (this.isAspect(ecClassId))\n this.handleChange(this.aspect, changeType, change.ECInstanceId);\n else if (this.isModel(ecClassId))\n this.handleChange(this.model, changeType, change.ECInstanceId);\n else if (this.isElement(ecClassId))\n this.handleChange(this.element, changeType, change.ECInstanceId);\n }\n\n /**\n * This method should only be called inside [[IModelTransformer.addCustomChanges]].\n * It adds the provided change to the element changes maintained by this instance of ChangedInstanceIds.\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note Custom element 'Insert' and 'Update' will mark element's parent model hierarchy and their modeled elements as 'Updated' in [[ChangedInstanceIds.model]] and [[ChangedInstanceIds.element]]. Parent models have to be marked as 'Updated' to make sure that added change is not skipped by transformer. Transformer starts processing elements from RepositoryModel and then visits all child models. Modeled elements hierarchy is marked as updated to trigger their inserts in case a new model (or its parent) needs to be inserted.\n * @note Custom element 'Insert' will also mark element aspects and all element relationships as inserted.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact an element.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @note In data processing with filter criteria scenarios it is important to consistently filter out models and their modeled elements that were previously removed from target via [[addCustomModelChange]] or [[shouldExportElement]] apis.\n * @beta\n */\n public async addCustomElementChange(\n changeType: SqliteChangeOp,\n ids: Id64Arg\n ): Promise<void> {\n if (Id64.sizeOf(ids) === 0) {\n return;\n }\n\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.element, changeType, id);\n }\n\n if (changeType === \"Deleted\") {\n return;\n }\n\n const idsSet = Id64.toIdSet(ids);\n // Parent models have to be marked as 'Updated' to make sure that added change is not skipped by transformer. Transformer starts processing elements from RepositoryModel and then visits all child models.\n // Transformer handles update as insert if element is not found in target, for this reason modeled elements will be also marked as updated to trigger their inserts in case a new model (or its parent) needs to be inserted. Otherwise error would be thrown about missing modeled element while inserting new model.\n const parentModelIds = await this.markParentModelsAsUpdated(idsSet);\n\n // Aspects and relationships of inserted data needs to be marked as inserted otherwise those would not be exported\n if (changeType === \"Inserted\") {\n // Adding parents as well as we are not sure if those were inserted or updated\n parentModelIds.forEach((parentId) => {\n idsSet.add(parentId);\n });\n\n await this.markElementAspectsAsInserted(idsSet);\n // Marking only ElementRefersToElements.classFullName as only those are exported in exportRelationships()\n await this.markElementRelationshipsAsInserted(\n ElementRefersToElements.classFullName,\n idsSet\n );\n }\n }\n\n /**\n * This method should only be called inside [IModelTransformer.addCustomChanges].\n * Adds the provided change to the model changes maintained by this instance of ChangedInstanceIds.\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * Will add same change to the model's modeledElement by calling [[ChangedInstanceIds.addCustomElementChange]] which will register more needed changes. This is to ensure the changes from the model and its modeledElement get exported together.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact a model.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @note In data processing with filter criteria scenarios it is important to consistently filter out models and their modeled elements that were previously removed from target via [[addCustomModelChange]] or [[shouldExportElement]] apis.\n * @beta\n */\n public async addCustomModelChange(\n changeType: SqliteChangeOp,\n ids: Id64Arg\n ): Promise<void> {\n // Also add the model's modeledElement to the element changes. The modeledElement and model go hand in hand and have the same id.\n await this.addCustomElementChange(changeType, ids);\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.model, changeType, id);\n }\n }\n\n /**\n * This method should only be called inside [IModelTransformer.addCustomChanges].\n * Adds the provided change to the aspect changes maintained by this instance of ChangedInstanceIds\n * If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'\n * from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.\n * @note It is the responsibility of the caller to ensure that the provided id is, in fact an aspect.\n * @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.\n * @beta\n */\n public addCustomAspectChange(changeType: SqliteChangeOp, ids: Id64Arg): void {\n for (const id of Id64.iterable(ids)) {\n this.handleChange(this.aspect, changeType, id);\n }\n }\n\n /**\n * There is an optimization in [IModelExporter.exportModelContents] which doesn't try to export elements within a model unless the model itself is marked as `Updated` or 'Inserted' in sourceDbChanges. This method is used in [[addCustomElementChange]] and [[addCustomModelChange]] to add the parent model hierarchy to the 'updatedIds' so that the custom element changes are exported.\n * Transformer will insert 'Updated' model to target if it does not exist there already. To handle such case, modeled elements of parent models are also marked as updated. This is done, because model can not be inserted without it's modeled element.\n */\n private async markParentModelsAsUpdated(elementIds: Id64Set) {\n const params = new QueryBinder().bindIdSet(\"elementIds\", elementIds);\n\n const ecQuery = `\n WITH RECURSIVE hierarchy (parentId) AS (\n SELECT Model.Id FROM bis.Element WHERE InVirtualSet(:elementIds, ECInstanceId)\n UNION\n SELECT ParentModel.id\n FROM bis.Model e\n INNER JOIN hierarchy h ON h.parentId = e.ECInstanceId\n )\n SELECT parentId FROM hierarchy where parentId is not null\n `;\n const parentModelIds = new Set<Id64String>();\n for await (const row of this._db.createQueryReader(ecQuery, params)) {\n // Transformer handles update as insert when element does not exist in target.\n // Which means that in scenario where child and parent model are filtered out from target,\n // and child element is inserted trough custom change, its parent model will be marked as updated.\n // Transformer then will:\n // 1. Handle parent update as insert (since it does not exist in target).\n // 2. Will insert child element (otherwise this insert would be ignored due to missing parent).\n this.handleChange(this.model, \"Updated\", row.parentId);\n this.handleChange(this.element, \"Updated\", row.parentId);\n parentModelIds.add(row.parentId);\n }\n return parentModelIds;\n }\n\n private async markElementRelationshipsAsInserted(\n relationshipClassName: string,\n elementIds: Id64Set\n ) {\n const ecQuery = `SELECT ECInstanceId FROM ${relationshipClassName}\n WHERE InVirtualSet(:elementIds, TargetECInstanceId)\n OR InVirtualSet(:elementIds, SourceECInstanceId)`;\n\n const queryBinder = new QueryBinder().bindIdSet(\"elementIds\", elementIds);\n const queryReader = this._db.createQueryReader(ecQuery, queryBinder);\n\n for await (const row of queryReader) {\n this.handleChange(this.relationship, \"Inserted\", row.ECInstanceId);\n }\n }\n\n private async markElementAspectsAsInserted(elementIds: Id64Set) {\n for (const aspectClassName of [\n ElementUniqueAspect.classFullName,\n ElementMultiAspect.classFullName,\n ]) {\n const ecQuery = `Select ECInstanceId from ${aspectClassName} where InVirtualSet(:elementIds, Element.Id)`;\n const queryBinder = new QueryBinder().bindIdSet(\"elementIds\", elementIds);\n const queryReader = this._db.createQueryReader(ecQuery, queryBinder);\n for await (const row of queryReader) {\n this.addCustomAspectChange(\"Inserted\", row.toArray()[0]);\n }\n }\n }\n\n private handleChange(\n changedInstanceOps: ChangedInstanceOps,\n changeType: SqliteChangeOp,\n id: Id64String\n ) {\n // if changeType is a delete and we already have the id in the inserts then we can remove the id from the inserts.\n // if changeType is a delete and we already have the id in the updates then we can remove the id from the updates AND add it to the deletes.\n // if changeType is an insert and we already have the id in the deletes then we can remove the id from the deletes AND add it to the inserts.\n if (changeType === \"Inserted\") {\n changedInstanceOps.insertIds.add(id);\n changedInstanceOps.deleteIds.delete(id);\n } else if (changeType === \"Updated\") {\n if (!changedInstanceOps.insertIds.has(id))\n changedInstanceOps.updateIds.add(id);\n } else if (changeType === \"Deleted\") {\n // If we've inserted the entity at some point already and now we're seeing a delete. We can simply remove the entity from our inserted ids without adding it to deletedIds.\n if (changedInstanceOps.insertIds.has(id))\n changedInstanceOps.insertIds.delete(id);\n else {\n changedInstanceOps.updateIds.delete(id);\n changedInstanceOps.deleteIds.add(id);\n }\n }\n }\n\n /**\n * Initializes a new ChangedInstanceIds object with information taken from a range of changesets.\n * @public\n */\n public static async initialize(\n opts: ChangedInstanceIdsInitOptions\n ): Promise<ChangedInstanceIds | undefined> {\n if (\"changedInstanceIds\" in opts) return opts.changedInstanceIds;\n\n const iModelId = opts.iModel.iModelId;\n\n const startChangeset =\n \"startChangeset\" in opts ? opts.startChangeset : undefined;\n const changesetRanges =\n startChangeset !== undefined\n ? [\n [\n startChangeset.index ??\n (\n await IModelHost.hubAccess.queryChangeset({\n iModelId,\n changeset: {\n id: startChangeset.id ?? opts.iModel.changeset.id,\n },\n })\n ).index,\n opts.iModel.changeset.index ??\n (\n await IModelHost.hubAccess.queryChangeset({\n iModelId,\n changeset: { id: opts.iModel.changeset.id },\n })\n ).index,\n ],\n ]\n : \"changesetRanges\" in opts\n ? opts.changesetRanges\n : undefined;\n const csFileProps =\n changesetRanges !== undefined\n ? (\n await Promise.all(\n changesetRanges.map(async ([first, end]) =>\n IModelHost.hubAccess.downloadChangesets({\n iModelId,\n range: { first, end },\n targetDir: BriefcaseManager.getChangeSetsPath(iModelId),\n })\n )\n )\n ).flat()\n : \"csFileProps\" in opts\n ? opts.csFileProps\n : undefined;\n\n if (csFileProps === undefined) return undefined;\n\n const changedInstanceIds = new ChangedInstanceIds(opts.iModel);\n\n for (const csFile of csFileProps) {\n const csReader = SqliteChangesetReader.openFile({\n fileName: csFile.pathname,\n db: opts.iModel,\n disableSchemaCheck: true,\n });\n const csAdaptor = new ChangesetECAdaptor(csReader);\n const ecChangeUnifier = new PartialECChangeUnifier();\n while (csAdaptor.step()) {\n ecChangeUnifier.appendFrom(csAdaptor);\n }\n const changes: ChangedECInstance[] = [...ecChangeUnifier.instances];\n\n for (const change of changes) {\n await changedInstanceIds.addChange(change);\n }\n csReader.close();\n }\n return changedInstanceIds;\n }\n}\n"]}
@@ -408,7 +408,6 @@ export declare class IModelTransformer extends IModelExportHandler {
408
408
  * @note This can be called more than once for an element in arbitrary order, so it should not have side-effects.
409
409
  */
410
410
  onTransformElement(sourceElement: Element): ElementProps;
411
- private _hasElementChangedCache?;
412
411
  private _deletedSourceRelationshipData?;
413
412
  /** Returns true if a change within sourceElement is detected.
414
413
  * @param sourceElement The Element from the source iModel
@@ -601,32 +600,19 @@ export declare class IModelTransformer extends IModelExportHandler {
601
600
  * Overriders must call `super.initialize()` first
602
601
  */
603
602
  initialize(): Promise<void>;
604
- private handleCustomChanges;
605
603
  /**
606
- * Reads all the changeset files in the private member of the transformer: _csFileProps and does two things with these changesets.
607
- * Finds the corresponding target entity for any deleted source entities and remaps the sourceId to the targetId.
608
- * Populates this._hasElementChangedCache with a set of elementIds that have been updated or inserted into the database.
604
+ * Reads all the changeset files in the private member of the transformer: _csFileProps
605
+ * and finds the corresponding target entity for any deleted source entities and remaps the sourceId to the targetId.
609
606
  * This function returns early if csFileProps is undefined or is of length 0.
610
607
  * @returns void
611
608
  */
612
609
  private processChangesets;
613
610
  /**
614
- * Helper function for processChangesets.
615
- * Populates the '_deletedSourceRelationshipData' map, whose key is the id of the relationship in the source and the value is an object used to find that relationship in the target.
616
- * @param changedInstanceId The id of the relationship that was deleted
617
- * @param classFullName classFullName of relationship
618
- * @param sourceIdOfRelationshipInSource the element Id acting as the source of the relationship in the sourceDb
619
- * @param targetIdOfRelationshipInSource the element Id acting as the target of the relationship in the sourceDb
620
- * @returns
621
- */
622
- private processRelationshipDeleteOp;
623
- /**
624
- * If sourceDbChanges is defined, then this function is called by the transformer as it is about to process the changesets passed to it in [[IModelTransformOptions.argsForProcessChanges]].
625
- * In order for sourceDbChanges to be defined, the transformer should be called with [[IModelTransformOptions.argsForProcessChanges]].
626
- * This would be after the exporter has already processed the same set of changesets passed to the transformer in [[IModelTransformOptions.argsForProcessChanges]].
627
- * This function should be used to modify the exporter's sourceDbChanges, if necessary, using [[ChangedInstanceIds.addCustomChange]]. See [[ChangedInstanceIds.addCustomChange]] for more information.
628
- * @param sourceDbChanges the ChangedInstanceIds already populated by the exporter with the changesets, if any, passed to the transformer.
629
- * @note The transformer will have built up the remap table between the source and target iModels before calling this function. This means that functions like [[IModelTransformer.context.findTargetElementId]] will return meaningful results.
611
+ * This will be called when transformer is called with [[IModelTransformOptions.argsForProcessChanges]] to process changes.
612
+ * It will be executed after changes in changesets are populated into `sourceDbChanges` and before data processing begins.
613
+ * Remap table between the source and target iModels will be built at that time, meaning that functions like [[IModelTransformer.context.findTargetElementId]] will return meaningful results.
614
+ * This function should be used to modify the `sourceDbChanges`, if necessary, using `add custom change` methods in [[ChangedInstanceIds]], such as [[ChangedInstanceIds.addCustomElementChange]], [[ChangedInstanceIds.addCustomModelChange]] and other.
615
+ * @param sourceDbChanges the ChangedInstanceIds already populated by the exporter with the changes in source changesets, if any, passed to the transformer.
630
616
  * @note Its expected that this function be overridden by a subclass of transformer if it needs to modify sourceDbChanges.
631
617
  */
632
618
  protected addCustomChanges(_sourceDbChanges: ChangedInstanceIds): Promise<void>;
@@ -635,22 +621,12 @@ export declare class IModelTransformer extends IModelExportHandler {
635
621
  * @param change the change to process, must be of changeType "Deleted"
636
622
  * @param mapOfDeletedElemIdToScopeEsas a map of elementIds to changedECInstances (which are ESAs). the elementId is not the id of the esa itself, but the elementid that the esa was stored on before the esa's deletion.
637
623
  * All ESAs in this map are part of the transformer's scope / ESA data and are tracked in case the ESA is deleted in the target.
624
+ * @param isRelationship is relationship or not
638
625
  * @param alreadyImportedElementInserts used to handle entity recreation and not delete already handled element inserts.
639
626
  * @param alreadyImportedModelInserts used to handle entity recreation and not delete already handled model inserts.
640
627
  * @returns void
641
628
  */
642
- private processElementDeleteOp;
643
- /**
644
- * Find the corresponding id in the targetDb given a id from the sourceDb
645
- * @param id the id in the source that we want to find the target id for
646
- * @param isRelationship Changes the way we look for the federationGuid , if true we look for the federationGuid on the element itself, if false we expect it to be passed in because it was part of the ChangedECInstance.
647
- * Typically the source and targetIds of the relationship and not the relationshipId itself is passed to this function
648
- * @param mapOfDeletedElemIdToScopeEsas a map of elementIds to changedECInstances (which are ESAs). the elementId is not the id of the esa itself, but the elementid that the esa was stored on before the esa's deletion.
649
- * All ESAs in this map are part of the transformer's scope / ESA data and are tracked in case the ESA is deleted in the target.
650
- * @param federationGuid
651
- * @returns id of the corresponding entity in the targetDb or undefined if not found
652
- */
653
- private getTargetIdFromSourceId;
629
+ private processDeletedOp;
654
630
  private _tryInitChangesetData;
655
631
  /**
656
632
  * The behavior of process is influenced by [[IModelTransformOptions.argsForProcessChanges]] being defined or not defined during construction passed of the IModelTransformer.
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTransformer.d.ts","sourceRoot":"","sources":["../../src/IModelTransformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IModelTransformer.d.ts","sourceRoot":"","sources":["../../src/IModelTransformer.ts"],"names":[],"mappings":"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"}