@itwin/core-backend 5.9.0-dev.1 → 5.9.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/lib/cjs/IModelHost.d.ts +36 -1
  3. package/lib/cjs/IModelHost.d.ts.map +1 -1
  4. package/lib/cjs/IModelHost.js +80 -0
  5. package/lib/cjs/IModelHost.js.map +1 -1
  6. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +18 -3
  7. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
  8. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +49 -242
  9. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  10. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  11. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  12. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +0 -1
  13. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  14. package/lib/cjs/internal/workspace/WorkspaceImpl.js +70 -41
  15. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  16. package/lib/cjs/workspace/Settings.d.ts +11 -5
  17. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  18. package/lib/cjs/workspace/Settings.js.map +1 -1
  19. package/lib/cjs/workspace/SettingsDb.d.ts +20 -99
  20. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -1
  21. package/lib/cjs/workspace/SettingsDb.js +23 -7
  22. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  23. package/lib/cjs/workspace/SettingsEditor.d.ts +40 -226
  24. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
  25. package/lib/cjs/workspace/SettingsEditor.js +86 -25
  26. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  27. package/lib/cjs/workspace/Workspace.d.ts +7 -11
  28. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  29. package/lib/cjs/workspace/Workspace.js.map +1 -1
  30. package/lib/cjs/workspace/WorkspaceEditor.d.ts +14 -0
  31. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  32. package/lib/cjs/workspace/WorkspaceEditor.js +1 -1
  33. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  34. package/lib/esm/IModelHost.d.ts +36 -1
  35. package/lib/esm/IModelHost.d.ts.map +1 -1
  36. package/lib/esm/IModelHost.js +82 -2
  37. package/lib/esm/IModelHost.js.map +1 -1
  38. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +18 -3
  39. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
  40. package/lib/esm/internal/workspace/SettingsEditorImpl.js +52 -246
  41. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  42. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  43. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  44. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +0 -1
  45. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  46. package/lib/esm/internal/workspace/WorkspaceImpl.js +71 -41
  47. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  48. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts +2 -0
  49. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
  50. package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
  51. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
  52. package/lib/esm/test/standalone/Settings.test.js +19 -0
  53. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  54. package/lib/esm/test/standalone/Workspace.test.js +52 -4
  55. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  56. package/lib/esm/test/workspace/SettingsDb.test.js +28 -456
  57. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  58. package/lib/esm/workspace/Settings.d.ts +11 -5
  59. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  60. package/lib/esm/workspace/Settings.js.map +1 -1
  61. package/lib/esm/workspace/SettingsDb.d.ts +20 -99
  62. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
  63. package/lib/esm/workspace/SettingsDb.js +20 -6
  64. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  65. package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
  66. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
  67. package/lib/esm/workspace/SettingsEditor.js +85 -24
  68. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  69. package/lib/esm/workspace/Workspace.d.ts +7 -11
  70. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  71. package/lib/esm/workspace/Workspace.js.map +1 -1
  72. package/lib/esm/workspace/WorkspaceEditor.d.ts +14 -0
  73. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  74. package/lib/esm/workspace/WorkspaceEditor.js +1 -1
  75. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  76. package/package.json +14 -14
  77. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
  78. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  79. package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
  80. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
  81. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  82. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  83. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
  84. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
  85. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
  86. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  87. package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
  88. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
  89. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  90. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  91. package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
  92. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
