@theia/plugin-ext 1.69.0-next.0 → 1.69.0-next.13

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.
@@ -12,6 +12,14 @@ export declare class HostedPluginReader implements BackendApplicationContributio
12
12
  */
13
13
  protected pluginsIdsFiles: Map<string, string>;
14
14
  configure(app: express.Application): void;
15
+ /**
16
+ * Resolves a plugin file path with fallback to .js and .cjs extensions.
17
+ *
18
+ * This handles cases where plugins reference modules without extensions,
19
+ * which is common in Node.js/CommonJS environments.
20
+ *
21
+ */
22
+ protected resolveFile(absolutePath: string): Promise<string | undefined>;
15
23
  protected handleMissingResource(req: express.Request, res: express.Response): Promise<void>;
16
24
  /**
17
25
  * @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;cA+BzB,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"}
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;IAoCzC;;;;;;OAMG;cACa,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;cAuB9D,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"}
@@ -39,7 +39,12 @@ let HostedPluginReader = class HostedPluginReader {
39
39
  const localPath = this.pluginsIdsFiles.get(pluginId);
40
40
  if (localPath) {
41
41
  const absolutePath = path.resolve(localPath, filePath);
42
- res.sendFile(absolutePath, e => {
42
+ const resolvedFile = await this.resolveFile(absolutePath);
43
+ if (!resolvedFile) {
44
+ res.status(404).send(`No such file found in '${escape_html(pluginId)}' plugin.`);
45
+ return;
46
+ }
47
+ res.sendFile(resolvedFile, e => {
43
48
  if (!e) {
44
49
  // the file was found and successfully transferred
45
50
  return;
@@ -63,6 +68,34 @@ let HostedPluginReader = class HostedPluginReader {
63
68
  }
64
69
  });
65
70
  }
71
+ /**
72
+ * Resolves a plugin file path with fallback to .js and .cjs extensions.
73
+ *
74
+ * This handles cases where plugins reference modules without extensions,
75
+ * which is common in Node.js/CommonJS environments.
76
+ *
77
+ */
78
+ async resolveFile(absolutePath) {
79
+ const candidates = [absolutePath];
80
+ const pathExtension = path.extname(absolutePath).toLowerCase();
81
+ if (!pathExtension) {
82
+ candidates.push(absolutePath + '.js');
83
+ candidates.push(absolutePath + '.cjs');
84
+ }
85
+ for (const candidate of candidates) {
86
+ try {
87
+ const stats = await (0, promises_1.stat)(candidate);
88
+ if (stats.isFile()) {
89
+ return candidate;
90
+ }
91
+ }
92
+ catch {
93
+ // File doesn't exist or is inaccessible - try next candidate
94
+ // Actual 404 errors are handled by the caller
95
+ }
96
+ }
97
+ return undefined;
98
+ }
66
99
  async handleMissingResource(req, res) {
67
100
  const pluginId = req.params.pluginId;
68
101
  res.status(404).send(`The plugin with id '${escape_html(pluginId)}' does not exist.`);
@@ -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,0CAAuC;AACvC,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;IA8F/D,CAAC;IA5FG,SAAS,CAAC,GAAwB;QAC9B,GAAG,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,SAAS,EAAE,CAAC;gBACZ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACvD,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE;oBAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;wBACL,kDAAkD;wBAClD,OAAO;oBACX,CAAC;oBACD,OAAO,CAAC,KAAK,CAAC,uBAAuB,QAAQ,gBAAgB,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC7E,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;wBAClB,iCAAiC;wBACjC,OAAO;oBACX,CAAC;oBACD,8DAA8D;oBAC9D,IAAK,CAAS,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0BAA0B,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBACrF,CAAC;yBAAM,CAAC;wBACJ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mCAAmC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAC9F,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,qBAAqB,CAAC,GAAoB,EAAE,GAAqB;QAC7E,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,UAA8B;QAClD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACpD,OAAO,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5E,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAA8B;QAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,kBAAkB,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAA,qCAAY,EAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,QAAQ,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC1C,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAqB;QACpC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1C,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxH,CAAC;QACD,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC3C,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1H,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACjB,qBAAqB;YACrB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;oBAChD,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;YACP,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAA,6BAAW,EAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAqB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,MAAqB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CAEJ,CAAA;AA5GY,gDAAkB;AAGR;IADlB,IAAA,kBAAM,EAAC,cAAO,CAAC;;kDACmB;AAGhB;IADlB,IAAA,kBAAM,EAAC,kCAAe,CAAC;sCACI,kCAAe;mDAAC;AAGK;IADhD,IAAA,oBAAQ,GAAE;IACV,IAAA,uBAAW,EAAC,mCAAiB,CAAC;;8DAA0D;6BAThF,kBAAkB;IAD9B,IAAA,sBAAU,GAAE;GACA,kBAAkB,CA4G9B"}
1
+ {"version":3,"file":"plugin-reader.js","sourceRoot":"","sources":["../../../src/hosted/node/plugin-reader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,38 +1,38 @@
1
1
  {
2
2
  "name": "@theia/plugin-ext",
3
- "version": "1.69.0-next.0+c1487d700",
3
+ "version": "1.69.0-next.13+af52e971a",
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-mcp": "1.69.0-next.0+c1487d700",
9
- "@theia/bulk-edit": "1.69.0-next.0+c1487d700",
10
- "@theia/callhierarchy": "1.69.0-next.0+c1487d700",
11
- "@theia/console": "1.69.0-next.0+c1487d700",
12
- "@theia/core": "1.69.0-next.0+c1487d700",
13
- "@theia/debug": "1.69.0-next.0+c1487d700",
14
- "@theia/editor": "1.69.0-next.0+c1487d700",
15
- "@theia/editor-preview": "1.69.0-next.0+c1487d700",
16
- "@theia/file-search": "1.69.0-next.0+c1487d700",
17
- "@theia/filesystem": "1.69.0-next.0+c1487d700",
18
- "@theia/markers": "1.69.0-next.0+c1487d700",
19
- "@theia/messages": "1.69.0-next.0+c1487d700",
20
- "@theia/monaco": "1.69.0-next.0+c1487d700",
8
+ "@theia/ai-mcp": "1.69.0-next.13+af52e971a",
9
+ "@theia/bulk-edit": "1.69.0-next.13+af52e971a",
10
+ "@theia/callhierarchy": "1.69.0-next.13+af52e971a",
11
+ "@theia/console": "1.69.0-next.13+af52e971a",
12
+ "@theia/core": "1.69.0-next.13+af52e971a",
13
+ "@theia/debug": "1.69.0-next.13+af52e971a",
14
+ "@theia/editor": "1.69.0-next.13+af52e971a",
15
+ "@theia/editor-preview": "1.69.0-next.13+af52e971a",
16
+ "@theia/file-search": "1.69.0-next.13+af52e971a",
17
+ "@theia/filesystem": "1.69.0-next.13+af52e971a",
18
+ "@theia/markers": "1.69.0-next.13+af52e971a",
19
+ "@theia/messages": "1.69.0-next.13+af52e971a",
20
+ "@theia/monaco": "1.69.0-next.13+af52e971a",
21
21
  "@theia/monaco-editor-core": "1.96.302",
22
- "@theia/navigator": "1.69.0-next.0+c1487d700",
23
- "@theia/notebook": "1.69.0-next.0+c1487d700",
24
- "@theia/output": "1.69.0-next.0+c1487d700",
25
- "@theia/plugin": "1.69.0-next.0+c1487d700",
26
- "@theia/preferences": "1.69.0-next.0+c1487d700",
27
- "@theia/scm": "1.69.0-next.0+c1487d700",
28
- "@theia/search-in-workspace": "1.69.0-next.0+c1487d700",
29
- "@theia/task": "1.69.0-next.0+c1487d700",
30
- "@theia/terminal": "1.69.0-next.0+c1487d700",
31
- "@theia/test": "1.69.0-next.0+c1487d700",
32
- "@theia/timeline": "1.69.0-next.0+c1487d700",
33
- "@theia/typehierarchy": "1.69.0-next.0+c1487d700",
34
- "@theia/variable-resolver": "1.69.0-next.0+c1487d700",
35
- "@theia/workspace": "1.69.0-next.0+c1487d700",
22
+ "@theia/navigator": "1.69.0-next.13+af52e971a",
23
+ "@theia/notebook": "1.69.0-next.13+af52e971a",
24
+ "@theia/output": "1.69.0-next.13+af52e971a",
25
+ "@theia/plugin": "1.69.0-next.13+af52e971a",
26
+ "@theia/preferences": "1.69.0-next.13+af52e971a",
27
+ "@theia/scm": "1.69.0-next.13+af52e971a",
28
+ "@theia/search-in-workspace": "1.69.0-next.13+af52e971a",
29
+ "@theia/task": "1.69.0-next.13+af52e971a",
30
+ "@theia/terminal": "1.69.0-next.13+af52e971a",
31
+ "@theia/test": "1.69.0-next.13+af52e971a",
32
+ "@theia/timeline": "1.69.0-next.13+af52e971a",
33
+ "@theia/typehierarchy": "1.69.0-next.13+af52e971a",
34
+ "@theia/variable-resolver": "1.69.0-next.13+af52e971a",
35
+ "@theia/workspace": "1.69.0-next.13+af52e971a",
36
36
  "@types/mime": "^2.0.1",
37
37
  "@vscode/debugprotocol": "^1.51.0",
38
38
  "@vscode/proxy-agent": "^0.13.2",
@@ -97,5 +97,5 @@
97
97
  "nyc": {
98
98
  "extends": "../../configs/nyc.json"
99
99
  },
100
- "gitHead": "c1487d700d12c61ffbf3dc39aff78f4e091946d4"
100
+ "gitHead": "af52e971a9d04e695dd936a1b32f588a5f8351e4"
101
101
  }
@@ -17,7 +17,7 @@
17
17
  import * as path from 'path';
18
18
  import * as express from '@theia/core/shared/express';
19
19
  import * as escape_html from 'escape-html';
20
- import { realpath } from 'fs/promises';
20
+ import { realpath, stat } from 'fs/promises';
21
21
  import { ILogger } from '@theia/core';
22
22
  import { inject, injectable, optional, multiInject } from '@theia/core/shared/inversify';
23
23
  import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
@@ -50,7 +50,12 @@ export class HostedPluginReader implements BackendApplicationContribution {
50
50
  const localPath = this.pluginsIdsFiles.get(pluginId);
51
51
  if (localPath) {
52
52
  const absolutePath = path.resolve(localPath, filePath);
53
- res.sendFile(absolutePath, e => {
53
+ const resolvedFile = await this.resolveFile(absolutePath);
54
+ if (!resolvedFile) {
55
+ res.status(404).send(`No such file found in '${escape_html(pluginId)}' plugin.`);
56
+ return;
57
+ }
58
+ res.sendFile(resolvedFile, e => {
54
59
  if (!e) {
55
60
  // the file was found and successfully transferred
56
61
  return;
@@ -73,6 +78,36 @@ export class HostedPluginReader implements BackendApplicationContribution {
73
78
  });
74
79
  }
75
80
 
81
+ /**
82
+ * Resolves a plugin file path with fallback to .js and .cjs extensions.
83
+ *
84
+ * This handles cases where plugins reference modules without extensions,
85
+ * which is common in Node.js/CommonJS environments.
86
+ *
87
+ */
88
+ protected async resolveFile(absolutePath: string): Promise<string | undefined> {
89
+ const candidates = [absolutePath];
90
+ const pathExtension = path.extname(absolutePath).toLowerCase();
91
+
92
+ if (!pathExtension) {
93
+ candidates.push(absolutePath + '.js');
94
+ candidates.push(absolutePath + '.cjs');
95
+ }
96
+
97
+ for (const candidate of candidates) {
98
+ try {
99
+ const stats = await stat(candidate);
100
+ if (stats.isFile()) {
101
+ return candidate;
102
+ }
103
+ } catch {
104
+ // File doesn't exist or is inaccessible - try next candidate
105
+ // Actual 404 errors are handled by the caller
106
+ }
107
+ }
108
+ return undefined;
109
+ }
110
+
76
111
  protected async handleMissingResource(req: express.Request, res: express.Response): Promise<void> {
77
112
  const pluginId = req.params.pluginId;
78
113
  res.status(404).send(`The plugin with id '${escape_html(pluginId)}' does not exist.`);