@theia/plugin-utils 1.76.0-next.7 → 1.76.0
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/common/constants.d.ts +5 -0
- package/lib/common/constants.d.ts.map +1 -1
- package/lib/common/constants.js +6 -1
- package/lib/common/constants.js.map +1 -1
- package/lib/common/manifest-types.d.ts +1 -0
- package/lib/common/manifest-types.d.ts.map +1 -1
- package/lib/common/manifest-types.js +2 -1
- package/lib/common/manifest-types.js.map +1 -1
- package/lib/common/plugin-model.d.ts +11 -4
- package/lib/common/plugin-model.d.ts.map +1 -1
- package/lib/common/plugin-model.js +28 -6
- package/lib/common/plugin-model.js.map +1 -1
- package/lib/common/plugin-model.spec.js +16 -2
- package/lib/common/plugin-model.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/common/constants.ts +6 -0
- package/src/common/manifest-types.ts +1 -0
- package/src/common/plugin-model.spec.ts +21 -2
- package/src/common/plugin-model.ts +30 -6
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export declare const PLUGINS_BASE_PATH = "hostedPlugin";
|
|
2
|
+
/**
|
|
3
|
+
* URI scheme for plugin assets read through the `FileService`. Browser-only serves them over HTTP
|
|
4
|
+
* from `PLUGINS_BASE_PATH` instead.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PLUGINS_SCHEME = "theia-plugin";
|
|
2
7
|
export declare const UNPUBLISHED = "<unpublished>";
|
|
3
8
|
export declare const DEFAULT_PLUGINS_DIR = "plugins";
|
|
4
9
|
export declare const LIST_JSON = "list.json";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AAEnE,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAE/D,eAAO,MAAM,yBAAyB,UAAU,CAAC;AACjD,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,2BAA2B,eAAe,CAAC;AAExD,eAAO,MAAM,kBAAkB,QAAuC,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAE7C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AAEnE,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAE/D,eAAO,MAAM,yBAAyB,UAAU,CAAC;AACjD,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,2BAA2B,eAAe,CAAC;AAExD,eAAO,MAAM,kBAAkB,QAAuC,CAAC"}
|
package/lib/common/constants.js
CHANGED
|
@@ -15,8 +15,13 @@
|
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.PLUGIN_COPY_IGNORE = exports.VSCODE_EXTENSION_DEACTIVATE = exports.VSCODE_EXTENSION_ACTIVATE = exports.THEIA_PLUGIN_STOP_METHOD = exports.THEIA_PLUGIN_START_METHOD = exports.VSCODE_FRONTEND_INIT = exports.VSCODE_BUILTIN_NAME_PREFIX = exports.LIST_JSON = exports.DEFAULT_PLUGINS_DIR = exports.UNPUBLISHED = exports.PLUGINS_BASE_PATH = void 0;
|
|
18
|
+
exports.PLUGIN_COPY_IGNORE = exports.VSCODE_EXTENSION_DEACTIVATE = exports.VSCODE_EXTENSION_ACTIVATE = exports.THEIA_PLUGIN_STOP_METHOD = exports.THEIA_PLUGIN_START_METHOD = exports.VSCODE_FRONTEND_INIT = exports.VSCODE_BUILTIN_NAME_PREFIX = exports.LIST_JSON = exports.DEFAULT_PLUGINS_DIR = exports.UNPUBLISHED = exports.PLUGINS_SCHEME = exports.PLUGINS_BASE_PATH = void 0;
|
|
19
19
|
exports.PLUGINS_BASE_PATH = 'hostedPlugin';
|
|
20
|
+
/**
|
|
21
|
+
* URI scheme for plugin assets read through the `FileService`. Browser-only serves them over HTTP
|
|
22
|
+
* from `PLUGINS_BASE_PATH` instead.
|
|
23
|
+
*/
|
|
24
|
+
exports.PLUGINS_SCHEME = 'theia-plugin';
|
|
20
25
|
exports.UNPUBLISHED = '<unpublished>';
|
|
21
26
|
exports.DEFAULT_PLUGINS_DIR = 'plugins';
|
|
22
27
|
exports.LIST_JSON = 'list.json';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iDAAiD;AACjD,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;;;AAEnE,QAAA,iBAAiB,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/common/constants.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iDAAiD;AACjD,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;;;AAEnE,QAAA,iBAAiB,GAAG,cAAc,CAAC;AAEhD;;;GAGG;AACU,QAAA,cAAc,GAAG,cAAc,CAAC;AAEhC,QAAA,WAAW,GAAG,eAAe,CAAC;AAE9B,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAEhC,QAAA,SAAS,GAAG,WAAW,CAAC;AAExB,QAAA,0BAA0B,GAAG,wBAAwB,CAAC;AAEtD,QAAA,oBAAoB,GAAG,0BAA0B,CAAC;AAElD,QAAA,yBAAyB,GAAG,OAAO,CAAC;AACpC,QAAA,wBAAwB,GAAG,MAAM,CAAC;AAElC,QAAA,yBAAyB,GAAG,UAAU,CAAC;AACvC,QAAA,2BAA2B,GAAG,YAAY,CAAC;AAE3C,QAAA,kBAAkB,GAAG,oCAAoC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { NormalizedPluginContribution, PluginManifestContribution } from './contribution-types';
|
|
2
2
|
export declare const PLUGIN_HOST_BACKEND: "main";
|
|
3
|
+
export declare const PLUGIN_HOST_FRONTEND: "frontend";
|
|
3
4
|
/** Whether a plugin is installed by the system or by a user. */
|
|
4
5
|
export declare enum PluginType {
|
|
5
6
|
System = 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-types.d.ts","sourceRoot":"","sources":["../../src/common/manifest-types.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAErG,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest-types.d.ts","sourceRoot":"","sources":["../../src/common/manifest-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.PluginType = exports.PLUGIN_HOST_BACKEND = void 0;
|
|
18
|
+
exports.PluginType = exports.PLUGIN_HOST_FRONTEND = exports.PLUGIN_HOST_BACKEND = void 0;
|
|
19
19
|
exports.rawContributes = rawContributes;
|
|
20
20
|
const utils_1 = require("./utils");
|
|
21
21
|
exports.PLUGIN_HOST_BACKEND = 'main';
|
|
22
|
+
exports.PLUGIN_HOST_FRONTEND = 'frontend';
|
|
22
23
|
/** Whether a plugin is installed by the system or by a user. */
|
|
23
24
|
var PluginType;
|
|
24
25
|
(function (PluginType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-types.js","sourceRoot":"","sources":["../../src/common/manifest-types.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iDAAiD;AACjD,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;;;
|
|
1
|
+
{"version":3,"file":"manifest-types.js","sourceRoot":"","sources":["../../src/common/manifest-types.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iDAAiD;AACjD,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;;;AAkDhF,wCAEC;AAlDD,mCAAmC;AAGtB,QAAA,mBAAmB,GAAG,MAAe,CAAC;AACtC,QAAA,oBAAoB,GAAG,UAAmB,CAAC;AAExD,gEAAgE;AAChE,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,+CAAU,CAAA;IACV,2CAAQ,CAAA;AACZ,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAsCD,SAAgB,cAAc,CAAC,QAA6C;IACxE,OAAO,IAAA,gBAAQ,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAyC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpG,CAAC"}
|
|
@@ -9,12 +9,19 @@ export interface VsCodeBuildOptions {
|
|
|
9
9
|
}
|
|
10
10
|
export declare function getPluginId(plugin: PluginIdentifierSource): string;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* static file servers
|
|
15
|
-
* `.` is dropped and `..` is resolved within the plugin root (leading `..` is ignored).
|
|
12
|
+
* Re-encodes an already decoded plugin asset path - what `URI.path` hands back - so it can be
|
|
13
|
+
* appended to a URL unchanged. Encoding per segment rather than as a whole keeps `/` literal, which
|
|
14
|
+
* plain static file servers need, and preserves names containing `#`, `?` or `%`.
|
|
16
15
|
*/
|
|
16
|
+
export declare function encodePluginAssetPath(decodedPath: string): string;
|
|
17
|
+
/** Builds a static-friendly plugin asset URL: `hostedPlugin/<id>/<segments...>`. */
|
|
17
18
|
export declare function toPluginUrl(pck: PluginIdentifierSource, relativePath: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Like {@link toPluginUrl}, but as a `PLUGINS_SCHEME` URI for the assets read through the
|
|
21
|
+
* `FileService` (color themes, icon themes, icon fonts). A bare relative path has no scheme for it
|
|
22
|
+
* to resolve.
|
|
23
|
+
*/
|
|
24
|
+
export declare function toPluginUri(pck: PluginIdentifierSource, relativePath: string): string;
|
|
18
25
|
/**
|
|
19
26
|
* Explicit `theiaPlugin` engine takes priority over `vscode`.
|
|
20
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-model.d.ts","sourceRoot":"","sources":["../../src/common/plugin-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin-model.d.ts","sourceRoot":"","sources":["../../src/common/plugin-model.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EACR,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,yBAAyB,EAC5B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,sBAAsB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IAC/B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAElE;AAyBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,GAAG,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAErF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAErF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,GAAG,QAAQ,CAQjF;AAED,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE;IAAE,YAAY,CAAC,EAAE,yBAAyB,CAAA;CAAE,EACtD,MAAM,EAAE;IAAE,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC7D,IAAI,CAKN;AAWD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB,CASlF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,CAejH;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,CAoBxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAoBvG;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAEpI;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,GAAG,QAAQ,GAAG,eAAe,CAe9G"}
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.getPluginId = getPluginId;
|
|
19
|
+
exports.encodePluginAssetPath = encodePluginAssetPath;
|
|
19
20
|
exports.toPluginUrl = toPluginUrl;
|
|
21
|
+
exports.toPluginUri = toPluginUri;
|
|
20
22
|
exports.pickEngineType = pickEngineType;
|
|
21
23
|
exports.applyTrustExtraction = applyTrustExtraction;
|
|
22
24
|
exports.buildEntryPointForTheia = buildEntryPointForTheia;
|
|
@@ -30,12 +32,12 @@ function getPluginId(plugin) {
|
|
|
30
32
|
return `${plugin.publisher ?? constants_1.UNPUBLISHED}_${plugin.name}`.replace(/\W/g, '_');
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
|
-
* Builds a
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
35
|
+
* Builds `<id>/<segments...>` for a plugin asset. Path separators stay literal `/`; each segment
|
|
36
|
+
* is `encodeURIComponent`'d so plain static file servers (browser-only) resolve assets without
|
|
37
|
+
* needing Express `:path(*)` decoding. `.` is dropped and `..` is resolved within the plugin root
|
|
38
|
+
* (leading `..` is ignored).
|
|
37
39
|
*/
|
|
38
|
-
function
|
|
40
|
+
function toPluginAssetPath(pck, relativePath) {
|
|
39
41
|
const segments = [];
|
|
40
42
|
for (const segment of relativePath.replace(/\\/g, '/').split('/')) {
|
|
41
43
|
if (!segment || segment === '.') {
|
|
@@ -49,7 +51,27 @@ function toPluginUrl(pck, relativePath) {
|
|
|
49
51
|
}
|
|
50
52
|
segments.push(encodeURIComponent(segment));
|
|
51
53
|
}
|
|
52
|
-
return `${
|
|
54
|
+
return `${getPluginId(pck)}/${segments.join('/')}`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Re-encodes an already decoded plugin asset path - what `URI.path` hands back - so it can be
|
|
58
|
+
* appended to a URL unchanged. Encoding per segment rather than as a whole keeps `/` literal, which
|
|
59
|
+
* plain static file servers need, and preserves names containing `#`, `?` or `%`.
|
|
60
|
+
*/
|
|
61
|
+
function encodePluginAssetPath(decodedPath) {
|
|
62
|
+
return decodedPath.split('/').map(encodeURIComponent).join('/');
|
|
63
|
+
}
|
|
64
|
+
/** Builds a static-friendly plugin asset URL: `hostedPlugin/<id>/<segments...>`. */
|
|
65
|
+
function toPluginUrl(pck, relativePath) {
|
|
66
|
+
return `${constants_1.PLUGINS_BASE_PATH}/${toPluginAssetPath(pck, relativePath)}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Like {@link toPluginUrl}, but as a `PLUGINS_SCHEME` URI for the assets read through the
|
|
70
|
+
* `FileService` (color themes, icon themes, icon fonts). A bare relative path has no scheme for it
|
|
71
|
+
* to resolve.
|
|
72
|
+
*/
|
|
73
|
+
function toPluginUri(pck, relativePath) {
|
|
74
|
+
return `${constants_1.PLUGINS_SCHEME}:/${toPluginAssetPath(pck, relativePath)}`;
|
|
53
75
|
}
|
|
54
76
|
/**
|
|
55
77
|
* Explicit `theiaPlugin` engine takes priority over `vscode`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-model.js","sourceRoot":"","sources":["../../src/common/plugin-model.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iDAAiD;AACjD,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;;
|
|
1
|
+
{"version":3,"file":"plugin-model.js","sourceRoot":"","sources":["../../src/common/plugin-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,20 @@ describe('plugin-model', () => {
|
|
|
50
50
|
.to.equal('hostedPlugin/acme_ext/secret.json');
|
|
51
51
|
});
|
|
52
52
|
});
|
|
53
|
+
describe('encodePluginAssetPath', () => {
|
|
54
|
+
it('encodes segments but keeps separators', () => {
|
|
55
|
+
(0, chai_1.expect)((0, plugin_model_1.encodePluginAssetPath)('/acme_ext/sub dir/a#b?c%d.json'))
|
|
56
|
+
.to.equal('/acme_ext/sub%20dir/a%23b%3Fc%25d.json');
|
|
57
|
+
});
|
|
58
|
+
it('round-trips the decoded path of a plugin asset URI', () => {
|
|
59
|
+
for (const relativePath of ['a#b?c%d.json', 'my icon.png', 'themes/dark+.json', 'sub dir/x[1].woff']) {
|
|
60
|
+
const uri = (0, plugin_model_1.toPluginUri)({ publisher: 'acme', name: 'ext' }, relativePath);
|
|
61
|
+
// what `URI.path` hands a consumer back
|
|
62
|
+
const decoded = decodeURIComponent(uri.substring(`${constants_1.PLUGINS_SCHEME}:`.length));
|
|
63
|
+
(0, chai_1.expect)(`${constants_1.PLUGINS_SCHEME}:${(0, plugin_model_1.encodePluginAssetPath)(decoded)}`).to.equal(uri);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
53
67
|
describe('pickEngineType', () => {
|
|
54
68
|
it('prefers theiaPlugin over vscode when both are declared', () => {
|
|
55
69
|
(0, chai_1.expect)((0, plugin_model_1.pickEngineType)((0, test_helpers_1.manifest)({
|
|
@@ -159,12 +173,12 @@ describe('plugin-model', () => {
|
|
|
159
173
|
const model = (0, plugin_model_1.buildModelForTheia)((0, test_helpers_1.manifest)({
|
|
160
174
|
name: 'Sample',
|
|
161
175
|
publisher: 'Acme',
|
|
162
|
-
packageUri:
|
|
176
|
+
packageUri: `${constants_1.PLUGINS_SCHEME}:/acme_Sample/`
|
|
163
177
|
}));
|
|
164
178
|
(0, chai_1.expect)(model.id).to.equal('acme.sample');
|
|
165
179
|
(0, chai_1.expect)(model.engine).to.deep.equal({ type: 'theiaPlugin', version: '*' });
|
|
166
180
|
(0, chai_1.expect)(model.displayName).to.equal('Test Extension');
|
|
167
|
-
(0, chai_1.expect)(model.packageUri).to.equal(
|
|
181
|
+
(0, chai_1.expect)(model.packageUri).to.equal(`${constants_1.PLUGINS_SCHEME}:/acme_Sample/`);
|
|
168
182
|
});
|
|
169
183
|
it('builds vscode model with icon url and web entry point', () => {
|
|
170
184
|
const model = (0, plugin_model_1.buildModelForVsCode)((0, test_helpers_1.manifest)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-model.spec.js","sourceRoot":"","sources":["../../src/common/plugin-model.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,iDAAiD;AACjD,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,+BAA8B;AAC9B,yBAAyB;AACzB,yBAAyB;AACzB,6BAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"plugin-model.spec.js","sourceRoot":"","sources":["../../src/common/plugin-model.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/plugin-utils",
|
|
3
|
-
"version": "1.76.0
|
|
3
|
+
"version": "1.76.0",
|
|
4
4
|
"description": "Theia - Shared plugin manifest utilities",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@types/fs-extra": "^4.0.15",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"watch": "theiaext watch"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@theia/ext-scripts": "1.
|
|
36
|
+
"@theia/ext-scripts": "1.76.0"
|
|
37
37
|
},
|
|
38
38
|
"nyc": {
|
|
39
39
|
"extends": "../../configs/nyc.json"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "b9b54c500b46515512e2b44371bc0c7122947bed"
|
|
42
42
|
}
|
package/src/common/constants.ts
CHANGED
|
@@ -16,6 +16,12 @@
|
|
|
16
16
|
|
|
17
17
|
export const PLUGINS_BASE_PATH = 'hostedPlugin';
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* URI scheme for plugin assets read through the `FileService`. Browser-only serves them over HTTP
|
|
21
|
+
* from `PLUGINS_BASE_PATH` instead.
|
|
22
|
+
*/
|
|
23
|
+
export const PLUGINS_SCHEME = 'theia-plugin';
|
|
24
|
+
|
|
19
25
|
export const UNPUBLISHED = '<unpublished>';
|
|
20
26
|
|
|
21
27
|
export const DEFAULT_PLUGINS_DIR = 'plugins';
|
|
@@ -18,6 +18,7 @@ import { isObject } from './utils';
|
|
|
18
18
|
import type { NormalizedPluginContribution, PluginManifestContribution } from './contribution-types';
|
|
19
19
|
|
|
20
20
|
export const PLUGIN_HOST_BACKEND = 'main' as const;
|
|
21
|
+
export const PLUGIN_HOST_FRONTEND = 'frontend' as const;
|
|
21
22
|
|
|
22
23
|
/** Whether a plugin is installed by the system or by a user. */
|
|
23
24
|
export enum PluginType {
|
|
@@ -19,6 +19,7 @@ import * as fs from 'fs';
|
|
|
19
19
|
import * as os from 'os';
|
|
20
20
|
import * as path from 'path';
|
|
21
21
|
import {
|
|
22
|
+
PLUGINS_SCHEME,
|
|
22
23
|
UNPUBLISHED,
|
|
23
24
|
VSCODE_EXTENSION_ACTIVATE,
|
|
24
25
|
VSCODE_EXTENSION_DEACTIVATE,
|
|
@@ -34,8 +35,10 @@ import {
|
|
|
34
35
|
buildModel,
|
|
35
36
|
buildModelForTheia,
|
|
36
37
|
buildModelForVsCode,
|
|
38
|
+
encodePluginAssetPath,
|
|
37
39
|
getPluginId,
|
|
38
40
|
pickEngineType,
|
|
41
|
+
toPluginUri,
|
|
39
42
|
toPluginUrl
|
|
40
43
|
} from './plugin-model';
|
|
41
44
|
import { getPluginRootFileUrl } from '../node/plugin-model';
|
|
@@ -74,6 +77,22 @@ describe('plugin-model', () => {
|
|
|
74
77
|
});
|
|
75
78
|
});
|
|
76
79
|
|
|
80
|
+
describe('encodePluginAssetPath', () => {
|
|
81
|
+
it('encodes segments but keeps separators', () => {
|
|
82
|
+
expect(encodePluginAssetPath('/acme_ext/sub dir/a#b?c%d.json'))
|
|
83
|
+
.to.equal('/acme_ext/sub%20dir/a%23b%3Fc%25d.json');
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('round-trips the decoded path of a plugin asset URI', () => {
|
|
87
|
+
for (const relativePath of ['a#b?c%d.json', 'my icon.png', 'themes/dark+.json', 'sub dir/x[1].woff']) {
|
|
88
|
+
const uri = toPluginUri({ publisher: 'acme', name: 'ext' }, relativePath);
|
|
89
|
+
// what `URI.path` hands a consumer back
|
|
90
|
+
const decoded = decodeURIComponent(uri.substring(`${PLUGINS_SCHEME}:`.length));
|
|
91
|
+
expect(`${PLUGINS_SCHEME}:${encodePluginAssetPath(decoded)}`).to.equal(uri);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
77
96
|
describe('pickEngineType', () => {
|
|
78
97
|
it('prefers theiaPlugin over vscode when both are declared', () => {
|
|
79
98
|
expect(pickEngineType(manifest({
|
|
@@ -198,12 +217,12 @@ describe('plugin-model', () => {
|
|
|
198
217
|
const model = buildModelForTheia(manifest({
|
|
199
218
|
name: 'Sample',
|
|
200
219
|
publisher: 'Acme',
|
|
201
|
-
packageUri:
|
|
220
|
+
packageUri: `${PLUGINS_SCHEME}:/acme_Sample/`
|
|
202
221
|
}));
|
|
203
222
|
expect(model.id).to.equal('acme.sample');
|
|
204
223
|
expect(model.engine).to.deep.equal({ type: 'theiaPlugin', version: '*' });
|
|
205
224
|
expect(model.displayName).to.equal('Test Extension');
|
|
206
|
-
expect(model.packageUri).to.equal(
|
|
225
|
+
expect(model.packageUri).to.equal(`${PLUGINS_SCHEME}:/acme_Sample/`);
|
|
207
226
|
});
|
|
208
227
|
|
|
209
228
|
it('builds vscode model with icon url and web entry point', () => {
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
PLUGINS_BASE_PATH,
|
|
19
|
+
PLUGINS_SCHEME,
|
|
19
20
|
THEIA_PLUGIN_START_METHOD,
|
|
20
21
|
THEIA_PLUGIN_STOP_METHOD,
|
|
21
22
|
UNPUBLISHED,
|
|
@@ -46,12 +47,12 @@ export function getPluginId(plugin: PluginIdentifierSource): string {
|
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
/**
|
|
49
|
-
* Builds a
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
50
|
+
* Builds `<id>/<segments...>` for a plugin asset. Path separators stay literal `/`; each segment
|
|
51
|
+
* is `encodeURIComponent`'d so plain static file servers (browser-only) resolve assets without
|
|
52
|
+
* needing Express `:path(*)` decoding. `.` is dropped and `..` is resolved within the plugin root
|
|
53
|
+
* (leading `..` is ignored).
|
|
53
54
|
*/
|
|
54
|
-
|
|
55
|
+
function toPluginAssetPath(pck: PluginIdentifierSource, relativePath: string): string {
|
|
55
56
|
const segments: string[] = [];
|
|
56
57
|
for (const segment of relativePath.replace(/\\/g, '/').split('/')) {
|
|
57
58
|
if (!segment || segment === '.') {
|
|
@@ -65,7 +66,30 @@ export function toPluginUrl(pck: PluginIdentifierSource, relativePath: string):
|
|
|
65
66
|
}
|
|
66
67
|
segments.push(encodeURIComponent(segment));
|
|
67
68
|
}
|
|
68
|
-
return `${
|
|
69
|
+
return `${getPluginId(pck)}/${segments.join('/')}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Re-encodes an already decoded plugin asset path - what `URI.path` hands back - so it can be
|
|
74
|
+
* appended to a URL unchanged. Encoding per segment rather than as a whole keeps `/` literal, which
|
|
75
|
+
* plain static file servers need, and preserves names containing `#`, `?` or `%`.
|
|
76
|
+
*/
|
|
77
|
+
export function encodePluginAssetPath(decodedPath: string): string {
|
|
78
|
+
return decodedPath.split('/').map(encodeURIComponent).join('/');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Builds a static-friendly plugin asset URL: `hostedPlugin/<id>/<segments...>`. */
|
|
82
|
+
export function toPluginUrl(pck: PluginIdentifierSource, relativePath: string): string {
|
|
83
|
+
return `${PLUGINS_BASE_PATH}/${toPluginAssetPath(pck, relativePath)}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Like {@link toPluginUrl}, but as a `PLUGINS_SCHEME` URI for the assets read through the
|
|
88
|
+
* `FileService` (color themes, icon themes, icon fonts). A bare relative path has no scheme for it
|
|
89
|
+
* to resolve.
|
|
90
|
+
*/
|
|
91
|
+
export function toPluginUri(pck: PluginIdentifierSource, relativePath: string): string {
|
|
92
|
+
return `${PLUGINS_SCHEME}:/${toPluginAssetPath(pck, relativePath)}`;
|
|
69
93
|
}
|
|
70
94
|
|
|
71
95
|
/**
|