@theia/monaco 1.32.0-next.16 → 1.32.0-next.20
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/monaco-context-key-service.d.ts +4 -3
- package/lib/browser/monaco-context-key-service.d.ts.map +1 -1
- package/lib/browser/monaco-context-key-service.js +19 -2
- package/lib/browser/monaco-context-key-service.js.map +1 -1
- package/package.json +7 -7
- package/src/browser/monaco-context-key-service.ts +23 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ContextKeyService as TheiaContextKeyService, ContextKey, ContextKeyChangeEvent, ScopedValueStore } from '@theia/core/lib/browser/context-key-service';
|
|
1
|
+
import { ContextKeyService as TheiaContextKeyService, ContextKey, ContextKeyChangeEvent, ScopedValueStore, ContextMatcher } from '@theia/core/lib/browser/context-key-service';
|
|
2
2
|
import { Emitter } from '@theia/core';
|
|
3
3
|
import { ContextKeyService as VSCodeContextKeyService } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/browser/contextKeyService';
|
|
4
|
-
import { ContextKeyExpression, IContext } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/common/contextkey';
|
|
4
|
+
import { ContextKeyExpression, IContext, IContextKeyService } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/common/contextkey';
|
|
5
5
|
export declare class MonacoContextKeyService implements TheiaContextKeyService {
|
|
6
6
|
protected readonly onDidChangeEmitter: Emitter<ContextKeyChangeEvent>;
|
|
7
7
|
readonly onDidChange: import("@theia/core").Event<ContextKeyChangeEvent>;
|
|
@@ -10,12 +10,13 @@ export declare class MonacoContextKeyService implements TheiaContextKeyService {
|
|
|
10
10
|
createKey<T>(key: string, defaultValue: T | undefined): ContextKey<T>;
|
|
11
11
|
activeContext?: HTMLElement | IContext;
|
|
12
12
|
match(expression: string, context?: HTMLElement): boolean;
|
|
13
|
-
protected identifyContext(callersContext?: HTMLElement | IContext): IContext | undefined;
|
|
13
|
+
protected identifyContext(callersContext?: HTMLElement | IContext, service?: IContextKeyService): IContext | undefined;
|
|
14
14
|
protected readonly expressions: Map<string, ContextKeyExpression>;
|
|
15
15
|
parse(when: string): ContextKeyExpression | undefined;
|
|
16
16
|
parseKeys(expression: string): Set<string> | undefined;
|
|
17
17
|
with<T>(values: Record<string, unknown>, callback: () => T): T;
|
|
18
18
|
createScoped(target: HTMLElement): ScopedValueStore;
|
|
19
|
+
createOverlay(overlay: Iterable<[string, unknown]>): ContextMatcher;
|
|
19
20
|
setContext(key: string, value: unknown): void;
|
|
20
21
|
dispose(): void;
|
|
21
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monaco-context-key-service.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-context-key-service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,UAAU,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/
|
|
1
|
+
{"version":3,"file":"monaco-context-key-service.d.ts","sourceRoot":"","sources":["../../src/browser/monaco-context-key-service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,UAAU,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC/K,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAA6B,iBAAiB,IAAI,uBAAuB,EAAE,MAAM,gFAAgF,CAAC;AACzK,OAAO,EAAkB,oBAAoB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,wEAAwE,CAAC;AAE5J,qBACa,uBAAwB,YAAW,sBAAsB;IAClE,SAAS,CAAC,QAAQ,CAAC,kBAAkB,iCAAwC;IAC7E,QAAQ,CAAC,WAAW,qDAAiC;IAGrD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAG9D,SAAS,CAAC,IAAI,IAAI,IAAI;IAQtB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;IAIrE,aAAa,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAEvC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO;IAYzD,SAAS,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,QAAQ,EAAE,OAAO,GAAE,kBAA2C,GAAG,QAAQ,GAAG,SAAS;IAa9I,SAAS,CAAC,QAAQ,CAAC,WAAW,oCAA2C;IACzE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAWrD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;IAKtD,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAgB9D,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB;IAQnD,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,cAAc;IAkBnE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI7C,OAAO,IAAI,IAAI;CAKlB"}
|
|
@@ -54,7 +54,7 @@ let MonacoContextKeyService = class MonacoContextKeyService {
|
|
|
54
54
|
}
|
|
55
55
|
return true;
|
|
56
56
|
}
|
|
57
|
-
identifyContext(callersContext) {
|
|
57
|
+
identifyContext(callersContext, service = this.contextKeyService) {
|
|
58
58
|
var _a;
|
|
59
59
|
if (callersContext && 'getValue' in callersContext) {
|
|
60
60
|
return callersContext;
|
|
@@ -64,7 +64,7 @@ let MonacoContextKeyService = class MonacoContextKeyService {
|
|
|
64
64
|
}
|
|
65
65
|
const browserContext = (_a = callersContext !== null && callersContext !== void 0 ? callersContext : this.activeContext) !== null && _a !== void 0 ? _a : (document.activeElement instanceof HTMLElement ? document.activeElement : undefined);
|
|
66
66
|
if (browserContext) {
|
|
67
|
-
return
|
|
67
|
+
return service.getContext(browserContext);
|
|
68
68
|
}
|
|
69
69
|
return undefined;
|
|
70
70
|
}
|
|
@@ -105,6 +105,23 @@ let MonacoContextKeyService = class MonacoContextKeyService {
|
|
|
105
105
|
}
|
|
106
106
|
return this;
|
|
107
107
|
}
|
|
108
|
+
createOverlay(overlay) {
|
|
109
|
+
const delegate = this.contextKeyService.createOverlay(overlay);
|
|
110
|
+
return {
|
|
111
|
+
match: (expression, context) => {
|
|
112
|
+
const parsed = this.parse(expression);
|
|
113
|
+
if (parsed) {
|
|
114
|
+
const ctx = this.identifyContext(context, delegate);
|
|
115
|
+
if (!ctx) {
|
|
116
|
+
return delegate.contextMatchesRules(parsed);
|
|
117
|
+
}
|
|
118
|
+
return parsed.evaluate(ctx);
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
},
|
|
122
|
+
dispose: () => delegate.dispose(),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
108
125
|
setContext(key, value) {
|
|
109
126
|
this.contextKeyService.setContext(key, value);
|
|
110
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monaco-context-key-service.js","sourceRoot":"","sources":["../../src/browser/monaco-context-key-service.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,2EAA2E;AAC3E,gFAAgF;;;;;;;;;;;;AAEhF,4DAAiF;AAEjF,sCAAsC;AACtC,sHAAyK;AACzK,
|
|
1
|
+
{"version":3,"file":"monaco-context-key-service.js","sourceRoot":"","sources":["../../src/browser/monaco-context-key-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/monaco",
|
|
3
|
-
"version": "1.32.0-next.
|
|
3
|
+
"version": "1.32.0-next.20+6b14f040f",
|
|
4
4
|
"description": "Theia - Monaco Extension",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.32.0-next.
|
|
7
|
-
"@theia/editor": "1.32.0-next.
|
|
8
|
-
"@theia/filesystem": "1.32.0-next.
|
|
9
|
-
"@theia/markers": "1.32.0-next.
|
|
6
|
+
"@theia/core": "1.32.0-next.20+6b14f040f",
|
|
7
|
+
"@theia/editor": "1.32.0-next.20+6b14f040f",
|
|
8
|
+
"@theia/filesystem": "1.32.0-next.20+6b14f040f",
|
|
9
|
+
"@theia/markers": "1.32.0-next.20+6b14f040f",
|
|
10
10
|
"@theia/monaco-editor-core": "1.67.2",
|
|
11
|
-
"@theia/outline-view": "1.32.0-next.
|
|
11
|
+
"@theia/outline-view": "1.32.0-next.20+6b14f040f",
|
|
12
12
|
"fast-plist": "^0.1.2",
|
|
13
13
|
"idb": "^4.0.5",
|
|
14
14
|
"jsonc-parser": "^2.2.0",
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"nyc": {
|
|
55
55
|
"extends": "../../configs/nyc.json"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "6b14f040f82f0e99de711978ae1cfdc38f288756"
|
|
58
58
|
}
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { injectable, inject, postConstruct } from '@theia/core/shared/inversify';
|
|
18
|
-
import { ContextKeyService as TheiaContextKeyService, ContextKey, ContextKeyChangeEvent, ScopedValueStore } from '@theia/core/lib/browser/context-key-service';
|
|
18
|
+
import { ContextKeyService as TheiaContextKeyService, ContextKey, ContextKeyChangeEvent, ScopedValueStore, ContextMatcher } from '@theia/core/lib/browser/context-key-service';
|
|
19
19
|
import { Emitter } from '@theia/core';
|
|
20
20
|
import { AbstractContextKeyService, ContextKeyService as VSCodeContextKeyService } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/browser/contextKeyService';
|
|
21
|
-
import { ContextKeyExpr, ContextKeyExpression, IContext } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/common/contextkey';
|
|
21
|
+
import { ContextKeyExpr, ContextKeyExpression, IContext, IContextKeyService } from '@theia/monaco-editor-core/esm/vs/platform/contextkey/common/contextkey';
|
|
22
22
|
|
|
23
23
|
@injectable()
|
|
24
24
|
export class MonacoContextKeyService implements TheiaContextKeyService {
|
|
@@ -55,7 +55,7 @@ export class MonacoContextKeyService implements TheiaContextKeyService {
|
|
|
55
55
|
return true;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
protected identifyContext(callersContext?: HTMLElement | IContext): IContext | undefined {
|
|
58
|
+
protected identifyContext(callersContext?: HTMLElement | IContext, service: IContextKeyService = this.contextKeyService): IContext | undefined {
|
|
59
59
|
if (callersContext && 'getValue' in callersContext) {
|
|
60
60
|
return callersContext;
|
|
61
61
|
} else if (this.activeContext && 'getValue' in this.activeContext) {
|
|
@@ -63,7 +63,7 @@ export class MonacoContextKeyService implements TheiaContextKeyService {
|
|
|
63
63
|
}
|
|
64
64
|
const browserContext = callersContext ?? this.activeContext ?? (document.activeElement instanceof HTMLElement ? document.activeElement : undefined);
|
|
65
65
|
if (browserContext) {
|
|
66
|
-
return
|
|
66
|
+
return service.getContext(browserContext);
|
|
67
67
|
}
|
|
68
68
|
return undefined;
|
|
69
69
|
}
|
|
@@ -109,6 +109,24 @@ export class MonacoContextKeyService implements TheiaContextKeyService {
|
|
|
109
109
|
return this;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
createOverlay(overlay: Iterable<[string, unknown]>): ContextMatcher {
|
|
113
|
+
const delegate = this.contextKeyService.createOverlay(overlay);
|
|
114
|
+
return {
|
|
115
|
+
match: (expression: string, context?: HTMLElement) => {
|
|
116
|
+
const parsed = this.parse(expression);
|
|
117
|
+
if (parsed) {
|
|
118
|
+
const ctx = this.identifyContext(context, delegate);
|
|
119
|
+
if (!ctx) {
|
|
120
|
+
return delegate.contextMatchesRules(parsed);
|
|
121
|
+
}
|
|
122
|
+
return parsed.evaluate(ctx);
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
},
|
|
126
|
+
dispose: () => delegate.dispose(),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
112
130
|
setContext(key: string, value: unknown): void {
|
|
113
131
|
this.contextKeyService.setContext(key, value);
|
|
114
132
|
}
|
|
@@ -119,3 +137,4 @@ export class MonacoContextKeyService implements TheiaContextKeyService {
|
|
|
119
137
|
this.contextKeyService.dispose();
|
|
120
138
|
}
|
|
121
139
|
}
|
|
140
|
+
|