@itwin/core-backend 5.8.0-dev.10 → 5.8.0-dev.12
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.
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +0 -3
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +2 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +2 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +57 -14
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.d.ts +8 -0
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
- package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
- package/lib/cjs/workspace/SettingsDb.js +19 -0
- package/lib/cjs/workspace/SettingsDb.js.map +1 -0
- package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
- package/lib/cjs/workspace/SettingsEditor.js +53 -0
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
- package/lib/cjs/workspace/Workspace.d.ts +42 -19
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +0 -3
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/core-backend.d.ts +2 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +2 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
- package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
- package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +57 -15
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +18 -0
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +160 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
- package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
- package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
- package/lib/esm/workspace/Settings.d.ts +8 -0
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.d.ts +109 -0
- package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
- package/lib/esm/workspace/SettingsDb.js +16 -0
- package/lib/esm/workspace/SettingsDb.js.map +1 -0
- package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
- package/lib/esm/workspace/SettingsEditor.js +50 -0
- package/lib/esm/workspace/SettingsEditor.js.map +1 -0
- package/lib/esm/workspace/Workspace.d.ts +42 -19
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js +19 -0
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +13 -13
|
@@ -72,6 +72,8 @@ export * from "./TxnManager";
|
|
|
72
72
|
export * from "./ViewDefinition";
|
|
73
73
|
export * from "./ViewStore";
|
|
74
74
|
export * from "./workspace/Settings";
|
|
75
|
+
export * from "./workspace/SettingsDb";
|
|
76
|
+
export * from "./workspace/SettingsEditor";
|
|
75
77
|
export * from "./workspace/SettingsSchemas";
|
|
76
78
|
export * from "./workspace/Workspace";
|
|
77
79
|
export * from "./workspace/WorkspaceEditor";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-backend.d.ts","sourceRoot":"","sources":["../../src/core-backend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core-backend.d.ts","sourceRoot":"","sources":["../../src/core-backend.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/core-backend.js
CHANGED
|
@@ -92,6 +92,8 @@ __exportStar(require("./TxnManager"), exports);
|
|
|
92
92
|
__exportStar(require("./ViewDefinition"), exports);
|
|
93
93
|
__exportStar(require("./ViewStore"), exports);
|
|
94
94
|
__exportStar(require("./workspace/Settings"), exports);
|
|
95
|
+
__exportStar(require("./workspace/SettingsDb"), exports);
|
|
96
|
+
__exportStar(require("./workspace/SettingsEditor"), exports);
|
|
95
97
|
__exportStar(require("./workspace/SettingsSchemas"), exports);
|
|
96
98
|
__exportStar(require("./workspace/Workspace"), exports);
|
|
97
99
|
__exportStar(require("./workspace/WorkspaceEditor"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-backend.js","sourceRoot":"","sources":["../../src/core-backend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,4EAA0D;AAC1D,8DAA4C;AAC5C,+DAA6C;AAC7C,sEAAoD;AACpD,uEAAqD;AACrD,kEAAgD;AAChD,gEAA8C;AAC9C,qDAAmC;AACnC,0DAAwC;AACxC,kDAAgC;AAChC,yDAAuC;AACvC,qDAAmC;AACnC,8CAA4B;AAC5B,6CAA2B;AAC3B,sDAAoC;AACpC,yDAAuC;AACvC,mDAAiC;AACjC,sDAAoC;AACpC,kDAAgC;AAChC,gDAA8B;AAC9B,gDAA8B;AAC9B,8CAA4B;AAC5B,6CAA2B;AAC3B,iDAA+B;AAC/B,+DAA6C;AAC7C,6DAA2C;AAC3C,4DAA0C;AAC1C,0DAAwC;AACxC,yCAAuB;AACvB,uDAAqC;AACrC,mDAAiC;AACjC,oDAAkC;AAClC,4CAA0B;AAC1B,kDAAgC;AAChC,oDAAkC;AAClC,sDAAoC;AACpC,2CAAyB;AACzB,qDAAmC;AACnC,mDAAiC;AACjC,mDAAiC;AACjC,6CAA2B;AAC3B,mDAAiC;AACjC,0DAAwC;AACxC,0DAAwC;AACxC,6CAA2B;AAC3B,kDAAgC;AAChC,8DAA4C;AAC5C,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,4CAA0B;AAC1B,8CAA4B;AAC5B,qDAAmC;AACnC,6CAA2B;AAC3B,gDAA8B;AAC9B,6CAA2B;AAC3B,0CAAwB;AACxB,qDAAmC;AACnC,+CAA6B;AAC7B,2DAAyC;AACzC,kDAAgC;AAChC,iDAA+B;AAC/B,gDAA8B;AAC9B,2CAAyB;AACzB,gDAA8B;AAC9B,+CAA6B;AAC7B,6CAA2B;AAC3B,oDAAkC;AAClC,4CAA0B;AAC1B,gDAA8B;AAC9B,+CAA6B;AAC7B,mDAAiC;AACjC,8CAA4B;AAC5B,uDAAqC;AACrC,8DAA4C;AAC5C,wDAAsC;AACtC,8DAA4C;AAC5C,0DAAwC;AACxC,uDAAqC;AAErC,2DAAyC;AAEzC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AACzE,IAAK,UAAkB,CAAC,uBAAuB,CAAC,EAAE,CAAC;IACjD,4DAA4D;IAC5D,MAAM,cAAc,GAAI,UAAkB,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC;IAE1E,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,sEAAsE;QACtE,yDAAyD;QACzD,8CAA8C;QAC9C,wDAAwD,CACzD,CAAC;IAEF,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,8BAA8B;IAE9B,MAAM,KAAK,CAAC;AACd,CAAC;KAAM,CAAC;IACL,UAAkB,CAAC,uBAAuB,CAAC,GAAG;QAC7C,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;IAGI;AAEJ;;;GAGG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;GAEG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nexport * from \"./annotations/ElementDrivesTextAnnotation\";\r\nexport * from \"./annotations/FrameGeometry\";\r\nexport * from \"./annotations/LeaderGeometry\";\r\nexport * from \"./annotations/TextAnnotationElement\";\r\nexport * from \"./annotations/TextAnnotationGeometry\";\r\nexport * from \"./annotations/TextBlockGeometry\";\r\nexport * from \"./annotations/TextBlockLayout\";\r\nexport * from \"./BackendHubAccess\";\r\nexport * from \"./BackendLoggerCategory\";\r\nexport * from \"./BisCoreSchema\";\r\nexport * from \"./BlobContainerService\";\r\nexport * from \"./BriefcaseManager\";\r\nexport * from \"./CatalogDb\";\r\nexport * from \"./Category\";\r\nexport * from \"./ChangedElementsDb\";\r\nexport * from \"./ChangeSummaryManager\";\r\nexport * from \"./ChannelControl\";\r\nexport * from \"./CheckpointManager\";\r\nexport * from \"./ClassRegistry\";\r\nexport * from \"./CloudSqlite\";\r\nexport * from \"./CodeService\";\r\nexport * from \"./CodeSpecs\";\r\nexport * from \"./DevTools\";\r\nexport * from \"./DisplayStyle\";\r\nexport * from \"./domains/FunctionalElements\";\r\nexport * from \"./domains/FunctionalSchema\";\r\nexport * from \"./domains/GenericElements\";\r\nexport * from \"./domains/GenericSchema\";\r\nexport * from \"./ECDb\";\r\nexport * from \"./ECSchemaXmlContext\";\r\nexport * from \"./ECSqlStatement\";\r\nexport * from \"./ECSqlSyncReader\";\r\nexport * from \"./Element\";\r\nexport * from \"./ElementAspect\";\r\nexport * from \"./ElementGraphics\";\r\nexport * from \"./ElementTreeWalker\";\r\nexport * from \"./Entity\";\r\nexport * from \"./EntityReferences\";\r\nexport * from \"./ExportGraphics\";\r\nexport * from \"./ExternalSource\";\r\nexport * from \"./FontFile\";\r\nexport * from \"./GeoCoordConfig\";\r\nexport * from \"./GeographicCRSServices\";\r\nexport * from \"./ImageSourceConversion\";\r\nexport * from \"./IModelDb\";\r\nexport * from \"./IModelDbFonts\";\r\nexport * from \"./IModelElementCloneContext\";\r\nexport * from \"./IModelHost\";\r\nexport * from \"./IModelJsFs\";\r\nexport * from \"./SchemaSync\";\r\nexport * from \"./IpcHost\";\r\nexport * from \"./LineStyle\";\r\nexport * from \"./LocalhostIpcHost\";\r\nexport * from \"./LocalHub\";\r\nexport * from \"./LockControl\";\r\nexport * from \"./Material\";\r\nexport * from \"./Model\";\r\nexport * from \"./NativeAppStorage\";\r\nexport * from \"./NativeHost\";\r\nexport * from \"./NavigationRelationship\";\r\nexport * from \"./PropertyStore\";\r\nexport * from \"./Relationship\";\r\nexport * from \"./rpc/tracing\";\r\nexport * from \"./Schema\";\r\nexport * from \"./SchemaUtils\";\r\nexport * from \"./SheetIndex\";\r\nexport * from \"./SQLiteDb\";\r\nexport * from \"./SqliteStatement\";\r\nexport * from \"./Texture\";\r\nexport * from \"./TileStorage\";\r\nexport * from \"./TxnManager\";\r\nexport * from \"./ViewDefinition\";\r\nexport * from \"./ViewStore\";\r\nexport * from \"./workspace/Settings\";\r\nexport * from \"./workspace/SettingsSchemas\";\r\nexport * from \"./workspace/Workspace\";\r\nexport * from \"./workspace/WorkspaceEditor\";\r\nexport * from \"./SqliteChangesetReader\";\r\nexport * from \"./ChangesetECAdaptor\";\r\n\r\nexport * from \"./internal/cross-package\";\r\n\r\nconst globalSymbolCoreBackend = Symbol.for(\"itwin.core.backend.globals\");\r\nif ((globalThis as any)[globalSymbolCoreBackend]) {\r\n // Get the stack trace from when the module was first loaded\r\n const firstLoadStack = (globalThis as any)[globalSymbolCoreBackend].stack;\r\n\r\n const error = new Error(\r\n \"Multiple @itwin/core-backend imports detected! This may happen if:\\n\" +\r\n \"- You have multiple versions of the package installed\\n\" +\r\n \"- Your bundling configuration is incorrect\\n\" +\r\n \"- You're importing from both ESM and CommonJS versions\"\r\n );\r\n\r\n /* eslint-disable no-console */\r\n console.error(\"Duplicate @itwin/core-backend import:\", error);\r\n console.error(\"First import occurred at:\", firstLoadStack);\r\n console.error(\"Current import occurred at:\", error.stack);\r\n /* eslint-enable no-console */\r\n\r\n throw error;\r\n} else {\r\n (globalThis as any)[globalSymbolCoreBackend] = {\r\n stack: new Error().stack,\r\n };\r\n}\r\n\r\n/** @docs-package-description\r\n * The core-backend package always runs on the computer with a local Briefcase.\r\n *\r\n * It contains classes that [backend code]($docs/learning/backend/index.md) can use to work with directly with iModels.\r\n */\r\n\r\n/**\r\n * @docs-group-description BlobContainers\r\n * Classes for working with cloud-based blob containers.\r\n */\r\n\r\n/**\r\n * @docs-group-description Codes\r\n * Classes for working with [Codes]($docs/BIS/guide/fundamentals/codes.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description ECDb\r\n * Classes for working with ECDb.\r\n */\r\n\r\n/**\r\n * @docs-group-description ECSQL\r\n * Classes for working with [ECSQL]($docs/learning/ECSQL.md)\r\n */\r\n\r\n/**\r\n * @docs-group-description ElementAspects\r\n * Subclasses of [ElementAspects]($docs/bis/guide/fundamentals/elementaspect-fundamentals.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description ElementGeometry\r\n * Classes for defining the symbology and geometry of geometric elements\r\n */\r\n\r\n/**\r\n * @docs-group-description Elements\r\n * Subclasses of [Elements]($docs/BIS/guide/fundamentals/element-fundamentals.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description ExportGraphics\r\n * APIs for producing low-level graphics primitives from element geometry.\r\n */\r\n\r\n/**\r\n * @docs-group-description HubAccess\r\n * APIs for working with IModelHub\r\n */\r\n\r\n/**\r\n * @docs-group-description Images\r\n * APIs for encoding and decoding images\r\n */\r\n\r\n/**\r\n * @docs-group-description IModelHost\r\n * Classes for configuring and administering the backend [host]($docs/learning/backend/IModelHost.md).\r\n * See [the learning article]($docs/learning/backend/IModelHost.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description iModels\r\n * Classes for working with [iModels]($docs/learning/iModels.md).\r\n * See [the learning article]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description Logging\r\n * Logger categories used by this package.\r\n */\r\n\r\n/**\r\n * @docs-group-description Models\r\n * Subclasses of [Models]($docs/BIS/guide/fundamentals/model-fundamentals.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description NativeApp\r\n * Classes for working with Mobile/Desktop Application.\r\n */\r\n\r\n/**\r\n * @docs-group-description Portability\r\n */\r\n\r\n/**\r\n * @docs-group-description Relationships\r\n * Classes that describe the [relationships]($docs/bis/guide/fundamentals/relationship-fundamentals.md) between elements.\r\n */\r\n\r\n/**\r\n * @docs-group-description RpcInterface\r\n * Classes for working with [RpcInterfaces]($docs/learning/RpcInterface.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description Schema\r\n * Classes for working with [ECSchemas]($docs/learning/backend/SchemasAndElementsInTypeScript.md)\r\n */\r\n\r\n/**\r\n * @docs-group-description SQLite\r\n * Classes for working directly with SQLite\r\n */\r\n\r\n/**\r\n * @docs-group-description SQLiteDb\r\n * Classes for working with SQLiteDb.\r\n */\r\n\r\n/**\r\n * @docs-group-description TileStorage\r\n * Class for working with cloud storage using iTwin/object-storage cloud providers\r\n */\r\n\r\n/**\r\n * @docs-group-description ViewDefinitions\r\n * Classes for working with Elements that define what appears in [Views]($docs/learning/frontend/views.md).\r\n * See [the learning articles]($docs/learning/backend/createelements/#orthographicviewdefinition).\r\n */\r\n\r\n/**\r\n * @docs-group-description Workspace\r\n * APIs for loading and using Settings and Workspace resources\r\n */\r\n"]}
|
|
1
|
+
{"version":3,"file":"core-backend.js","sourceRoot":"","sources":["../../src/core-backend.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nexport * from \"./annotations/ElementDrivesTextAnnotation\";\r\nexport * from \"./annotations/FrameGeometry\";\r\nexport * from \"./annotations/LeaderGeometry\";\r\nexport * from \"./annotations/TextAnnotationElement\";\r\nexport * from \"./annotations/TextAnnotationGeometry\";\r\nexport * from \"./annotations/TextBlockGeometry\";\r\nexport * from \"./annotations/TextBlockLayout\";\r\nexport * from \"./BackendHubAccess\";\r\nexport * from \"./BackendLoggerCategory\";\r\nexport * from \"./BisCoreSchema\";\r\nexport * from \"./BlobContainerService\";\r\nexport * from \"./BriefcaseManager\";\r\nexport * from \"./CatalogDb\";\r\nexport * from \"./Category\";\r\nexport * from \"./ChangedElementsDb\";\r\nexport * from \"./ChangeSummaryManager\";\r\nexport * from \"./ChannelControl\";\r\nexport * from \"./CheckpointManager\";\r\nexport * from \"./ClassRegistry\";\r\nexport * from \"./CloudSqlite\";\r\nexport * from \"./CodeService\";\r\nexport * from \"./CodeSpecs\";\r\nexport * from \"./DevTools\";\r\nexport * from \"./DisplayStyle\";\r\nexport * from \"./domains/FunctionalElements\";\r\nexport * from \"./domains/FunctionalSchema\";\r\nexport * from \"./domains/GenericElements\";\r\nexport * from \"./domains/GenericSchema\";\r\nexport * from \"./ECDb\";\r\nexport * from \"./ECSchemaXmlContext\";\r\nexport * from \"./ECSqlStatement\";\r\nexport * from \"./ECSqlSyncReader\";\r\nexport * from \"./Element\";\r\nexport * from \"./ElementAspect\";\r\nexport * from \"./ElementGraphics\";\r\nexport * from \"./ElementTreeWalker\";\r\nexport * from \"./Entity\";\r\nexport * from \"./EntityReferences\";\r\nexport * from \"./ExportGraphics\";\r\nexport * from \"./ExternalSource\";\r\nexport * from \"./FontFile\";\r\nexport * from \"./GeoCoordConfig\";\r\nexport * from \"./GeographicCRSServices\";\r\nexport * from \"./ImageSourceConversion\";\r\nexport * from \"./IModelDb\";\r\nexport * from \"./IModelDbFonts\";\r\nexport * from \"./IModelElementCloneContext\";\r\nexport * from \"./IModelHost\";\r\nexport * from \"./IModelJsFs\";\r\nexport * from \"./SchemaSync\";\r\nexport * from \"./IpcHost\";\r\nexport * from \"./LineStyle\";\r\nexport * from \"./LocalhostIpcHost\";\r\nexport * from \"./LocalHub\";\r\nexport * from \"./LockControl\";\r\nexport * from \"./Material\";\r\nexport * from \"./Model\";\r\nexport * from \"./NativeAppStorage\";\r\nexport * from \"./NativeHost\";\r\nexport * from \"./NavigationRelationship\";\r\nexport * from \"./PropertyStore\";\r\nexport * from \"./Relationship\";\r\nexport * from \"./rpc/tracing\";\r\nexport * from \"./Schema\";\r\nexport * from \"./SchemaUtils\";\r\nexport * from \"./SheetIndex\";\r\nexport * from \"./SQLiteDb\";\r\nexport * from \"./SqliteStatement\";\r\nexport * from \"./Texture\";\r\nexport * from \"./TileStorage\";\r\nexport * from \"./TxnManager\";\r\nexport * from \"./ViewDefinition\";\r\nexport * from \"./ViewStore\";\r\nexport * from \"./workspace/Settings\";\r\nexport * from \"./workspace/SettingsDb\";\r\nexport * from \"./workspace/SettingsEditor\";\r\nexport * from \"./workspace/SettingsSchemas\";\r\nexport * from \"./workspace/Workspace\";\r\nexport * from \"./workspace/WorkspaceEditor\";\r\nexport * from \"./SqliteChangesetReader\";\r\nexport * from \"./ChangesetECAdaptor\";\r\n\r\nexport * from \"./internal/cross-package\";\r\n\r\nconst globalSymbolCoreBackend = Symbol.for(\"itwin.core.backend.globals\");\r\nif ((globalThis as any)[globalSymbolCoreBackend]) {\r\n // Get the stack trace from when the module was first loaded\r\n const firstLoadStack = (globalThis as any)[globalSymbolCoreBackend].stack;\r\n\r\n const error = new Error(\r\n \"Multiple @itwin/core-backend imports detected! This may happen if:\\n\" +\r\n \"- You have multiple versions of the package installed\\n\" +\r\n \"- Your bundling configuration is incorrect\\n\" +\r\n \"- You're importing from both ESM and CommonJS versions\"\r\n );\r\n\r\n /* eslint-disable no-console */\r\n console.error(\"Duplicate @itwin/core-backend import:\", error);\r\n console.error(\"First import occurred at:\", firstLoadStack);\r\n console.error(\"Current import occurred at:\", error.stack);\r\n /* eslint-enable no-console */\r\n\r\n throw error;\r\n} else {\r\n (globalThis as any)[globalSymbolCoreBackend] = {\r\n stack: new Error().stack,\r\n };\r\n}\r\n\r\n/** @docs-package-description\r\n * The core-backend package always runs on the computer with a local Briefcase.\r\n *\r\n * It contains classes that [backend code]($docs/learning/backend/index.md) can use to work with directly with iModels.\r\n */\r\n\r\n/**\r\n * @docs-group-description BlobContainers\r\n * Classes for working with cloud-based blob containers.\r\n */\r\n\r\n/**\r\n * @docs-group-description Codes\r\n * Classes for working with [Codes]($docs/BIS/guide/fundamentals/codes.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description ECDb\r\n * Classes for working with ECDb.\r\n */\r\n\r\n/**\r\n * @docs-group-description ECSQL\r\n * Classes for working with [ECSQL]($docs/learning/ECSQL.md)\r\n */\r\n\r\n/**\r\n * @docs-group-description ElementAspects\r\n * Subclasses of [ElementAspects]($docs/bis/guide/fundamentals/elementaspect-fundamentals.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description ElementGeometry\r\n * Classes for defining the symbology and geometry of geometric elements\r\n */\r\n\r\n/**\r\n * @docs-group-description Elements\r\n * Subclasses of [Elements]($docs/BIS/guide/fundamentals/element-fundamentals.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description ExportGraphics\r\n * APIs for producing low-level graphics primitives from element geometry.\r\n */\r\n\r\n/**\r\n * @docs-group-description HubAccess\r\n * APIs for working with IModelHub\r\n */\r\n\r\n/**\r\n * @docs-group-description Images\r\n * APIs for encoding and decoding images\r\n */\r\n\r\n/**\r\n * @docs-group-description IModelHost\r\n * Classes for configuring and administering the backend [host]($docs/learning/backend/IModelHost.md).\r\n * See [the learning article]($docs/learning/backend/IModelHost.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description iModels\r\n * Classes for working with [iModels]($docs/learning/iModels.md).\r\n * See [the learning article]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description Logging\r\n * Logger categories used by this package.\r\n */\r\n\r\n/**\r\n * @docs-group-description Models\r\n * Subclasses of [Models]($docs/BIS/guide/fundamentals/model-fundamentals.md).\r\n * See [the learning articles]($docs/learning/backend/index.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description NativeApp\r\n * Classes for working with Mobile/Desktop Application.\r\n */\r\n\r\n/**\r\n * @docs-group-description Portability\r\n */\r\n\r\n/**\r\n * @docs-group-description Relationships\r\n * Classes that describe the [relationships]($docs/bis/guide/fundamentals/relationship-fundamentals.md) between elements.\r\n */\r\n\r\n/**\r\n * @docs-group-description RpcInterface\r\n * Classes for working with [RpcInterfaces]($docs/learning/RpcInterface.md).\r\n */\r\n\r\n/**\r\n * @docs-group-description Schema\r\n * Classes for working with [ECSchemas]($docs/learning/backend/SchemasAndElementsInTypeScript.md)\r\n */\r\n\r\n/**\r\n * @docs-group-description SQLite\r\n * Classes for working directly with SQLite\r\n */\r\n\r\n/**\r\n * @docs-group-description SQLiteDb\r\n * Classes for working with SQLiteDb.\r\n */\r\n\r\n/**\r\n * @docs-group-description TileStorage\r\n * Class for working with cloud storage using iTwin/object-storage cloud providers\r\n */\r\n\r\n/**\r\n * @docs-group-description ViewDefinitions\r\n * Classes for working with Elements that define what appears in [Views]($docs/learning/frontend/views.md).\r\n * See [the learning articles]($docs/learning/backend/createelements/#orthographicviewdefinition).\r\n */\r\n\r\n/**\r\n * @docs-group-description Workspace\r\n * APIs for loading and using Settings and Workspace resources\r\n */\r\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Workspace
|
|
3
|
+
*/
|
|
4
|
+
import { FilePropertyProps } from "@itwin/core-common";
|
|
5
|
+
import { Setting, SettingName, SettingsContainer, SettingsPriority } from "../../workspace/Settings";
|
|
6
|
+
import { CloudSqliteContainer, WorkspaceDbName } from "../../workspace/Workspace";
|
|
7
|
+
import { SettingsDb, SettingsDbManifest, SettingsDbProps } from "../../workspace/SettingsDb";
|
|
8
|
+
import { WorkspaceSqliteDb } from "./WorkspaceSqliteDb";
|
|
9
|
+
import { _implementationProhibited } from "../Symbols";
|
|
10
|
+
export declare const settingsDbDefaultName: WorkspaceDbName;
|
|
11
|
+
export declare const settingsManifestProperty: FilePropertyProps;
|
|
12
|
+
/** Internal implementation of [[SettingsDb]]. Wraps a [[WorkspaceSqliteDb]] to provide a
|
|
13
|
+
* settings-only read interface over the `strings` table.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SettingsDbImpl implements SettingsDb {
|
|
16
|
+
readonly [_implementationProhibited]: undefined;
|
|
17
|
+
readonly sqliteDb: WorkspaceSqliteDb;
|
|
18
|
+
readonly dbName: string;
|
|
19
|
+
readonly dbFileName: string;
|
|
20
|
+
protected readonly _container: CloudSqliteContainer;
|
|
21
|
+
readonly priority: SettingsPriority;
|
|
22
|
+
protected _manifest?: SettingsDbManifest;
|
|
23
|
+
constructor(props: SettingsDbProps, container: CloudSqliteContainer, priority: SettingsPriority);
|
|
24
|
+
get container(): CloudSqliteContainer;
|
|
25
|
+
get isOpen(): boolean;
|
|
26
|
+
get version(): string;
|
|
27
|
+
get manifest(): SettingsDbManifest;
|
|
28
|
+
/** Check whether the underlying database has a settings manifest property.
|
|
29
|
+
* Used to validate that a container actually holds a SettingsDb rather than a WorkspaceDb.
|
|
30
|
+
*/
|
|
31
|
+
get hasSettingsManifestProperty(): boolean;
|
|
32
|
+
protected withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T;
|
|
33
|
+
open(): void;
|
|
34
|
+
close(): void;
|
|
35
|
+
getSettings(): SettingsContainer;
|
|
36
|
+
getSetting<T extends Setting>(settingName: SettingName): T | undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=SettingsDbImpl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsDbImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsDbImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAwB,MAAM,4BAA4B,CAAC;AACnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAa,MAAM,YAAY,CAAC;AAElE,eAAO,MAAM,qBAAqB,EAAE,eAA+B,CAAC;AAEpE,eAAO,MAAM,wBAAwB,EAAE,iBAA+D,CAAC;AAEvG;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,CAAC,yBAAyB,CAAC,YAAa;IACxD,SAAgB,QAAQ,oBAA2B;IACnD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IACpD,SAAgB,QAAQ,EAAE,gBAAgB,CAAC;IAC3C,SAAS,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;gBAEtB,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE,gBAAgB;IAQtG,IAAW,SAAS,IAAI,oBAAoB,CAA4B;IACxE,IAAW,MAAM,YAAmC;IAEpD,IAAW,OAAO,IAAI,MAAM,CAK3B;IAED,IAAW,QAAQ,IAAI,kBAAkB,CAWxC;IAED;;OAEG;IACH,IAAW,2BAA2B,IAAI,OAAO,CAKhD;IAED,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,CAAC,GAAG,CAAC;IAS5D,IAAI,IAAI,IAAI;IAIZ,KAAK,IAAI,IAAI;IAKb,WAAW,IAAI,iBAAiB;IAgBhC,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS;CAO9E"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module Workspace
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SettingsDbImpl = exports.settingsManifestProperty = exports.settingsDbDefaultName = void 0;
|
|
11
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
|
+
const CloudSqlite_1 = require("../../CloudSqlite");
|
|
13
|
+
const Settings_1 = require("../../workspace/Settings");
|
|
14
|
+
const SettingsDb_1 = require("../../workspace/SettingsDb");
|
|
15
|
+
const WorkspaceSqliteDb_1 = require("./WorkspaceSqliteDb");
|
|
16
|
+
const Symbols_1 = require("../Symbols");
|
|
17
|
+
exports.settingsDbDefaultName = "settings-db";
|
|
18
|
+
exports.settingsManifestProperty = { namespace: "settings", name: "manifest" };
|
|
19
|
+
/** Internal implementation of [[SettingsDb]]. Wraps a [[WorkspaceSqliteDb]] to provide a
|
|
20
|
+
* settings-only read interface over the `strings` table.
|
|
21
|
+
*/
|
|
22
|
+
class SettingsDbImpl {
|
|
23
|
+
[Symbols_1._implementationProhibited] = undefined;
|
|
24
|
+
sqliteDb = new WorkspaceSqliteDb_1.WorkspaceSqliteDb();
|
|
25
|
+
dbName;
|
|
26
|
+
dbFileName;
|
|
27
|
+
_container;
|
|
28
|
+
priority;
|
|
29
|
+
_manifest;
|
|
30
|
+
constructor(props, container, priority) {
|
|
31
|
+
this.dbName = props.dbName ?? exports.settingsDbDefaultName;
|
|
32
|
+
CloudSqlite_1.CloudSqlite.validateDbName(this.dbName);
|
|
33
|
+
this._container = container;
|
|
34
|
+
this.dbFileName = container.resolveDbFileName(props);
|
|
35
|
+
this.priority = priority;
|
|
36
|
+
}
|
|
37
|
+
get container() { return this._container; }
|
|
38
|
+
get isOpen() { return this.sqliteDb.isOpen; }
|
|
39
|
+
get version() {
|
|
40
|
+
const cloudContainer = this.container.cloudContainer;
|
|
41
|
+
if (undefined === cloudContainer)
|
|
42
|
+
return "0.0.0";
|
|
43
|
+
return CloudSqlite_1.CloudSqlite.parseDbFileName(this.dbFileName).version;
|
|
44
|
+
}
|
|
45
|
+
get manifest() {
|
|
46
|
+
return this._manifest ??= this.withOpenDb((db) => {
|
|
47
|
+
const manifestJson = db[Symbols_1._nativeDb].queryFileProperty(exports.settingsManifestProperty, true);
|
|
48
|
+
if (!manifestJson)
|
|
49
|
+
return { settingsName: this.dbName };
|
|
50
|
+
try {
|
|
51
|
+
return JSON.parse(manifestJson);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
throw new Error(`Failed to parse manifest in SettingsDb "${this.dbName}": ${e instanceof Error ? e.message : String(e)}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Check whether the underlying database has a settings manifest property.
|
|
59
|
+
* Used to validate that a container actually holds a SettingsDb rather than a WorkspaceDb.
|
|
60
|
+
*/
|
|
61
|
+
get hasSettingsManifestProperty() {
|
|
62
|
+
return this.withOpenDb((db) => {
|
|
63
|
+
const manifestJson = db[Symbols_1._nativeDb].queryFileProperty(exports.settingsManifestProperty, true);
|
|
64
|
+
return manifestJson !== undefined;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
withOpenDb(operation) {
|
|
68
|
+
const done = this.isOpen ? () => { } : (this.open(), () => this.close());
|
|
69
|
+
try {
|
|
70
|
+
return operation(this.sqliteDb);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
done();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
open() {
|
|
77
|
+
this.sqliteDb.openDb(this.dbFileName, core_bentley_1.OpenMode.Readonly, this._container.cloudContainer);
|
|
78
|
+
}
|
|
79
|
+
close() {
|
|
80
|
+
if (this.isOpen)
|
|
81
|
+
this.sqliteDb.closeDb();
|
|
82
|
+
}
|
|
83
|
+
getSettings() {
|
|
84
|
+
return this.withOpenDb((db) => {
|
|
85
|
+
return db.withSqliteStatement("SELECT value FROM strings WHERE id=?", (stmt) => {
|
|
86
|
+
stmt.bindString(1, SettingsDb_1.settingsResourceName);
|
|
87
|
+
if (core_bentley_1.DbResult.BE_SQLITE_ROW !== stmt.step())
|
|
88
|
+
return {};
|
|
89
|
+
try {
|
|
90
|
+
// JSON.parse already returns a fresh object tree — no explicit clone needed.
|
|
91
|
+
return JSON.parse(stmt.getValueString(0));
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
throw new Error(`Failed to parse settings in SettingsDb "${this.dbName}": ${e instanceof Error ? e.message : String(e)}`);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
getSetting(settingName) {
|
|
100
|
+
const settings = this.getSettings();
|
|
101
|
+
if (!Object.hasOwn(settings, settingName))
|
|
102
|
+
return undefined;
|
|
103
|
+
const value = settings[settingName];
|
|
104
|
+
return value !== undefined ? Settings_1.Setting.clone(value) : undefined;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.SettingsDbImpl = SettingsDbImpl;
|
|
108
|
+
//# sourceMappingURL=SettingsDbImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsDbImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsDbImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Workspace\r\n */\r\n\r\nimport { DbResult, OpenMode } from \"@itwin/core-bentley\";\r\nimport { FilePropertyProps } from \"@itwin/core-common\";\r\nimport { CloudSqlite } from \"../../CloudSqlite\";\r\nimport { Setting, SettingName, SettingsContainer, SettingsPriority } from \"../../workspace/Settings\";\r\nimport { CloudSqliteContainer, WorkspaceDbName } from \"../../workspace/Workspace\";\r\nimport { SettingsDb, SettingsDbManifest, SettingsDbProps, settingsResourceName } from \"../../workspace/SettingsDb\";\r\nimport { WorkspaceSqliteDb } from \"./WorkspaceSqliteDb\";\r\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\r\n\r\nexport const settingsDbDefaultName: WorkspaceDbName = \"settings-db\";\r\n\r\nexport const settingsManifestProperty: FilePropertyProps = { namespace: \"settings\", name: \"manifest\" };\r\n\r\n/** Internal implementation of [[SettingsDb]]. Wraps a [[WorkspaceSqliteDb]] to provide a\r\n * settings-only read interface over the `strings` table.\r\n */\r\nexport class SettingsDbImpl implements SettingsDb {\r\n public readonly [_implementationProhibited] = undefined;\r\n public readonly sqliteDb = new WorkspaceSqliteDb();\r\n public readonly dbName: string;\r\n public readonly dbFileName: string;\r\n protected readonly _container: CloudSqliteContainer;\r\n public readonly priority: SettingsPriority;\r\n protected _manifest?: SettingsDbManifest;\r\n\r\n public constructor(props: SettingsDbProps, container: CloudSqliteContainer, priority: SettingsPriority) {\r\n this.dbName = props.dbName ?? settingsDbDefaultName;\r\n CloudSqlite.validateDbName(this.dbName);\r\n this._container = container;\r\n this.dbFileName = container.resolveDbFileName(props);\r\n this.priority = priority;\r\n }\r\n\r\n public get container(): CloudSqliteContainer { return this._container; }\r\n public get isOpen() { return this.sqliteDb.isOpen; }\r\n\r\n public get version(): string {\r\n const cloudContainer = this.container.cloudContainer;\r\n if (undefined === cloudContainer)\r\n return \"0.0.0\";\r\n return CloudSqlite.parseDbFileName(this.dbFileName).version;\r\n }\r\n\r\n public get manifest(): SettingsDbManifest {\r\n return this._manifest ??= this.withOpenDb((db) => {\r\n const manifestJson = db[_nativeDb].queryFileProperty(settingsManifestProperty, true) as string | undefined;\r\n if (!manifestJson)\r\n return { settingsName: this.dbName };\r\n try {\r\n return JSON.parse(manifestJson);\r\n } catch (e) {\r\n throw new Error(`Failed to parse manifest in SettingsDb \"${this.dbName}\": ${e instanceof Error ? e.message : String(e)}`);\r\n }\r\n });\r\n }\r\n\r\n /** Check whether the underlying database has a settings manifest property.\r\n * Used to validate that a container actually holds a SettingsDb rather than a WorkspaceDb.\r\n */\r\n public get hasSettingsManifestProperty(): boolean {\r\n return this.withOpenDb((db) => {\r\n const manifestJson = db[_nativeDb].queryFileProperty(settingsManifestProperty, true) as string | undefined;\r\n return manifestJson !== undefined;\r\n });\r\n }\r\n\r\n protected withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T {\r\n const done = this.isOpen ? () => { } : (this.open(), () => this.close());\r\n try {\r\n return operation(this.sqliteDb);\r\n } finally {\r\n done();\r\n }\r\n }\r\n\r\n public open(): void {\r\n this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);\r\n }\r\n\r\n public close(): void {\r\n if (this.isOpen)\r\n this.sqliteDb.closeDb();\r\n }\r\n\r\n public getSettings(): SettingsContainer {\r\n return this.withOpenDb((db) => {\r\n return db.withSqliteStatement(\"SELECT value FROM strings WHERE id=?\", (stmt) => {\r\n stmt.bindString(1, settingsResourceName);\r\n if (DbResult.BE_SQLITE_ROW !== stmt.step())\r\n return {};\r\n try {\r\n // JSON.parse already returns a fresh object tree — no explicit clone needed.\r\n return JSON.parse(stmt.getValueString(0));\r\n } catch (e) {\r\n throw new Error(`Failed to parse settings in SettingsDb \"${this.dbName}\": ${e instanceof Error ? e.message : String(e)}`);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public getSetting<T extends Setting>(settingName: SettingName): T | undefined {\r\n const settings = this.getSettings();\r\n if (!Object.hasOwn(settings, settingName))\r\n return undefined;\r\n const value = settings[settingName] as T | undefined;\r\n return value !== undefined ? Setting.clone(value) : undefined;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Workspace
|
|
3
|
+
*/
|
|
4
|
+
import { type SettingsEditor } from "../../workspace/SettingsEditor";
|
|
5
|
+
/** Construct a new [[SettingsEditor]]. Called by the [[SettingsEditor]] namespace. */
|
|
6
|
+
export declare function constructSettingsEditor(): SettingsEditor;
|
|
7
|
+
//# sourceMappingURL=SettingsEditorImpl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsEditorImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsEditorImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,OAAO,EAEyB,KAAK,cAAc,EAElD,MAAM,gCAAgC,CAAC;AAWxC,sFAAsF;AACtF,wBAAgB,uBAAuB,IAAI,cAAc,CAExD"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module Workspace
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.constructSettingsEditor = constructSettingsEditor;
|
|
11
|
+
const fs = require("fs-extra");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
14
|
+
const core_common_1 = require("@itwin/core-common");
|
|
15
|
+
const CloudSqlite_1 = require("../../CloudSqlite");
|
|
16
|
+
const IModelHost_1 = require("../../IModelHost");
|
|
17
|
+
const Settings_1 = require("../../workspace/Settings");
|
|
18
|
+
const SettingsDb_1 = require("../../workspace/SettingsDb");
|
|
19
|
+
const SettingsEditor_1 = require("../../workspace/SettingsEditor");
|
|
20
|
+
const BlobContainerService_1 = require("../../BlobContainerService");
|
|
21
|
+
const SettingsDbImpl_1 = require("./SettingsDbImpl");
|
|
22
|
+
const SettingsSqliteDb_1 = require("./SettingsSqliteDb");
|
|
23
|
+
const WorkspaceImpl_1 = require("./WorkspaceImpl");
|
|
24
|
+
const Symbols_1 = require("../Symbols");
|
|
25
|
+
const SettingsImpl_1 = require("./SettingsImpl");
|
|
26
|
+
const IModelJsFs_1 = require("../../IModelJsFs");
|
|
27
|
+
const settingsEditorName = "SettingsEditor";
|
|
28
|
+
/** Construct a new [[SettingsEditor]]. Called by the [[SettingsEditor]] namespace. */
|
|
29
|
+
function constructSettingsEditor() {
|
|
30
|
+
return new SettingsEditorImpl();
|
|
31
|
+
}
|
|
32
|
+
class SettingsEditorImpl {
|
|
33
|
+
[Symbols_1._implementationProhibited] = undefined;
|
|
34
|
+
_workspace;
|
|
35
|
+
_containers = new Map();
|
|
36
|
+
constructor() {
|
|
37
|
+
this._workspace = (0, WorkspaceImpl_1.constructSettingsEditorWorkspace)(new SettingsImpl_1.SettingsImpl(), { containerDir: (0, path_1.join)(IModelHost_1.IModelHost.cacheDir, settingsEditorName) });
|
|
38
|
+
}
|
|
39
|
+
get workspace() { return this._workspace; }
|
|
40
|
+
async initializeContainer(args) {
|
|
41
|
+
class CloudAccess extends CloudSqlite_1.CloudSqlite.DbAccess {
|
|
42
|
+
static _cacheName = settingsEditorName;
|
|
43
|
+
static async initializeSettings(initArgs) {
|
|
44
|
+
const props = await this.createBlobContainer({ scope: initArgs.scope, metadata: { ...initArgs.metadata, containerType: "settings" } });
|
|
45
|
+
const dbFullName = CloudSqlite_1.CloudSqlite.makeSemverName(initArgs.dbName ?? SettingsDbImpl_1.settingsDbDefaultName, "0.0.0");
|
|
46
|
+
await super._initializeDb({ ...initArgs, props, dbName: dbFullName, dbType: SettingsSqliteDb_1.SettingsSqliteDb, blockSize: "4M" });
|
|
47
|
+
return props;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return CloudAccess.initializeSettings(args);
|
|
51
|
+
}
|
|
52
|
+
async createNewCloudContainer(args) {
|
|
53
|
+
const cloudContainer = await this.initializeContainer(args);
|
|
54
|
+
const userToken = await IModelHost_1.IModelHost.authorizationClient?.getAccessToken();
|
|
55
|
+
const accessToken = await CloudSqlite_1.CloudSqlite.requestToken({ ...cloudContainer, accessLevel: "write", userToken });
|
|
56
|
+
return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });
|
|
57
|
+
}
|
|
58
|
+
getContainer(args) {
|
|
59
|
+
const existing = this._containers.get(args.containerId);
|
|
60
|
+
if (existing)
|
|
61
|
+
return existing;
|
|
62
|
+
const baseContainer = this._workspace.getContainer(args);
|
|
63
|
+
const editable = new EditableSettingsContainerImpl(baseContainer);
|
|
64
|
+
this._containers.set(args.containerId, editable);
|
|
65
|
+
return editable;
|
|
66
|
+
}
|
|
67
|
+
async getContainerAsync(props) {
|
|
68
|
+
let accessToken = props.accessToken;
|
|
69
|
+
if (undefined === accessToken && props.baseUri !== "")
|
|
70
|
+
accessToken = await CloudSqlite_1.CloudSqlite.requestToken({ ...props, accessLevel: "write" });
|
|
71
|
+
return this.getContainer({ ...props, accessToken: accessToken ?? "" });
|
|
72
|
+
}
|
|
73
|
+
async findContainers(args) {
|
|
74
|
+
const containers = await SettingsEditor_1.SettingsEditor.queryContainers(args);
|
|
75
|
+
const userToken = await IModelHost_1.IModelHost.getAccessToken();
|
|
76
|
+
const results = [];
|
|
77
|
+
for (const containerMeta of containers) {
|
|
78
|
+
// queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
80
|
+
const tokenProps = await BlobContainerService_1.BlobContainer.service.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: "write" });
|
|
81
|
+
results.push(this.getContainer({
|
|
82
|
+
containerId: containerMeta.containerId,
|
|
83
|
+
baseUri: tokenProps.baseUri,
|
|
84
|
+
storageType: tokenProps.provider,
|
|
85
|
+
accessToken: tokenProps.token,
|
|
86
|
+
writeable: true,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
close() {
|
|
92
|
+
const errors = [];
|
|
93
|
+
for (const [_, container] of this._containers) {
|
|
94
|
+
try {
|
|
95
|
+
container.cleanup();
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
errors.push(e);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
this._containers.clear();
|
|
102
|
+
try {
|
|
103
|
+
this._workspace.close();
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
errors.push(e);
|
|
107
|
+
}
|
|
108
|
+
if (errors.length === 1)
|
|
109
|
+
throw errors[0];
|
|
110
|
+
if (errors.length > 1)
|
|
111
|
+
throw new Error(`SettingsEditor.close() encountered ${errors.length} errors: ${errors.map((e) => e instanceof Error ? e.message : String(e)).join("; ")}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
class EditableSettingsContainerImpl {
|
|
115
|
+
[Symbols_1._implementationProhibited] = undefined;
|
|
116
|
+
_inner;
|
|
117
|
+
_settingsDbs = new Map();
|
|
118
|
+
writeLockHeldBy;
|
|
119
|
+
constructor(inner) {
|
|
120
|
+
this._inner = inner;
|
|
121
|
+
}
|
|
122
|
+
// CloudSqliteContainer delegation
|
|
123
|
+
get workspace() { return this._inner.workspace; }
|
|
124
|
+
get filesDir() { return this._inner.filesDir; }
|
|
125
|
+
get cloudContainer() { return this._inner.cloudContainer; }
|
|
126
|
+
get fromProps() { return this._inner.fromProps; }
|
|
127
|
+
resolveDbFileName(props) { return this._inner.resolveDbFileName(props); }
|
|
128
|
+
get cloudProps() {
|
|
129
|
+
const cc = this.cloudContainer;
|
|
130
|
+
if (undefined === cc)
|
|
131
|
+
return undefined;
|
|
132
|
+
return {
|
|
133
|
+
baseUri: cc.baseUri,
|
|
134
|
+
containerId: cc.containerId,
|
|
135
|
+
storageType: cc.storageType,
|
|
136
|
+
isPublic: cc.isPublic,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
getEditableDb(props) {
|
|
140
|
+
const resolvedProps = props ?? { dbName: SettingsDbImpl_1.settingsDbDefaultName };
|
|
141
|
+
const dbFileName = this.resolveDbFileName(resolvedProps);
|
|
142
|
+
let db = this._settingsDbs.get(dbFileName);
|
|
143
|
+
if (undefined === db) {
|
|
144
|
+
db = new EditableSettingsDbImpl(resolvedProps, this);
|
|
145
|
+
this._settingsDbs.set(dbFileName, db);
|
|
146
|
+
}
|
|
147
|
+
if (this.cloudContainer && !CloudSqlite_1.CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {
|
|
148
|
+
this._settingsDbs.delete(dbFileName);
|
|
149
|
+
core_common_1.CloudSqliteError.throwError("already-published", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });
|
|
150
|
+
}
|
|
151
|
+
return db;
|
|
152
|
+
}
|
|
153
|
+
async createNewSettingsDbVersion(args) {
|
|
154
|
+
const container = this.cloudContainer;
|
|
155
|
+
if (undefined === container)
|
|
156
|
+
core_common_1.WorkspaceError.throwError("no-cloud-container", { message: "versions require cloud containers" });
|
|
157
|
+
const fromDb = { ...args.fromProps, dbName: args.fromProps?.dbName ?? SettingsDbImpl_1.settingsDbDefaultName };
|
|
158
|
+
return CloudSqlite_1.CloudSqlite.createNewDbVersion(container, { ...args, fromDb });
|
|
159
|
+
}
|
|
160
|
+
async createDb(args) {
|
|
161
|
+
const dbName = args.dbName ?? SettingsDbImpl_1.settingsDbDefaultName;
|
|
162
|
+
const version = args.version ?? "0.0.0";
|
|
163
|
+
if (!this.cloudContainer) {
|
|
164
|
+
SettingsSqliteDb_1.SettingsSqliteDb.createNewDb(this.resolveDbFileName({ dbName }), { manifest: args.manifest });
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const tempDbFile = (0, path_1.join)(IModelHost_1.KnownLocations.tmpdir, `empty-${core_bentley_1.Guid.createValue()}.itwin-settings`);
|
|
168
|
+
try {
|
|
169
|
+
SettingsSqliteDb_1.SettingsSqliteDb.createNewDb(tempDbFile, { manifest: args.manifest });
|
|
170
|
+
await CloudSqlite_1.CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite_1.CloudSqlite.makeSemverName(dbName, version) });
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
if (fs.existsSync(tempDbFile))
|
|
174
|
+
IModelJsFs_1.IModelJsFs.removeSync(tempDbFile);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return this.getEditableDb({ dbName, version });
|
|
178
|
+
}
|
|
179
|
+
acquireWriteLock(user) {
|
|
180
|
+
if (this.cloudContainer) {
|
|
181
|
+
this.cloudContainer.acquireWriteLock(user);
|
|
182
|
+
this.writeLockHeldBy = user;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
releaseWriteLock() {
|
|
186
|
+
if (this.cloudContainer) {
|
|
187
|
+
this.cloudContainer.releaseWriteLock();
|
|
188
|
+
this.writeLockHeldBy = undefined;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
abandonChanges() {
|
|
192
|
+
if (this.cloudContainer) {
|
|
193
|
+
this.cloudContainer.abandonChanges();
|
|
194
|
+
this.writeLockHeldBy = undefined;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Close all editable settings dbs tracked by this container. */
|
|
198
|
+
cleanup() {
|
|
199
|
+
for (const [_, db] of this._settingsDbs)
|
|
200
|
+
db.close();
|
|
201
|
+
this._settingsDbs.clear();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
class EditableSettingsDbImpl extends SettingsDbImpl_1.SettingsDbImpl {
|
|
205
|
+
get container() {
|
|
206
|
+
return this._container;
|
|
207
|
+
}
|
|
208
|
+
constructor(props, container) {
|
|
209
|
+
super(props, container, Settings_1.SettingsPriority.application);
|
|
210
|
+
}
|
|
211
|
+
open() {
|
|
212
|
+
this.sqliteDb.openDb(this.dbFileName, core_bentley_1.OpenMode.ReadWrite, this._container.cloudContainer);
|
|
213
|
+
}
|
|
214
|
+
close() {
|
|
215
|
+
let error;
|
|
216
|
+
try {
|
|
217
|
+
if (this.isOpen) {
|
|
218
|
+
const lastEditedBy = this._container.writeLockHeldBy;
|
|
219
|
+
if (lastEditedBy !== undefined)
|
|
220
|
+
this.updateManifest({ ...this.manifest, lastEditedBy });
|
|
221
|
+
this.sqliteDb.saveChanges();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
error = e;
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
super.close();
|
|
229
|
+
}
|
|
230
|
+
if (error) {
|
|
231
|
+
if (error instanceof Error)
|
|
232
|
+
throw error;
|
|
233
|
+
throw new Error(`EditableSettingsDb.close() failed`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
updateManifest(manifest) {
|
|
237
|
+
this.sqliteDb[Symbols_1._nativeDb].saveFileProperty(SettingsDbImpl_1.settingsManifestProperty, JSON.stringify(manifest));
|
|
238
|
+
this._manifest = undefined;
|
|
239
|
+
}
|
|
240
|
+
updateSettings(settings) {
|
|
241
|
+
const val = JSON.stringify(settings);
|
|
242
|
+
this.sqliteDb.withSqliteStatement("INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value", (stmt) => {
|
|
243
|
+
stmt.bindString(1, SettingsDb_1.settingsResourceName);
|
|
244
|
+
stmt.bindString(2, val);
|
|
245
|
+
const rc = stmt.step();
|
|
246
|
+
if (core_bentley_1.DbResult.BE_SQLITE_DONE !== rc)
|
|
247
|
+
core_common_1.WorkspaceError.throwError("write-error", { message: `settings [updateSettings], rc=${rc}` });
|
|
248
|
+
});
|
|
249
|
+
this.sqliteDb.saveChanges();
|
|
250
|
+
}
|
|
251
|
+
updateSetting(args) {
|
|
252
|
+
this.withOpenDb(() => {
|
|
253
|
+
const container = this.getSettings();
|
|
254
|
+
container[args.settingName] = args.value;
|
|
255
|
+
this.updateSettings(container);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
removeSetting(settingName) {
|
|
259
|
+
this.withOpenDb(() => {
|
|
260
|
+
const container = this.getSettings();
|
|
261
|
+
delete container[settingName];
|
|
262
|
+
this.updateSettings(container);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=SettingsEditorImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsEditorImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsEditorImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Workspace\r\n */\r\n\r\nimport * as fs from \"fs-extra\";\r\nimport { join } from \"path\";\r\nimport { DbResult, Guid, OpenMode } from \"@itwin/core-bentley\";\r\nimport { CloudSqliteError, WorkspaceError } from \"@itwin/core-common\";\r\nimport { CloudSqlite } from \"../../CloudSqlite\";\r\nimport { IModelHost, KnownLocations } from \"../../IModelHost\";\r\nimport { SettingName, SettingsContainer, SettingsPriority } from \"../../workspace/Settings\";\r\nimport { CloudSqliteContainer, GetWorkspaceContainerArgs, Workspace, WorkspaceContainerProps, WorkspaceDbProps,\r\n} from \"../../workspace/Workspace\";\r\nimport { SettingsDbManifest, SettingsDbProps, settingsResourceName } from \"../../workspace/SettingsDb\";\r\nimport {\r\n type CreateNewSettingsContainerArgs, type CreateNewSettingsDbVersionArgs, type CreateSettingsDbArgs, type EditableSettingsCloudContainer, type EditableSettingsDb,\r\n type SettingsDbVersionResult, type SettingsEditor, SettingsEditor as SettingsEditorNs,\r\n type UpdateSettingArgs,\r\n} from \"../../workspace/SettingsEditor\";\r\nimport { BlobContainer } from \"../../BlobContainerService\";\r\nimport { settingsDbDefaultName, SettingsDbImpl, settingsManifestProperty } from \"./SettingsDbImpl\";\r\nimport { SettingsSqliteDb } from \"./SettingsSqliteDb\";\r\nimport { constructSettingsEditorWorkspace, OwnedWorkspace } from \"./WorkspaceImpl\";\r\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\r\nimport { SettingsImpl } from \"./SettingsImpl\";\r\nimport { IModelJsFs } from \"../../IModelJsFs\";\r\n\r\nconst settingsEditorName = \"SettingsEditor\";\r\n\r\n/** Construct a new [[SettingsEditor]]. Called by the [[SettingsEditor]] namespace. */\r\nexport function constructSettingsEditor(): SettingsEditor {\r\n return new SettingsEditorImpl();\r\n}\r\n\r\nclass SettingsEditorImpl implements SettingsEditor {\r\n public readonly [_implementationProhibited] = undefined;\r\n private readonly _workspace: OwnedWorkspace;\r\n private _containers = new Map<string, EditableSettingsContainerImpl>();\r\n\r\n public constructor() {\r\n this._workspace = constructSettingsEditorWorkspace(new SettingsImpl(), { containerDir: join(IModelHost.cacheDir, settingsEditorName) });\r\n }\r\n\r\n public get workspace(): Workspace { return this._workspace; }\r\n\r\n private async initializeContainer(args: CreateNewSettingsContainerArgs) {\r\n class CloudAccess extends CloudSqlite.DbAccess<SettingsSqliteDb> {\r\n protected static override _cacheName = settingsEditorName;\r\n public static async initializeSettings(initArgs: CreateNewSettingsContainerArgs) {\r\n const props = await this.createBlobContainer({ scope: initArgs.scope, metadata: { ...initArgs.metadata, containerType: \"settings\" } });\r\n const dbFullName = CloudSqlite.makeSemverName(initArgs.dbName ?? settingsDbDefaultName, \"0.0.0\");\r\n await super._initializeDb({ ...initArgs, props, dbName: dbFullName, dbType: SettingsSqliteDb, blockSize: \"4M\" });\r\n return props;\r\n }\r\n }\r\n return CloudAccess.initializeSettings(args);\r\n }\r\n\r\n public async createNewCloudContainer(args: CreateNewSettingsContainerArgs): Promise<EditableSettingsCloudContainer> {\r\n const cloudContainer = await this.initializeContainer(args);\r\n const userToken = await IModelHost.authorizationClient?.getAccessToken();\r\n const accessToken = await CloudSqlite.requestToken({ ...cloudContainer, accessLevel: \"write\", userToken });\r\n return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });\r\n }\r\n\r\n public getContainer(args: GetWorkspaceContainerArgs): EditableSettingsCloudContainer {\r\n const existing = this._containers.get(args.containerId);\r\n if (existing)\r\n return existing;\r\n const baseContainer = this._workspace.getContainer(args);\r\n const editable = new EditableSettingsContainerImpl(baseContainer);\r\n this._containers.set(args.containerId, editable);\r\n return editable;\r\n }\r\n\r\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<EditableSettingsCloudContainer> {\r\n let accessToken = props.accessToken;\r\n if (undefined === accessToken && props.baseUri !== \"\")\r\n accessToken = await CloudSqlite.requestToken({ ...props, accessLevel: \"write\" });\r\n\r\n return this.getContainer({ ...props, accessToken: accessToken ?? \"\" });\r\n }\r\n\r\n public async findContainers(args: SettingsEditorNs.QuerySettingsContainersArgs): Promise<EditableSettingsCloudContainer[]> {\r\n const containers = await SettingsEditorNs.queryContainers(args);\r\n const userToken = await IModelHost.getAccessToken();\r\n const results: EditableSettingsCloudContainer[] = [];\r\n for (const containerMeta of containers) {\r\n // queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const tokenProps = await BlobContainer.service!.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: \"write\" });\r\n results.push(this.getContainer({\r\n containerId: containerMeta.containerId,\r\n baseUri: tokenProps.baseUri,\r\n storageType: tokenProps.provider,\r\n accessToken: tokenProps.token,\r\n writeable: true,\r\n }));\r\n }\r\n return results;\r\n }\r\n\r\n public close() {\r\n const errors: unknown[] = [];\r\n for (const [_, container] of this._containers) {\r\n try {\r\n container.cleanup();\r\n } catch (e) {\r\n errors.push(e);\r\n }\r\n }\r\n this._containers.clear();\r\n try {\r\n this._workspace.close();\r\n } catch (e) {\r\n errors.push(e);\r\n }\r\n if (errors.length === 1)\r\n throw errors[0];\r\n if (errors.length > 1)\r\n throw new Error(`SettingsEditor.close() encountered ${errors.length} errors: ${errors.map((e) => e instanceof Error ? e.message : String(e)).join(\"; \")}`);\r\n }\r\n}\r\n\r\nclass EditableSettingsContainerImpl implements EditableSettingsCloudContainer {\r\n public readonly [_implementationProhibited] = undefined;\r\n private readonly _inner: CloudSqliteContainer;\r\n private _settingsDbs = new Map<string, EditableSettingsDbImpl>();\r\n public writeLockHeldBy?: string;\r\n\r\n public constructor(inner: CloudSqliteContainer) {\r\n this._inner = inner;\r\n }\r\n\r\n // CloudSqliteContainer delegation\r\n public get workspace() { return this._inner.workspace; }\r\n public get filesDir() { return this._inner.filesDir; }\r\n public get cloudContainer() { return this._inner.cloudContainer; }\r\n public get fromProps() { return this._inner.fromProps; }\r\n public resolveDbFileName(props: WorkspaceDbProps) { return this._inner.resolveDbFileName(props); }\r\n\r\n public get cloudProps(): WorkspaceContainerProps | undefined {\r\n const cc = this.cloudContainer;\r\n if (undefined === cc)\r\n return undefined;\r\n return {\r\n baseUri: cc.baseUri,\r\n containerId: cc.containerId,\r\n storageType: cc.storageType as \"azure\" | \"google\",\r\n isPublic: cc.isPublic,\r\n };\r\n }\r\n\r\n public getEditableDb(props?: SettingsDbProps): EditableSettingsDb {\r\n const resolvedProps = props ?? { dbName: settingsDbDefaultName };\r\n const dbFileName = this.resolveDbFileName(resolvedProps);\r\n let db = this._settingsDbs.get(dbFileName);\r\n if (undefined === db) {\r\n db = new EditableSettingsDbImpl(resolvedProps, this);\r\n this._settingsDbs.set(dbFileName, db);\r\n }\r\n\r\n if (this.cloudContainer && !CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {\r\n this._settingsDbs.delete(dbFileName);\r\n CloudSqliteError.throwError(\"already-published\", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });\r\n }\r\n\r\n return db;\r\n }\r\n\r\n public async createNewSettingsDbVersion(args: CreateNewSettingsDbVersionArgs): Promise<SettingsDbVersionResult> {\r\n const container = this.cloudContainer;\r\n if (undefined === container)\r\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"versions require cloud containers\" });\r\n\r\n const fromDb = { ...args.fromProps, dbName: args.fromProps?.dbName ?? settingsDbDefaultName };\r\n return CloudSqlite.createNewDbVersion(container, { ...args, fromDb });\r\n }\r\n\r\n public async createDb(args: CreateSettingsDbArgs): Promise<EditableSettingsDb> {\r\n const dbName = args.dbName ?? settingsDbDefaultName;\r\n const version = args.version ?? \"0.0.0\";\r\n if (!this.cloudContainer) {\r\n SettingsSqliteDb.createNewDb(this.resolveDbFileName({ dbName }), { manifest: args.manifest });\r\n } else {\r\n const tempDbFile = join(KnownLocations.tmpdir, `empty-${Guid.createValue()}.itwin-settings`);\r\n try {\r\n SettingsSqliteDb.createNewDb(tempDbFile, { manifest: args.manifest });\r\n await CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite.makeSemverName(dbName, version) });\r\n } finally {\r\n if (fs.existsSync(tempDbFile))\r\n IModelJsFs.removeSync(tempDbFile);\r\n }\r\n }\r\n\r\n return this.getEditableDb({ dbName, version });\r\n }\r\n\r\n public acquireWriteLock(user: string): void {\r\n if (this.cloudContainer) {\r\n this.cloudContainer.acquireWriteLock(user);\r\n this.writeLockHeldBy = user;\r\n }\r\n }\r\n\r\n public releaseWriteLock(): void {\r\n if (this.cloudContainer) {\r\n this.cloudContainer.releaseWriteLock();\r\n this.writeLockHeldBy = undefined;\r\n }\r\n }\r\n\r\n public abandonChanges(): void {\r\n if (this.cloudContainer) {\r\n this.cloudContainer.abandonChanges();\r\n this.writeLockHeldBy = undefined;\r\n }\r\n }\r\n\r\n /** Close all editable settings dbs tracked by this container. */\r\n public cleanup(): void {\r\n for (const [_, db] of this._settingsDbs)\r\n db.close();\r\n this._settingsDbs.clear();\r\n }\r\n}\r\n\r\nclass EditableSettingsDbImpl extends SettingsDbImpl implements EditableSettingsDb {\r\n public override get container(): EditableSettingsCloudContainer {\r\n return this._container as EditableSettingsCloudContainer;\r\n }\r\n\r\n public constructor(props: SettingsDbProps, container: EditableSettingsContainerImpl) {\r\n super(props, container, SettingsPriority.application);\r\n }\r\n\r\n public override open(): void {\r\n this.sqliteDb.openDb(this.dbFileName, OpenMode.ReadWrite, this._container.cloudContainer);\r\n }\r\n\r\n public override close(): void {\r\n let error: unknown;\r\n try {\r\n if (this.isOpen) {\r\n const lastEditedBy = (this._container as EditableSettingsContainerImpl).writeLockHeldBy;\r\n if (lastEditedBy !== undefined)\r\n this.updateManifest({ ...this.manifest, lastEditedBy });\r\n this.sqliteDb.saveChanges();\r\n }\r\n } catch (e) {\r\n error = e;\r\n } finally {\r\n super.close();\r\n }\r\n if (error) {\r\n if (error instanceof Error)\r\n throw error;\r\n throw new Error(`EditableSettingsDb.close() failed`);\r\n }\r\n }\r\n\r\n public updateManifest(manifest: SettingsDbManifest): void {\r\n this.sqliteDb[_nativeDb].saveFileProperty(settingsManifestProperty, JSON.stringify(manifest));\r\n this._manifest = undefined;\r\n }\r\n\r\n public updateSettings(settings: SettingsContainer): void {\r\n const val = JSON.stringify(settings);\r\n this.sqliteDb.withSqliteStatement(\r\n \"INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\",\r\n (stmt) => {\r\n stmt.bindString(1, settingsResourceName);\r\n stmt.bindString(2, val);\r\n const rc = stmt.step();\r\n if (DbResult.BE_SQLITE_DONE !== rc)\r\n WorkspaceError.throwError(\"write-error\", { message: `settings [updateSettings], rc=${rc}` });\r\n },\r\n );\r\n this.sqliteDb.saveChanges();\r\n }\r\n\r\n public updateSetting(args: UpdateSettingArgs): void {\r\n this.withOpenDb(() => {\r\n const container = this.getSettings();\r\n container[args.settingName] = args.value;\r\n this.updateSettings(container);\r\n });\r\n }\r\n\r\n public removeSetting(settingName: SettingName): void {\r\n this.withOpenDb(() => {\r\n const container = this.getSettings();\r\n delete container[settingName];\r\n this.updateSettings(container);\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -5,6 +5,7 @@ import { BeEvent } from "@itwin/core-bentley";
|
|
|
5
5
|
import { LocalDirName, LocalFileName } from "@itwin/core-common";
|
|
6
6
|
import { Setting, SettingName, Settings, SettingsContainer, SettingsDictionary, SettingsDictionaryProps, SettingsDictionarySource, SettingsPriority } from "../../workspace/Settings";
|
|
7
7
|
import { _implementationProhibited } from "../Symbols";
|
|
8
|
+
export declare const dictionaryMatches: (d1: SettingsDictionarySource, d2: SettingsDictionarySource) => boolean;
|
|
8
9
|
/**
|
|
9
10
|
* Internal implementation of Settings interface.
|
|
10
11
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACtL,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,iBAAiB,OAAQ,wBAAwB,MAAM,wBAAwB,KAAG,OAE9F,CAAC;AAsBF;;;GAGG;AACH,qBAAa,YAAa,YAAW,QAAQ;IAC3C,SAAgB,CAAC,yBAAyB,CAAC,YAAa;IACjD,YAAY,EAAE,kBAAkB,EAAE,CAAM;IAC/C,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,gBAAgB;IAC7C,KAAK;IACZ,SAAgB,iBAAiB,gBAAqB,IAAI,EAAI;IAEvD,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB;IAI3D,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAQ9D,OAAO,CAAC,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM;IAI5D,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,iBAAiB;IAiBzE,aAAa,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,GAAG,SAAS;IAQ/E,cAAc,CAAC,MAAM,EAAE,wBAAwB,EAAE,UAAU,UAAO;IAYhE,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,kBAAkB,CAAA;KAAC,CAAC;IASrH,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC;IAM5E,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAS/F,OAAO,CAAC,SAAS;IAMV,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAC1D,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAIhD,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO;IAC7D,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS;IAIlD,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAC1D,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAIhD,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAClE,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS;IAK7D,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IACtE,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,SAAS;IActE,OAAO,CAAC,gBAAgB;CAgBzB"}
|