From 22e739ab04ec2dd4c40d3c80125a84e2b120c4e1 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Tue, 15 Oct 2024 14:20:14 -0400 Subject: [PATCH] fix api extractor errors --- .../transformer/api/imodel-transformer.api.md | 443 ++++++++++++++++++ .../api/temp/imodel-transformer.api.md | 443 ++++++++++++++++++ packages/transformer/package.json | 2 +- packages/transformer/src/IModelExporter.ts | 7 +- packages/transformer/src/IModelTransformer.ts | 4 + 5 files changed, 895 insertions(+), 4 deletions(-) create mode 100644 packages/transformer/api/imodel-transformer.api.md create mode 100644 packages/transformer/api/temp/imodel-transformer.api.md diff --git a/packages/transformer/api/imodel-transformer.api.md b/packages/transformer/api/imodel-transformer.api.md new file mode 100644 index 00000000..5bf12471 --- /dev/null +++ b/packages/transformer/api/imodel-transformer.api.md @@ -0,0 +1,443 @@ +## API Report File for "@itwin/imodel-transformer" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { BriefcaseDb } from '@itwin/core-backend'; +import { ChangedECInstance } from '@itwin/core-backend'; +import { ChangesetFileProps } from '@itwin/core-common'; +import { ChangesetIndexAndId } from '@itwin/core-common'; +import { CodeSpec } from '@itwin/core-common'; +import * as ECSchemaMetaData from '@itwin/ecschema-metadata'; +import { Element as Element_2 } from '@itwin/core-backend'; +import { ElementAspect } from '@itwin/core-backend'; +import { ElementAspectProps } from '@itwin/core-common'; +import { ElementMultiAspect } from '@itwin/core-backend'; +import { ElementProps } from '@itwin/core-common'; +import { ElementUniqueAspect } from '@itwin/core-backend'; +import { Entity } from '@itwin/core-backend'; +import { EntityProps } from '@itwin/core-common'; +import { EntityReference } from '@itwin/core-common'; +import { ExternalSourceAspect } from '@itwin/core-backend'; +import { ExternalSourceAspectProps } from '@itwin/core-common'; +import { FontProps } from '@itwin/core-common'; +import { Id64Array } from '@itwin/core-bentley'; +import { Id64Set } from '@itwin/core-bentley'; +import { Id64String } from '@itwin/core-bentley'; +import { IModelDb } from '@itwin/core-backend'; +import { IModelElementCloneContext } from '@itwin/core-backend'; +import { IModelJsNative } from '@itwin/core-backend'; +import { Model } from '@itwin/core-backend'; +import { ModelProps } from '@itwin/core-common'; +import { Placement2d } from '@itwin/core-common'; +import { Placement3d } from '@itwin/core-common'; +import { Relationship } from '@itwin/core-backend'; +import { RelationshipProps } from '@itwin/core-backend'; +import { Schema } from '@itwin/ecschema-metadata'; +import { SchemaKey } from '@itwin/ecschema-metadata'; + +// @public +export class ChangedInstanceIds { + constructor(db: IModelDb); + addChange(change: ChangedECInstance): Promise; + // (undocumented) + aspect: ChangedInstanceOps; + // (undocumented) + codeSpec: ChangedInstanceOps; + // (undocumented) + element: ChangedInstanceOps; + // (undocumented) + font: ChangedInstanceOps; + static initialize(opts: ChangedInstanceIdsInitOptions): Promise; + // (undocumented) + model: ChangedInstanceOps; + // (undocumented) + relationship: ChangedInstanceOps; +} + +// @public +export type ChangedInstanceIdsInitOptions = ExportChangesOptions & { + iModel: BriefcaseDb; +}; + +// @public +export class ChangedInstanceOps { + addFromJson(val: IModelJsNative.ChangedInstanceOpsProps | undefined): void; + // (undocumented) + deleteIds: Set; + // (undocumented) + insertIds: Set; + // (undocumented) + updateIds: Set; +} + +// @public +export type ExportChangesOptions = { + skipPropagateChangesToRootElements?: boolean; +} /** +* an array of ChangesetFileProps which are used to read the changesets and populate the ChangedInstanceIds using [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]] +* @note mutually exclusive with @see changesetRanges, @see startChangeset and @see changedInstanceIds, so define one of the four, never more +*/ & ({ + csFileProps: ChangesetFileProps[]; +} +/** +* Class instance that contains modified elements between 2 versions of an iModel. +* If this parameter is not provided, then [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]] +* will be called to discover changed elements. +* @note mutually exclusive with @see changesetRanges, @see csFileProps and @see startChangeset, so define one of the four, never more +*/ +| { + changedInstanceIds: ChangedInstanceIds; +} +/** +* An ordered array of changeset index ranges, e.g. [[2,2], [4,5]] is [2,4,5] +* @note mutually exclusive with @see changedInstanceIds, @see csFileProps and @see startChangeset, so define one of the four, never more +*/ +| { + changesetRanges: [number, number][]; +} +/** +* Include changes from this changeset up through and including the current changeset. +* @note To form a range of versions to process, set `startChangeset` for the start (inclusive) +* of the desired range and open the source iModel as of the end (inclusive) of the desired range. +* @default the current changeset of the sourceDb, if undefined +*/ +| { + startChangeset: { + id?: string; + index?: number; + }; +} | {}); + +// @beta +export type ExporterInitOptions = ExportChangesOptions; + +// @beta +export interface ExportSchemaResult { + schemaPath?: string; +} + +// @internal +export function hasEntityChanged(entity: Entity, entityProps: EntityProps, namesToIgnore?: Set): boolean; + +// @beta +export class IModelExporter { + constructor(sourceDb: IModelDb, elementAspectsStrategy?: new (source: IModelDb, handler: ElementAspectsHandler) => ExportElementAspectsStrategy); + excludeCodeSpec(codeSpecName: string): void; + excludeElement(elementId: Id64String): void; + excludeElementAspectClass(classFullName: string): void; + excludeElementClass(classFullName: string): void; + excludeElementsInCategory(categoryId: Id64String): void; + excludeRelationshipClass(classFullName: string): void; + exportAll(): Promise; + exportChanges(args?: ExportChangesOptions): Promise; + exportChildElements(elementId: Id64String): Promise; + exportCodeSpecById(codeSpecId: Id64String): Promise; + exportCodeSpecByName(codeSpecName: string): Promise; + exportCodeSpecs(): Promise; + exportElement(elementId: Id64String): Promise; + exportFontByName(fontName: string): Promise; + exportFontByNumber(fontNumber: number): Promise; + exportFonts(): Promise; + exportModel(modeledElementId: Id64String): Promise; + exportModelContents(modelId: Id64String, elementClassFullName?: string, skipRootSubject?: boolean): Promise; + exportRelationship(relClassFullName: string, relInstanceId: Id64String): Promise; + exportRelationships(baseRelClassFullName: string): Promise; + exportSchemas(): Promise; + exportSubModels(parentModelId: Id64String): Promise; + protected get handler(): IModelExportHandler; + initialize(options: ExporterInitOptions): Promise; + progressInterval: number; + registerHandler(handler: IModelExportHandler): void; + shouldExportElement(element: Element_2): boolean; + readonly sourceDb: IModelDb; + get sourceDbChanges(): ChangedInstanceIds | undefined; + visitElements: boolean; + visitRelationships: boolean; + wantGeometry: boolean; + wantSystemSchemas: boolean; + wantTemplateModels: boolean; +} + +// @beta +export abstract class IModelExportHandler { + onDeleteElement(_elementId: Id64String): void; + onDeleteModel(_modelId: Id64String): void; + onDeleteRelationship(_relInstanceId: Id64String): void; + onExportCodeSpec(_codeSpec: CodeSpec, _isUpdate: boolean | undefined): void; + onExportElement(_element: Element_2, _isUpdate: boolean | undefined): void; + onExportElementMultiAspects(_aspects: ElementMultiAspect[]): void; + onExportElementUniqueAspect(_aspect: ElementUniqueAspect, _isUpdate: boolean | undefined): void; + onExportFont(_font: FontProps, _isUpdate: boolean | undefined): void; + onExportModel(_model: Model, _isUpdate: boolean | undefined): void; + onExportRelationship(_relationship: Relationship, _isUpdate: boolean | undefined): void; + onExportSchema(_schema: Schema): Promise; + onProgress(): Promise; + onSkipElement(_elementId: Id64String): void; + // @internal + preExportElement(_element: Element_2): Promise; + shouldExportCodeSpec(_codeSpec: CodeSpec): boolean; + shouldExportElement(_element: Element_2): boolean; + shouldExportElementAspect(_aspect: ElementAspect): boolean; + shouldExportRelationship(_relationship: Relationship): boolean; + shouldExportSchema(_schemaKey: SchemaKey): boolean; +} + +// @beta +export class IModelImporter { + constructor(targetDb: IModelDb, options?: IModelImportOptions); + computeProjectExtents(): void; + deleteElement(elementId: Id64String): void; + deleteModel(modelId: Id64String): void; + deleteRelationship(relationshipProps: RelationshipPropsForDelete): void; + readonly doNotUpdateElementIds: Set; + finalize(): void; + importElement(elementProps: ElementProps): Id64String; + importElementMultiAspects(aspectPropsArray: ElementAspectProps[], + filterFunc?: (a: ElementMultiAspect) => boolean): Id64String[]; + importElementUniqueAspect(aspectProps: ElementAspectProps): Id64String; + importModel(modelProps: ModelProps): void; + importRelationship(relationshipProps: RelationshipProps): Id64String; + markElementToUpdateDuringPreserveIds(elementId: Id64String): void; + protected onDeleteElement(elementId: Id64String): void; + protected onDeleteElementAspect(targetElementAspect: ElementAspect): void; + protected onDeleteModel(modelId: Id64String): void; + protected onDeleteRelationship(relationshipProps: RelationshipPropsForDelete): void; + protected onInsertElement(elementProps: ElementProps): Id64String; + protected onInsertElementAspect(aspectProps: ElementAspectProps): Id64String; + protected onInsertModel(modelProps: ModelProps): Id64String; + protected onInsertRelationship(relationshipProps: RelationshipProps): Id64String; + protected onProgress(): void; + protected onUpdateElement(elementProps: ElementProps): void; + protected onUpdateElementAspect(aspectProps: ElementAspectProps): void; + protected onUpdateModel(modelProps: ModelProps): void; + protected onUpdateRelationship(relationshipProps: RelationshipProps): void; + optimizeGeometry(options: OptimizeGeometryOptions): void; + readonly options: Required; + progressInterval: number; + readonly targetDb: IModelDb; +} + +// @beta +export interface IModelImportOptions { + autoExtendProjectExtents?: boolean | { + excludeOutliers: boolean; + }; + preserveElementIdsForFiltering?: boolean; + simplifyElementGeometry?: boolean; + skipPropagateChangesToRootElements?: boolean; +} + +// @beta +export class IModelTransformer extends IModelExportHandler { + constructor(source: IModelDb | IModelExporter, target: IModelDb | IModelImporter, options?: IModelTransformOptions); + combineElements(sourceElementIds: Id64Array, targetElementId: Id64String): void; + // (undocumented) + protected completePartiallyCommittedAspects(): void; + // (undocumented) + protected completePartiallyCommittedElements(): void; + readonly context: IModelCloneContext; + // @deprecated + detectElementDeletes(): Promise; + // @deprecated + detectRelationshipDeletes(): Promise; + static determineSyncType(sourceDb: IModelDb, targetDb: IModelDb, + targetScopeElementId: Id64String): "forward" | "reverse"; + dispose(): void; + protected _elementsWithExplicitlyTrackedProvenance: Set; + readonly exporter: IModelExporter; + static forEachTrackedElement(args: { + provenanceSourceDb: IModelDb; + provenanceDb: IModelDb; + targetScopeElementId: Id64String; + isReverseSynchronization: boolean; + fn: (sourceElementId: Id64String, targetElementId: Id64String) => void; + skipPropagateChangesToRootElements: boolean; + }): void; + protected get hasDefinitionContainerDeletionFeature(): boolean; + protected hasElementChanged(sourceElement: Element_2): boolean; + readonly importer: IModelImporter; + initElementProvenance(sourceElementId: Id64String, targetElementId: Id64String): ExternalSourceAspectProps; + static initElementProvenanceOptions(sourceElementId: Id64String, targetElementId: Id64String, args: { + sourceDb: IModelDb; + targetDb: IModelDb; + isReverseSynchronization: boolean; + targetScopeElementId: Id64String; + }): ExternalSourceAspectProps; + initialize(): Promise; + // (undocumented) + static initRelationshipProvenanceOptions(sourceRelInstanceId: Id64String, targetRelInstanceId: Id64String, args: { + sourceDb: IModelDb; + targetDb: IModelDb; + isReverseSynchronization: boolean; + targetScopeElementId: Id64String; + forceOldRelationshipProvenanceMethod: boolean; + }): ExternalSourceAspectProps; + protected initScopeProvenance(): void; + // (undocumented) + get isForwardSynchronization(): boolean; + // (undocumented) + get isReverseSynchronization(): boolean; + // (undocumented) + static noEsaSyncDirectionErrorMessage: string; + onDeleteElement(sourceElementId: Id64String): void; + onDeleteModel(sourceModelId: Id64String): void; + onDeleteRelationship(sourceRelInstanceId: Id64String): void; + onExportCodeSpec(sourceCodeSpec: CodeSpec): void; + onExportElement(sourceElement: Element_2): void; + onExportElementMultiAspects(sourceAspects: ElementMultiAspect[]): void; + onExportElementUniqueAspect(sourceAspect: ElementUniqueAspect): void; + onExportFont(font: FontProps, _isUpdate: boolean | undefined): void; + onExportModel(sourceModel: Model): void; + onExportRelationship(sourceRelationship: Relationship): void; + onExportSchema(schema: ECSchemaMetaData.Schema): Promise; + onTransformElement(sourceElement: Element_2): ElementProps; + protected onTransformElementAspect(sourceElementAspect: ElementAspect): ElementAspectProps; + onTransformModel(sourceModel: Model, targetModeledElementId: Id64String): ModelProps; + protected onTransformRelationship(sourceRelationship: Relationship): RelationshipProps; + // (undocumented) + protected _partiallyCommittedAspectIds: Id64Set; + // (undocumented) + protected _partiallyCommittedElementIds: Id64Set; + // @internal + preExportElement(sourceElement: Element_2): Promise; + process(): Promise; + processChildElements(sourceElementId: Id64String): Promise; + processCodeSpec(codeSpecName: string): Promise; + processCodeSpecs(): Promise; + processElement(sourceElementId: Id64String): Promise; + processFonts(): Promise; + processModel(sourceModeledElementId: Id64String): Promise; + processModelContents(sourceModelId: Id64String, targetModelId: Id64String, elementClassFullName?: string): Promise; + processRelationships(baseRelClassFullName: string): Promise; + processSchemas(): Promise; + processSubject(sourceSubjectId: Id64String, targetSubjectId: Id64String): Promise; + get provenanceDb(): IModelDb; + static get provenanceElementAspectClasses(): (typeof Entity)[]; + static get provenanceElementClasses(): (typeof Entity)[]; + get provenanceSourceDb(): IModelDb; + static queryScopeExternalSourceAspect(dbToQuery: IModelDb, aspectProps: ExternalSourceAspectProps): { + aspectId: Id64String; + version?: string; + jsonProperties?: string; + } | undefined; + protected _schemaExportDir: string; + protected shouldDetectDeletes(): boolean; + shouldExportCodeSpec(_sourceCodeSpec: CodeSpec): boolean; + shouldExportElement(_sourceElement: Element_2): boolean; + // (undocumented) + shouldExportElementAspect(aspect: ElementAspect): boolean; + shouldExportRelationship(_sourceRelationship: Relationship): boolean; + shouldExportSchema(schemaKey: ECSchemaMetaData.SchemaKey): boolean; + readonly sourceDb: IModelDb; + protected get synchronizationVersion(): ChangesetIndexAndId; + readonly targetDb: IModelDb; + get targetScopeElementId(): Id64String; + // (undocumented) + protected tryGetProvenanceScopeAspect(): ExternalSourceAspect | undefined; + updateSynchronizationVersion({ initializeReverseSyncVersion, }?: { + initializeReverseSyncVersion?: boolean | undefined; + }): void; +} + +// @beta +export interface IModelTransformOptions { + argsForProcessChanges?: ProcessChangesOptions; + branchRelationshipDataBehavior?: "unsafe-migrate" | "reject"; + cloneUsingBinaryGeometry?: boolean; + danglingReferencesBehavior?: "reject" | "ignore"; + forceExternalSourceAspectProvenance?: boolean; + includeSourceProvenance?: boolean; + loadSourceGeometry?: boolean; + noDetachChangeCache?: boolean; + noProvenance?: boolean; + optimizeGeometry?: OptimizeGeometryOptions; + preserveElementIdsForFiltering?: boolean; + skipPropagateChangesToRootElements?: boolean; + targetScopeElementId?: Id64String; + wasSourceIModelCopiedToTarget?: boolean; +} + +// @alpha (undocumented) +export function initializeBranchProvenance(args: ProvenanceInitArgs): Promise; + +// @beta +export interface InitOptions { + startChangeset?: { + id?: string; + index?: number; + }; +} + +// @beta +export interface OptimizeGeometryOptions { + inlineUniqueGeometryParts?: boolean; +} + +// @beta +export type ProcessChangesOptions = ExportChangesOptions & { + saveTargetChanges?: (transformer: IModelTransformer) => Promise; + unsafeFallbackSyncVersion?: string; + unsafeFallbackReverseSyncVersion?: string; + ignoreMissingChangesetsInSynchronizations?: boolean; +}; + +// @alpha (undocumented) +export interface ProvenanceInitArgs { + // (undocumented) + branch: IModelDb; + createFedGuidsForMaster?: true | false | "keep-reopened-db"; + master: IModelDb; + masterDescription?: string; + masterUrl?: string; +} + +// @alpha (undocumented) +export interface ProvenanceInitResult { + // (undocumented) + masterExternalSourceId: Id64String; + // (undocumented) + masterRepositoryLinkId: Id64String; + // (undocumented) + targetScopeElementId: Id64String; +} + +// @beta (undocumented) +export interface RelationshipPropsForDelete { + // (undocumented) + classFullName: string; + // (undocumented) + id: Id64String; +} + +// @beta +export interface TargetScopeProvenanceJsonProps { + pendingReverseSyncChangesetIndices: number[]; + pendingSyncChangesetIndices: number[]; + reverseSyncVersion: string; +} + +// @beta +export class TemplateModelCloner extends IModelTransformer { + constructor(sourceDb: IModelDb, targetDb?: IModelDb); + onTransformElement(sourceElement: Element_2): ElementProps; + placeTemplate2d(sourceTemplateModelId: Id64String, targetModelId: Id64String, placement: Placement2d): Promise>; + placeTemplate3d(sourceTemplateModelId: Id64String, targetModelId: Id64String, placement: Placement3d): Promise>; +} + +// @public +export enum TransformerLoggerCategory { + // @beta + IModelCloneContext = "core-backend.IModelCloneContext", + // @beta + IModelExporter = "core-backend.IModelExporter", + // @beta + IModelImporter = "core-backend.IModelImporter", + // @beta + IModelTransformer = "core-backend.IModelTransformer" +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/packages/transformer/api/temp/imodel-transformer.api.md b/packages/transformer/api/temp/imodel-transformer.api.md new file mode 100644 index 00000000..5bf12471 --- /dev/null +++ b/packages/transformer/api/temp/imodel-transformer.api.md @@ -0,0 +1,443 @@ +## API Report File for "@itwin/imodel-transformer" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { BriefcaseDb } from '@itwin/core-backend'; +import { ChangedECInstance } from '@itwin/core-backend'; +import { ChangesetFileProps } from '@itwin/core-common'; +import { ChangesetIndexAndId } from '@itwin/core-common'; +import { CodeSpec } from '@itwin/core-common'; +import * as ECSchemaMetaData from '@itwin/ecschema-metadata'; +import { Element as Element_2 } from '@itwin/core-backend'; +import { ElementAspect } from '@itwin/core-backend'; +import { ElementAspectProps } from '@itwin/core-common'; +import { ElementMultiAspect } from '@itwin/core-backend'; +import { ElementProps } from '@itwin/core-common'; +import { ElementUniqueAspect } from '@itwin/core-backend'; +import { Entity } from '@itwin/core-backend'; +import { EntityProps } from '@itwin/core-common'; +import { EntityReference } from '@itwin/core-common'; +import { ExternalSourceAspect } from '@itwin/core-backend'; +import { ExternalSourceAspectProps } from '@itwin/core-common'; +import { FontProps } from '@itwin/core-common'; +import { Id64Array } from '@itwin/core-bentley'; +import { Id64Set } from '@itwin/core-bentley'; +import { Id64String } from '@itwin/core-bentley'; +import { IModelDb } from '@itwin/core-backend'; +import { IModelElementCloneContext } from '@itwin/core-backend'; +import { IModelJsNative } from '@itwin/core-backend'; +import { Model } from '@itwin/core-backend'; +import { ModelProps } from '@itwin/core-common'; +import { Placement2d } from '@itwin/core-common'; +import { Placement3d } from '@itwin/core-common'; +import { Relationship } from '@itwin/core-backend'; +import { RelationshipProps } from '@itwin/core-backend'; +import { Schema } from '@itwin/ecschema-metadata'; +import { SchemaKey } from '@itwin/ecschema-metadata'; + +// @public +export class ChangedInstanceIds { + constructor(db: IModelDb); + addChange(change: ChangedECInstance): Promise; + // (undocumented) + aspect: ChangedInstanceOps; + // (undocumented) + codeSpec: ChangedInstanceOps; + // (undocumented) + element: ChangedInstanceOps; + // (undocumented) + font: ChangedInstanceOps; + static initialize(opts: ChangedInstanceIdsInitOptions): Promise; + // (undocumented) + model: ChangedInstanceOps; + // (undocumented) + relationship: ChangedInstanceOps; +} + +// @public +export type ChangedInstanceIdsInitOptions = ExportChangesOptions & { + iModel: BriefcaseDb; +}; + +// @public +export class ChangedInstanceOps { + addFromJson(val: IModelJsNative.ChangedInstanceOpsProps | undefined): void; + // (undocumented) + deleteIds: Set; + // (undocumented) + insertIds: Set; + // (undocumented) + updateIds: Set; +} + +// @public +export type ExportChangesOptions = { + skipPropagateChangesToRootElements?: boolean; +} /** +* an array of ChangesetFileProps which are used to read the changesets and populate the ChangedInstanceIds using [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]] +* @note mutually exclusive with @see changesetRanges, @see startChangeset and @see changedInstanceIds, so define one of the four, never more +*/ & ({ + csFileProps: ChangesetFileProps[]; +} +/** +* Class instance that contains modified elements between 2 versions of an iModel. +* If this parameter is not provided, then [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]] +* will be called to discover changed elements. +* @note mutually exclusive with @see changesetRanges, @see csFileProps and @see startChangeset, so define one of the four, never more +*/ +| { + changedInstanceIds: ChangedInstanceIds; +} +/** +* An ordered array of changeset index ranges, e.g. [[2,2], [4,5]] is [2,4,5] +* @note mutually exclusive with @see changedInstanceIds, @see csFileProps and @see startChangeset, so define one of the four, never more +*/ +| { + changesetRanges: [number, number][]; +} +/** +* Include changes from this changeset up through and including the current changeset. +* @note To form a range of versions to process, set `startChangeset` for the start (inclusive) +* of the desired range and open the source iModel as of the end (inclusive) of the desired range. +* @default the current changeset of the sourceDb, if undefined +*/ +| { + startChangeset: { + id?: string; + index?: number; + }; +} | {}); + +// @beta +export type ExporterInitOptions = ExportChangesOptions; + +// @beta +export interface ExportSchemaResult { + schemaPath?: string; +} + +// @internal +export function hasEntityChanged(entity: Entity, entityProps: EntityProps, namesToIgnore?: Set): boolean; + +// @beta +export class IModelExporter { + constructor(sourceDb: IModelDb, elementAspectsStrategy?: new (source: IModelDb, handler: ElementAspectsHandler) => ExportElementAspectsStrategy); + excludeCodeSpec(codeSpecName: string): void; + excludeElement(elementId: Id64String): void; + excludeElementAspectClass(classFullName: string): void; + excludeElementClass(classFullName: string): void; + excludeElementsInCategory(categoryId: Id64String): void; + excludeRelationshipClass(classFullName: string): void; + exportAll(): Promise; + exportChanges(args?: ExportChangesOptions): Promise; + exportChildElements(elementId: Id64String): Promise; + exportCodeSpecById(codeSpecId: Id64String): Promise; + exportCodeSpecByName(codeSpecName: string): Promise; + exportCodeSpecs(): Promise; + exportElement(elementId: Id64String): Promise; + exportFontByName(fontName: string): Promise; + exportFontByNumber(fontNumber: number): Promise; + exportFonts(): Promise; + exportModel(modeledElementId: Id64String): Promise; + exportModelContents(modelId: Id64String, elementClassFullName?: string, skipRootSubject?: boolean): Promise; + exportRelationship(relClassFullName: string, relInstanceId: Id64String): Promise; + exportRelationships(baseRelClassFullName: string): Promise; + exportSchemas(): Promise; + exportSubModels(parentModelId: Id64String): Promise; + protected get handler(): IModelExportHandler; + initialize(options: ExporterInitOptions): Promise; + progressInterval: number; + registerHandler(handler: IModelExportHandler): void; + shouldExportElement(element: Element_2): boolean; + readonly sourceDb: IModelDb; + get sourceDbChanges(): ChangedInstanceIds | undefined; + visitElements: boolean; + visitRelationships: boolean; + wantGeometry: boolean; + wantSystemSchemas: boolean; + wantTemplateModels: boolean; +} + +// @beta +export abstract class IModelExportHandler { + onDeleteElement(_elementId: Id64String): void; + onDeleteModel(_modelId: Id64String): void; + onDeleteRelationship(_relInstanceId: Id64String): void; + onExportCodeSpec(_codeSpec: CodeSpec, _isUpdate: boolean | undefined): void; + onExportElement(_element: Element_2, _isUpdate: boolean | undefined): void; + onExportElementMultiAspects(_aspects: ElementMultiAspect[]): void; + onExportElementUniqueAspect(_aspect: ElementUniqueAspect, _isUpdate: boolean | undefined): void; + onExportFont(_font: FontProps, _isUpdate: boolean | undefined): void; + onExportModel(_model: Model, _isUpdate: boolean | undefined): void; + onExportRelationship(_relationship: Relationship, _isUpdate: boolean | undefined): void; + onExportSchema(_schema: Schema): Promise; + onProgress(): Promise; + onSkipElement(_elementId: Id64String): void; + // @internal + preExportElement(_element: Element_2): Promise; + shouldExportCodeSpec(_codeSpec: CodeSpec): boolean; + shouldExportElement(_element: Element_2): boolean; + shouldExportElementAspect(_aspect: ElementAspect): boolean; + shouldExportRelationship(_relationship: Relationship): boolean; + shouldExportSchema(_schemaKey: SchemaKey): boolean; +} + +// @beta +export class IModelImporter { + constructor(targetDb: IModelDb, options?: IModelImportOptions); + computeProjectExtents(): void; + deleteElement(elementId: Id64String): void; + deleteModel(modelId: Id64String): void; + deleteRelationship(relationshipProps: RelationshipPropsForDelete): void; + readonly doNotUpdateElementIds: Set; + finalize(): void; + importElement(elementProps: ElementProps): Id64String; + importElementMultiAspects(aspectPropsArray: ElementAspectProps[], + filterFunc?: (a: ElementMultiAspect) => boolean): Id64String[]; + importElementUniqueAspect(aspectProps: ElementAspectProps): Id64String; + importModel(modelProps: ModelProps): void; + importRelationship(relationshipProps: RelationshipProps): Id64String; + markElementToUpdateDuringPreserveIds(elementId: Id64String): void; + protected onDeleteElement(elementId: Id64String): void; + protected onDeleteElementAspect(targetElementAspect: ElementAspect): void; + protected onDeleteModel(modelId: Id64String): void; + protected onDeleteRelationship(relationshipProps: RelationshipPropsForDelete): void; + protected onInsertElement(elementProps: ElementProps): Id64String; + protected onInsertElementAspect(aspectProps: ElementAspectProps): Id64String; + protected onInsertModel(modelProps: ModelProps): Id64String; + protected onInsertRelationship(relationshipProps: RelationshipProps): Id64String; + protected onProgress(): void; + protected onUpdateElement(elementProps: ElementProps): void; + protected onUpdateElementAspect(aspectProps: ElementAspectProps): void; + protected onUpdateModel(modelProps: ModelProps): void; + protected onUpdateRelationship(relationshipProps: RelationshipProps): void; + optimizeGeometry(options: OptimizeGeometryOptions): void; + readonly options: Required; + progressInterval: number; + readonly targetDb: IModelDb; +} + +// @beta +export interface IModelImportOptions { + autoExtendProjectExtents?: boolean | { + excludeOutliers: boolean; + }; + preserveElementIdsForFiltering?: boolean; + simplifyElementGeometry?: boolean; + skipPropagateChangesToRootElements?: boolean; +} + +// @beta +export class IModelTransformer extends IModelExportHandler { + constructor(source: IModelDb | IModelExporter, target: IModelDb | IModelImporter, options?: IModelTransformOptions); + combineElements(sourceElementIds: Id64Array, targetElementId: Id64String): void; + // (undocumented) + protected completePartiallyCommittedAspects(): void; + // (undocumented) + protected completePartiallyCommittedElements(): void; + readonly context: IModelCloneContext; + // @deprecated + detectElementDeletes(): Promise; + // @deprecated + detectRelationshipDeletes(): Promise; + static determineSyncType(sourceDb: IModelDb, targetDb: IModelDb, + targetScopeElementId: Id64String): "forward" | "reverse"; + dispose(): void; + protected _elementsWithExplicitlyTrackedProvenance: Set; + readonly exporter: IModelExporter; + static forEachTrackedElement(args: { + provenanceSourceDb: IModelDb; + provenanceDb: IModelDb; + targetScopeElementId: Id64String; + isReverseSynchronization: boolean; + fn: (sourceElementId: Id64String, targetElementId: Id64String) => void; + skipPropagateChangesToRootElements: boolean; + }): void; + protected get hasDefinitionContainerDeletionFeature(): boolean; + protected hasElementChanged(sourceElement: Element_2): boolean; + readonly importer: IModelImporter; + initElementProvenance(sourceElementId: Id64String, targetElementId: Id64String): ExternalSourceAspectProps; + static initElementProvenanceOptions(sourceElementId: Id64String, targetElementId: Id64String, args: { + sourceDb: IModelDb; + targetDb: IModelDb; + isReverseSynchronization: boolean; + targetScopeElementId: Id64String; + }): ExternalSourceAspectProps; + initialize(): Promise; + // (undocumented) + static initRelationshipProvenanceOptions(sourceRelInstanceId: Id64String, targetRelInstanceId: Id64String, args: { + sourceDb: IModelDb; + targetDb: IModelDb; + isReverseSynchronization: boolean; + targetScopeElementId: Id64String; + forceOldRelationshipProvenanceMethod: boolean; + }): ExternalSourceAspectProps; + protected initScopeProvenance(): void; + // (undocumented) + get isForwardSynchronization(): boolean; + // (undocumented) + get isReverseSynchronization(): boolean; + // (undocumented) + static noEsaSyncDirectionErrorMessage: string; + onDeleteElement(sourceElementId: Id64String): void; + onDeleteModel(sourceModelId: Id64String): void; + onDeleteRelationship(sourceRelInstanceId: Id64String): void; + onExportCodeSpec(sourceCodeSpec: CodeSpec): void; + onExportElement(sourceElement: Element_2): void; + onExportElementMultiAspects(sourceAspects: ElementMultiAspect[]): void; + onExportElementUniqueAspect(sourceAspect: ElementUniqueAspect): void; + onExportFont(font: FontProps, _isUpdate: boolean | undefined): void; + onExportModel(sourceModel: Model): void; + onExportRelationship(sourceRelationship: Relationship): void; + onExportSchema(schema: ECSchemaMetaData.Schema): Promise; + onTransformElement(sourceElement: Element_2): ElementProps; + protected onTransformElementAspect(sourceElementAspect: ElementAspect): ElementAspectProps; + onTransformModel(sourceModel: Model, targetModeledElementId: Id64String): ModelProps; + protected onTransformRelationship(sourceRelationship: Relationship): RelationshipProps; + // (undocumented) + protected _partiallyCommittedAspectIds: Id64Set; + // (undocumented) + protected _partiallyCommittedElementIds: Id64Set; + // @internal + preExportElement(sourceElement: Element_2): Promise; + process(): Promise; + processChildElements(sourceElementId: Id64String): Promise; + processCodeSpec(codeSpecName: string): Promise; + processCodeSpecs(): Promise; + processElement(sourceElementId: Id64String): Promise; + processFonts(): Promise; + processModel(sourceModeledElementId: Id64String): Promise; + processModelContents(sourceModelId: Id64String, targetModelId: Id64String, elementClassFullName?: string): Promise; + processRelationships(baseRelClassFullName: string): Promise; + processSchemas(): Promise; + processSubject(sourceSubjectId: Id64String, targetSubjectId: Id64String): Promise; + get provenanceDb(): IModelDb; + static get provenanceElementAspectClasses(): (typeof Entity)[]; + static get provenanceElementClasses(): (typeof Entity)[]; + get provenanceSourceDb(): IModelDb; + static queryScopeExternalSourceAspect(dbToQuery: IModelDb, aspectProps: ExternalSourceAspectProps): { + aspectId: Id64String; + version?: string; + jsonProperties?: string; + } | undefined; + protected _schemaExportDir: string; + protected shouldDetectDeletes(): boolean; + shouldExportCodeSpec(_sourceCodeSpec: CodeSpec): boolean; + shouldExportElement(_sourceElement: Element_2): boolean; + // (undocumented) + shouldExportElementAspect(aspect: ElementAspect): boolean; + shouldExportRelationship(_sourceRelationship: Relationship): boolean; + shouldExportSchema(schemaKey: ECSchemaMetaData.SchemaKey): boolean; + readonly sourceDb: IModelDb; + protected get synchronizationVersion(): ChangesetIndexAndId; + readonly targetDb: IModelDb; + get targetScopeElementId(): Id64String; + // (undocumented) + protected tryGetProvenanceScopeAspect(): ExternalSourceAspect | undefined; + updateSynchronizationVersion({ initializeReverseSyncVersion, }?: { + initializeReverseSyncVersion?: boolean | undefined; + }): void; +} + +// @beta +export interface IModelTransformOptions { + argsForProcessChanges?: ProcessChangesOptions; + branchRelationshipDataBehavior?: "unsafe-migrate" | "reject"; + cloneUsingBinaryGeometry?: boolean; + danglingReferencesBehavior?: "reject" | "ignore"; + forceExternalSourceAspectProvenance?: boolean; + includeSourceProvenance?: boolean; + loadSourceGeometry?: boolean; + noDetachChangeCache?: boolean; + noProvenance?: boolean; + optimizeGeometry?: OptimizeGeometryOptions; + preserveElementIdsForFiltering?: boolean; + skipPropagateChangesToRootElements?: boolean; + targetScopeElementId?: Id64String; + wasSourceIModelCopiedToTarget?: boolean; +} + +// @alpha (undocumented) +export function initializeBranchProvenance(args: ProvenanceInitArgs): Promise; + +// @beta +export interface InitOptions { + startChangeset?: { + id?: string; + index?: number; + }; +} + +// @beta +export interface OptimizeGeometryOptions { + inlineUniqueGeometryParts?: boolean; +} + +// @beta +export type ProcessChangesOptions = ExportChangesOptions & { + saveTargetChanges?: (transformer: IModelTransformer) => Promise; + unsafeFallbackSyncVersion?: string; + unsafeFallbackReverseSyncVersion?: string; + ignoreMissingChangesetsInSynchronizations?: boolean; +}; + +// @alpha (undocumented) +export interface ProvenanceInitArgs { + // (undocumented) + branch: IModelDb; + createFedGuidsForMaster?: true | false | "keep-reopened-db"; + master: IModelDb; + masterDescription?: string; + masterUrl?: string; +} + +// @alpha (undocumented) +export interface ProvenanceInitResult { + // (undocumented) + masterExternalSourceId: Id64String; + // (undocumented) + masterRepositoryLinkId: Id64String; + // (undocumented) + targetScopeElementId: Id64String; +} + +// @beta (undocumented) +export interface RelationshipPropsForDelete { + // (undocumented) + classFullName: string; + // (undocumented) + id: Id64String; +} + +// @beta +export interface TargetScopeProvenanceJsonProps { + pendingReverseSyncChangesetIndices: number[]; + pendingSyncChangesetIndices: number[]; + reverseSyncVersion: string; +} + +// @beta +export class TemplateModelCloner extends IModelTransformer { + constructor(sourceDb: IModelDb, targetDb?: IModelDb); + onTransformElement(sourceElement: Element_2): ElementProps; + placeTemplate2d(sourceTemplateModelId: Id64String, targetModelId: Id64String, placement: Placement2d): Promise>; + placeTemplate3d(sourceTemplateModelId: Id64String, targetModelId: Id64String, placement: Placement3d): Promise>; +} + +// @public +export enum TransformerLoggerCategory { + // @beta + IModelCloneContext = "core-backend.IModelCloneContext", + // @beta + IModelExporter = "core-backend.IModelExporter", + // @beta + IModelImporter = "core-backend.IModelImporter", + // @beta + IModelTransformer = "core-backend.IModelTransformer" +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/packages/transformer/package.json b/packages/transformer/package.json index 8e4798da..09f036ae 100644 --- a/packages/transformer/package.json +++ b/packages/transformer/package.json @@ -20,7 +20,7 @@ "docs:extract": "betools extract --fileExt=ts --extractFrom=./src/test --recursive --out=../../build/docs/extract", "copy:test-assets": "cpx \"./src/test/assets/**/*\" ./lib/cjs/test/assets", "cover": "nyc npm -s test", - "extract-api": "betools extract-api --entry=imodel-transformer --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api", + "extract-api": "betools extract-api --entry=transformer --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api", "lint": "eslint -f visualstudio --quiet \"./src/**/*.ts\" 1>&2", "lint:no-tests": "eslint -f visualstudio --quiet \"./src/*.ts\" 1>&2", "lint:fix": "eslint --fix -f visualstudio --quiet \"./src/**/*.ts\" 1>&2", diff --git a/packages/transformer/src/IModelExporter.ts b/packages/transformer/src/IModelExporter.ts index 2807f71f..5bda0d8f 100644 --- a/packages/transformer/src/IModelExporter.ts +++ b/packages/transformer/src/IModelExporter.ts @@ -998,14 +998,14 @@ export class IModelExporter { /** * Arguments for [[ChangedInstanceIds.initialize]] - * @beta + * @public */ export type ChangedInstanceIdsInitOptions = ExportChangesOptions & { iModel: BriefcaseDb; }; /** Class for holding change information. - * @beta + * @public */ export class ChangedInstanceOps { public insertIds = new Set(); @@ -1031,7 +1031,7 @@ export class ChangedInstanceOps { /** * Class for discovering modified elements between 2 versions of an iModel. - * @beta + * @public */ export class ChangedInstanceIds { public codeSpec = new ChangedInstanceOps(); @@ -1172,6 +1172,7 @@ export class ChangedInstanceIds { /** * Initializes a new ChangedInstanceIds object with information taken from a range of changesets. + * @public */ public static async initialize( opts: ChangedInstanceIdsInitOptions diff --git a/packages/transformer/src/IModelTransformer.ts b/packages/transformer/src/IModelTransformer.ts index bcfb2579..60a8144e 100644 --- a/packages/transformer/src/IModelTransformer.ts +++ b/packages/transformer/src/IModelTransformer.ts @@ -317,6 +317,7 @@ export interface InitOptions { /** * Arguments used during [[IModelTransformer.process]] if provided in [[IModelTransformOptions.argsForProcessChanges]]. + * @beta */ export type ProcessChangesOptions = ExportChangesOptions & { /** how to call saveChanges on the target. Must call targetDb.saveChanges, should not edit the iModel */ @@ -350,6 +351,9 @@ type ChangeDataState = | "no-changes" | "unconnected"; +/** + * @beta + */ export interface RelationshipPropsForDelete { id: Id64String; classFullName: string;