@theia/plugin-ext 1.74.0-next.38 → 1.74.0-next.47
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/hosted/node/plugin-reader.d.ts +6 -5
- package/lib/hosted/node/plugin-reader.d.ts.map +1 -1
- package/lib/hosted/node/plugin-reader.js +14 -7
- package/lib/hosted/node/plugin-reader.js.map +1 -1
- package/lib/hosted/node/plugin-reader.spec.d.ts +2 -0
- package/lib/hosted/node/plugin-reader.spec.d.ts.map +1 -0
- package/lib/hosted/node/plugin-reader.spec.js +72 -0
- package/lib/hosted/node/plugin-reader.spec.js.map +1 -0
- package/lib/plugin/telemetry-ext.d.ts +4 -1
- package/lib/plugin/telemetry-ext.d.ts.map +1 -1
- package/lib/plugin/telemetry-ext.js +19 -3
- package/lib/plugin/telemetry-ext.js.map +1 -1
- package/lib/plugin/telemetry-ext.spec.d.ts +2 -0
- package/lib/plugin/telemetry-ext.spec.d.ts.map +1 -0
- package/lib/plugin/telemetry-ext.spec.js +51 -0
- package/lib/plugin/telemetry-ext.spec.js.map +1 -0
- package/package.json +30 -30
- package/src/hosted/node/plugin-reader.spec.ts +80 -0
- package/src/hosted/node/plugin-reader.ts +16 -7
- package/src/plugin/telemetry-ext.spec.ts +61 -0
- package/src/plugin/telemetry-ext.ts +23 -4
|
@@ -13,13 +13,14 @@ export declare class HostedPluginReader implements BackendApplicationContributio
|
|
|
13
13
|
protected pluginsIdsFiles: Map<string, string>;
|
|
14
14
|
configure(app: express.Application): void;
|
|
15
15
|
/**
|
|
16
|
-
* Resolves
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* which is common in Node.js/CommonJS environments.
|
|
16
|
+
* Resolves `filePath` under `localPath`, with fallback to `.js`, `.cjs` and `.mjs`
|
|
17
|
+
* extensions. Returns `undefined` if the resolved path is not under `localPath`
|
|
18
|
+
* or if no candidate exists on disk.
|
|
20
19
|
*
|
|
20
|
+
* The extension fallback handles cases where plugins reference modules without
|
|
21
|
+
* extensions, which is common in Node.js/CommonJS environments.
|
|
21
22
|
*/
|
|
22
|
-
protected resolveFile(
|
|
23
|
+
protected resolveFile(localPath: string, filePath: string): Promise<string | undefined>;
|
|
23
24
|
protected handleMissingResource(req: express.Request, res: express.Response): Promise<void>;
|
|
24
25
|
/**
|
|
25
26
|
* @throws never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-reader.d.ts","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAGtD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAkC,aAAa,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACjI,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBACa,kBAAmB,YAAW,8BAA8B;IAGrE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAGZ,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IAEzF;;OAEG;IACH,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAE3D,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"plugin-reader.d.ts","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAGtD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAkC,aAAa,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACjI,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBACa,kBAAmB,YAAW,8BAA8B;IAGrE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAGnC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAGZ,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IAEzF;;OAEG;IACH,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAE3D,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI;IAmCzC;;;;;;;OAOG;cACa,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;cAiC7E,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjG;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAUtF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAa/E,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAoB5D,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAKtF,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;CAK3E"}
|
|
@@ -38,8 +38,7 @@ let HostedPluginReader = class HostedPluginReader {
|
|
|
38
38
|
const filePath = req.params.path;
|
|
39
39
|
const localPath = this.pluginsIdsFiles.get(pluginId);
|
|
40
40
|
if (localPath) {
|
|
41
|
-
const
|
|
42
|
-
const resolvedFile = await this.resolveFile(absolutePath);
|
|
41
|
+
const resolvedFile = await this.resolveFile(localPath, filePath);
|
|
43
42
|
if (!resolvedFile) {
|
|
44
43
|
res.status(404).send(`No such file found in '${escape_html(pluginId)}' plugin.`);
|
|
45
44
|
return;
|
|
@@ -69,13 +68,21 @@ let HostedPluginReader = class HostedPluginReader {
|
|
|
69
68
|
});
|
|
70
69
|
}
|
|
71
70
|
/**
|
|
72
|
-
* Resolves
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* which is common in Node.js/CommonJS environments.
|
|
71
|
+
* Resolves `filePath` under `localPath`, with fallback to `.js`, `.cjs` and `.mjs`
|
|
72
|
+
* extensions. Returns `undefined` if the resolved path is not under `localPath`
|
|
73
|
+
* or if no candidate exists on disk.
|
|
76
74
|
*
|
|
75
|
+
* The extension fallback handles cases where plugins reference modules without
|
|
76
|
+
* extensions, which is common in Node.js/CommonJS environments.
|
|
77
77
|
*/
|
|
78
|
-
async resolveFile(
|
|
78
|
+
async resolveFile(localPath, filePath) {
|
|
79
|
+
const absolutePath = path.resolve(localPath, filePath);
|
|
80
|
+
// `path.relative` yields a path starting with '..' (or an absolute path on
|
|
81
|
+
// Windows when the drive differs) when `absolutePath` is not under `localPath`.
|
|
82
|
+
const relativePath = path.relative(localPath, absolutePath);
|
|
83
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
79
86
|
const candidates = [absolutePath];
|
|
80
87
|
const pathExtension = path.extname(absolutePath).toLowerCase();
|
|
81
88
|
if (!pathExtension) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-reader.js","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,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,6BAA6B;AAE7B,2CAA2C;AAC3C,0CAA6C;AAC7C,sCAAsC;AACtC,4DAAyF;AAEzF,kEAAiI;AACjI,yDAAqD;AACrD,qEAAwD;AAGjD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAAxB;QAWH;;WAEG;QACO,oBAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-reader.js","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-reader.spec.d.ts","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
const chai_1 = require("chai");
|
|
19
|
+
const fs = require("fs");
|
|
20
|
+
const os = require("os");
|
|
21
|
+
const path = require("path");
|
|
22
|
+
const plugin_reader_1 = require("./plugin-reader");
|
|
23
|
+
class TestHostedPluginReader extends plugin_reader_1.HostedPluginReader {
|
|
24
|
+
resolve(localPath, filePath) {
|
|
25
|
+
return this.resolveFile(localPath, filePath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
describe('HostedPluginReader#resolveFile', () => {
|
|
29
|
+
let pluginDir;
|
|
30
|
+
let nearSiblingFile;
|
|
31
|
+
let farSiblingFile;
|
|
32
|
+
const reader = new TestHostedPluginReader();
|
|
33
|
+
before(() => {
|
|
34
|
+
// Layout:
|
|
35
|
+
// <root>/far-sibling.txt (reachable via `../../far-sibling.txt`)
|
|
36
|
+
// <root>/wrapper/sibling.txt (reachable via `../sibling.txt`)
|
|
37
|
+
// <root>/wrapper/plugin/ (pluginDir)
|
|
38
|
+
// ├── main.js
|
|
39
|
+
// └── media/icon.png
|
|
40
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'theia-plugin-reader-'));
|
|
41
|
+
const wrapper = path.join(root, 'wrapper');
|
|
42
|
+
pluginDir = path.join(wrapper, 'plugin');
|
|
43
|
+
fs.mkdirSync(pluginDir, { recursive: true });
|
|
44
|
+
fs.writeFileSync(path.join(pluginDir, 'main.js'), 'console.log("ok");');
|
|
45
|
+
fs.mkdirSync(path.join(pluginDir, 'media'));
|
|
46
|
+
fs.writeFileSync(path.join(pluginDir, 'media', 'icon.png'), 'png');
|
|
47
|
+
nearSiblingFile = path.join(wrapper, 'sibling.txt');
|
|
48
|
+
fs.writeFileSync(nearSiblingFile, 'near');
|
|
49
|
+
farSiblingFile = path.join(root, 'far-sibling.txt');
|
|
50
|
+
fs.writeFileSync(farSiblingFile, 'far');
|
|
51
|
+
});
|
|
52
|
+
it('serves a file inside the plugin directory', async () => {
|
|
53
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, 'main.js')).to.equal(path.join(pluginDir, 'main.js'));
|
|
54
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, 'media/icon.png')).to.equal(path.join(pluginDir, 'media', 'icon.png'));
|
|
55
|
+
});
|
|
56
|
+
it('resolves extensionless references with the .js fallback', async () => {
|
|
57
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, 'main')).to.equal(path.join(pluginDir, 'main.js'));
|
|
58
|
+
});
|
|
59
|
+
it('returns undefined for a relative path pointing outside the plugin directory', async () => {
|
|
60
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, '../sibling.txt')).to.be.undefined;
|
|
61
|
+
});
|
|
62
|
+
it('returns undefined for a relative path composed of parent-directory segments', async () => {
|
|
63
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, '../../far-sibling.txt')).to.be.undefined;
|
|
64
|
+
});
|
|
65
|
+
it('returns undefined for an absolute path outside the plugin directory', async () => {
|
|
66
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, nearSiblingFile)).to.be.undefined;
|
|
67
|
+
});
|
|
68
|
+
it('returns undefined for a missing file inside the plugin directory', async () => {
|
|
69
|
+
(0, chai_1.expect)(await reader.resolve(pluginDir, 'does-not-exist.js')).to.be.undefined;
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=plugin-reader.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-reader.spec.js","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,16 +12,19 @@ export declare class TelemetryLogger {
|
|
|
12
12
|
private sender;
|
|
13
13
|
readonly options: TelemetryLoggerOptions | undefined;
|
|
14
14
|
readonly commonProperties: Record<string, any>;
|
|
15
|
-
|
|
15
|
+
private _telemetryEnabled;
|
|
16
16
|
private readonly onDidChangeEnableStatesEmitter;
|
|
17
17
|
readonly onDidChangeEnableStates: Event<TelemetryLogger>;
|
|
18
18
|
private _isUsageEnabled;
|
|
19
19
|
private _isErrorsEnabled;
|
|
20
20
|
constructor(sender: TelemetrySender, telemetryEnabled: boolean, options?: TelemetryLoggerOptions);
|
|
21
|
+
get telemetryEnabled(): boolean;
|
|
22
|
+
set telemetryEnabled(telemetryEnabled: boolean);
|
|
21
23
|
get isUsageEnabled(): boolean;
|
|
22
24
|
set isUsageEnabled(isUsageEnabled: boolean);
|
|
23
25
|
get isErrorsEnabled(): boolean;
|
|
24
26
|
set isErrorsEnabled(isErrorsEnabled: boolean);
|
|
27
|
+
private updateEnableStates;
|
|
25
28
|
logUsage(eventName: string, data?: Record<string, any | TelemetryTrustedValue<any>>): void;
|
|
26
29
|
logError(eventNameOrException: string | Error, data?: Record<string, any | TelemetryTrustedValue<any>>): void;
|
|
27
30
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry-ext.d.ts","sourceRoot":"","sources":["../../src/plugin/telemetry-ext.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAW,MAAM,8BAA8B,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE7E,qBAAa,gBAAgB;IAEzB,mBAAmB,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,CAA0B;IAC7E,QAAQ,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAiD;IAErG,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,IAAI,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,EAKjD;IAED,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,GAAG,eAAe;CAOhH;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAA8B;IAC5C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAErD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,
|
|
1
|
+
{"version":3,"file":"telemetry-ext.d.ts","sourceRoot":"","sources":["../../src/plugin/telemetry-ext.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAW,MAAM,8BAA8B,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE7E,qBAAa,gBAAgB;IAEzB,mBAAmB,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,CAA0B;IAC7E,QAAQ,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAiD;IAErG,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,IAAI,kBAAkB,CAAC,kBAAkB,EAAE,OAAO,EAKjD;IAED,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,GAAG,eAAe;CAOhH;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAA8B;IAC5C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAErD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,iBAAiB,CAAU;IAEnC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAA2C;IAC1F,QAAQ,CAAC,uBAAuB,EAAE,KAAK,CAAC,eAAe,CAAC,CAA6C;IACrG,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,gBAAgB,CAAU;gBAEtB,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,sBAAsB;IAShG,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,EAK7C;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,cAAc,CAAC,cAAc,EAAE,OAAO,EAKzC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,IAAI,eAAe,CAAC,eAAe,EAAE,OAAO,EAK3C;IAED,OAAO,CAAC,kBAAkB;IAS1B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;IAQ1F,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;IAY7G,OAAO,IAAI,IAAI;IAWf,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,mBAAmB;CAG9B;AAED,UAAU,eAAe;IAErB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAEnE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC9D,KAAK,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;CACnC;AAyHD;;;;;GAKG;AAEH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA2BnG"}
|
|
@@ -51,9 +51,18 @@ class TelemetryLogger {
|
|
|
51
51
|
this.sender = sender;
|
|
52
52
|
this.options = options;
|
|
53
53
|
this.commonProperties = this.getCommonProperties();
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
56
|
-
this.
|
|
54
|
+
this._telemetryEnabled = telemetryEnabled;
|
|
55
|
+
this._isErrorsEnabled = telemetryEnabled;
|
|
56
|
+
this._isUsageEnabled = telemetryEnabled;
|
|
57
|
+
}
|
|
58
|
+
get telemetryEnabled() {
|
|
59
|
+
return this._telemetryEnabled;
|
|
60
|
+
}
|
|
61
|
+
set telemetryEnabled(telemetryEnabled) {
|
|
62
|
+
if (this._telemetryEnabled !== telemetryEnabled) {
|
|
63
|
+
this._telemetryEnabled = telemetryEnabled;
|
|
64
|
+
this.updateEnableStates(telemetryEnabled, telemetryEnabled);
|
|
65
|
+
}
|
|
57
66
|
}
|
|
58
67
|
get isUsageEnabled() {
|
|
59
68
|
return this._isUsageEnabled;
|
|
@@ -73,6 +82,13 @@ class TelemetryLogger {
|
|
|
73
82
|
this.onDidChangeEnableStatesEmitter.fire(this);
|
|
74
83
|
}
|
|
75
84
|
}
|
|
85
|
+
updateEnableStates(isUsageEnabled, isErrorsEnabled) {
|
|
86
|
+
if (this._isUsageEnabled !== isUsageEnabled || this._isErrorsEnabled !== isErrorsEnabled) {
|
|
87
|
+
this._isUsageEnabled = isUsageEnabled;
|
|
88
|
+
this._isErrorsEnabled = isErrorsEnabled;
|
|
89
|
+
this.onDidChangeEnableStatesEmitter.fire(this);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
76
92
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
93
|
logUsage(eventName, data) {
|
|
78
94
|
if (!this.telemetryEnabled || !this.isUsageEnabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry-ext.js","sourceRoot":"","sources":["../../src/plugin/telemetry-ext.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;;;
|
|
1
|
+
{"version":3,"file":"telemetry-ext.js","sourceRoot":"","sources":["../../src/plugin/telemetry-ext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-ext.spec.d.ts","sourceRoot":"","sources":["../../src/plugin/telemetry-ext.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 suzunn 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
|
+
const chai = require("chai");
|
|
19
|
+
const telemetry_ext_1 = require("./telemetry-ext");
|
|
20
|
+
const expect = chai.expect;
|
|
21
|
+
describe('TelemetryLogger', () => {
|
|
22
|
+
const sender = {
|
|
23
|
+
sendEventData: () => { },
|
|
24
|
+
sendErrorData: () => { }
|
|
25
|
+
};
|
|
26
|
+
it('reflects the current telemetry enabled state', () => {
|
|
27
|
+
const telemetry = new telemetry_ext_1.TelemetryExtImpl();
|
|
28
|
+
const logger = telemetry.createTelemetryLogger(sender);
|
|
29
|
+
expect(logger.telemetryEnabled).to.equal(false);
|
|
30
|
+
expect(logger.isUsageEnabled).to.equal(false);
|
|
31
|
+
expect(logger.isErrorsEnabled).to.equal(false);
|
|
32
|
+
telemetry.isTelemetryEnabled = true;
|
|
33
|
+
expect(logger.telemetryEnabled).to.equal(true);
|
|
34
|
+
expect(logger.isUsageEnabled).to.equal(true);
|
|
35
|
+
expect(logger.isErrorsEnabled).to.equal(true);
|
|
36
|
+
telemetry.isTelemetryEnabled = false;
|
|
37
|
+
expect(logger.telemetryEnabled).to.equal(false);
|
|
38
|
+
expect(logger.isUsageEnabled).to.equal(false);
|
|
39
|
+
expect(logger.isErrorsEnabled).to.equal(false);
|
|
40
|
+
});
|
|
41
|
+
it('emits enable-state changes when telemetry is toggled', () => {
|
|
42
|
+
const telemetry = new telemetry_ext_1.TelemetryExtImpl();
|
|
43
|
+
const logger = telemetry.createTelemetryLogger(sender);
|
|
44
|
+
let changes = 0;
|
|
45
|
+
logger.onDidChangeEnableStates(() => changes++);
|
|
46
|
+
telemetry.isTelemetryEnabled = true;
|
|
47
|
+
telemetry.isTelemetryEnabled = false;
|
|
48
|
+
expect(changes).to.equal(2);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=telemetry-ext.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-ext.spec.js","sourceRoot":"","sources":["../../src/plugin/telemetry-ext.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,wCAAwC;AACxC,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,6BAA6B;AAC7B,mDAAmD;AAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG;QACX,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC;QACxB,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC;KAC3B,CAAC;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,SAAS,GAAG,IAAI,gCAAgB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/C,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9C,SAAS,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAErC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC5D,MAAM,SAAS,GAAG,IAAI,gCAAgB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhD,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACpC,SAAS,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAErC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/plugin-ext",
|
|
3
|
-
"version": "1.74.0-next.
|
|
3
|
+
"version": "1.74.0-next.47+4054d107c",
|
|
4
4
|
"description": "Theia - Plugin Extension",
|
|
5
5
|
"main": "lib/common/index.js",
|
|
6
6
|
"typings": "lib/common/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@theia/ai-core": "1.74.0-next.
|
|
9
|
-
"@theia/ai-mcp": "1.74.0-next.
|
|
10
|
-
"@theia/bulk-edit": "1.74.0-next.
|
|
11
|
-
"@theia/callhierarchy": "1.74.0-next.
|
|
12
|
-
"@theia/console": "1.74.0-next.
|
|
13
|
-
"@theia/core": "1.74.0-next.
|
|
14
|
-
"@theia/debug": "1.74.0-next.
|
|
15
|
-
"@theia/editor": "1.74.0-next.
|
|
16
|
-
"@theia/editor-preview": "1.74.0-next.
|
|
17
|
-
"@theia/file-search": "1.74.0-next.
|
|
18
|
-
"@theia/filesystem": "1.74.0-next.
|
|
19
|
-
"@theia/markers": "1.74.0-next.
|
|
20
|
-
"@theia/messages": "1.74.0-next.
|
|
21
|
-
"@theia/monaco": "1.74.0-next.
|
|
8
|
+
"@theia/ai-core": "1.74.0-next.47+4054d107c",
|
|
9
|
+
"@theia/ai-mcp": "1.74.0-next.47+4054d107c",
|
|
10
|
+
"@theia/bulk-edit": "1.74.0-next.47+4054d107c",
|
|
11
|
+
"@theia/callhierarchy": "1.74.0-next.47+4054d107c",
|
|
12
|
+
"@theia/console": "1.74.0-next.47+4054d107c",
|
|
13
|
+
"@theia/core": "1.74.0-next.47+4054d107c",
|
|
14
|
+
"@theia/debug": "1.74.0-next.47+4054d107c",
|
|
15
|
+
"@theia/editor": "1.74.0-next.47+4054d107c",
|
|
16
|
+
"@theia/editor-preview": "1.74.0-next.47+4054d107c",
|
|
17
|
+
"@theia/file-search": "1.74.0-next.47+4054d107c",
|
|
18
|
+
"@theia/filesystem": "1.74.0-next.47+4054d107c",
|
|
19
|
+
"@theia/markers": "1.74.0-next.47+4054d107c",
|
|
20
|
+
"@theia/messages": "1.74.0-next.47+4054d107c",
|
|
21
|
+
"@theia/monaco": "1.74.0-next.47+4054d107c",
|
|
22
22
|
"@theia/monaco-editor-core": "1.108.201",
|
|
23
|
-
"@theia/navigator": "1.74.0-next.
|
|
24
|
-
"@theia/notebook": "1.74.0-next.
|
|
25
|
-
"@theia/output": "1.74.0-next.
|
|
26
|
-
"@theia/plugin": "1.74.0-next.
|
|
27
|
-
"@theia/preferences": "1.74.0-next.
|
|
28
|
-
"@theia/scm": "1.74.0-next.
|
|
29
|
-
"@theia/search-in-workspace": "1.74.0-next.
|
|
30
|
-
"@theia/task": "1.74.0-next.
|
|
31
|
-
"@theia/terminal": "1.74.0-next.
|
|
32
|
-
"@theia/test": "1.74.0-next.
|
|
33
|
-
"@theia/timeline": "1.74.0-next.
|
|
34
|
-
"@theia/typehierarchy": "1.74.0-next.
|
|
35
|
-
"@theia/variable-resolver": "1.74.0-next.
|
|
36
|
-
"@theia/workspace": "1.74.0-next.
|
|
23
|
+
"@theia/navigator": "1.74.0-next.47+4054d107c",
|
|
24
|
+
"@theia/notebook": "1.74.0-next.47+4054d107c",
|
|
25
|
+
"@theia/output": "1.74.0-next.47+4054d107c",
|
|
26
|
+
"@theia/plugin": "1.74.0-next.47+4054d107c",
|
|
27
|
+
"@theia/preferences": "1.74.0-next.47+4054d107c",
|
|
28
|
+
"@theia/scm": "1.74.0-next.47+4054d107c",
|
|
29
|
+
"@theia/search-in-workspace": "1.74.0-next.47+4054d107c",
|
|
30
|
+
"@theia/task": "1.74.0-next.47+4054d107c",
|
|
31
|
+
"@theia/terminal": "1.74.0-next.47+4054d107c",
|
|
32
|
+
"@theia/test": "1.74.0-next.47+4054d107c",
|
|
33
|
+
"@theia/timeline": "1.74.0-next.47+4054d107c",
|
|
34
|
+
"@theia/typehierarchy": "1.74.0-next.47+4054d107c",
|
|
35
|
+
"@theia/variable-resolver": "1.74.0-next.47+4054d107c",
|
|
36
|
+
"@theia/workspace": "1.74.0-next.47+4054d107c",
|
|
37
37
|
"@types/mime": "^2.0.3",
|
|
38
38
|
"@vscode/debugprotocol": "^1.68.0",
|
|
39
39
|
"@vscode/proxy-agent": "^0.13.2",
|
|
@@ -98,5 +98,5 @@
|
|
|
98
98
|
"nyc": {
|
|
99
99
|
"extends": "../../configs/nyc.json"
|
|
100
100
|
},
|
|
101
|
-
"gitHead": "
|
|
101
|
+
"gitHead": "4054d107c43b29999cffa353ec64cfef156cf714"
|
|
102
102
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
|
|
17
|
+
import { expect } from 'chai';
|
|
18
|
+
import * as fs from 'fs';
|
|
19
|
+
import * as os from 'os';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import { HostedPluginReader } from './plugin-reader';
|
|
22
|
+
|
|
23
|
+
class TestHostedPluginReader extends HostedPluginReader {
|
|
24
|
+
resolve(localPath: string, filePath: string): Promise<string | undefined> {
|
|
25
|
+
return this.resolveFile(localPath, filePath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe('HostedPluginReader#resolveFile', () => {
|
|
30
|
+
|
|
31
|
+
let pluginDir: string;
|
|
32
|
+
let nearSiblingFile: string;
|
|
33
|
+
let farSiblingFile: string;
|
|
34
|
+
const reader = new TestHostedPluginReader();
|
|
35
|
+
|
|
36
|
+
before(() => {
|
|
37
|
+
// Layout:
|
|
38
|
+
// <root>/far-sibling.txt (reachable via `../../far-sibling.txt`)
|
|
39
|
+
// <root>/wrapper/sibling.txt (reachable via `../sibling.txt`)
|
|
40
|
+
// <root>/wrapper/plugin/ (pluginDir)
|
|
41
|
+
// ├── main.js
|
|
42
|
+
// └── media/icon.png
|
|
43
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'theia-plugin-reader-'));
|
|
44
|
+
const wrapper = path.join(root, 'wrapper');
|
|
45
|
+
pluginDir = path.join(wrapper, 'plugin');
|
|
46
|
+
fs.mkdirSync(pluginDir, { recursive: true });
|
|
47
|
+
fs.writeFileSync(path.join(pluginDir, 'main.js'), 'console.log("ok");');
|
|
48
|
+
fs.mkdirSync(path.join(pluginDir, 'media'));
|
|
49
|
+
fs.writeFileSync(path.join(pluginDir, 'media', 'icon.png'), 'png');
|
|
50
|
+
nearSiblingFile = path.join(wrapper, 'sibling.txt');
|
|
51
|
+
fs.writeFileSync(nearSiblingFile, 'near');
|
|
52
|
+
farSiblingFile = path.join(root, 'far-sibling.txt');
|
|
53
|
+
fs.writeFileSync(farSiblingFile, 'far');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('serves a file inside the plugin directory', async () => {
|
|
57
|
+
expect(await reader.resolve(pluginDir, 'main.js')).to.equal(path.join(pluginDir, 'main.js'));
|
|
58
|
+
expect(await reader.resolve(pluginDir, 'media/icon.png')).to.equal(path.join(pluginDir, 'media', 'icon.png'));
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('resolves extensionless references with the .js fallback', async () => {
|
|
62
|
+
expect(await reader.resolve(pluginDir, 'main')).to.equal(path.join(pluginDir, 'main.js'));
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('returns undefined for a relative path pointing outside the plugin directory', async () => {
|
|
66
|
+
expect(await reader.resolve(pluginDir, '../sibling.txt')).to.be.undefined;
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('returns undefined for a relative path composed of parent-directory segments', async () => {
|
|
70
|
+
expect(await reader.resolve(pluginDir, '../../far-sibling.txt')).to.be.undefined;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('returns undefined for an absolute path outside the plugin directory', async () => {
|
|
74
|
+
expect(await reader.resolve(pluginDir, nearSiblingFile)).to.be.undefined;
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('returns undefined for a missing file inside the plugin directory', async () => {
|
|
78
|
+
expect(await reader.resolve(pluginDir, 'does-not-exist.js')).to.be.undefined;
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -49,8 +49,7 @@ export class HostedPluginReader implements BackendApplicationContribution {
|
|
|
49
49
|
|
|
50
50
|
const localPath = this.pluginsIdsFiles.get(pluginId);
|
|
51
51
|
if (localPath) {
|
|
52
|
-
const
|
|
53
|
-
const resolvedFile = await this.resolveFile(absolutePath);
|
|
52
|
+
const resolvedFile = await this.resolveFile(localPath, filePath);
|
|
54
53
|
if (!resolvedFile) {
|
|
55
54
|
res.status(404).send(`No such file found in '${escape_html(pluginId)}' plugin.`);
|
|
56
55
|
return;
|
|
@@ -79,13 +78,23 @@ export class HostedPluginReader implements BackendApplicationContribution {
|
|
|
79
78
|
}
|
|
80
79
|
|
|
81
80
|
/**
|
|
82
|
-
* Resolves
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* which is common in Node.js/CommonJS environments.
|
|
81
|
+
* Resolves `filePath` under `localPath`, with fallback to `.js`, `.cjs` and `.mjs`
|
|
82
|
+
* extensions. Returns `undefined` if the resolved path is not under `localPath`
|
|
83
|
+
* or if no candidate exists on disk.
|
|
86
84
|
*
|
|
85
|
+
* The extension fallback handles cases where plugins reference modules without
|
|
86
|
+
* extensions, which is common in Node.js/CommonJS environments.
|
|
87
87
|
*/
|
|
88
|
-
protected async resolveFile(
|
|
88
|
+
protected async resolveFile(localPath: string, filePath: string): Promise<string | undefined> {
|
|
89
|
+
const absolutePath = path.resolve(localPath, filePath);
|
|
90
|
+
|
|
91
|
+
// `path.relative` yields a path starting with '..' (or an absolute path on
|
|
92
|
+
// Windows when the drive differs) when `absolutePath` is not under `localPath`.
|
|
93
|
+
const relativePath = path.relative(localPath, absolutePath);
|
|
94
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
89
98
|
const candidates = [absolutePath];
|
|
90
99
|
const pathExtension = path.extname(absolutePath).toLowerCase();
|
|
91
100
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 suzunn 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
|
+
|
|
17
|
+
import * as chai from 'chai';
|
|
18
|
+
import { TelemetryExtImpl } from './telemetry-ext';
|
|
19
|
+
|
|
20
|
+
const expect = chai.expect;
|
|
21
|
+
|
|
22
|
+
describe('TelemetryLogger', () => {
|
|
23
|
+
const sender = {
|
|
24
|
+
sendEventData: () => { },
|
|
25
|
+
sendErrorData: () => { }
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
it('reflects the current telemetry enabled state', () => {
|
|
29
|
+
const telemetry = new TelemetryExtImpl();
|
|
30
|
+
const logger = telemetry.createTelemetryLogger(sender);
|
|
31
|
+
|
|
32
|
+
expect(logger.telemetryEnabled).to.equal(false);
|
|
33
|
+
expect(logger.isUsageEnabled).to.equal(false);
|
|
34
|
+
expect(logger.isErrorsEnabled).to.equal(false);
|
|
35
|
+
|
|
36
|
+
telemetry.isTelemetryEnabled = true;
|
|
37
|
+
|
|
38
|
+
expect(logger.telemetryEnabled).to.equal(true);
|
|
39
|
+
expect(logger.isUsageEnabled).to.equal(true);
|
|
40
|
+
expect(logger.isErrorsEnabled).to.equal(true);
|
|
41
|
+
|
|
42
|
+
telemetry.isTelemetryEnabled = false;
|
|
43
|
+
|
|
44
|
+
expect(logger.telemetryEnabled).to.equal(false);
|
|
45
|
+
expect(logger.isUsageEnabled).to.equal(false);
|
|
46
|
+
expect(logger.isErrorsEnabled).to.equal(false);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('emits enable-state changes when telemetry is toggled', () => {
|
|
50
|
+
const telemetry = new TelemetryExtImpl();
|
|
51
|
+
const logger = telemetry.createTelemetryLogger(sender);
|
|
52
|
+
let changes = 0;
|
|
53
|
+
|
|
54
|
+
logger.onDidChangeEnableStates(() => changes++);
|
|
55
|
+
|
|
56
|
+
telemetry.isTelemetryEnabled = true;
|
|
57
|
+
telemetry.isTelemetryEnabled = false;
|
|
58
|
+
|
|
59
|
+
expect(changes).to.equal(2);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
@@ -49,7 +49,7 @@ export class TelemetryLogger {
|
|
|
49
49
|
readonly options: TelemetryLoggerOptions | undefined;
|
|
50
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
51
|
readonly commonProperties: Record<string, any>;
|
|
52
|
-
|
|
52
|
+
private _telemetryEnabled: boolean;
|
|
53
53
|
|
|
54
54
|
private readonly onDidChangeEnableStatesEmitter: Emitter<TelemetryLogger> = new Emitter();
|
|
55
55
|
readonly onDidChangeEnableStates: Event<TelemetryLogger> = this.onDidChangeEnableStatesEmitter.event;
|
|
@@ -60,9 +60,20 @@ export class TelemetryLogger {
|
|
|
60
60
|
this.sender = sender;
|
|
61
61
|
this.options = options;
|
|
62
62
|
this.commonProperties = this.getCommonProperties();
|
|
63
|
-
this.
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
63
|
+
this._telemetryEnabled = telemetryEnabled;
|
|
64
|
+
this._isErrorsEnabled = telemetryEnabled;
|
|
65
|
+
this._isUsageEnabled = telemetryEnabled;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
get telemetryEnabled(): boolean {
|
|
69
|
+
return this._telemetryEnabled;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
set telemetryEnabled(telemetryEnabled: boolean) {
|
|
73
|
+
if (this._telemetryEnabled !== telemetryEnabled) {
|
|
74
|
+
this._telemetryEnabled = telemetryEnabled;
|
|
75
|
+
this.updateEnableStates(telemetryEnabled, telemetryEnabled);
|
|
76
|
+
}
|
|
66
77
|
}
|
|
67
78
|
|
|
68
79
|
get isUsageEnabled(): boolean {
|
|
@@ -87,6 +98,14 @@ export class TelemetryLogger {
|
|
|
87
98
|
}
|
|
88
99
|
}
|
|
89
100
|
|
|
101
|
+
private updateEnableStates(isUsageEnabled: boolean, isErrorsEnabled: boolean): void {
|
|
102
|
+
if (this._isUsageEnabled !== isUsageEnabled || this._isErrorsEnabled !== isErrorsEnabled) {
|
|
103
|
+
this._isUsageEnabled = isUsageEnabled;
|
|
104
|
+
this._isErrorsEnabled = isErrorsEnabled;
|
|
105
|
+
this.onDidChangeEnableStatesEmitter.fire(this);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
90
109
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
91
110
|
logUsage(eventName: string, data?: Record<string, any | TelemetryTrustedValue<any>>): void {
|
|
92
111
|
if (!this.telemetryEnabled || !this.isUsageEnabled) {
|