@itwin/core-backend 5.8.0 → 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.
- package/CHANGELOG.md +1 -1
- package/lib/cjs/IModelHost.d.ts +36 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +80 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +18 -3
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js +49 -242
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +0 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +70 -41
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.d.ts +11 -5
- 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 +20 -99
- package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsDb.js +23 -7
- package/lib/cjs/workspace/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.d.ts +40 -226
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js +86 -25
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +7 -11
- 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 +14 -0
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/IModelHost.d.ts +36 -1
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +82 -2
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +18 -3
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.js +52 -246
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +0 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +71 -41
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts +2 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
- package/lib/esm/test/standalone/Settings.test.js +19 -0
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +52 -4
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js +28 -456
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.d.ts +11 -5
- 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 +20 -99
- package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsDb.js +20 -6
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js +85 -24
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +7 -11
- 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 +14 -0
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +13 -13
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
- package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
- package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
- package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
- package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
|
@@ -7,260 +7,67 @@
|
|
|
7
7
|
* @module Workspace
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
11
|
-
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
const core_bentley_1 = require("@itwin/core-bentley");
|
|
10
|
+
exports.getSettingsEditorForITwin = getSettingsEditorForITwin;
|
|
11
|
+
exports.constructSettingsEditorForITwin = constructSettingsEditorForITwin;
|
|
14
12
|
const core_common_1 = require("@itwin/core-common");
|
|
15
|
-
const CloudSqlite_1 = require("../../CloudSqlite");
|
|
16
13
|
const IModelHost_1 = require("../../IModelHost");
|
|
17
|
-
const Settings_1 = require("../../workspace/Settings");
|
|
18
14
|
const SettingsDb_1 = require("../../workspace/SettingsDb");
|
|
19
15
|
const SettingsEditor_1 = require("../../workspace/SettingsEditor");
|
|
20
16
|
const BlobContainerService_1 = require("../../BlobContainerService");
|
|
21
|
-
const SettingsDbImpl_1 = require("./SettingsDbImpl");
|
|
22
|
-
const SettingsSqliteDb_1 = require("./SettingsSqliteDb");
|
|
23
17
|
const WorkspaceImpl_1 = require("./WorkspaceImpl");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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);
|
|
18
|
+
/** Obtain a [[WorkspaceEditor]] targeting the single existing settings container for a given iTwin.
|
|
19
|
+
* Returns `undefined` if no container exists. Throws if multiple containers are found.
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
async function getSettingsEditorForITwin(iTwinId) {
|
|
23
|
+
const containerId = await SettingsEditor_1.SettingsContainers.getITwinContainerId(iTwinId);
|
|
24
|
+
if (undefined === containerId)
|
|
25
|
+
return undefined;
|
|
26
|
+
const editor = (0, WorkspaceImpl_1.constructWorkspaceEditor)();
|
|
27
|
+
try {
|
|
75
28
|
const userToken = await IModelHost_1.IModelHost.getAccessToken();
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
}
|
|
29
|
+
const tokenProps = await BlobContainerService_1.BlobContainer.service?.requestToken({ accessLevel: "write", containerId, userToken });
|
|
30
|
+
if (!tokenProps)
|
|
31
|
+
core_common_1.ITwinSettingsError.throwError("failed-to-obtain-container-token", { message: `Failed to obtain access token for iTwin settings container '${containerId}'.`, iTwinId });
|
|
32
|
+
const container = editor.getContainer({
|
|
33
|
+
accessToken: tokenProps.token,
|
|
34
|
+
baseUri: tokenProps.baseUri,
|
|
35
|
+
containerId,
|
|
36
|
+
storageType: tokenProps.provider,
|
|
37
|
+
writeable: true,
|
|
38
|
+
});
|
|
39
|
+
return { editor, container };
|
|
196
40
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
db.close();
|
|
201
|
-
this._settingsDbs.clear();
|
|
41
|
+
catch (error) {
|
|
42
|
+
editor.close();
|
|
43
|
+
throw error;
|
|
202
44
|
}
|
|
203
45
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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);
|
|
46
|
+
/** Construct a [[WorkspaceEditor]] targeting the single settings container for a given iTwin.
|
|
47
|
+
* If no container exists, one is created with default metadata. Throws if multiple containers are found.
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
async function constructSettingsEditorForITwin(iTwinId) {
|
|
51
|
+
const existing = await getSettingsEditorForITwin(iTwinId);
|
|
52
|
+
if (existing)
|
|
53
|
+
return existing;
|
|
54
|
+
const editor = (0, WorkspaceImpl_1.constructWorkspaceEditor)();
|
|
55
|
+
try {
|
|
56
|
+
const container = await editor.createNewCloudContainer({
|
|
57
|
+
scope: { iTwinId },
|
|
58
|
+
metadata: {
|
|
59
|
+
label: "iTwin settings",
|
|
60
|
+
description: `Default settings container for iTwin ${iTwinId}`,
|
|
61
|
+
},
|
|
62
|
+
containerType: "settings",
|
|
63
|
+
dbName: SettingsDb_1.settingsWorkspaceDbName,
|
|
64
|
+
manifest: { workspaceName: `iTwin ${iTwinId} settings` },
|
|
256
65
|
});
|
|
66
|
+
return { editor, container };
|
|
257
67
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
delete container[settingName];
|
|
262
|
-
this.updateSettings(container);
|
|
263
|
-
});
|
|
68
|
+
catch (error) {
|
|
69
|
+
editor.close();
|
|
70
|
+
throw error;
|
|
264
71
|
}
|
|
265
72
|
}
|
|
266
73
|
//# sourceMappingURL=SettingsEditorImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsEditorImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsEditorImpl.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AA4BH,0DAEC;AA5BD,+BAA+B;AAC/B,+BAA4B;AAC5B,sDAA+D;AAC/D,oDAAsE;AACtE,mDAAgD;AAChD,iDAA8D;AAC9D,uDAA4F;AAG5F,2DAAuG;AACvG,mEAIwC;AACxC,qEAA2D;AAC3D,qDAAmG;AACnG,yDAAsD;AACtD,mDAAmF;AACnF,wCAAkE;AAClE,iDAA8C;AAC9C,iDAA8C;AAE9C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAE5C,sFAAsF;AACtF,SAAgB,uBAAuB;IACrC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,kBAAkB;IACN,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACvC,UAAU,CAAiB;IACpC,WAAW,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEvE;QACE,IAAI,CAAC,UAAU,GAAG,IAAA,gDAAgC,EAAC,IAAI,2BAAY,EAAE,EAAE,EAAE,YAAY,EAAE,IAAA,WAAI,EAAC,uBAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC1I,CAAC;IAED,IAAW,SAAS,KAAgB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAErD,KAAK,CAAC,mBAAmB,CAAC,IAAoC;QACpE,MAAM,WAAY,SAAQ,yBAAW,CAAC,QAA0B;YACpD,MAAM,CAAU,UAAU,GAAG,kBAAkB,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAwC;gBAC7E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;gBACvI,MAAM,UAAU,GAAG,yBAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,IAAI,sCAAqB,EAAE,OAAO,CAAC,CAAC;gBACjG,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,mCAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjH,OAAO,KAAK,CAAC;YACf,CAAC;;QAEH,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,IAAoC;QACvE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,uBAAU,CAAC,mBAAmB,EAAE,cAAc,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,yBAAW,CAAC,YAAY,CAAC,EAAE,GAAG,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3G,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxH,CAAC;IAEM,YAAY,CAAC,IAA+B;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAC;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,KAA8B;QAC3D,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACpC,IAAI,SAAS,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE;YACnD,WAAW,GAAG,MAAM,yBAAW,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnF,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAkD;QAC5E,MAAM,UAAU,GAAG,MAAM,+BAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,MAAM,uBAAU,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,OAAO,GAAqC,EAAE,CAAC;QACrD,KAAK,MAAM,aAAa,IAAI,UAAU,EAAE,CAAC;YACvC,mHAAmH;YACnH,oEAAoE;YACpE,MAAM,UAAU,GAAG,MAAM,oCAAa,CAAC,OAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1I,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC7B,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,WAAW,EAAE,UAAU,CAAC,QAAQ;gBAChC,WAAW,EAAE,UAAU,CAAC,KAAK;gBAC7B,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK;QACV,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/J,CAAC;CACF;AAED,MAAM,6BAA6B;IACjB,CAAC,mCAAyB,CAAC,GAAG,SAAS,CAAC;IACvC,MAAM,CAAuB;IACtC,YAAY,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC1D,eAAe,CAAU;IAEhC,YAAmB,KAA2B;QAC5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,kCAAkC;IAClC,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACxD,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtD,IAAW,cAAc,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAClE,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,iBAAiB,CAAC,KAAuB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAElG,IAAW,UAAU;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO,SAAS,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,WAAW,EAAE,EAAE,CAAC,WAAiC;YACjD,QAAQ,EAAE,EAAE,CAAC,QAAQ;SACtB,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,KAAuB;QAC1C,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE,MAAM,EAAE,sCAAqB,EAAE,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;YACrB,EAAE,GAAG,IAAI,sBAAsB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,yBAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7F,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrC,8BAAgB,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,oEAAoE,EAAE,CAAC,CAAC;QACtJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,0BAA0B,CAAC,IAAoC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,IAAI,SAAS,KAAK,SAAS;YACzB,4BAAc,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;QAEpG,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,sCAAqB,EAAE,CAAC;QAC9F,OAAO,yBAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAA0B;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,sCAAqB,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,mCAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChG,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,2BAAc,CAAC,MAAM,EAAE,SAAS,mBAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;YAC7F,IAAI,CAAC;gBACH,mCAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtE,MAAM,yBAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAW,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACtI,CAAC;oBAAS,CAAC;gBACT,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;oBAC3B,uBAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,gBAAgB,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAEM,gBAAgB;QACrB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;IACH,CAAC;IAED,iEAAiE;IAC1D,OAAO;QACZ,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY;YACrC,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,sBAAuB,SAAQ,+BAAc;IACjD,IAAoB,SAAS;QAC3B,OAAO,IAAI,CAAC,UAA4C,CAAC;IAC3D,CAAC;IAED,YAAmB,KAAsB,EAAE,SAAwC;QACjF,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,2BAAgB,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAEe,IAAI;QAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC5F,CAAC;IAEe,KAAK;QACnB,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,YAAY,GAAI,IAAI,CAAC,UAA4C,CAAC,eAAe,CAAC;gBACxF,IAAI,YAAY,KAAK,SAAS;oBAC5B,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,YAAY,KAAK;gBACxB,MAAM,KAAK,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,cAAc,CAAC,QAA4B;QAChD,IAAI,CAAC,QAAQ,CAAC,mBAAS,CAAC,CAAC,gBAAgB,CAAC,yCAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEM,cAAc,CAAC,QAA2B;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAC/B,0HAA0H,EAC1H,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,iCAAoB,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,uBAAQ,CAAC,cAAc,KAAK,EAAE;gBAChC,4BAAc,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEM,aAAa,CAAC,IAAuB;QAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,WAAwB;QAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,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 * as fs from \"fs-extra\";\nimport { join } from \"path\";\nimport { DbResult, Guid, OpenMode } from \"@itwin/core-bentley\";\nimport { CloudSqliteError, WorkspaceError } from \"@itwin/core-common\";\nimport { CloudSqlite } from \"../../CloudSqlite\";\nimport { IModelHost, KnownLocations } from \"../../IModelHost\";\nimport { SettingName, SettingsContainer, SettingsPriority } from \"../../workspace/Settings\";\nimport { CloudSqliteContainer, GetWorkspaceContainerArgs, Workspace, WorkspaceContainerProps, WorkspaceDbProps,\n} from \"../../workspace/Workspace\";\nimport { SettingsDbManifest, SettingsDbProps, settingsResourceName } from \"../../workspace/SettingsDb\";\nimport {\n type CreateNewSettingsContainerArgs, type CreateNewSettingsDbVersionArgs, type CreateSettingsDbArgs, type EditableSettingsCloudContainer, type EditableSettingsDb,\n type SettingsDbVersionResult, type SettingsEditor, SettingsEditor as SettingsEditorNs,\n type UpdateSettingArgs,\n} from \"../../workspace/SettingsEditor\";\nimport { BlobContainer } from \"../../BlobContainerService\";\nimport { settingsDbDefaultName, SettingsDbImpl, settingsManifestProperty } from \"./SettingsDbImpl\";\nimport { SettingsSqliteDb } from \"./SettingsSqliteDb\";\nimport { constructSettingsEditorWorkspace, OwnedWorkspace } from \"./WorkspaceImpl\";\nimport { _implementationProhibited, _nativeDb } from \"../Symbols\";\nimport { SettingsImpl } from \"./SettingsImpl\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\n\nconst settingsEditorName = \"SettingsEditor\";\n\n/** Construct a new [[SettingsEditor]]. Called by the [[SettingsEditor]] namespace. */\nexport function constructSettingsEditor(): SettingsEditor {\n return new SettingsEditorImpl();\n}\n\nclass SettingsEditorImpl implements SettingsEditor {\n public readonly [_implementationProhibited] = undefined;\n private readonly _workspace: OwnedWorkspace;\n private _containers = new Map<string, EditableSettingsContainerImpl>();\n\n public constructor() {\n this._workspace = constructSettingsEditorWorkspace(new SettingsImpl(), { containerDir: join(IModelHost.cacheDir, settingsEditorName) });\n }\n\n public get workspace(): Workspace { return this._workspace; }\n\n private async initializeContainer(args: CreateNewSettingsContainerArgs) {\n class CloudAccess extends CloudSqlite.DbAccess<SettingsSqliteDb> {\n protected static override _cacheName = settingsEditorName;\n public static async initializeSettings(initArgs: CreateNewSettingsContainerArgs) {\n const props = await this.createBlobContainer({ scope: initArgs.scope, metadata: { ...initArgs.metadata, containerType: \"settings\" } });\n const dbFullName = CloudSqlite.makeSemverName(initArgs.dbName ?? settingsDbDefaultName, \"0.0.0\");\n await super._initializeDb({ ...initArgs, props, dbName: dbFullName, dbType: SettingsSqliteDb, blockSize: \"4M\" });\n return props;\n }\n }\n return CloudAccess.initializeSettings(args);\n }\n\n public async createNewCloudContainer(args: CreateNewSettingsContainerArgs): Promise<EditableSettingsCloudContainer> {\n const cloudContainer = await this.initializeContainer(args);\n const userToken = await IModelHost.authorizationClient?.getAccessToken();\n const accessToken = await CloudSqlite.requestToken({ ...cloudContainer, accessLevel: \"write\", userToken });\n return this.getContainer({ accessToken, ...cloudContainer, writeable: true, description: args.metadata.description });\n }\n\n public getContainer(args: GetWorkspaceContainerArgs): EditableSettingsCloudContainer {\n const existing = this._containers.get(args.containerId);\n if (existing)\n return existing;\n const baseContainer = this._workspace.getContainer(args);\n const editable = new EditableSettingsContainerImpl(baseContainer);\n this._containers.set(args.containerId, editable);\n return editable;\n }\n\n public async getContainerAsync(props: WorkspaceContainerProps): Promise<EditableSettingsCloudContainer> {\n let accessToken = props.accessToken;\n if (undefined === accessToken && props.baseUri !== \"\")\n accessToken = await CloudSqlite.requestToken({ ...props, accessLevel: \"write\" });\n\n return this.getContainer({ ...props, accessToken: accessToken ?? \"\" });\n }\n\n public async findContainers(args: SettingsEditorNs.QuerySettingsContainersArgs): Promise<EditableSettingsCloudContainer[]> {\n const containers = await SettingsEditorNs.queryContainers(args);\n const userToken = await IModelHost.getAccessToken();\n const results: EditableSettingsCloudContainer[] = [];\n for (const containerMeta of containers) {\n // queryContainers already validates that BlobContainer.service is defined, so the non-null assertion is safe here.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tokenProps = await BlobContainer.service!.requestToken({ containerId: containerMeta.containerId, userToken, accessLevel: \"write\" });\n results.push(this.getContainer({\n containerId: containerMeta.containerId,\n baseUri: tokenProps.baseUri,\n storageType: tokenProps.provider,\n accessToken: tokenProps.token,\n writeable: true,\n }));\n }\n return results;\n }\n\n public close() {\n const errors: unknown[] = [];\n for (const [_, container] of this._containers) {\n try {\n container.cleanup();\n } catch (e) {\n errors.push(e);\n }\n }\n this._containers.clear();\n try {\n this._workspace.close();\n } catch (e) {\n errors.push(e);\n }\n if (errors.length === 1)\n throw errors[0];\n if (errors.length > 1)\n throw new Error(`SettingsEditor.close() encountered ${errors.length} errors: ${errors.map((e) => e instanceof Error ? e.message : String(e)).join(\"; \")}`);\n }\n}\n\nclass EditableSettingsContainerImpl implements EditableSettingsCloudContainer {\n public readonly [_implementationProhibited] = undefined;\n private readonly _inner: CloudSqliteContainer;\n private _settingsDbs = new Map<string, EditableSettingsDbImpl>();\n public writeLockHeldBy?: string;\n\n public constructor(inner: CloudSqliteContainer) {\n this._inner = inner;\n }\n\n // CloudSqliteContainer delegation\n public get workspace() { return this._inner.workspace; }\n public get filesDir() { return this._inner.filesDir; }\n public get cloudContainer() { return this._inner.cloudContainer; }\n public get fromProps() { return this._inner.fromProps; }\n public resolveDbFileName(props: WorkspaceDbProps) { return this._inner.resolveDbFileName(props); }\n\n public get cloudProps(): WorkspaceContainerProps | undefined {\n const cc = this.cloudContainer;\n if (undefined === cc)\n return undefined;\n return {\n baseUri: cc.baseUri,\n containerId: cc.containerId,\n storageType: cc.storageType as \"azure\" | \"google\",\n isPublic: cc.isPublic,\n };\n }\n\n public getEditableDb(props?: SettingsDbProps): EditableSettingsDb {\n const resolvedProps = props ?? { dbName: settingsDbDefaultName };\n const dbFileName = this.resolveDbFileName(resolvedProps);\n let db = this._settingsDbs.get(dbFileName);\n if (undefined === db) {\n db = new EditableSettingsDbImpl(resolvedProps, this);\n this._settingsDbs.set(dbFileName, db);\n }\n\n if (this.cloudContainer && !CloudSqlite.isSemverEditable(db.dbFileName, this.cloudContainer)) {\n this._settingsDbs.delete(dbFileName);\n CloudSqliteError.throwError(\"already-published\", { message: `${db.dbFileName} has been published and is not editable. Make a new version first.` });\n }\n\n return db;\n }\n\n public async createNewSettingsDbVersion(args: CreateNewSettingsDbVersionArgs): Promise<SettingsDbVersionResult> {\n const container = this.cloudContainer;\n if (undefined === container)\n WorkspaceError.throwError(\"no-cloud-container\", { message: \"versions require cloud containers\" });\n\n const fromDb = { ...args.fromProps, dbName: args.fromProps?.dbName ?? settingsDbDefaultName };\n return CloudSqlite.createNewDbVersion(container, { ...args, fromDb });\n }\n\n public async createDb(args: CreateSettingsDbArgs): Promise<EditableSettingsDb> {\n const dbName = args.dbName ?? settingsDbDefaultName;\n const version = args.version ?? \"0.0.0\";\n if (!this.cloudContainer) {\n SettingsSqliteDb.createNewDb(this.resolveDbFileName({ dbName }), { manifest: args.manifest });\n } else {\n const tempDbFile = join(KnownLocations.tmpdir, `empty-${Guid.createValue()}.itwin-settings`);\n try {\n SettingsSqliteDb.createNewDb(tempDbFile, { manifest: args.manifest });\n await CloudSqlite.uploadDb(this.cloudContainer, { localFileName: tempDbFile, dbName: CloudSqlite.makeSemverName(dbName, version) });\n } finally {\n if (fs.existsSync(tempDbFile))\n IModelJsFs.removeSync(tempDbFile);\n }\n }\n\n return this.getEditableDb({ dbName, version });\n }\n\n public acquireWriteLock(user: string): void {\n if (this.cloudContainer) {\n this.cloudContainer.acquireWriteLock(user);\n this.writeLockHeldBy = user;\n }\n }\n\n public releaseWriteLock(): void {\n if (this.cloudContainer) {\n this.cloudContainer.releaseWriteLock();\n this.writeLockHeldBy = undefined;\n }\n }\n\n public abandonChanges(): void {\n if (this.cloudContainer) {\n this.cloudContainer.abandonChanges();\n this.writeLockHeldBy = undefined;\n }\n }\n\n /** Close all editable settings dbs tracked by this container. */\n public cleanup(): void {\n for (const [_, db] of this._settingsDbs)\n db.close();\n this._settingsDbs.clear();\n }\n}\n\nclass EditableSettingsDbImpl extends SettingsDbImpl implements EditableSettingsDb {\n public override get container(): EditableSettingsCloudContainer {\n return this._container as EditableSettingsCloudContainer;\n }\n\n public constructor(props: SettingsDbProps, container: EditableSettingsContainerImpl) {\n super(props, container, SettingsPriority.application);\n }\n\n public override open(): void {\n this.sqliteDb.openDb(this.dbFileName, OpenMode.ReadWrite, this._container.cloudContainer);\n }\n\n public override close(): void {\n let error: unknown;\n try {\n if (this.isOpen) {\n const lastEditedBy = (this._container as EditableSettingsContainerImpl).writeLockHeldBy;\n if (lastEditedBy !== undefined)\n this.updateManifest({ ...this.manifest, lastEditedBy });\n this.sqliteDb.saveChanges();\n }\n } catch (e) {\n error = e;\n } finally {\n super.close();\n }\n if (error) {\n if (error instanceof Error)\n throw error;\n throw new Error(`EditableSettingsDb.close() failed`);\n }\n }\n\n public updateManifest(manifest: SettingsDbManifest): void {\n this.sqliteDb[_nativeDb].saveFileProperty(settingsManifestProperty, JSON.stringify(manifest));\n this._manifest = undefined;\n }\n\n public updateSettings(settings: SettingsContainer): void {\n const val = JSON.stringify(settings);\n this.sqliteDb.withSqliteStatement(\n \"INSERT INTO strings(id,value) VALUES(?,?) ON CONFLICT(id) DO UPDATE SET value=excluded.value WHERE value!=excluded.value\",\n (stmt) => {\n stmt.bindString(1, settingsResourceName);\n stmt.bindString(2, val);\n const rc = stmt.step();\n if (DbResult.BE_SQLITE_DONE !== rc)\n WorkspaceError.throwError(\"write-error\", { message: `settings [updateSettings], rc=${rc}` });\n },\n );\n this.sqliteDb.saveChanges();\n }\n\n public updateSetting(args: UpdateSettingArgs): void {\n this.withOpenDb(() => {\n const container = this.getSettings();\n container[args.settingName] = args.value;\n this.updateSettings(container);\n });\n }\n\n public removeSetting(settingName: SettingName): void {\n this.withOpenDb(() => {\n const container = this.getSettings();\n delete container[settingName];\n this.updateSettings(container);\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsEditorImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsEditorImpl.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AAeH,8DAyBC;AAMD,0EAuBC;AAnED,oDAAwD;AAExD,iDAA8C;AAC9C,2DAAqE;AACrE,mEAAoE;AACpE,qEAA2D;AAC3D,mDAA2D;AAG3D;;;GAGG;AACI,KAAK,UAAU,yBAAyB,CAAC,OAAmB;IACjE,MAAM,WAAW,GAAG,MAAM,mCAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,SAAS,KAAK,WAAW;QAC3B,OAAO,SAAS,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAA,wCAAwB,GAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,uBAAU,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,oCAAa,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,UAAU;YACb,gCAAkB,CAAC,UAAU,CAAC,kCAAkC,EAAE,EAAE,OAAO,EAAE,+DAA+D,WAAW,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAE1K,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;YACpC,WAAW,EAAE,UAAU,CAAC,KAAK;YAC7B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,WAAW;YACX,WAAW,EAAE,UAAU,CAAC,QAAQ;YAChC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,+BAA+B,CAAC,OAAmB;IACvE,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,QAAQ;QACV,OAAO,QAAQ,CAAC;IAElB,MAAM,MAAM,GAAG,IAAA,wCAAwB,GAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC;YACrD,KAAK,EAAE,EAAE,OAAO,EAAE;YAClB,QAAQ,EAAE;gBACR,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE,wCAAwC,OAAO,EAAE;aAC/D;YACD,aAAa,EAAE,UAAU;YACzB,MAAM,EAAE,oCAAuB;YAC/B,QAAQ,EAAE,EAAE,aAAa,EAAE,SAAS,OAAO,WAAW,EAAE;SACzD,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC","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 { ITwinSettingsError } from \"@itwin/core-common\";\nimport { GuidString } from \"@itwin/core-bentley\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { settingsWorkspaceDbName } from \"../../workspace/SettingsDb\";\nimport { SettingsContainers } from \"../../workspace/SettingsEditor\";\nimport { BlobContainer } from \"../../BlobContainerService\";\nimport { constructWorkspaceEditor } from \"./WorkspaceImpl\";\nimport { EditableWorkspaceContainer, WorkspaceEditor } from \"../../workspace/WorkspaceEditor\";\n\n/** Obtain a [[WorkspaceEditor]] targeting the single existing settings container for a given iTwin.\n * Returns `undefined` if no container exists. Throws if multiple containers are found.\n * @internal\n */\nexport async function getSettingsEditorForITwin(iTwinId: GuidString): Promise<{ editor: WorkspaceEditor; container: EditableWorkspaceContainer } | undefined> {\n const containerId = await SettingsContainers.getITwinContainerId(iTwinId);\n if (undefined === containerId)\n return undefined;\n\n const editor = constructWorkspaceEditor();\n try {\n const userToken = await IModelHost.getAccessToken();\n const tokenProps = await BlobContainer.service?.requestToken({ accessLevel: \"write\", containerId, userToken });\n if (!tokenProps)\n ITwinSettingsError.throwError(\"failed-to-obtain-container-token\", { message: `Failed to obtain access token for iTwin settings container '${containerId}'.`, iTwinId });\n\n const container = editor.getContainer({\n accessToken: tokenProps.token,\n baseUri: tokenProps.baseUri,\n containerId,\n storageType: tokenProps.provider,\n writeable: true,\n });\n\n return { editor, container };\n } catch (error) {\n editor.close();\n throw error;\n }\n}\n\n/** Construct a [[WorkspaceEditor]] targeting the single settings container for a given iTwin.\n * If no container exists, one is created with default metadata. Throws if multiple containers are found.\n * @internal\n */\nexport async function constructSettingsEditorForITwin(iTwinId: GuidString): Promise<{ editor: WorkspaceEditor; container: EditableWorkspaceContainer }> {\n const existing = await getSettingsEditorForITwin(iTwinId);\n if (existing)\n return existing;\n\n const editor = constructWorkspaceEditor();\n try {\n const container = await editor.createNewCloudContainer({\n scope: { iTwinId },\n metadata: {\n label: \"iTwin settings\",\n description: `Default settings container for iTwin ${iTwinId}`,\n },\n containerType: \"settings\",\n dbName: settingsWorkspaceDbName,\n manifest: { workspaceName: `iTwin ${iTwinId} settings` },\n });\n\n return { editor, container };\n } catch (error) {\n editor.close();\n throw error;\n }\n}\n"]}
|
|
@@ -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;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;
|
|
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;KAAE,CAAC;IAStH,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsImpl.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 * as fs from \"fs-extra\";\nimport { parse } from \"json5\";\nimport { extname, join } from \"path\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { Setting, SettingName, Settings, SettingsContainer, SettingsDictionary, SettingsDictionaryProps, SettingsDictionarySource, SettingsPriority } from \"../../workspace/Settings\";\nimport { _implementationProhibited } from \"../Symbols\";\n\nexport const dictionaryMatches = (d1: SettingsDictionarySource, d2: SettingsDictionarySource): boolean => {\n return (d1.workspaceDb === d2.workspaceDb) && (d1.name === d2.name);\n};\n\nclass SettingsDictionaryImpl implements SettingsDictionary {\n public readonly [_implementationProhibited] = undefined;\n public readonly props: SettingsDictionaryProps;\n public readonly settings: SettingsContainer;\n\n public constructor(props: SettingsDictionaryProps, settings: SettingsContainer) {\n this.props = { ...props }; // make a copy so it can't be changed by caller\n this.settings = settings;\n }\n\n public getSetting<T extends Setting>(settingName: string): T | undefined {\n const value = this.settings[settingName] as T | undefined;\n return undefined !== value ? Setting.clone(value) : undefined;\n }\n\n public toJSON(): SettingsContainer {\n return Setting.clone(this.settings);\n }\n}\n\n/**\n * Internal implementation of Settings interface.\n * @internal\n */\nexport class SettingsImpl implements Settings {\n public readonly [_implementationProhibited] = undefined;\n public dictionaries: SettingsDictionary[] = [];\n protected verifyPriority(_priority: SettingsPriority) { }\n public close() { }\n public readonly onSettingsChanged = new BeEvent<() => void>();\n\n public addFile(fileName: LocalFileName, priority: SettingsPriority) {\n this.addJson({ name: fileName, priority }, fs.readFileSync(fileName, \"utf-8\"));\n }\n\n public addDirectory(dirName: LocalDirName, priority: SettingsPriority) {\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\n const ext = extname(fileName);\n if (ext === \".json5\" || ext === \".json\")\n this.addFile(join(dirName, fileName), priority);\n }\n }\n\n public addJson(props: SettingsDictionaryProps, settingsJson: string) {\n this.addDictionary(props, parse(settingsJson));\n }\n\n public addDictionary(props: SettingsDictionaryProps, settings: SettingsContainer) {\n this.verifyPriority(props.priority);\n this.dropDictionary(props, false); // make sure we don't have the same dictionary twice\n const dict = new SettingsDictionaryImpl(props, settings);\n const doAdd = () => {\n for (let i = 0; i < this.dictionaries.length; ++i) {\n if (this.dictionaries[i].props.priority <= dict.props.priority) {\n this.dictionaries.splice(i, 0, dict);\n return;\n }\n }\n this.dictionaries.push(dict);\n };\n doAdd();\n this.onSettingsChanged.raiseEvent();\n }\n\n public getDictionary(source: SettingsDictionarySource): SettingsDictionary | undefined {\n for (const dictionary of this.dictionaries) {\n if (dictionaryMatches(dictionary.props, source))\n return dictionary;\n }\n return undefined;\n }\n\n public dropDictionary(source: SettingsDictionarySource, raiseEvent = true) {\n for (let i = 0; i < this.dictionaries.length; ++i) {\n if (dictionaryMatches(this.dictionaries[i].props, source)) {\n this.dictionaries.splice(i, 1);\n if (raiseEvent)\n this.onSettingsChanged.raiseEvent();\n return true;\n }\n }\n return false;\n }\n\n public * getSettingEntries<T extends Setting>(settingName: SettingName): Iterable<{ value: T, dictionary: SettingsDictionary}> {\n for (const dictionary of this.dictionaries) {\n const value = dictionary.getSetting<T>(settingName);\n if (undefined !== value) {\n yield { value, dictionary };\n }\n }\n }\n\n public * getSettingValues<T extends Setting>(settingName: SettingName): Iterable<T> {\n for (const entry of this.getSettingEntries<T>(settingName)) {\n yield entry.value;\n }\n }\n\n public getSetting<T extends Setting>(settingName: SettingName, defaultValue?: T): T | undefined {\n for (const value of this.getSettingValues<T>(settingName)) {\n return value;\n }\n\n return defaultValue;\n }\n\n // get the setting and verify the result is either undefined or the correct type. If so, return it. Otherwise throw an exception.\n private getResult<T extends Setting>(name: SettingName, expectedType: string) {\n const out = this.getSetting<T>(name);\n if (out === undefined || typeof out === expectedType)\n return out;\n throw new Error(`setting \"${name}\" is not a ${expectedType}: ${typeof out}`);\n }\n public getString(name: SettingName, defaultValue: string): string;\n public getString(name: SettingName): string | undefined;\n public getString(name: SettingName, defaultValue?: string): string | undefined {\n return this.getResult<string>(name, \"string\") ?? defaultValue;\n }\n public getBoolean(name: SettingName, defaultValue: boolean): boolean;\n public getBoolean(name: SettingName): boolean | undefined;\n public getBoolean(name: SettingName, defaultValue?: boolean): boolean | undefined {\n return this.getResult<boolean>(name, \"boolean\") ?? defaultValue;\n }\n public getNumber(name: SettingName, defaultValue: number): number;\n public getNumber(name: SettingName): number | undefined;\n public getNumber(name: SettingName, defaultValue?: number): number | undefined {\n return this.getResult<number>(name, \"number\") ?? defaultValue;\n }\n public getObject<T extends object>(name: SettingName, defaultValue: T): T;\n public getObject<T extends object>(name: SettingName): T | undefined;\n public getObject<T extends object>(name: SettingName, defaultValue?: T): T | undefined {\n const out = this.getResult<T>(name, \"object\");\n return out ? IModelHost.settingsSchemas.validateSetting(out, name) : defaultValue;\n }\n public getArray<T extends Setting>(name: SettingName, defaultValue: T[]): T[];\n public getArray<T extends Setting>(name: SettingName): T[] | undefined;\n public getArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\n if (IModelHost.settingsSchemas.settingDefs.get(name)?.combineArray) {\n return this.getCombinedArray<T>(name, defaultValue);\n }\n\n const out = this.getSetting<T[]>(name);\n if (out === undefined)\n return defaultValue;\n if (!Array.isArray(out))\n throw new Error(`setting ${name} is not an array: ${String(out)}`);\n return IModelHost.settingsSchemas.validateSetting(out, name);\n }\n\n private getCombinedArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\n let foundSetting = false;\n const out: T[] = [];\n for (const array of this.getSettingValues<T[]>(name)) {\n foundSetting = true;\n\n IModelHost.settingsSchemas.validateSetting(array, name);\n for (const value of array) {\n if (undefined === out.find((x) => Setting.areEqual(x, value))) {\n out.push(value);\n }\n }\n }\n\n return foundSetting ? out : defaultValue;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsImpl.js","sourceRoot":"","sources":["../../../../src/internal/workspace/SettingsImpl.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 * as fs from \"fs-extra\";\nimport { parse } from \"json5\";\nimport { extname, join } from \"path\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\nimport { IModelJsFs } from \"../../IModelJsFs\";\nimport { IModelHost } from \"../../IModelHost\";\nimport { Setting, SettingName, Settings, SettingsContainer, SettingsDictionary, SettingsDictionaryProps, SettingsDictionarySource, SettingsPriority } from \"../../workspace/Settings\";\nimport { _implementationProhibited } from \"../Symbols\";\n\nexport const dictionaryMatches = (d1: SettingsDictionarySource, d2: SettingsDictionarySource): boolean => {\n return (d1.workspaceDb === d2.workspaceDb) && (d1.name === d2.name);\n};\n\nclass SettingsDictionaryImpl implements SettingsDictionary {\n public readonly [_implementationProhibited] = undefined;\n public readonly props: SettingsDictionaryProps;\n public readonly settings: SettingsContainer;\n\n public constructor(props: SettingsDictionaryProps, settings: SettingsContainer) {\n this.props = { ...props }; // make a copy so it can't be changed by caller\n this.settings = settings;\n }\n\n public getSetting<T extends Setting>(settingName: string): T | undefined {\n const value = this.settings[settingName] as T | undefined;\n return undefined !== value ? Setting.clone(value) : undefined;\n }\n\n public toJSON(): SettingsContainer {\n return Setting.clone(this.settings);\n }\n}\n\n/**\n * Internal implementation of Settings interface.\n * @internal\n */\nexport class SettingsImpl implements Settings {\n public readonly [_implementationProhibited] = undefined;\n public dictionaries: SettingsDictionary[] = [];\n protected verifyPriority(_priority: SettingsPriority) { }\n public close() { }\n public readonly onSettingsChanged = new BeEvent<() => void>();\n\n public addFile(fileName: LocalFileName, priority: SettingsPriority) {\n this.addJson({ name: fileName, priority }, fs.readFileSync(fileName, \"utf-8\"));\n }\n\n public addDirectory(dirName: LocalDirName, priority: SettingsPriority) {\n for (const fileName of IModelJsFs.readdirSync(dirName)) {\n const ext = extname(fileName);\n if (ext === \".json5\" || ext === \".json\")\n this.addFile(join(dirName, fileName), priority);\n }\n }\n\n public addJson(props: SettingsDictionaryProps, settingsJson: string) {\n this.addDictionary(props, parse(settingsJson));\n }\n\n public addDictionary(props: SettingsDictionaryProps, settings: SettingsContainer) {\n this.verifyPriority(props.priority);\n this.dropDictionary(props, false); // make sure we don't have the same dictionary twice\n const dict = new SettingsDictionaryImpl(props, settings);\n const doAdd = () => {\n for (let i = 0; i < this.dictionaries.length; ++i) {\n if (this.dictionaries[i].props.priority <= dict.props.priority) {\n this.dictionaries.splice(i, 0, dict);\n return;\n }\n }\n this.dictionaries.push(dict);\n };\n doAdd();\n this.onSettingsChanged.raiseEvent();\n }\n\n public getDictionary(source: SettingsDictionarySource): SettingsDictionary | undefined {\n for (const dictionary of this.dictionaries) {\n if (dictionaryMatches(dictionary.props, source))\n return dictionary;\n }\n return undefined;\n }\n\n public dropDictionary(source: SettingsDictionarySource, raiseEvent = true) {\n for (let i = 0; i < this.dictionaries.length; ++i) {\n if (dictionaryMatches(this.dictionaries[i].props, source)) {\n this.dictionaries.splice(i, 1);\n if (raiseEvent)\n this.onSettingsChanged.raiseEvent();\n return true;\n }\n }\n return false;\n }\n\n public * getSettingEntries<T extends Setting>(settingName: SettingName): Iterable<{ value: T, dictionary: SettingsDictionary }> {\n for (const dictionary of this.dictionaries) {\n const value = dictionary.getSetting<T>(settingName);\n if (undefined !== value) {\n yield { value, dictionary };\n }\n }\n }\n\n public * getSettingValues<T extends Setting>(settingName: SettingName): Iterable<T> {\n for (const entry of this.getSettingEntries<T>(settingName)) {\n yield entry.value;\n }\n }\n\n public getSetting<T extends Setting>(settingName: SettingName, defaultValue?: T): T | undefined {\n for (const value of this.getSettingValues<T>(settingName)) {\n return value;\n }\n\n return defaultValue;\n }\n\n // get the setting and verify the result is either undefined or the correct type. If so, return it. Otherwise throw an exception.\n private getResult<T extends Setting>(name: SettingName, expectedType: string) {\n const out = this.getSetting<T>(name);\n if (out === undefined || typeof out === expectedType)\n return out;\n throw new Error(`setting \"${name}\" is not a ${expectedType}: ${typeof out}`);\n }\n public getString(name: SettingName, defaultValue: string): string;\n public getString(name: SettingName): string | undefined;\n public getString(name: SettingName, defaultValue?: string): string | undefined {\n return this.getResult<string>(name, \"string\") ?? defaultValue;\n }\n public getBoolean(name: SettingName, defaultValue: boolean): boolean;\n public getBoolean(name: SettingName): boolean | undefined;\n public getBoolean(name: SettingName, defaultValue?: boolean): boolean | undefined {\n return this.getResult<boolean>(name, \"boolean\") ?? defaultValue;\n }\n public getNumber(name: SettingName, defaultValue: number): number;\n public getNumber(name: SettingName): number | undefined;\n public getNumber(name: SettingName, defaultValue?: number): number | undefined {\n return this.getResult<number>(name, \"number\") ?? defaultValue;\n }\n public getObject<T extends object>(name: SettingName, defaultValue: T): T;\n public getObject<T extends object>(name: SettingName): T | undefined;\n public getObject<T extends object>(name: SettingName, defaultValue?: T): T | undefined {\n const out = this.getResult<T>(name, \"object\");\n return out ? IModelHost.settingsSchemas.validateSetting(out, name) : defaultValue;\n }\n public getArray<T extends Setting>(name: SettingName, defaultValue: T[]): T[];\n public getArray<T extends Setting>(name: SettingName): T[] | undefined;\n public getArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\n if (IModelHost.settingsSchemas.settingDefs.get(name)?.combineArray) {\n return this.getCombinedArray<T>(name, defaultValue);\n }\n\n const out = this.getSetting<T[]>(name);\n if (out === undefined)\n return defaultValue;\n if (!Array.isArray(out))\n throw new Error(`setting ${name} is not an array: ${String(out)}`);\n return IModelHost.settingsSchemas.validateSetting(out, name);\n }\n\n private getCombinedArray<T extends Setting>(name: SettingName, defaultValue?: T[]): T[] | undefined {\n let foundSetting = false;\n const out: T[] = [];\n for (const array of this.getSettingValues<T[]>(name)) {\n foundSetting = true;\n\n IModelHost.settingsSchemas.validateSetting(array, name);\n for (const value of array) {\n if (undefined === out.find((x) => Setting.areEqual(x, value))) {\n out.push(value);\n }\n }\n }\n\n return foundSetting ? out : defaultValue;\n }\n}\n"]}
|
|
@@ -10,7 +10,6 @@ export declare const workspaceDbFileExt = "itwin-workspace";
|
|
|
10
10
|
export declare function constructWorkspaceDb(props: WorkspaceDbProps, container: WorkspaceContainer): WorkspaceDb;
|
|
11
11
|
export declare function constructWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace;
|
|
12
12
|
export declare function constructWorkspaceEditor(): WorkspaceEditor;
|
|
13
|
-
export declare function constructSettingsEditorWorkspace(settings: Settings, opts?: WorkspaceOpts): OwnedWorkspace;
|
|
14
13
|
/**
|
|
15
14
|
* Validate that a WorkspaceContainer.Id is valid.
|
|
16
15
|
* The rules for ContainerIds (from Azure, see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAoB,iBAAiB,EAA+C,MAAM,oBAAoB,CAAC;AAMtH,OAAO,EAAe,QAAQ,EAAgE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkspaceImpl.d.ts","sourceRoot":"","sources":["../../../../src/internal/workspace/WorkspaceImpl.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAoB,iBAAiB,EAA+C,MAAM,oBAAoB,CAAC;AAMtH,OAAO,EAAe,QAAQ,EAAgE,MAAM,0BAA0B,CAAC;AAI/H,OAAO,EACsB,SAAS,EAAE,kBAAkB,EAAE,oBAAoB,EAA2B,WAAW,EAC/F,oBAAoB,EAA0F,gBAAgB,EACtE,aAAa,EAC3F,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAqH,eAAe,EAAwC,MAAM,iCAAiC,CAAC;AAY3N,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AA2vBpD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,kBAAkB,GAAG,WAAW,CAExG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,cAAc,CAE3F;AAED,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,oBAAoB,QAGpE;AAED,eAAO,MAAM,yBAAyB,EAAE,iBAAgE,CAAC;AAOzG,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAEvG;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;CACf"}
|