@opensumi/ide-core-common 3.4.4-next-1728985193.0 → 3.4.4
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/remote-service/README.md +9 -9
- package/lib/remote-service/data-store/decorators.d.ts +2 -2
- package/lib/remote-service/data-store/decorators.d.ts.map +1 -1
- package/lib/remote-service/data-store/decorators.js +21 -19
- package/lib/remote-service/data-store/decorators.js.map +1 -1
- package/lib/remote-service/data-store/select.d.ts +2 -2
- package/lib/remote-service/data-store/select.d.ts.map +1 -1
- package/lib/remote-service/data-store/select.js.map +1 -1
- package/lib/remote-service/data-store/store.d.ts +17 -20
- package/lib/remote-service/data-store/store.d.ts.map +1 -1
- package/lib/remote-service/data-store/store.js +4 -32
- package/lib/remote-service/data-store/store.js.map +1 -1
- package/package.json +4 -4
- package/src/remote-service/README.md +9 -9
- package/src/remote-service/data-store/decorators.ts +25 -39
- package/src/remote-service/data-store/select.ts +3 -3
- package/src/remote-service/data-store/store.ts +21 -60
|
@@ -345,18 +345,16 @@ class TerminalService {
|
|
|
345
345
|
由于装饰器的执行是在类实例化之前,所以我们可以在 `GDataStore` 这个装饰器中收集 token,然后将它们加入 Injector 即可:
|
|
346
346
|
|
|
347
347
|
```ts
|
|
348
|
-
|
|
349
|
-
// ...
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
export type GDataStore<T, K = number> = InMemoryDataStore<T, K>;
|
|
348
|
+
const dataStore = [] as [string, DataStoreOptions][];
|
|
353
349
|
export function GDataStore(token: string, options?: DataStoreOptions): PropertyDecorator {
|
|
354
|
-
|
|
350
|
+
dataStore.push([token, options]);
|
|
355
351
|
|
|
356
|
-
return Autowired(
|
|
357
|
-
tag: token,
|
|
352
|
+
return Autowired(GDataStore, {
|
|
353
|
+
tag: String(token),
|
|
358
354
|
});
|
|
359
355
|
}
|
|
356
|
+
|
|
357
|
+
export type GDataStore<T> = InMemoryDataStore<T>;
|
|
360
358
|
```
|
|
361
359
|
|
|
362
360
|
用一个闭包中的变量 `dataStore` 来储存,然后在创建 Injector 的时候将所有的 token 放入 injector:
|
|
@@ -365,8 +363,10 @@ export function GDataStore(token: string, options?: DataStoreOptions): PropertyD
|
|
|
365
363
|
function _injectDataStores(injector: Injector) {
|
|
366
364
|
dataStore.forEach(([token, opts]) => {
|
|
367
365
|
injector.addProviders({
|
|
368
|
-
token,
|
|
366
|
+
token: GDataStore,
|
|
369
367
|
useValue: new InMemoryDataStore(opts),
|
|
368
|
+
tag: String(token),
|
|
369
|
+
dropdownForTag: false,
|
|
370
370
|
});
|
|
371
371
|
});
|
|
372
372
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Injector } from '@opensumi/di';
|
|
2
2
|
import { DataStoreOptions, InMemoryDataStore } from './store';
|
|
3
|
-
export type GDataStore<
|
|
3
|
+
export type GDataStore<T> = InMemoryDataStore<T>;
|
|
4
4
|
export declare function GDataStore(token: string, options?: DataStoreOptions): PropertyDecorator;
|
|
5
|
-
export type SessionDataStore<
|
|
5
|
+
export type SessionDataStore<T> = InMemoryDataStore<T>;
|
|
6
6
|
export declare function SessionDataStore(token: string, options?: DataStoreOptions): PropertyDecorator;
|
|
7
7
|
export declare function injectGDataStores(injector: Injector): void;
|
|
8
8
|
export declare function injectSessionDataStores(injector: Injector): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../../src/remote-service/data-store/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../../src/remote-service/data-store/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgB9D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACjD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAMvF;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAM7F;AAkBD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,QAEnD;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,QAEzD"}
|
|
@@ -4,46 +4,48 @@ exports.injectSessionDataStores = exports.injectGDataStores = exports.SessionDat
|
|
|
4
4
|
const di_1 = require("@opensumi/di");
|
|
5
5
|
const store_1 = require("./store");
|
|
6
6
|
const dataStore = {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
global: {},
|
|
8
|
+
session: {},
|
|
9
9
|
};
|
|
10
|
-
function
|
|
10
|
+
function saveToken(type, token, options) {
|
|
11
11
|
if (dataStore[type][token]) {
|
|
12
12
|
// 同样的 token 只能被注入一次,options 也以第一次为准
|
|
13
|
-
return
|
|
13
|
+
return;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
dataStore[type][token] = {
|
|
17
|
-
sym,
|
|
18
|
-
options,
|
|
19
|
-
};
|
|
20
|
-
return sym;
|
|
15
|
+
dataStore[type][token] = options;
|
|
21
16
|
}
|
|
22
17
|
function GDataStore(token, options) {
|
|
23
|
-
|
|
24
|
-
return (0, di_1.Autowired)(
|
|
18
|
+
saveToken('global', token, options);
|
|
19
|
+
return (0, di_1.Autowired)(GDataStore, {
|
|
20
|
+
tag: String(token),
|
|
21
|
+
});
|
|
25
22
|
}
|
|
26
23
|
exports.GDataStore = GDataStore;
|
|
27
24
|
function SessionDataStore(token, options) {
|
|
28
|
-
|
|
29
|
-
return (0, di_1.Autowired)(
|
|
25
|
+
saveToken('session', token, options);
|
|
26
|
+
return (0, di_1.Autowired)(SessionDataStore, {
|
|
27
|
+
tag: String(token),
|
|
28
|
+
});
|
|
30
29
|
}
|
|
31
30
|
exports.SessionDataStore = SessionDataStore;
|
|
32
31
|
function _injectDataStores(type, injector) {
|
|
33
32
|
const stores = dataStore[type];
|
|
34
33
|
if (stores) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const token = type === 'global' ? GDataStore : SessionDataStore;
|
|
35
|
+
injector.addProviders(...Object.entries(stores).map(([tag, opts]) => ({
|
|
36
|
+
token,
|
|
37
|
+
useValue: new store_1.InMemoryDataStore(opts),
|
|
38
|
+
tag,
|
|
39
|
+
dropdownForTag: false,
|
|
38
40
|
})));
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
function injectGDataStores(injector) {
|
|
42
|
-
_injectDataStores('
|
|
44
|
+
_injectDataStores('global', injector);
|
|
43
45
|
}
|
|
44
46
|
exports.injectGDataStores = injectGDataStores;
|
|
45
47
|
function injectSessionDataStores(injector) {
|
|
46
|
-
_injectDataStores('
|
|
48
|
+
_injectDataStores('session', injector);
|
|
47
49
|
}
|
|
48
50
|
exports.injectSessionDataStores = injectSessionDataStores;
|
|
49
51
|
//# sourceMappingURL=decorators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../src/remote-service/data-store/decorators.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAEnD,mCAA8D;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../src/remote-service/data-store/decorators.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAEnD,mCAA8D;AAE9D,MAAM,SAAS,GAAG;IAChB,MAAM,EAAE,EAAkD;IAC1D,OAAO,EAAE,EAAkD;CACnD,CAAC;AAEX,SAAS,SAAS,CAAC,IAA0B,EAAE,KAAa,EAAE,OAA0B;IACtF,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;QAC1B,oCAAoC;QACpC,OAAO;KACR;IAED,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACnC,CAAC;AAGD,SAAgB,UAAU,CAAC,KAAa,EAAE,OAA0B;IAClE,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEpC,OAAO,IAAA,cAAS,EAAC,UAAU,EAAE;QAC3B,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;KACnB,CAAC,CAAC;AACL,CAAC;AAND,gCAMC;AAGD,SAAgB,gBAAgB,CAAC,KAAa,EAAE,OAA0B;IACxE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAErC,OAAO,IAAA,cAAS,EAAC,gBAAgB,EAAE;QACjC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;KACnB,CAAC,CAAC;AACL,CAAC;AAND,4CAMC;AAED,SAAS,iBAAiB,CAAC,IAA0B,EAAE,QAAkB;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,EAAE;QACV,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAEhE,QAAQ,CAAC,YAAY,CACnB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,KAAK;YACL,QAAQ,EAAE,IAAI,yBAAiB,CAAC,IAAI,CAAC;YACrC,GAAG;YACH,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC,CACJ,CAAC;KACH;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAkB;IAClD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAFD,8CAEC;AAED,SAAgB,uBAAuB,CAAC,QAAkB;IACxD,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAFD,0DAEC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Query = Record<
|
|
2
|
-
export type Store<T> = Iterable<T> | Record<
|
|
1
|
+
export type Query = Record<string, any>;
|
|
2
|
+
export type Store<T> = Iterable<T> | Record<string, T> | Map<string, T>;
|
|
3
3
|
export declare function select<I, T extends Store<I>>(items: T, query: Query): I[];
|
|
4
4
|
//# sourceMappingURL=select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/remote-service/data-store/select.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/remote-service/data-store/select.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxC,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAexE,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAqBzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/remote-service/data-store/select.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAKjD,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,UAAU,GAAG,EAAc,CAAC;IAClC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC7C,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;aACL,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;GACjC,CAAC;IAEF,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/remote-service/data-store/select.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAKjD,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,UAAU,GAAG,EAAc,CAAC;IAClC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC7C,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;aACL,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;GACjC,CAAC;IAEF,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAA6B,CAAC;AACnE,CAAC;AAED,SAAgB,MAAM,CAAwB,KAAQ,EAAE,KAAY;IAClE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,EAAS,CAAC;IAEzB,IAAI,SAAoC,CAAC;IAEzC,IAAI,KAAK,YAAY,GAAG,EAAE;QACxB,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;KAC5B;SAAM,IAAI,IAAA,sBAAU,EAAC,KAAK,CAAC,EAAE;QAC5B,SAAS,GAAG,KAAK,CAAC;KACnB;SAAM;QACL,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAClC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;QAC5B,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AArBD,wBAqBC"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { EventEmitter } from '@opensumi/events';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
export interface DataStore<Item> {
|
|
3
|
+
create(item: Item): Item;
|
|
4
|
+
find(query: Record<string, any>): Item[] | undefined;
|
|
5
|
+
size(query: Record<string, any>): number;
|
|
6
|
+
get(id: string, query?: Record<string, any>): Item | undefined;
|
|
7
|
+
update(id: string, item: Partial<Item>): void;
|
|
8
|
+
remove(id: string): void;
|
|
9
|
+
}
|
|
10
|
+
export interface DataStoreEvent<Item> extends Record<string, any> {
|
|
9
11
|
created: [item: Item];
|
|
10
12
|
updated: [oldItem: Item, newItem: Item];
|
|
11
13
|
removed: [item: Item];
|
|
12
|
-
[key: string]: any[];
|
|
13
14
|
}
|
|
14
15
|
export interface DataStoreOptions {
|
|
15
16
|
id?: string;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
export declare class InMemoryDataStore<Item extends Record<any, any>, PrimaryKey extends keyof Item = 'id', PrimaryKeyType = Required<Item>[PrimaryKey]> extends EventEmitter<DataStoreEvent<Item>> {
|
|
18
|
+
export declare class InMemoryDataStore<Item> extends EventEmitter<DataStoreEvent<Item>> implements DataStore<Item> {
|
|
19
19
|
protected options?: DataStoreOptions | undefined;
|
|
20
20
|
private store;
|
|
21
21
|
private _uid;
|
|
@@ -24,15 +24,12 @@ export declare class InMemoryDataStore<Item extends Record<any, any>, PrimaryKey
|
|
|
24
24
|
*/
|
|
25
25
|
private id;
|
|
26
26
|
constructor(options?: DataStoreOptions | undefined);
|
|
27
|
-
create(item:
|
|
28
|
-
find(query
|
|
29
|
-
|
|
30
|
-
get(id:
|
|
31
|
-
has(id:
|
|
32
|
-
update(id:
|
|
33
|
-
remove(id:
|
|
34
|
-
removeItem(item: Item): void;
|
|
35
|
-
removeAll(query?: Query): void;
|
|
27
|
+
create(item: Item): Item;
|
|
28
|
+
find(query: Record<string, any>): Item[] | undefined;
|
|
29
|
+
size(query?: Record<string, any>): number;
|
|
30
|
+
get(id: string): Item | undefined;
|
|
31
|
+
has(id: string): boolean;
|
|
32
|
+
update(id: string, item: Partial<Item>): void;
|
|
33
|
+
remove(id: string): void;
|
|
36
34
|
}
|
|
37
|
-
export {};
|
|
38
35
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/remote-service/data-store/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/remote-service/data-store/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,MAAM,WAAW,SAAS,CAAC,IAAI;IAC7B,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IACzC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc,CAAC,IAAI,CAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/D,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,iBAAiB,CAAC,IAAI,CAAE,SAAQ,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAE,YAAW,SAAS,CAAC,IAAI,CAAC;IAQ5F,SAAS,CAAC,OAAO,CAAC;IAP9B,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,IAAI,CAAK;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAS;gBAEG,OAAO,CAAC,8BAAkB;IAKhD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAUxB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS;IAIpD,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAQzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAY7C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAQzB"}
|
|
@@ -4,7 +4,6 @@ exports.InMemoryDataStore = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const extend_1 = tslib_1.__importDefault(require("lodash/extend"));
|
|
6
6
|
const events_1 = require("@opensumi/events");
|
|
7
|
-
const ide_utils_1 = require("@opensumi/ide-utils");
|
|
8
7
|
const select_1 = require("./select");
|
|
9
8
|
class InMemoryDataStore extends events_1.EventEmitter {
|
|
10
9
|
constructor(options) {
|
|
@@ -15,21 +14,18 @@ class InMemoryDataStore extends events_1.EventEmitter {
|
|
|
15
14
|
this.id = (options === null || options === void 0 ? void 0 : options.id) || 'id';
|
|
16
15
|
}
|
|
17
16
|
create(item) {
|
|
18
|
-
const id = item[this.id] || this._uid
|
|
17
|
+
const id = item[this.id] || String(this._uid++);
|
|
19
18
|
const result = (0, extend_1.default)({}, item, { [this.id]: id });
|
|
20
19
|
this.store.set(id, result);
|
|
21
20
|
this.emit('created', result);
|
|
22
21
|
return result;
|
|
23
22
|
}
|
|
24
23
|
find(query) {
|
|
25
|
-
if ((0, ide_utils_1.isUndefined)(query)) {
|
|
26
|
-
return Array.from(this.store.values());
|
|
27
|
-
}
|
|
28
24
|
return (0, select_1.select)(this.store, query);
|
|
29
25
|
}
|
|
30
|
-
|
|
26
|
+
size(query) {
|
|
31
27
|
var _a;
|
|
32
|
-
if (
|
|
28
|
+
if (!query) {
|
|
33
29
|
return this.store.size;
|
|
34
30
|
}
|
|
35
31
|
return ((_a = this.find(query)) === null || _a === void 0 ? void 0 : _a.length) || 0;
|
|
@@ -42,7 +38,7 @@ class InMemoryDataStore extends events_1.EventEmitter {
|
|
|
42
38
|
}
|
|
43
39
|
update(id, item) {
|
|
44
40
|
const current = this.store.get(id);
|
|
45
|
-
if (
|
|
41
|
+
if (!current) {
|
|
46
42
|
return;
|
|
47
43
|
}
|
|
48
44
|
const result = (0, extend_1.default)({}, current, item);
|
|
@@ -56,30 +52,6 @@ class InMemoryDataStore extends events_1.EventEmitter {
|
|
|
56
52
|
}
|
|
57
53
|
this.store.delete(id);
|
|
58
54
|
}
|
|
59
|
-
removeItem(item) {
|
|
60
|
-
const id = item[this.id];
|
|
61
|
-
if ((0, ide_utils_1.isUndefined)(id)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
this.remove(id);
|
|
65
|
-
}
|
|
66
|
-
removeAll(query) {
|
|
67
|
-
if ((0, ide_utils_1.isUndefined)(query)) {
|
|
68
|
-
const items = Array.from(this.store.values());
|
|
69
|
-
this.store.clear();
|
|
70
|
-
items.forEach((item) => {
|
|
71
|
-
this.emit('removed', item);
|
|
72
|
-
});
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const items = this.find(query);
|
|
76
|
-
if (items) {
|
|
77
|
-
items.forEach((item) => {
|
|
78
|
-
this.store.delete(item[this.id]);
|
|
79
|
-
this.emit('removed', item);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
55
|
}
|
|
84
56
|
exports.InMemoryDataStore = InMemoryDataStore;
|
|
85
57
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/remote-service/data-store/store.ts"],"names":[],"mappings":";;;;AAAA,mEAAmC;AAEnC,6CAAgD;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/remote-service/data-store/store.ts"],"names":[],"mappings":";;;;AAAA,mEAAmC;AAEnC,6CAAgD;AAEhD,qCAAkC;AAqBlC,MAAa,iBAAwB,SAAQ,qBAAkC;IAQ7E,YAAsB,OAA0B;QAC9C,KAAK,EAAE,CAAC;QADY,YAAO,GAAP,OAAO,CAAmB;QAPxC,UAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;QAChC,SAAI,GAAG,CAAC,CAAC;QAQf,IAAI,CAAC,EAAE,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,KAAI,IAAI,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,IAAU;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAS,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,KAA0B;QAC7B,OAAO,IAAA,eAAM,EAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,KAA2B;;QAC9B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SACxB;QAED,OAAO,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0CAAE,MAAM,KAAI,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,IAAmB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO;SACR;QAED,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAC5B;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACF;AA/DD,8CA+DC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opensumi/ide-core-common",
|
|
3
|
-
"version": "3.4.4
|
|
3
|
+
"version": "3.4.4",
|
|
4
4
|
"description": "@opensumi/ide-core-common",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib",
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@opensumi/di": "^1.8.0",
|
|
22
22
|
"@opensumi/events": "^1.0.0",
|
|
23
|
-
"@opensumi/ide-utils": "3.4.4
|
|
23
|
+
"@opensumi/ide-utils": "3.4.4"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@opensumi/ide-dev-tool": "3.4.4
|
|
26
|
+
"@opensumi/ide-dev-tool": "3.4.4"
|
|
27
27
|
},
|
|
28
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "591891f890560abddd476796a0a7a5b9683b1847"
|
|
29
29
|
}
|
|
@@ -345,18 +345,16 @@ class TerminalService {
|
|
|
345
345
|
由于装饰器的执行是在类实例化之前,所以我们可以在 `GDataStore` 这个装饰器中收集 token,然后将它们加入 Injector 即可:
|
|
346
346
|
|
|
347
347
|
```ts
|
|
348
|
-
|
|
349
|
-
// ...
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
export type GDataStore<T, K = number> = InMemoryDataStore<T, K>;
|
|
348
|
+
const dataStore = [] as [string, DataStoreOptions][];
|
|
353
349
|
export function GDataStore(token: string, options?: DataStoreOptions): PropertyDecorator {
|
|
354
|
-
|
|
350
|
+
dataStore.push([token, options]);
|
|
355
351
|
|
|
356
|
-
return Autowired(
|
|
357
|
-
tag: token,
|
|
352
|
+
return Autowired(GDataStore, {
|
|
353
|
+
tag: String(token),
|
|
358
354
|
});
|
|
359
355
|
}
|
|
356
|
+
|
|
357
|
+
export type GDataStore<T> = InMemoryDataStore<T>;
|
|
360
358
|
```
|
|
361
359
|
|
|
362
360
|
用一个闭包中的变量 `dataStore` 来储存,然后在创建 Injector 的时候将所有的 token 放入 injector:
|
|
@@ -365,8 +363,10 @@ export function GDataStore(token: string, options?: DataStoreOptions): PropertyD
|
|
|
365
363
|
function _injectDataStores(injector: Injector) {
|
|
366
364
|
dataStore.forEach(([token, opts]) => {
|
|
367
365
|
injector.addProviders({
|
|
368
|
-
token,
|
|
366
|
+
token: GDataStore,
|
|
369
367
|
useValue: new InMemoryDataStore(opts),
|
|
368
|
+
tag: String(token),
|
|
369
|
+
dropdownForTag: false,
|
|
370
370
|
});
|
|
371
371
|
});
|
|
372
372
|
}
|
|
@@ -2,72 +2,58 @@ import { Autowired, Injector } from '@opensumi/di';
|
|
|
2
2
|
|
|
3
3
|
import { DataStoreOptions, InMemoryDataStore } from './store';
|
|
4
4
|
|
|
5
|
-
type DataStoreItem = Record<
|
|
6
|
-
string,
|
|
7
|
-
{
|
|
8
|
-
sym: symbol;
|
|
9
|
-
options: DataStoreOptions | undefined;
|
|
10
|
-
}
|
|
11
|
-
>;
|
|
12
|
-
|
|
13
5
|
const dataStore = {
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
global: {} as Record<string, DataStoreOptions | undefined>,
|
|
7
|
+
session: {} as Record<string, DataStoreOptions | undefined>,
|
|
16
8
|
} as const;
|
|
17
|
-
type DataStoreType = keyof typeof dataStore;
|
|
18
9
|
|
|
19
|
-
function
|
|
10
|
+
function saveToken(type: 'global' | 'session', token: string, options?: DataStoreOptions) {
|
|
20
11
|
if (dataStore[type][token]) {
|
|
21
12
|
// 同样的 token 只能被注入一次,options 也以第一次为准
|
|
22
|
-
return
|
|
13
|
+
return;
|
|
23
14
|
}
|
|
24
15
|
|
|
25
|
-
|
|
26
|
-
dataStore[type][token] = {
|
|
27
|
-
sym,
|
|
28
|
-
options,
|
|
29
|
-
};
|
|
30
|
-
return sym;
|
|
16
|
+
dataStore[type][token] = options;
|
|
31
17
|
}
|
|
32
18
|
|
|
33
|
-
export type GDataStore<
|
|
34
|
-
Item extends Record<any, any>,
|
|
35
|
-
PrimaryKey = keyof Item,
|
|
36
|
-
PrimaryKeyType = Item[PrimaryKey],
|
|
37
|
-
> = InMemoryDataStore<Item, PrimaryKey, PrimaryKeyType>;
|
|
19
|
+
export type GDataStore<T> = InMemoryDataStore<T>;
|
|
38
20
|
export function GDataStore(token: string, options?: DataStoreOptions): PropertyDecorator {
|
|
39
|
-
|
|
21
|
+
saveToken('global', token, options);
|
|
40
22
|
|
|
41
|
-
return Autowired(
|
|
23
|
+
return Autowired(GDataStore, {
|
|
24
|
+
tag: String(token),
|
|
25
|
+
});
|
|
42
26
|
}
|
|
43
27
|
|
|
44
|
-
export type SessionDataStore<
|
|
45
|
-
Item extends Record<any, any>,
|
|
46
|
-
PrimaryKey = keyof Item,
|
|
47
|
-
PrimaryKeyType = Item[PrimaryKey],
|
|
48
|
-
> = InMemoryDataStore<Item, PrimaryKey, PrimaryKeyType>;
|
|
28
|
+
export type SessionDataStore<T> = InMemoryDataStore<T>;
|
|
49
29
|
export function SessionDataStore(token: string, options?: DataStoreOptions): PropertyDecorator {
|
|
50
|
-
|
|
30
|
+
saveToken('session', token, options);
|
|
51
31
|
|
|
52
|
-
return Autowired(
|
|
32
|
+
return Autowired(SessionDataStore, {
|
|
33
|
+
tag: String(token),
|
|
34
|
+
});
|
|
53
35
|
}
|
|
54
36
|
|
|
55
|
-
function _injectDataStores(type:
|
|
37
|
+
function _injectDataStores(type: 'global' | 'session', injector: Injector) {
|
|
56
38
|
const stores = dataStore[type];
|
|
57
39
|
if (stores) {
|
|
40
|
+
const token = type === 'global' ? GDataStore : SessionDataStore;
|
|
41
|
+
|
|
58
42
|
injector.addProviders(
|
|
59
|
-
...Object.
|
|
60
|
-
token
|
|
61
|
-
useValue: new InMemoryDataStore(opts
|
|
43
|
+
...Object.entries(stores).map(([tag, opts]) => ({
|
|
44
|
+
token,
|
|
45
|
+
useValue: new InMemoryDataStore(opts),
|
|
46
|
+
tag,
|
|
47
|
+
dropdownForTag: false,
|
|
62
48
|
})),
|
|
63
49
|
);
|
|
64
50
|
}
|
|
65
51
|
}
|
|
66
52
|
|
|
67
53
|
export function injectGDataStores(injector: Injector) {
|
|
68
|
-
_injectDataStores('
|
|
54
|
+
_injectDataStores('global', injector);
|
|
69
55
|
}
|
|
70
56
|
|
|
71
57
|
export function injectSessionDataStores(injector: Injector) {
|
|
72
|
-
_injectDataStores('
|
|
58
|
+
_injectDataStores('session', injector);
|
|
73
59
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isIterable } from '@opensumi/ide-utils';
|
|
2
2
|
|
|
3
|
-
export type Query = Record<
|
|
4
|
-
export type Store<T> = Iterable<T> | Record<
|
|
3
|
+
export type Query = Record<string, any>;
|
|
4
|
+
export type Store<T> = Iterable<T> | Record<string, T> | Map<string, T>;
|
|
5
5
|
|
|
6
6
|
function makeMatcher(query: Query) {
|
|
7
7
|
const statements = [] as string[];
|
|
@@ -13,7 +13,7 @@ function makeMatcher(query: Query) {
|
|
|
13
13
|
return ${statements.join(' && ')};
|
|
14
14
|
`;
|
|
15
15
|
|
|
16
|
-
return new Function('item', matcher) as (item:
|
|
16
|
+
return new Function('item', matcher) as (item: Query) => boolean;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function select<I, T extends Store<I>>(items: T, query: Query): I[] {
|
|
@@ -1,37 +1,30 @@
|
|
|
1
1
|
import extend from 'lodash/extend';
|
|
2
2
|
|
|
3
3
|
import { EventEmitter } from '@opensumi/events';
|
|
4
|
-
import { isUndefined } from '@opensumi/ide-utils';
|
|
5
4
|
|
|
6
5
|
import { select } from './select';
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
export interface DataStore<Item> {
|
|
8
|
+
create(item: Item): Item;
|
|
9
|
+
find(query: Record<string, any>): Item[] | undefined;
|
|
10
|
+
size(query: Record<string, any>): number;
|
|
11
|
+
get(id: string, query?: Record<string, any>): Item | undefined;
|
|
12
|
+
update(id: string, item: Partial<Item>): void;
|
|
13
|
+
remove(id: string): void;
|
|
14
|
+
}
|
|
14
15
|
|
|
15
|
-
export interface DataStoreEvent<Item> {
|
|
16
|
+
export interface DataStoreEvent<Item> extends Record<string, any> {
|
|
16
17
|
created: [item: Item];
|
|
17
18
|
updated: [oldItem: Item, newItem: Item];
|
|
18
19
|
removed: [item: Item];
|
|
19
|
-
|
|
20
|
-
[key: string]: any[];
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
export interface DataStoreOptions {
|
|
24
23
|
id?: string;
|
|
25
24
|
}
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export class InMemoryDataStore<
|
|
30
|
-
Item extends Record<any, any>,
|
|
31
|
-
PrimaryKey extends keyof Item = 'id',
|
|
32
|
-
PrimaryKeyType = Required<Item>[PrimaryKey],
|
|
33
|
-
> extends EventEmitter<DataStoreEvent<Item>> {
|
|
34
|
-
private store = new Map<PrimaryKeyType, Item>();
|
|
26
|
+
export class InMemoryDataStore<Item> extends EventEmitter<DataStoreEvent<Item>> implements DataStore<Item> {
|
|
27
|
+
private store = new Map<string, Item>();
|
|
35
28
|
private _uid = 0;
|
|
36
29
|
/**
|
|
37
30
|
* primary key
|
|
@@ -43,8 +36,8 @@ export class InMemoryDataStore<
|
|
|
43
36
|
this.id = options?.id || 'id';
|
|
44
37
|
}
|
|
45
38
|
|
|
46
|
-
create(item:
|
|
47
|
-
const id = item[this.id] || (this._uid++
|
|
39
|
+
create(item: Item): Item {
|
|
40
|
+
const id = item[this.id] || String(this._uid++);
|
|
48
41
|
const result = extend({}, item, { [this.id]: id }) as Item;
|
|
49
42
|
|
|
50
43
|
this.store.set(id, result);
|
|
@@ -53,32 +46,29 @@ export class InMemoryDataStore<
|
|
|
53
46
|
return result;
|
|
54
47
|
}
|
|
55
48
|
|
|
56
|
-
find(query
|
|
57
|
-
if (isUndefined(query)) {
|
|
58
|
-
return Array.from(this.store.values());
|
|
59
|
-
}
|
|
49
|
+
find(query: Record<string, any>): Item[] | undefined {
|
|
60
50
|
return select(this.store, query);
|
|
61
51
|
}
|
|
62
52
|
|
|
63
|
-
|
|
64
|
-
if (
|
|
53
|
+
size(query?: Record<string, any>): number {
|
|
54
|
+
if (!query) {
|
|
65
55
|
return this.store.size;
|
|
66
56
|
}
|
|
67
57
|
|
|
68
58
|
return this.find(query)?.length || 0;
|
|
69
59
|
}
|
|
70
60
|
|
|
71
|
-
get(id:
|
|
61
|
+
get(id: string): Item | undefined {
|
|
72
62
|
return this.store.get(id);
|
|
73
63
|
}
|
|
74
64
|
|
|
75
|
-
has(id:
|
|
65
|
+
has(id: string): boolean {
|
|
76
66
|
return this.store.has(id);
|
|
77
67
|
}
|
|
78
68
|
|
|
79
|
-
update(id:
|
|
69
|
+
update(id: string, item: Partial<Item>): void {
|
|
80
70
|
const current = this.store.get(id);
|
|
81
|
-
if (
|
|
71
|
+
if (!current) {
|
|
82
72
|
return;
|
|
83
73
|
}
|
|
84
74
|
|
|
@@ -88,7 +78,7 @@ export class InMemoryDataStore<
|
|
|
88
78
|
this.store.set(id, result);
|
|
89
79
|
}
|
|
90
80
|
|
|
91
|
-
remove(id:
|
|
81
|
+
remove(id: string): void {
|
|
92
82
|
const item = this.store.get(id);
|
|
93
83
|
if (item) {
|
|
94
84
|
this.emit('removed', item);
|
|
@@ -96,33 +86,4 @@ export class InMemoryDataStore<
|
|
|
96
86
|
|
|
97
87
|
this.store.delete(id);
|
|
98
88
|
}
|
|
99
|
-
|
|
100
|
-
removeItem(item: Item): void {
|
|
101
|
-
const id = item[this.id] as PrimaryKeyType;
|
|
102
|
-
if (isUndefined(id)) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
this.remove(id);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
removeAll(query?: Query): void {
|
|
110
|
-
if (isUndefined(query)) {
|
|
111
|
-
const items = Array.from(this.store.values());
|
|
112
|
-
this.store.clear();
|
|
113
|
-
|
|
114
|
-
items.forEach((item) => {
|
|
115
|
-
this.emit('removed', item);
|
|
116
|
-
});
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const items = this.find(query);
|
|
121
|
-
if (items) {
|
|
122
|
-
items.forEach((item) => {
|
|
123
|
-
this.store.delete(item[this.id]);
|
|
124
|
-
this.emit('removed', item);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
89
|
}
|