diff --git a/.github/workflows/extract-api.yaml b/.github/workflows/extract-api.yaml new file mode 100644 index 00000000..184159c1 --- /dev/null +++ b/.github/workflows/extract-api.yaml @@ -0,0 +1,68 @@ +# imodel-transformer Extract API Build + +name: Extract API + +on: + workflow_dispatch: + pull_request: + branches: + - main + paths-ignore: + - "**.md" + - docs/** + - .github/CODEOWNERS + - common/changes/**/*.json + - "**/CHANGELOG.json" + - "**/CHANGELOG.md" + +jobs: + extract-api: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + + - name: Configure git + run: | + git config --local user.email imodeljs-admin@users.noreply.github.com + git config --local user.name imodeljs-admin + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 7.27.0 + + - name: Use Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18.16.0 + cache: 'pnpm' + + - name: Pnpm install + run: pnpm install + + - name: Pnpm build + run: pnpm run build + + - name: Run Extract API + run: pnpm run extract-api + working-directory: ${{ github.workspace }}/packages/transformer + + - name: Assert no uncommitted changes (for extension api) + shell: bash + run: | + if [ $(git status --porcelain | wc -l) -ne "0" ]; then + echo "The following file(s) contain uncommitted changes:" + git status --porcelain -u + echo -e 'Please do the following:\n1. run `pnpm run extract-api` in packages/transformer \n2. commit the modified generated extension api files \n3. run pnpm change in root dir' + exit 1 + fi + + - name: Publish extracted api + uses: actions/upload-artifact@v4 + with: + name: extracted-api + path: common/api diff --git a/.gitignore b/.gitignore index afd5552f..7804f8c4 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ imjs_extensions # rush-specific /common/temp +/**/api/temp package-deps.json /**/.rush *.build.log diff --git a/change/@itwin-imodel-transformer-f95f8f0c-fc77-4f96-b907-8323bfaefff1.json b/change/@itwin-imodel-transformer-f95f8f0c-fc77-4f96-b907-8323bfaefff1.json new file mode 100644 index 00000000..60bd216a --- /dev/null +++ b/change/@itwin-imodel-transformer-f95f8f0c-fc77-4f96-b907-8323bfaefff1.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "add extract-api.yaml", + "packageName": "@itwin/imodel-transformer", + "email": "'DanRod1999@users.noreply.github.com'", + "dependentChangeType": "patch" +} diff --git a/common/api/imodel-transformer.api.md b/common/api/imodel-transformer.api.md index 599201eb..5bf12471 100644 --- a/common/api/imodel-transformer.api.md +++ b/common/api/imodel-transformer.api.md @@ -1,14 +1,14 @@ -## API Report File for "@itwin/core-transformer" +## 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 { AccessToken } from '@itwin/core-bentley'; 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 { CompressedId64Set } from '@itwin/core-bentley'; -import { ConcreteEntity } from '@itwin/core-backend'; import * as ECSchemaMetaData from '@itwin/ecschema-metadata'; import { Element as Element_2 } from '@itwin/core-backend'; import { ElementAspect } from '@itwin/core-backend'; @@ -19,8 +19,11 @@ 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 { EntityReferenceSet } 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'; @@ -33,10 +36,11 @@ import { Relationship } from '@itwin/core-backend'; import { RelationshipProps } from '@itwin/core-backend'; import { Schema } from '@itwin/ecschema-metadata'; import { SchemaKey } from '@itwin/ecschema-metadata'; -import { SQLiteDb } from '@itwin/core-backend'; -// @beta +// @public export class ChangedInstanceIds { + constructor(db: IModelDb); + addChange(change: ChangedECInstance): Promise; // (undocumented) aspect: ChangedInstanceOps; // (undocumented) @@ -45,14 +49,19 @@ export class ChangedInstanceIds { element: ChangedInstanceOps; // (undocumented) font: ChangedInstanceOps; - static initialize(accessToken: AccessToken | undefined, iModel: BriefcaseDb, firstChangesetId: string): Promise; + static initialize(opts: ChangedInstanceIdsInitOptions): Promise; // (undocumented) model: ChangedInstanceOps; // (undocumented) relationship: ChangedInstanceOps; } -// @beta +// @public +export type ChangedInstanceIdsInitOptions = ExportChangesOptions & { + iModel: BriefcaseDb; +}; + +// @public export class ChangedInstanceOps { addFromJson(val: IModelJsNative.ChangedInstanceOpsProps | undefined): void; // (undocumented) @@ -63,6 +72,47 @@ export class ChangedInstanceOps { 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; @@ -73,7 +123,7 @@ export function hasEntityChanged(entity: Entity, entityProps: EntityProps, names // @beta export class IModelExporter { - constructor(sourceDb: IModelDb); + constructor(sourceDb: IModelDb, elementAspectsStrategy?: new (source: IModelDb, handler: ElementAspectsHandler) => ExportElementAspectsStrategy); excludeCodeSpec(codeSpecName: string): void; excludeElement(elementId: Id64String): void; excludeElementAspectClass(classFullName: string): void; @@ -81,7 +131,7 @@ export class IModelExporter { excludeElementsInCategory(categoryId: Id64String): void; excludeRelationshipClass(classFullName: string): void; exportAll(): Promise; - exportChanges(user?: AccessToken, startChangesetId?: string): Promise; + exportChanges(args?: ExportChangesOptions): Promise; exportChildElements(elementId: Id64String): Promise; exportCodeSpecById(codeSpecId: Id64String): Promise; exportCodeSpecByName(codeSpecName: string): Promise; @@ -96,15 +146,10 @@ export class IModelExporter { exportRelationships(baseRelClassFullName: string): Promise; exportSchemas(): Promise; exportSubModels(parentModelId: Id64String): Promise; - protected getAdditionalStateJson(): any; protected get handler(): IModelExportHandler; - protected loadAdditionalStateJson(_additionalState: any): void; - // @internal - loadStateFromJson(state: IModelExporterState): void; + initialize(options: ExporterInitOptions): Promise; progressInterval: number; registerHandler(handler: IModelExportHandler): void; - // @internal - saveStateToJson(): IModelExporterState; shouldExportElement(element: Element_2): boolean; readonly sourceDb: IModelDb; get sourceDbChanges(): ChangedInstanceIds | undefined; @@ -115,36 +160,6 @@ export class IModelExporter { wantTemplateModels: boolean; } -// @internal -export interface IModelExporterState { - // (undocumented) - additionalState?: any; - // (undocumented) - excludedCodeSpecNames: string[]; - // (undocumented) - excludedElementAspectClassFullNames: string[]; - // (undocumented) - excludedElementCategoryIds: CompressedId64Set; - // (undocumented) - excludedElementClassNames: string[]; - // (undocumented) - excludedElementIds: CompressedId64Set; - // (undocumented) - excludedRelationshipClassNames: string[]; - // (undocumented) - exporterClass: string; - // (undocumented) - visitElements: boolean; - // (undocumented) - visitRelationships: boolean; - // (undocumented) - wantGeometry: boolean; - // (undocumented) - wantSystemSchemas: boolean; - // (undocumented) - wantTemplateModels: boolean; -} - // @beta export abstract class IModelExportHandler { onDeleteElement(_elementId: Id64String): void; @@ -159,6 +174,7 @@ export abstract class IModelExportHandler { 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; @@ -169,30 +185,25 @@ export abstract class IModelExportHandler { } // @beta -export class IModelImporter implements Required { +export class IModelImporter { constructor(targetDb: IModelDb, options?: IModelImportOptions); - // @deprecated - get autoExtendProjectExtents(): Required["autoExtendProjectExtents"]; - set autoExtendProjectExtents(val: Required["autoExtendProjectExtents"]); computeProjectExtents(): void; deleteElement(elementId: Id64String): void; deleteModel(modelId: Id64String): void; - deleteRelationship(relationshipProps: RelationshipProps): void; + deleteRelationship(relationshipProps: RelationshipPropsForDelete): void; readonly doNotUpdateElementIds: Set; - protected getAdditionalStateJson(): any; + 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; - protected loadAdditionalStateJson(_additionalState: any): void; - // @internal - loadStateFromJson(state: IModelImporterState): void; + markElementToUpdateDuringPreserveIds(elementId: Id64String): void; protected onDeleteElement(elementId: Id64String): void; protected onDeleteElementAspect(targetElementAspect: ElementAspect): void; protected onDeleteModel(modelId: Id64String): void; - protected onDeleteRelationship(relationshipProps: RelationshipProps): void; + protected onDeleteRelationship(relationshipProps: RelationshipPropsForDelete): void; protected onInsertElement(elementProps: ElementProps): Id64String; protected onInsertElementAspect(aspectProps: ElementAspectProps): Id64String; protected onInsertModel(modelProps: ModelProps): Id64String; @@ -204,32 +215,10 @@ export class IModelImporter implements Required { protected onUpdateRelationship(relationshipProps: RelationshipProps): void; optimizeGeometry(options: OptimizeGeometryOptions): void; readonly options: Required; - // @deprecated - get preserveElementIdsForFiltering(): boolean; - set preserveElementIdsForFiltering(val: boolean); progressInterval: number; - // @internal - saveStateToJson(): IModelImporterState; - // @deprecated - get simplifyElementGeometry(): boolean; - set simplifyElementGeometry(val: boolean); readonly targetDb: IModelDb; } -// @internal -export interface IModelImporterState { - // (undocumented) - additionalState?: any; - // (undocumented) - doNotUpdateElementIds: CompressedId64Set; - // (undocumented) - importerClass: string; - // (undocumented) - options: IModelImportOptions; - // (undocumented) - targetDbId: string; -} - // @beta export interface IModelImportOptions { autoExtendProjectExtents?: boolean | { @@ -237,28 +226,61 @@ export interface IModelImportOptions { }; 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; - protected getAdditionalStateJson(): any; - protected hasElementChanged(sourceElement: Element_2, targetElementId: Id64String): boolean; + 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; - // @deprecated - initFromExternalSourceAspects(args?: InitFromExternalSourceAspectsArgs): void | Promise; - initialize(args?: InitFromExternalSourceAspectsArgs): Promise; - // @internal - static readonly jsStateTable = "TransformerJsState"; - // @internal - static readonly lastProvenanceEntityInfoTable = "LastProvenanceEntityInfo"; - protected loadAdditionalStateJson(_additionalState: any): void; - protected loadStateFromDb(db: SQLiteDb): void; + 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; @@ -271,20 +293,19 @@ export class IModelTransformer extends IModelExportHandler { onExportRelationship(sourceRelationship: Relationship): void; onExportSchema(schema: ECSchemaMetaData.Schema): Promise; onTransformElement(sourceElement: Element_2): ElementProps; - protected onTransformElementAspect(sourceElementAspect: ElementAspect, _targetElementId: Id64String): ElementAspectProps; + protected onTransformElementAspect(sourceElementAspect: ElementAspect): ElementAspectProps; onTransformModel(sourceModel: Model, targetModeledElementId: Id64String): ModelProps; protected onTransformRelationship(sourceRelationship: Relationship): RelationshipProps; - protected _partiallyCommittedEntities: EntityMap; - protected _pendingReferences: PendingReferenceMap; + // (undocumented) + protected _partiallyCommittedAspectIds: Id64Set; + // (undocumented) + protected _partiallyCommittedElementIds: Id64Set; // @internal preExportElement(sourceElement: Element_2): Promise; - processAll(): Promise; - processChanges(accessToken: AccessToken, startChangesetId?: string): Promise; + process(): Promise; processChildElements(sourceElementId: Id64String): Promise; processCodeSpec(codeSpecName: string): Promise; processCodeSpecs(): Promise; - // @deprecated - processDeferredElements(_numRetries?: number): Promise; processElement(sourceElementId: Id64String): Promise; processFonts(): Promise; processModel(sourceModeledElementId: Id64String): Promise; @@ -295,43 +316,58 @@ export class IModelTransformer extends IModelExportHandler { get provenanceDb(): IModelDb; static get provenanceElementAspectClasses(): (typeof Entity)[]; static get provenanceElementClasses(): (typeof Entity)[]; - static resumeTransformation IModelTransformer = typeof IModelTransformer>(this: SubClass, statePath: string, ...constructorArgs: ConstructorParameters): InstanceType; - protected saveStateToDb(db: SQLiteDb): void; - saveStateToFile(nativeStatePath: string): void; + 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; - // @deprecated (undocumented) - protected skipElement(_sourceElement: Element_2): void; 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; - // @deprecated - danglingPredecessorsBehavior?: "reject" | "ignore"; danglingReferencesBehavior?: "reject" | "ignore"; + forceExternalSourceAspectProvenance?: boolean; includeSourceProvenance?: boolean; - isReverseSynchronization?: 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 InitFromExternalSourceAspectsArgs { - // (undocumented) - accessToken?: AccessToken; - // (undocumented) - startChangesetId?: string; +export interface InitOptions { + startChangeset?: { + id?: string; + index?: number; + }; } // @beta @@ -339,6 +375,49 @@ 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); @@ -349,6 +428,8 @@ export class TemplateModelCloner extends IModelTransformer { // @public export enum TransformerLoggerCategory { + // @beta + IModelCloneContext = "core-backend.IModelCloneContext", // @beta IModelExporter = "core-backend.IModelExporter", // @beta diff --git a/common/api/summary/imodel-transformer.exports.csv b/common/api/summary/imodel-transformer.exports.csv index 7c5d84b7..d8cb54ca 100644 --- a/common/api/summary/imodel-transformer.exports.csv +++ b/common/api/summary/imodel-transformer.exports.csv @@ -1,18 +1,25 @@ sep=; Release Tag;API Item -beta;ChangedInstanceIds -beta;ChangedInstanceOps +public;ChangedInstanceIds +public;ChangedInstanceIdsInitOptions = ExportChangesOptions & +public;ChangedInstanceOps +public;ExportChangesOptions = +beta;ExporterInitOptions = ExportChangesOptions beta;ExportSchemaResult internal;hasEntityChanged(entity: Entity, entityProps: EntityProps, namesToIgnore?: Set beta;IModelExporter -internal;IModelExporterState beta;class IModelExportHandler -beta;IModelImporter -internal;IModelImporterState +beta;IModelImporter beta;IModelImportOptions beta;IModelTransformer beta;IModelTransformOptions -beta;InitFromExternalSourceAspectsArgs +alpha;initializeBranchProvenance(args: ProvenanceInitArgs): Promise +beta;InitOptions beta;OptimizeGeometryOptions +beta;ProcessChangesOptions = ExportChangesOptions & +alpha;ProvenanceInitArgs +alpha;ProvenanceInitResult +beta;RelationshipPropsForDelete +beta;TargetScopeProvenanceJsonProps beta;TemplateModelCloner public;TransformerLoggerCategory \ No newline at end of file diff --git a/packages/transformer/package.json b/packages/transformer/package.json index 26480dd2..84f5999c 100644 --- a/packages/transformer/package.json +++ b/packages/transformer/package.json @@ -2,8 +2,8 @@ "name": "@itwin/imodel-transformer", "version": "1.0.0-dev.23", "description": "API for exporting an iModel's parts and also importing them into another iModel", - "main": "lib/cjs/transformer.js", - "typings": "lib/cjs/transformer", + "main": "lib/cjs/imodel-transformer.js", + "typings": "lib/cjs/imodel-transformer", "license": "MIT", "engines": { "node": "^18.0.0" @@ -16,11 +16,11 @@ "docs": "npm run -s docs:extract && npm run -s docs:reference && npm run -s docs:changelog", "docs:changelog": "cpx ./CHANGELOG.md ../../build/docs/reference/imodel-transformer", "# env var is workaround, need to contribute a better rush-less root-package.json detector to betools": "", - "docs:reference": "cross-env RUSHSTACK_FILE_ERROR_BASE_FOLDER='../..' betools docs --includes=../../build/docs/extract --json=../../build/docs/reference/imodel-transformer/file.json --tsIndexFile=transformer.ts --onlyJson", + "docs:reference": "cross-env RUSHSTACK_FILE_ERROR_BASE_FOLDER='../..' betools docs --includes=../../build/docs/extract --json=../../build/docs/reference/imodel-transformer/file.json --tsIndexFile=imodel-transformer.ts --onlyJson", "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", + "extract-api": "betools extract-api --entry=imodel-transformer --apiReportFolder=../../common/api --apiReportTempFolder=../../common/api/temp --apiSummaryFolder=../../common/api/summary", "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; diff --git a/packages/transformer/src/transformer.ts b/packages/transformer/src/imodel-transformer.ts similarity index 100% rename from packages/transformer/src/transformer.ts rename to packages/transformer/src/imodel-transformer.ts diff --git a/packages/transformer/src/test/standalone/IModelTransformerHub.test.ts b/packages/transformer/src/test/standalone/IModelTransformerHub.test.ts index 0b161565..814caa23 100644 --- a/packages/transformer/src/test/standalone/IModelTransformerHub.test.ts +++ b/packages/transformer/src/test/standalone/IModelTransformerHub.test.ts @@ -80,7 +80,7 @@ import { IModelTransformer, ProcessChangesOptions, TransformerLoggerCategory, -} from "../../transformer"; +} from "../../imodel-transformer"; import { CountingIModelImporter, HubWrappers,