@theia/workspace 1.68.0 → 1.68.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/lib/browser/index.d.ts +1 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +1 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/metadata-storage/index.d.ts +18 -0
- package/lib/browser/metadata-storage/index.d.ts.map +1 -0
- package/lib/browser/metadata-storage/index.js +25 -0
- package/lib/browser/metadata-storage/index.js.map +1 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.d.ts +94 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.d.ts.map +1 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.js +191 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.js.map +1 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.spec.d.ts +17 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.spec.d.ts.map +1 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.spec.js +279 -0
- package/lib/browser/metadata-storage/workspace-metadata-storage-service.spec.js.map +1 -0
- package/lib/browser/metadata-storage/workspace-metadata-store.d.ts +81 -0
- package/lib/browser/metadata-storage/workspace-metadata-store.d.ts.map +1 -0
- package/lib/browser/metadata-storage/workspace-metadata-store.js +137 -0
- package/lib/browser/metadata-storage/workspace-metadata-store.js.map +1 -0
- package/lib/browser/workspace-frontend-module.d.ts.map +1 -1
- package/lib/browser/workspace-frontend-module.js +6 -0
- package/lib/browser/workspace-frontend-module.js.map +1 -1
- package/lib/browser/workspace-trust-service.d.ts.map +1 -1
- package/lib/browser/workspace-trust-service.js +4 -4
- package/lib/browser/workspace-trust-service.js.map +1 -1
- package/package.json +6 -6
- package/src/browser/index.ts +1 -0
- package/src/browser/metadata-storage/index.ts +23 -0
- package/src/browser/metadata-storage/workspace-metadata-storage-service.spec.ts +342 -0
- package/src/browser/metadata-storage/workspace-metadata-storage-service.ts +244 -0
- package/src/browser/metadata-storage/workspace-metadata-store.ts +172 -0
- package/src/browser/workspace-frontend-module.ts +7 -0
- package/src/browser/workspace-trust-service.ts +4 -5
package/lib/browser/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAgBA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAgBA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC"}
|
package/lib/browser/index.js
CHANGED
|
@@ -22,4 +22,5 @@ tslib_1.__exportStar(require("./canonical-uri-service"), exports);
|
|
|
22
22
|
tslib_1.__exportStar(require("./workspace-frontend-contribution"), exports);
|
|
23
23
|
tslib_1.__exportStar(require("./workspace-frontend-module"), exports);
|
|
24
24
|
tslib_1.__exportStar(require("./workspace-trust-service"), exports);
|
|
25
|
+
tslib_1.__exportStar(require("./metadata-storage"), exports);
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
package/lib/browser/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,+DAAqC;AACrC,8DAAoC;AACpC,kEAAwC;AACxC,4EAAkD;AAClD,sEAA4C;AAC5C,oEAA0C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,+DAAqC;AACrC,8DAAoC;AACpC,kEAAwC;AACxC,4EAAkD;AAClD,sEAA4C;AAC5C,oEAA0C;AAC1C,6DAAmC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (C) 2026 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
export { WorkspaceMetadataStore, WorkspaceMetadataStoreImpl } from './workspace-metadata-store';
|
|
17
|
+
export { WorkspaceMetadataStorageService, WorkspaceMetadataStorageServiceImpl, WorkspaceMetadataIndex, WorkspaceMetadataStoreFactory } from './workspace-metadata-storage-service';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/metadata-storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAElF,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EACH,+BAA+B,EAC/B,mCAAmC,EACnC,sBAAsB,EACtB,6BAA6B,EAChC,MAAM,sCAAsC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/********************************************************************************
|
|
3
|
+
* Copyright (C) 2026 EclipseSource and others.
|
|
4
|
+
*
|
|
5
|
+
* This program and the accompanying materials are made available under the
|
|
6
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
*
|
|
9
|
+
* This Source Code may also be made available under the following Secondary
|
|
10
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
* with the GNU Classpath Exception which is available at
|
|
13
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
********************************************************************************/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.WorkspaceMetadataStoreFactory = exports.WorkspaceMetadataStorageServiceImpl = exports.WorkspaceMetadataStorageService = exports.WorkspaceMetadataStoreImpl = void 0;
|
|
19
|
+
var workspace_metadata_store_1 = require("./workspace-metadata-store");
|
|
20
|
+
Object.defineProperty(exports, "WorkspaceMetadataStoreImpl", { enumerable: true, get: function () { return workspace_metadata_store_1.WorkspaceMetadataStoreImpl; } });
|
|
21
|
+
var workspace_metadata_storage_service_1 = require("./workspace-metadata-storage-service");
|
|
22
|
+
Object.defineProperty(exports, "WorkspaceMetadataStorageService", { enumerable: true, get: function () { return workspace_metadata_storage_service_1.WorkspaceMetadataStorageService; } });
|
|
23
|
+
Object.defineProperty(exports, "WorkspaceMetadataStorageServiceImpl", { enumerable: true, get: function () { return workspace_metadata_storage_service_1.WorkspaceMetadataStorageServiceImpl; } });
|
|
24
|
+
Object.defineProperty(exports, "WorkspaceMetadataStoreFactory", { enumerable: true, get: function () { return workspace_metadata_storage_service_1.WorkspaceMetadataStoreFactory; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/metadata-storage/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;AAElF,uEAAgG;AAA/D,sIAAA,0BAA0B,OAAA;AAC3D,2FAK8C;AAJ1C,qJAAA,+BAA+B,OAAA;AAC/B,yJAAA,mCAAmC,OAAA;AAEnC,mJAAA,6BAA6B,OAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (C) 2026 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { FileService } from '@theia/filesystem/lib/browser/file-service';
|
|
17
|
+
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
|
|
18
|
+
import { ILogger } from '@theia/core/lib/common/logger';
|
|
19
|
+
import { URI } from '@theia/core/lib/common/uri';
|
|
20
|
+
import { WorkspaceService } from '../workspace-service';
|
|
21
|
+
import { WorkspaceMetadataStore, WorkspaceMetadataStoreImpl } from './workspace-metadata-store';
|
|
22
|
+
export declare const WorkspaceMetadataStoreFactory: unique symbol;
|
|
23
|
+
export type WorkspaceMetadataStoreFactory = () => WorkspaceMetadataStoreImpl;
|
|
24
|
+
/**
|
|
25
|
+
* Index mapping workspace root paths to UUIDs.
|
|
26
|
+
* Stored at $CONFIGDIR/workspace-metadata/index.json
|
|
27
|
+
*/
|
|
28
|
+
export interface WorkspaceMetadataIndex {
|
|
29
|
+
[workspacePath: string]: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Service for managing workspace-specific metadata storage.
|
|
33
|
+
* Provides isolated storage directories for different features within a workspace.
|
|
34
|
+
*
|
|
35
|
+
* This is different to the `WorkspaceStorageService` in that it is an unlimited free-form
|
|
36
|
+
* storage area _in the filesystem_ and not in the browser's local storage.
|
|
37
|
+
*/
|
|
38
|
+
export declare const WorkspaceMetadataStorageService: unique symbol;
|
|
39
|
+
export interface WorkspaceMetadataStorageService {
|
|
40
|
+
/**
|
|
41
|
+
* Gets an existing metadata store for the given key, or creates a new one if it doesn't exist.
|
|
42
|
+
*
|
|
43
|
+
* @param key A unique identifier for the metadata store. Special characters will be replaced with hyphens.
|
|
44
|
+
* @returns The existing or newly created WorkspaceMetadataStore instance
|
|
45
|
+
* @throws Error if no workspace is currently open
|
|
46
|
+
*/
|
|
47
|
+
getOrCreateStore(key: string): Promise<WorkspaceMetadataStore>;
|
|
48
|
+
}
|
|
49
|
+
export declare class WorkspaceMetadataStorageServiceImpl implements WorkspaceMetadataStorageService {
|
|
50
|
+
protected readonly fileService: FileService;
|
|
51
|
+
protected readonly workspaceService: WorkspaceService;
|
|
52
|
+
protected readonly envVariableServer: EnvVariablesServer;
|
|
53
|
+
protected readonly logger: ILogger;
|
|
54
|
+
protected readonly storeFactory: WorkspaceMetadataStoreFactory;
|
|
55
|
+
/**
|
|
56
|
+
* Registry of created stores by their mangled keys
|
|
57
|
+
*/
|
|
58
|
+
protected readonly stores: Map<string, WorkspaceMetadataStore>;
|
|
59
|
+
/**
|
|
60
|
+
* Cached metadata root directory (e.g., file://$CONFIGDIR/workspace-metadata/)
|
|
61
|
+
*/
|
|
62
|
+
protected metadataRoot?: URI;
|
|
63
|
+
/**
|
|
64
|
+
* Cached index file location
|
|
65
|
+
*/
|
|
66
|
+
protected indexFile?: URI;
|
|
67
|
+
getOrCreateStore(key: string): Promise<WorkspaceMetadataStore>;
|
|
68
|
+
protected doCreateStore(key: string, mangledKey: string): Promise<WorkspaceMetadataStore>;
|
|
69
|
+
/**
|
|
70
|
+
* Mangles a key to make it safe for use as a directory name.
|
|
71
|
+
* Replaces all characters except alphanumerics, hyphens, and underscores with hyphens.
|
|
72
|
+
*/
|
|
73
|
+
protected mangleKey(key: string): string;
|
|
74
|
+
protected getFirstWorkspaceRoot(): URI | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Gets or creates a UUID for the given workspace root.
|
|
77
|
+
* UUIDs are stored in an index file and reused if the same workspace is opened again.
|
|
78
|
+
*/
|
|
79
|
+
protected getOrCreateWorkspaceUUID(workspaceRoot: URI): Promise<string>;
|
|
80
|
+
protected loadIndex(): Promise<WorkspaceMetadataIndex>;
|
|
81
|
+
protected saveIndex(index: WorkspaceMetadataIndex): Promise<void>;
|
|
82
|
+
protected getMetadataRoot(): Promise<URI>;
|
|
83
|
+
protected getIndexFile(): Promise<URI>;
|
|
84
|
+
/**
|
|
85
|
+
* Gets the location for a store given a workspace UUID and mangled key.
|
|
86
|
+
*/
|
|
87
|
+
protected getStoreLocation(workspaceUuid: string, mangledKey: string): Promise<URI>;
|
|
88
|
+
/**
|
|
89
|
+
* Resolves the current store location for a given mangled key.
|
|
90
|
+
* Used when workspace changes to get the new location.
|
|
91
|
+
*/
|
|
92
|
+
protected resolveStoreLocation(mangledKey: string): Promise<URI>;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=workspace-metadata-storage-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-metadata-storage-service.d.ts","sourceRoot":"","sources":["../../../src/browser/metadata-storage/workspace-metadata-storage-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAEhG,eAAO,MAAM,6BAA6B,eAA0C,CAAC;AACrF,MAAM,MAAM,6BAA6B,GAAG,MAAM,0BAA0B,CAAC;AAE7E;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,eAA4C,CAAC;AACzF,MAAM,WAAW,+BAA+B;IAC5C;;;;;;OAMG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAClE;AAED,qBACa,mCAAoC,YAAW,+BAA+B;IAGvF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAG5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAGzD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC;IAE/D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,sCAA6C;IAEtE;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC;IAE7B;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC;IAEpB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;cAepD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA2B/F;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIxC,SAAS,CAAC,qBAAqB,IAAI,GAAG,GAAG,SAAS;IAKlD;;;OAGG;cACa,wBAAwB,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;cAqB7D,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC;cAiB5C,SAAS,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;cAoBvD,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;cAQ/B,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IAQ5C;;OAEG;cACa,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAKzF;;;OAGG;cACa,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CASzE"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/********************************************************************************
|
|
3
|
+
* Copyright (C) 2026 EclipseSource and others.
|
|
4
|
+
*
|
|
5
|
+
* This program and the accompanying materials are made available under the
|
|
6
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
*
|
|
9
|
+
* This Source Code may also be made available under the following Secondary
|
|
10
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
* with the GNU Classpath Exception which is available at
|
|
13
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
********************************************************************************/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.WorkspaceMetadataStorageServiceImpl = exports.WorkspaceMetadataStorageService = exports.WorkspaceMetadataStoreFactory = void 0;
|
|
19
|
+
const tslib_1 = require("tslib");
|
|
20
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
21
|
+
const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
|
|
22
|
+
const env_variables_1 = require("@theia/core/lib/common/env-variables");
|
|
23
|
+
const logger_1 = require("@theia/core/lib/common/logger");
|
|
24
|
+
const uri_1 = require("@theia/core/lib/common/uri");
|
|
25
|
+
const uuid_1 = require("@theia/core/lib/common/uuid");
|
|
26
|
+
const buffer_1 = require("@theia/core/lib/common/buffer");
|
|
27
|
+
const workspace_service_1 = require("../workspace-service");
|
|
28
|
+
exports.WorkspaceMetadataStoreFactory = Symbol('WorkspaceMetadataStoreFactory');
|
|
29
|
+
/**
|
|
30
|
+
* Service for managing workspace-specific metadata storage.
|
|
31
|
+
* Provides isolated storage directories for different features within a workspace.
|
|
32
|
+
*
|
|
33
|
+
* This is different to the `WorkspaceStorageService` in that it is an unlimited free-form
|
|
34
|
+
* storage area _in the filesystem_ and not in the browser's local storage.
|
|
35
|
+
*/
|
|
36
|
+
exports.WorkspaceMetadataStorageService = Symbol('WorkspaceMetadataStorageService');
|
|
37
|
+
let WorkspaceMetadataStorageServiceImpl = class WorkspaceMetadataStorageServiceImpl {
|
|
38
|
+
constructor() {
|
|
39
|
+
/**
|
|
40
|
+
* Registry of created stores by their mangled keys
|
|
41
|
+
*/
|
|
42
|
+
this.stores = new Map();
|
|
43
|
+
}
|
|
44
|
+
async getOrCreateStore(key) {
|
|
45
|
+
const mangledKey = this.mangleKey(key);
|
|
46
|
+
const existingStore = this.stores.get(mangledKey);
|
|
47
|
+
if (existingStore) {
|
|
48
|
+
this.logger.debug(`Returning existing metadata store for key '${key}'`, {
|
|
49
|
+
mangledKey,
|
|
50
|
+
location: existingStore.location.toString()
|
|
51
|
+
});
|
|
52
|
+
return existingStore;
|
|
53
|
+
}
|
|
54
|
+
return this.doCreateStore(key, mangledKey);
|
|
55
|
+
}
|
|
56
|
+
async doCreateStore(key, mangledKey) {
|
|
57
|
+
const workspaceRoot = this.getFirstWorkspaceRoot();
|
|
58
|
+
if (!workspaceRoot) {
|
|
59
|
+
throw new Error('Cannot create metadata store: no workspace is currently open');
|
|
60
|
+
}
|
|
61
|
+
const workspaceUuid = await this.getOrCreateWorkspaceUUID(workspaceRoot);
|
|
62
|
+
const storeLocation = await this.getStoreLocation(workspaceUuid, mangledKey);
|
|
63
|
+
const store = this.storeFactory();
|
|
64
|
+
store.initialize(mangledKey, storeLocation, async () => this.resolveStoreLocation(mangledKey), () => this.stores.delete(mangledKey));
|
|
65
|
+
this.stores.set(mangledKey, store);
|
|
66
|
+
this.logger.debug(`Created metadata store for key '${key}'`, {
|
|
67
|
+
mangledKey,
|
|
68
|
+
location: storeLocation.toString()
|
|
69
|
+
});
|
|
70
|
+
return store;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Mangles a key to make it safe for use as a directory name.
|
|
74
|
+
* Replaces all characters except alphanumerics, hyphens, and underscores with hyphens.
|
|
75
|
+
*/
|
|
76
|
+
mangleKey(key) {
|
|
77
|
+
return key.replace(/[^a-zA-Z0-9-_]/g, '-');
|
|
78
|
+
}
|
|
79
|
+
getFirstWorkspaceRoot() {
|
|
80
|
+
const roots = this.workspaceService.tryGetRoots();
|
|
81
|
+
return roots.length > 0 ? roots[0].resource : undefined;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets or creates a UUID for the given workspace root.
|
|
85
|
+
* UUIDs are stored in an index file and reused if the same workspace is opened again.
|
|
86
|
+
*/
|
|
87
|
+
async getOrCreateWorkspaceUUID(workspaceRoot) {
|
|
88
|
+
const index = await this.loadIndex();
|
|
89
|
+
const workspacePath = workspaceRoot.path.toString();
|
|
90
|
+
if (index[workspacePath]) {
|
|
91
|
+
return index[workspacePath];
|
|
92
|
+
}
|
|
93
|
+
const newUuid = (0, uuid_1.generateUuid)();
|
|
94
|
+
index[workspacePath] = newUuid;
|
|
95
|
+
await this.saveIndex(index);
|
|
96
|
+
this.logger.debug('Generated new UUID for workspace', {
|
|
97
|
+
workspacePath,
|
|
98
|
+
uuid: newUuid
|
|
99
|
+
});
|
|
100
|
+
return newUuid;
|
|
101
|
+
}
|
|
102
|
+
async loadIndex() {
|
|
103
|
+
const indexFileUri = await this.getIndexFile();
|
|
104
|
+
try {
|
|
105
|
+
const exists = await this.fileService.exists(indexFileUri);
|
|
106
|
+
if (!exists) {
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
const content = await this.fileService.readFile(indexFileUri);
|
|
110
|
+
return JSON.parse(content.value.toString());
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
this.logger.warn('Failed to load workspace metadata index, using empty index', error);
|
|
114
|
+
return {};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async saveIndex(index) {
|
|
118
|
+
const indexFileUri = await this.getIndexFile();
|
|
119
|
+
try {
|
|
120
|
+
// Ensure metadata root exists
|
|
121
|
+
const metadataRootUri = await this.getMetadataRoot();
|
|
122
|
+
await this.fileService.createFolder(metadataRootUri);
|
|
123
|
+
// Write index file
|
|
124
|
+
const content = JSON.stringify(index, undefined, 2);
|
|
125
|
+
await this.fileService.writeFile(indexFileUri, buffer_1.BinaryBuffer.fromString(content));
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
this.logger.error('Failed to save workspace metadata index', error);
|
|
129
|
+
throw error;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async getMetadataRoot() {
|
|
133
|
+
if (!this.metadataRoot) {
|
|
134
|
+
const configDirUri = await this.envVariableServer.getConfigDirUri();
|
|
135
|
+
this.metadataRoot = new uri_1.URI(configDirUri).resolve('workspace-metadata');
|
|
136
|
+
}
|
|
137
|
+
return this.metadataRoot;
|
|
138
|
+
}
|
|
139
|
+
async getIndexFile() {
|
|
140
|
+
if (!this.indexFile) {
|
|
141
|
+
const metadataRoot = await this.getMetadataRoot();
|
|
142
|
+
this.indexFile = metadataRoot.resolve('index.json');
|
|
143
|
+
}
|
|
144
|
+
return this.indexFile;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Gets the location for a store given a workspace UUID and mangled key.
|
|
148
|
+
*/
|
|
149
|
+
async getStoreLocation(workspaceUuid, mangledKey) {
|
|
150
|
+
const metadataRoot = await this.getMetadataRoot();
|
|
151
|
+
return metadataRoot.resolve(workspaceUuid).resolve(mangledKey);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Resolves the current store location for a given mangled key.
|
|
155
|
+
* Used when workspace changes to get the new location.
|
|
156
|
+
*/
|
|
157
|
+
async resolveStoreLocation(mangledKey) {
|
|
158
|
+
const workspaceRoot = this.getFirstWorkspaceRoot();
|
|
159
|
+
if (!workspaceRoot) {
|
|
160
|
+
throw new Error('No workspace is currently open');
|
|
161
|
+
}
|
|
162
|
+
const workspaceUuid = await this.getOrCreateWorkspaceUUID(workspaceRoot);
|
|
163
|
+
return this.getStoreLocation(workspaceUuid, mangledKey);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
exports.WorkspaceMetadataStorageServiceImpl = WorkspaceMetadataStorageServiceImpl;
|
|
167
|
+
tslib_1.__decorate([
|
|
168
|
+
(0, inversify_1.inject)(file_service_1.FileService),
|
|
169
|
+
tslib_1.__metadata("design:type", file_service_1.FileService)
|
|
170
|
+
], WorkspaceMetadataStorageServiceImpl.prototype, "fileService", void 0);
|
|
171
|
+
tslib_1.__decorate([
|
|
172
|
+
(0, inversify_1.inject)(workspace_service_1.WorkspaceService),
|
|
173
|
+
tslib_1.__metadata("design:type", workspace_service_1.WorkspaceService)
|
|
174
|
+
], WorkspaceMetadataStorageServiceImpl.prototype, "workspaceService", void 0);
|
|
175
|
+
tslib_1.__decorate([
|
|
176
|
+
(0, inversify_1.inject)(env_variables_1.EnvVariablesServer),
|
|
177
|
+
tslib_1.__metadata("design:type", Object)
|
|
178
|
+
], WorkspaceMetadataStorageServiceImpl.prototype, "envVariableServer", void 0);
|
|
179
|
+
tslib_1.__decorate([
|
|
180
|
+
(0, inversify_1.inject)(logger_1.ILogger),
|
|
181
|
+
(0, inversify_1.named)('WorkspaceMetadataStorage'),
|
|
182
|
+
tslib_1.__metadata("design:type", Object)
|
|
183
|
+
], WorkspaceMetadataStorageServiceImpl.prototype, "logger", void 0);
|
|
184
|
+
tslib_1.__decorate([
|
|
185
|
+
(0, inversify_1.inject)(exports.WorkspaceMetadataStoreFactory),
|
|
186
|
+
tslib_1.__metadata("design:type", Function)
|
|
187
|
+
], WorkspaceMetadataStorageServiceImpl.prototype, "storeFactory", void 0);
|
|
188
|
+
exports.WorkspaceMetadataStorageServiceImpl = WorkspaceMetadataStorageServiceImpl = tslib_1.__decorate([
|
|
189
|
+
(0, inversify_1.injectable)()
|
|
190
|
+
], WorkspaceMetadataStorageServiceImpl);
|
|
191
|
+
//# sourceMappingURL=workspace-metadata-storage-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-metadata-storage-service.js","sourceRoot":"","sources":["../../../src/browser/metadata-storage/workspace-metadata-storage-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (C) 2026 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=workspace-metadata-storage-service.spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-metadata-storage-service.spec.d.ts","sourceRoot":"","sources":["../../../src/browser/metadata-storage/workspace-metadata-storage-service.spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF"}
|