@@ -1,40 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module Workspace
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.SettingsSqliteDb = void 0;
11
- const SQLiteDb_1 = require("../../SQLiteDb");
12
- const core_common_1 = require("@itwin/core-common");
13
- const Symbols_1 = require("../Symbols");
14
- const SettingsDbImpl_1 = require("./SettingsDbImpl");
15
- /** A [[VersionedSqliteDb]] that stores settings dictionaries. Unlike [[WorkspaceSqliteDb]], the
16
- * manifest is stored using [[settingsManifestProperty]] so that settings and workspace databases
17
- * can coexist in the same container without ambiguity.
18
- */
19
- class SettingsSqliteDb extends SQLiteDb_1.VersionedSqliteDb {
20
- myVersion = "1.0.0";
21
- getRequiredVersions() {
22
- try {
23
- return super.getRequiredVersions();
24
- }
25
- catch (e) {
26
- if (core_common_1.SqliteError.isError(e, "invalid-versions-property"))
27
- return { readVersion: "^1", writeVersion: "^1" };
28
- throw e;
29
- }
30
- }
31
- createDDL(args) {
32
- const timeStampCol = "lastMod TIMESTAMP NOT NULL DEFAULT(julianday('now'))";
33
- this.executeSQL(`CREATE TABLE strings(id TEXT PRIMARY KEY NOT NULL,value TEXT,${timeStampCol})`);
34
- this.executeSQL(`CREATE TRIGGER strings_timeStamp AFTER UPDATE ON strings WHEN old.lastMod=new.lastMod AND old.lastMod != julianday('now') BEGIN UPDATE strings SET lastMod=julianday('now') WHERE id=new.id; END`);
35
- if (args?.manifest)
36
- this[Symbols_1._nativeDb].saveFileProperty(SettingsDbImpl_1.settingsManifestProperty, JSON.stringify(args.manifest));
37
- }
38
- }
39
- exports.SettingsSqliteDb = SettingsSqliteDb;
40
- //# sourceMappingURL=SettingsSqliteDb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsSqliteDb.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsSqliteDb.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,6CAA6D;AAC7D,oDAAiD;AACjD,wCAAuC;AACvC,qDAA4D;AAE5D;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,4BAAiB;IACrC,SAAS,GAAG,OAAO,CAAC;IACpB,mBAAmB;QACjC,IAAI,CAAC;YACH,OAAO,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,yBAAW,CAAC,OAAO,CAAC,CAAC,EAAE,2BAA2B,CAAC;gBACrD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACnD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEkB,SAAS,CAAC,IAAS;QACpC,MAAM,YAAY,GAAG,sDAAsD,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,gEAAgE,YAAY,GAAG,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,CAAC,kMAAkM,CAAC,CAAC;QACpN,IAAI,IAAI,EAAE,QAAQ;YAChB,IAAI,CAAC,mBAAS,CAAC,CAAC,gBAAgB,CAAC,yCAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9F,CAAC;CACF;AAnBD,4CAmBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { SQLiteDb, VersionedSqliteDb } from \"../../SQLiteDb\";\nimport { SqliteError } from \"@itwin/core-common\";\nimport { _nativeDb } from \"../Symbols\";\nimport { settingsManifestProperty } from \"./SettingsDbImpl\";\n\n/** A [[VersionedSqliteDb]] that stores settings dictionaries. Unlike [[WorkspaceSqliteDb]], the\n * manifest is stored using [[settingsManifestProperty]] so that settings and workspace databases\n * can coexist in the same container without ambiguity.\n */\nexport class SettingsSqliteDb extends VersionedSqliteDb {\n public override myVersion = \"1.0.0\";\n public override getRequiredVersions(): SQLiteDb.RequiredVersionRanges {\n try {\n return super.getRequiredVersions();\n } catch (e) {\n if (SqliteError.isError(e, \"invalid-versions-property\"))\n return { readVersion: \"^1\", writeVersion: \"^1\" };\n throw e;\n }\n }\n\n protected override createDDL(args: any): void {\n const timeStampCol = \"lastMod TIMESTAMP NOT NULL DEFAULT(julianday('now'))\";\n this.executeSQL(`CREATE TABLE strings(id TEXT PRIMARY KEY NOT NULL,value TEXT,${timeStampCol})`);\n this.executeSQL(`CREATE TRIGGER strings_timeStamp AFTER UPDATE ON strings WHEN old.lastMod=new.lastMod AND old.lastMod != julianday('now') BEGIN UPDATE strings SET lastMod=julianday('now') WHERE id=new.id; END`);\n if (args?.manifest)\n this[_nativeDb].saveFileProperty(settingsManifestProperty, JSON.stringify(args.manifest));\n }\n}\n"]}
@@ -1,38 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,104 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Workspace
7
- */
8
- import { DbResult, OpenMode } from "@itwin/core-bentley";
9
- import { CloudSqlite } from "../../CloudSqlite";
10
- import { Setting } from "../../workspace/Settings";
11
- import { settingsResourceName } from "../../workspace/SettingsDb";
12
- import { WorkspaceSqliteDb } from "./WorkspaceSqliteDb";
13
- import { _implementationProhibited, _nativeDb } from "../Symbols";
14
- export const settingsDbDefaultName = "settings-db";
15
- export const settingsManifestProperty = { namespace: "settings", name: "manifest" };
16
- /** Internal implementation of [[SettingsDb]]. Wraps a [[WorkspaceSqliteDb]] to provide a
17
- * settings-only read interface over the `strings` table.
18
- */
19
- export class SettingsDbImpl {
20
- [_implementationProhibited] = undefined;
21
- sqliteDb = new WorkspaceSqliteDb();
22
- dbName;
23
- dbFileName;
24
- _container;
25
- priority;
26
- _manifest;
27
- constructor(props, container, priority) {
28
- this.dbName = props.dbName ?? settingsDbDefaultName;
29
- CloudSqlite.validateDbName(this.dbName);
30
- this._container = container;
31
- this.dbFileName = container.resolveDbFileName(props);
32
- this.priority = priority;
33
- }
34
- get container() { return this._container; }
35
- get isOpen() { return this.sqliteDb.isOpen; }
36
- get version() {
37
- const cloudContainer = this.container.cloudContainer;
38
- if (undefined === cloudContainer)
39
- return "0.0.0";
40
- return CloudSqlite.parseDbFileName(this.dbFileName).version;
41
- }
42
- get manifest() {
43
- return this._manifest ??= this.withOpenDb((db) => {
44
- const manifestJson = db[_nativeDb].queryFileProperty(settingsManifestProperty, true);
45
- if (!manifestJson)
46
- return { settingsName: this.dbName };
47
- try {
48
- return JSON.parse(manifestJson);
49
- }
50
- catch (e) {
51
- throw new Error(`Failed to parse manifest in SettingsDb "${this.dbName}": ${e instanceof Error ? e.message : String(e)}`);
52
- }
53
- });
54
- }
55
- /** Check whether the underlying database has a settings manifest property.
56
- * Used to validate that a container actually holds a SettingsDb rather than a WorkspaceDb.
57
- */
58
- get hasSettingsManifestProperty() {
59
- return this.withOpenDb((db) => {
60
- const manifestJson = db[_nativeDb].queryFileProperty(settingsManifestProperty, true);
61
- return manifestJson !== undefined;
62
- });
63
- }
64
- withOpenDb(operation) {
65
- const done = this.isOpen ? () => { } : (this.open(), () => this.close());
66
- try {
67
- return operation(this.sqliteDb);
68
- }
69
- finally {
70
- done();
71
- }
72
- }
73
- open() {
74
- this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);
75
- }
76
- close() {
77
- if (this.isOpen)
78
- this.sqliteDb.closeDb();
79
- }
80
- getSettings() {
81
- return this.withOpenDb((db) => {
82
- return db.withSqliteStatement("SELECT value FROM strings WHERE id=?", (stmt) => {
83
- stmt.bindString(1, settingsResourceName);
84
- if (DbResult.BE_SQLITE_ROW !== stmt.step())
85
- return {};
86
- try {
87
- // JSON.parse already returns a fresh object tree — no explicit clone needed.
88
- return JSON.parse(stmt.getValueString(0));
89
- }
90
- catch (e) {
91
- throw new Error(`Failed to parse settings in SettingsDb "${this.dbName}": ${e instanceof Error ? e.message : String(e)}`);
92
- }
93
- });
94
- });
95
- }
96
- getSetting(settingName) {
97
- const settings = this.getSettings();
98
- if (!Object.hasOwn(settings, settingName))
99
- return undefined;
100
- const value = settings[settingName];
101
- return value !== undefined ? Setting.clone(value) : undefined;
102
- }
103
- }
104
- //# sourceMappingURL=SettingsDbImpl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsDbImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsDbImpl.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { DbResult, OpenMode } from \"@itwin/core-bentley\";\nimport { FilePropertyProps } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { Setting, SettingName, SettingsContainer, SettingsPriority } from \"../../workspace/Settings\";\nimport { CloudSqliteContainer, WorkspaceDbName } from \"../../workspace/Workspace\";\nimport { SettingsDb, SettingsDbManifest, SettingsDbProps, settingsResourceName } from \"../../workspace/SettingsDb\";\nimport { WorkspaceSqliteDb } from \"./WorkspaceSqliteDb\";\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\n\nexport const settingsDbDefaultName: WorkspaceDbName = \"settings-db\";\n\nexport const settingsManifestProperty: FilePropertyProps = { namespace: \"settings\", name: \"manifest\" };\n\n/** Internal implementation of [[SettingsDb]]. Wraps a [[WorkspaceSqliteDb]] to provide a\n * settings-only read interface over the `strings` table.\n */\nexport class SettingsDbImpl implements SettingsDb {\n public readonly [_implementationProhibited] = undefined;\n public readonly sqliteDb = new WorkspaceSqliteDb();\n public readonly dbName: string;\n public readonly dbFileName: string;\n protected readonly _container: CloudSqliteContainer;\n public readonly priority: SettingsPriority;\n protected _manifest?: SettingsDbManifest;\n\n public constructor(props: SettingsDbProps, container: CloudSqliteContainer, priority: SettingsPriority) {\n this.dbName = props.dbName ?? settingsDbDefaultName;\n CloudSqlite.validateDbName(this.dbName);\n this._container = container;\n this.dbFileName = container.resolveDbFileName(props);\n this.priority = priority;\n }\n\n public get container(): CloudSqliteContainer { return this._container; }\n public get isOpen() { return this.sqliteDb.isOpen; }\n\n public get version(): string {\n const cloudContainer = this.container.cloudContainer;\n if (undefined === cloudContainer)\n return \"0.0.0\";\n return CloudSqlite.parseDbFileName(this.dbFileName).version;\n }\n\n public get manifest(): SettingsDbManifest {\n return this._manifest ??= this.withOpenDb((db) => {\n const manifestJson = db[_nativeDb].queryFileProperty(settingsManifestProperty, true) as string | undefined;\n if (!manifestJson)\n return { settingsName: this.dbName };\n try {\n return JSON.parse(manifestJson);\n } catch (e) {\n throw new Error(`Failed to parse manifest in SettingsDb \"${this.dbName}\": ${e instanceof Error ? e.message : String(e)}`);\n }\n });\n }\n\n /** Check whether the underlying database has a settings manifest property.\n * Used to validate that a container actually holds a SettingsDb rather than a WorkspaceDb.\n */\n public get hasSettingsManifestProperty(): boolean {\n return this.withOpenDb((db) => {\n const manifestJson = db[_nativeDb].queryFileProperty(settingsManifestProperty, true) as string | undefined;\n return manifestJson !== undefined;\n });\n }\n\n protected withOpenDb<T>(operation: (db: WorkspaceSqliteDb) => T): T {\n const done = this.isOpen ? () => { } : (this.open(), () => this.close());\n try {\n return operation(this.sqliteDb);\n } finally {\n done();\n }\n }\n\n public open(): void {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.Readonly, this._container.cloudContainer);\n }\n\n public close(): void {\n if (this.isOpen)\n this.sqliteDb.closeDb();\n }\n\n public getSettings(): SettingsContainer {\n return this.withOpenDb((db) => {\n return db.withSqliteStatement(\"SELECT value FROM strings WHERE id=?\", (stmt) => {\n stmt.bindString(1, settingsResourceName);\n if (DbResult.BE_SQLITE_ROW !== stmt.step())\n return {};\n try {\n // JSON.parse already returns a fresh object tree — no explicit clone needed.\n return JSON.parse(stmt.getValueString(0));\n } catch (e) {\n throw new Error(`Failed to parse settings in SettingsDb \"${this.dbName}\": ${e instanceof Error ? e.message : String(e)}`);\n }\n });\n });\n }\n\n public getSetting<T extends Setting>(settingName: SettingName): T | undefined {\n const settings = this.getSettings();\n if (!Object.hasOwn(settings, settingName))\n return undefined;\n const value = settings[settingName] as T | undefined;\n return value !== undefined ? Setting.clone(value) : undefined;\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- /** @packageDocumentation
2
- * @module Workspace
3
- */
4
- import { SQLiteDb, VersionedSqliteDb } from "../../SQLiteDb";
5
- /** A [[VersionedSqliteDb]] that stores settings dictionaries. Unlike [[WorkspaceSqliteDb]], the
6
- * manifest is stored using [[settingsManifestProperty]] so that settings and workspace databases
7
- * can coexist in the same container without ambiguity.
8
- */
9
- export declare class SettingsSqliteDb extends VersionedSqliteDb {
10
- myVersion: string;
11
- getRequiredVersions(): SQLiteDb.RequiredVersionRanges;
12
- protected createDDL(args: any): void;
13
- }
14
- //# sourceMappingURL=SettingsSqliteDb.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsSqliteDb.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsSqliteDb.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAK7D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;IACrC,SAAS,SAAW;IACpB,mBAAmB,IAAI,QAAQ,CAAC,qBAAqB;cAUlD,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;CAO9C"}
@@ -1,36 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Workspace
7
- */
8
- import { VersionedSqliteDb } from "../../SQLiteDb";
9
- import { SqliteError } from "@itwin/core-common";
10
- import { _nativeDb } from "../Symbols";
11
- import { settingsManifestProperty } from "./SettingsDbImpl";
12
- /** A [[VersionedSqliteDb]] that stores settings dictionaries. Unlike [[WorkspaceSqliteDb]], the
13
- * manifest is stored using [[settingsManifestProperty]] so that settings and workspace databases
14
- * can coexist in the same container without ambiguity.
15
- */
16
- export class SettingsSqliteDb extends VersionedSqliteDb {
17
- myVersion = "1.0.0";
18
- getRequiredVersions() {
19
- try {
20
- return super.getRequiredVersions();
21
- }
22
- catch (e) {
23
- if (SqliteError.isError(e, "invalid-versions-property"))
24
- return { readVersion: "^1", writeVersion: "^1" };
25
- throw e;
26
- }
27
- }
28
- createDDL(args) {
29
- const timeStampCol = "lastMod TIMESTAMP NOT NULL DEFAULT(julianday('now'))";
30
- this.executeSQL(`CREATE TABLE strings(id TEXT PRIMARY KEY NOT NULL,value TEXT,${timeStampCol})`);
31
- this.executeSQL(`CREATE TRIGGER strings_timeStamp AFTER UPDATE ON strings WHEN old.lastMod=new.lastMod AND old.lastMod != julianday('now') BEGIN UPDATE strings SET lastMod=julianday('now') WHERE id=new.id; END`);
32
- if (args?.manifest)
33
- this[_nativeDb].saveFileProperty(settingsManifestProperty, JSON.stringify(args.manifest));
34
- }
35
- }
36
- //# sourceMappingURL=SettingsSqliteDb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsSqliteDb.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsSqliteDb.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAY,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IACrC,SAAS,GAAG,OAAO,CAAC;IACpB,mBAAmB;QACjC,IAAI,CAAC;YACH,OAAO,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,2BAA2B,CAAC;gBACrD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACnD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEkB,SAAS,CAAC,IAAS;QACpC,MAAM,YAAY,GAAG,sDAAsD,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,gEAAgE,YAAY,GAAG,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,CAAC,kMAAkM,CAAC,CAAC;QACpN,IAAI,IAAI,EAAE,QAAQ;YAChB,IAAI,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9F,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Workspace\n */\n\nimport { SQLiteDb, VersionedSqliteDb } from \"../../SQLiteDb\";\nimport { SqliteError } from \"@itwin/core-common\";\nimport { _nativeDb } from \"../Symbols\";\nimport { settingsManifestProperty } from \"./SettingsDbImpl\";\n\n/** A [[VersionedSqliteDb]] that stores settings dictionaries. Unlike [[WorkspaceSqliteDb]], the\n * manifest is stored using [[settingsManifestProperty]] so that settings and workspace databases\n * can coexist in the same container without ambiguity.\n */\nexport class SettingsSqliteDb extends VersionedSqliteDb {\n public override myVersion = \"1.0.0\";\n public override getRequiredVersions(): SQLiteDb.RequiredVersionRanges {\n try {\n return super.getRequiredVersions();\n } catch (e) {\n if (SqliteError.isError(e, \"invalid-versions-property\"))\n return { readVersion: \"^1\", writeVersion: \"^1\" };\n throw e;\n }\n }\n\n protected override createDDL(args: any): void {\n const timeStampCol = \"lastMod TIMESTAMP NOT NULL DEFAULT(julianday('now'))\";\n this.executeSQL(`CREATE TABLE strings(id TEXT PRIMARY KEY NOT NULL,value TEXT,${timeStampCol})`);\n this.executeSQL(`CREATE TRIGGER strings_timeStamp AFTER UPDATE ON strings WHEN old.lastMod=new.lastMod AND old.lastMod != julianday('now') BEGIN UPDATE strings SET lastMod=julianday('now') WHERE id=new.id; END`);\n if (args?.manifest)\n this[_nativeDb].saveFileProperty(settingsManifestProperty, JSON.stringify(args.manifest));\n }\n}\n"]}