@theia/terminal 1.74.0-next.35 → 1.74.0-next.44

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.
Files changed (25) hide show
  1. package/lib/browser/terminal-file-link-provider.d.ts +3 -8
  2. package/lib/browser/terminal-file-link-provider.d.ts.map +1 -1
  3. package/lib/browser/terminal-file-link-provider.js +5 -35
  4. package/lib/browser/terminal-file-link-provider.js.map +1 -1
  5. package/lib/browser/terminal-file-opening-link-provider.d.ts +20 -0
  6. package/lib/browser/terminal-file-opening-link-provider.d.ts.map +1 -0
  7. package/lib/browser/terminal-file-opening-link-provider.js +59 -0
  8. package/lib/browser/terminal-file-opening-link-provider.js.map +1 -0
  9. package/lib/browser/terminal-file-uri-link-provider.d.ts +29 -0
  10. package/lib/browser/terminal-file-uri-link-provider.d.ts.map +1 -0
  11. package/lib/browser/terminal-file-uri-link-provider.js +95 -0
  12. package/lib/browser/terminal-file-uri-link-provider.js.map +1 -0
  13. package/lib/browser/terminal-file-uri-link-provider.spec.d.ts +2 -0
  14. package/lib/browser/terminal-file-uri-link-provider.spec.d.ts.map +1 -0
  15. package/lib/browser/terminal-file-uri-link-provider.spec.js +180 -0
  16. package/lib/browser/terminal-file-uri-link-provider.spec.js.map +1 -0
  17. package/lib/browser/terminal-frontend-module.d.ts.map +1 -1
  18. package/lib/browser/terminal-frontend-module.js +3 -0
  19. package/lib/browser/terminal-frontend-module.js.map +1 -1
  20. package/package.json +9 -9
  21. package/src/browser/terminal-file-link-provider.ts +3 -28
  22. package/src/browser/terminal-file-opening-link-provider.ts +57 -0
  23. package/src/browser/terminal-file-uri-link-provider.spec.ts +203 -0
  24. package/src/browser/terminal-file-uri-link-provider.ts +91 -0
  25. package/src/browser/terminal-frontend-module.ts +3 -0
@@ -1,28 +1,23 @@
1
1
  import { QuickInputService, ILogger } from '@theia/core';
2
- import { OpenerService } from '@theia/core/lib/browser';
3
2
  import URI from '@theia/core/lib/common/uri';
4
3
  import { Position } from '@theia/editor/lib/browser';
5
- import { FileService } from '@theia/filesystem/lib/browser/file-service';
4
+ import { AbstractFileOpeningLinkProvider } from './terminal-file-opening-link-provider';
6
5
  import { TerminalWidget } from './base/terminal-widget';
7
- import { TerminalLink, TerminalLinkProvider } from './terminal-link-provider';
6
+ import { TerminalLink } from './terminal-link-provider';
8
7
  import { FileSearchService } from '@theia/file-search/lib/common/file-search-service';
9
8
  import { WorkspaceService } from '@theia/workspace/lib/browser';
10
- export declare class FileLinkProvider implements TerminalLinkProvider {
11
- protected readonly openerService: OpenerService;
9
+ export declare class FileLinkProvider extends AbstractFileOpeningLinkProvider {
12
10
  protected readonly quickInputService: QuickInputService;
13
- protected fileService: FileService;
14
11
  protected searchService: FileSearchService;
15
12
  protected readonly workspaceService: WorkspaceService;
16
13
  protected readonly logger: ILogger;
17
14
  provideLinks(line: string, terminal: TerminalWidget): Promise<TerminalLink[]>;
18
15
  protected createRegExp(): Promise<RegExp>;
19
16
  protected isValidFile(match: string, terminal: TerminalWidget): Promise<boolean>;
20
- protected isValidFileURI(uri: URI): Promise<boolean>;
21
17
  protected toURI(match: string, cwd: URI): Promise<URI | undefined>;
22
18
  protected getCwd(terminal: TerminalWidget): Promise<URI>;
23
19
  protected extractPath(link: string): Promise<string | undefined>;
24
20
  open(match: string, terminal: TerminalWidget): Promise<void>;
25
- openURI(toOpen: URI, position: Position): Promise<void>;
26
21
  protected extractPosition(link: string): Promise<Position>;
27
22
  protected getLineAndColumnMatchIndex(): number;
28
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-file-link-provider.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-file-link-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAY,iBAAiB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,qBACa,gBAAiB,YAAW,oBAAoB;IAElC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAC5C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9D,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEhF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAE7B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBnE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;cAK/B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;cAatE,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;cAQ1C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;cAiBxD,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;cAO9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQhE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;cAc7C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyBhE,SAAS,CAAC,0BAA0B,IAAI,MAAM;CAGjD;AAED,qBACa,uBAAwB,SAAQ,gBAAgB;IAC1C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAGjD;AAED,qBACa,wBAAyB,SAAQ,gBAAgB;IAC3C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAGjD;AAED,qBACa,qBAAsB,SAAQ,gBAAgB;IACxC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAgB/B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;cA0BzE,0BAA0B,IAAI,MAAM;cAIvC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;CAwB3H"}
1
+ {"version":3,"file":"terminal-file-link-provider.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-file-link-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAY,iBAAiB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,qBACa,gBAAiB,SAAQ,+BAA+B;IAEtC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACxD,SAAS,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEhF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAE7B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;cAiBnE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;cAK/B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;cAatE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;cAiBxD,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;cAO9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQhE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;cASlD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyBhE,SAAS,CAAC,0BAA0B,IAAI,MAAM;CAGjD;AAED,qBACa,uBAAwB,SAAQ,gBAAgB;IAC1C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAGjD;AAED,qBACa,wBAAyB,SAAQ,gBAAgB;IAC3C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAGjD;AAED,qBACa,qBAAsB,SAAQ,gBAAgB;IACxC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAgB/B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;cA0BzE,0BAA0B,IAAI,MAAM;cAIvC,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;CAwB3H"}
@@ -18,14 +18,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.LocalFileLinkProvider = exports.FileDiffPostLinkProvider = exports.FileDiffPreLinkProvider = exports.FileLinkProvider = void 0;
19
19
  const tslib_1 = require("tslib");
20
20
  const core_1 = require("@theia/core");
21
- const browser_1 = require("@theia/core/lib/browser");
22
21
  const uri_1 = require("@theia/core/lib/common/uri");
23
22
  const inversify_1 = require("@theia/core/shared/inversify");
24
- const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
23
+ const terminal_file_opening_link_provider_1 = require("./terminal-file-opening-link-provider");
25
24
  const terminal_widget_impl_1 = require("./terminal-widget-impl");
26
25
  const file_search_service_1 = require("@theia/file-search/lib/common/file-search-service");
27
- const browser_2 = require("@theia/workspace/lib/browser");
28
- let FileLinkProvider = class FileLinkProvider {
26
+ const browser_1 = require("@theia/workspace/lib/browser");
27
+ let FileLinkProvider = class FileLinkProvider extends terminal_file_opening_link_provider_1.AbstractFileOpeningLinkProvider {
29
28
  async provideLinks(line, terminal) {
30
29
  const links = [];
31
30
  const regExp = await this.createRegExp();
@@ -59,14 +58,6 @@ let FileLinkProvider = class FileLinkProvider {
59
58
  }
60
59
  return false;
61
60
  }
62
- async isValidFileURI(uri) {
63
- try {
64
- const stat = await this.fileService.resolve(uri);
65
- return !stat.isDirectory;
66
- }
67
- catch { }
68
- return false;
69
- }
70
61
  async toURI(match, cwd) {
71
62
  const path = await this.extractPath(match);
72
63
  if (!path) {
@@ -104,19 +95,6 @@ let FileLinkProvider = class FileLinkProvider {
104
95
  const position = await this.extractPosition(match);
105
96
  return this.openURI(toOpen, position);
106
97
  }
107
- async openURI(toOpen, position) {
108
- let options = {};
109
- if (position) {
110
- options = { selection: { start: position } };
111
- }
112
- try {
113
- const opener = await this.openerService.getOpener(toOpen, options);
114
- opener.open(toOpen, options);
115
- }
116
- catch (err) {
117
- this.logger.error('Cannot open link ' + toOpen, err);
118
- }
119
- }
120
98
  async extractPosition(link) {
121
99
  const matches = (await this.createRegExp()).exec(link);
122
100
  const info = { line: 1, character: 1 };
@@ -143,25 +121,17 @@ let FileLinkProvider = class FileLinkProvider {
143
121
  }
144
122
  };
145
123
  exports.FileLinkProvider = FileLinkProvider;
146
- tslib_1.__decorate([
147
- (0, inversify_1.inject)(browser_1.OpenerService),
148
- tslib_1.__metadata("design:type", Object)
149
- ], FileLinkProvider.prototype, "openerService", void 0);
150
124
  tslib_1.__decorate([
151
125
  (0, inversify_1.inject)(core_1.QuickInputService),
152
126
  tslib_1.__metadata("design:type", Object)
153
127
  ], FileLinkProvider.prototype, "quickInputService", void 0);
154
- tslib_1.__decorate([
155
- (0, inversify_1.inject)(file_service_1.FileService),
156
- tslib_1.__metadata("design:type", file_service_1.FileService)
157
- ], FileLinkProvider.prototype, "fileService", void 0);
158
128
  tslib_1.__decorate([
159
129
  (0, inversify_1.inject)(file_search_service_1.FileSearchService),
160
130
  tslib_1.__metadata("design:type", Object)
161
131
  ], FileLinkProvider.prototype, "searchService", void 0);
162
132
  tslib_1.__decorate([
163
- (0, inversify_1.inject)(browser_2.WorkspaceService),
164
- tslib_1.__metadata("design:type", browser_2.WorkspaceService)
133
+ (0, inversify_1.inject)(browser_1.WorkspaceService),
134
+ tslib_1.__metadata("design:type", browser_1.WorkspaceService)
165
135
  ], FileLinkProvider.prototype, "workspaceService", void 0);
166
136
  tslib_1.__decorate([
167
137
  (0, inversify_1.inject)(core_1.ILogger),
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-file-link-provider.js","sourceRoot":"","sources":["../../src/browser/terminal-file-link-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-file-link-provider.js","sourceRoot":"","sources":["../../src/browser/terminal-file-link-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ILogger } from '@theia/core';
2
+ import { OpenerService } from '@theia/core/lib/browser';
3
+ import URI from '@theia/core/lib/common/uri';
4
+ import { Position } from '@theia/editor/lib/browser';
5
+ import { FileService } from '@theia/filesystem/lib/browser/file-service';
6
+ import { TerminalWidget } from './base/terminal-widget';
7
+ import { TerminalLink, TerminalLinkProvider } from './terminal-link-provider';
8
+ /**
9
+ * Base for terminal link providers that resolve a matched string to a local file URI and open it in
10
+ * the editor. Subclasses contribute their own matching in {@link provideLinks} and a named logger.
11
+ */
12
+ export declare abstract class AbstractFileOpeningLinkProvider implements TerminalLinkProvider {
13
+ protected readonly openerService: OpenerService;
14
+ protected readonly fileService: FileService;
15
+ protected abstract readonly logger: ILogger;
16
+ abstract provideLinks(line: string, terminal: TerminalWidget): Promise<TerminalLink[]>;
17
+ protected isValidFileURI(uri: URI): Promise<boolean>;
18
+ openURI(uri: URI, position?: Position): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=terminal-file-opening-link-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-file-opening-link-provider.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-file-opening-link-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAE9E;;;GAGG;AACH,8BACsB,+BAAgC,YAAW,oBAAoB;IAE1D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAClD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAEjE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAE5C,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;cAEtE,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAQpD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAS9D"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 JuliaHub, Inc. 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
+ exports.AbstractFileOpeningLinkProvider = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const browser_1 = require("@theia/core/lib/browser");
21
+ const inversify_1 = require("@theia/core/shared/inversify");
22
+ const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
23
+ /**
24
+ * Base for terminal link providers that resolve a matched string to a local file URI and open it in
25
+ * the editor. Subclasses contribute their own matching in {@link provideLinks} and a named logger.
26
+ */
27
+ let AbstractFileOpeningLinkProvider = class AbstractFileOpeningLinkProvider {
28
+ async isValidFileURI(uri) {
29
+ try {
30
+ const stat = await this.fileService.resolve(uri);
31
+ return !stat.isDirectory;
32
+ }
33
+ catch { }
34
+ return false;
35
+ }
36
+ async openURI(uri, position) {
37
+ const options = position ? { selection: { start: position } } : {};
38
+ try {
39
+ const opener = await this.openerService.getOpener(uri, options);
40
+ await opener.open(uri, options);
41
+ }
42
+ catch (err) {
43
+ this.logger.error('Cannot open link ' + uri, err);
44
+ }
45
+ }
46
+ };
47
+ exports.AbstractFileOpeningLinkProvider = AbstractFileOpeningLinkProvider;
48
+ tslib_1.__decorate([
49
+ (0, inversify_1.inject)(browser_1.OpenerService),
50
+ tslib_1.__metadata("design:type", Object)
51
+ ], AbstractFileOpeningLinkProvider.prototype, "openerService", void 0);
52
+ tslib_1.__decorate([
53
+ (0, inversify_1.inject)(file_service_1.FileService),
54
+ tslib_1.__metadata("design:type", file_service_1.FileService)
55
+ ], AbstractFileOpeningLinkProvider.prototype, "fileService", void 0);
56
+ exports.AbstractFileOpeningLinkProvider = AbstractFileOpeningLinkProvider = tslib_1.__decorate([
57
+ (0, inversify_1.injectable)()
58
+ ], AbstractFileOpeningLinkProvider);
59
+ //# sourceMappingURL=terminal-file-opening-link-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-file-opening-link-provider.js","sourceRoot":"","sources":["../../src/browser/terminal-file-opening-link-provider.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,gDAAgD;AAChD,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;;;;AAGhF,qDAAwD;AAExD,4DAAkE;AAElE,6EAAyE;AAIzE;;;GAGG;AAEI,IAAe,+BAA+B,GAA9C,MAAe,+BAA+B;IASvC,KAAK,CAAC,cAAc,CAAC,GAAQ;QACnC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;QACX,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAQ,EAAE,QAAmB;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;CACJ,CAAA;AA1BqB,0EAA+B;AAEP;IAAzC,IAAA,kBAAM,EAAC,uBAAa,CAAC;;sEAAiD;AAC/B;IAAvC,IAAA,kBAAM,EAAC,0BAAW,CAAC;sCAAiC,0BAAW;oEAAC;0CAH/C,+BAA+B;IADpD,IAAA,sBAAU,GAAE;GACS,+BAA+B,CA0BpD"}
@@ -0,0 +1,29 @@
1
+ import { ILogger } from '@theia/core';
2
+ import URI from '@theia/core/lib/common/uri';
3
+ import { Position } from '@theia/editor/lib/browser';
4
+ import { AbstractFileOpeningLinkProvider } from './terminal-file-opening-link-provider';
5
+ import { TerminalWidget } from './base/terminal-widget';
6
+ import { TerminalLink } from './terminal-link-provider';
7
+ /**
8
+ * Linkifies `file://` URLs printed in the terminal and opens the referenced local file in the editor.
9
+ *
10
+ * A dedicated provider is needed because `UrlLinkProvider` only matches `http(s)` and
11
+ * `FileLinkProvider`'s path regex excludes `:`, so neither recognizes the `file:` scheme.
12
+ */
13
+ export declare class FileUriLinkProvider extends AbstractFileOpeningLinkProvider {
14
+ protected readonly logger: ILogger;
15
+ protected readonly fileUriRegExp: RegExp;
16
+ provideLinks(line: string, terminal: TerminalWidget): Promise<TerminalLink[]>;
17
+ /**
18
+ * Splits a trailing `:line` or `:line:column` suffix (as in `file:///x.ts:10:5`) off the matched
19
+ * URL into a one-based editor position. The drive colon of `file:///C:/x.ts` is not affected, as
20
+ * it is not followed by digits at the end of the string.
21
+ */
22
+ protected splitPosition(match: string): {
23
+ fileUri: string;
24
+ position?: Position;
25
+ };
26
+ protected toURI(match: string): URI | undefined;
27
+ protected trimTrailingPunctuation(match: string): string;
28
+ }
29
+ //# sourceMappingURL=terminal-file-uri-link-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-file-uri-link-provider.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-file-uri-link-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;;GAKG;AACH,qBACa,mBAAoB,SAAQ,+BAA+B;IAGpE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAInC,SAAS,CAAC,QAAQ,CAAC,aAAa,SAAmC;IAE7D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoBnF;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE;IAahF,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAS/C,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAG3D"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 JuliaHub, Inc. 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
+ exports.FileUriLinkProvider = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const core_1 = require("@theia/core");
21
+ const uri_1 = require("@theia/core/lib/common/uri");
22
+ const inversify_1 = require("@theia/core/shared/inversify");
23
+ const terminal_file_opening_link_provider_1 = require("./terminal-file-opening-link-provider");
24
+ /**
25
+ * Linkifies `file://` URLs printed in the terminal and opens the referenced local file in the editor.
26
+ *
27
+ * A dedicated provider is needed because `UrlLinkProvider` only matches `http(s)` and
28
+ * `FileLinkProvider`'s path regex excludes `:`, so neither recognizes the `file:` scheme.
29
+ */
30
+ let FileUriLinkProvider = class FileUriLinkProvider extends terminal_file_opening_link_provider_1.AbstractFileOpeningLinkProvider {
31
+ constructor() {
32
+ super(...arguments);
33
+ // The optional third slash denotes an empty authority (`file:///path`); the match runs to the first
34
+ // whitespace or character that commonly delimits a URL in prose.
35
+ this.fileUriRegExp = /file:\/\/\/?[^\s'"`<>()[\]]+/g;
36
+ }
37
+ async provideLinks(line, terminal) {
38
+ // Collect all matches synchronously before awaiting: the `g`-flag regex is instance-shared, so
39
+ // yielding mid-iteration would let a concurrent call corrupt its `lastIndex`.
40
+ const candidates = [];
41
+ this.fileUriRegExp.lastIndex = 0;
42
+ let regExpResult;
43
+ while (regExpResult = this.fileUriRegExp.exec(line)) {
44
+ candidates.push({ match: this.trimTrailingPunctuation(regExpResult[0]), startIndex: regExpResult.index });
45
+ }
46
+ const links = await Promise.all(candidates.map(async ({ match, startIndex }) => {
47
+ const { fileUri, position } = this.splitPosition(match);
48
+ const uri = this.toURI(fileUri);
49
+ if (uri && await this.isValidFileURI(uri)) {
50
+ return { startIndex, length: match.length, handle: () => this.openURI(uri, position) };
51
+ }
52
+ return undefined;
53
+ }));
54
+ return links.filter((link) => link !== undefined);
55
+ }
56
+ /**
57
+ * Splits a trailing `:line` or `:line:column` suffix (as in `file:///x.ts:10:5`) off the matched
58
+ * URL into a one-based editor position. The drive colon of `file:///C:/x.ts` is not affected, as
59
+ * it is not followed by digits at the end of the string.
60
+ */
61
+ splitPosition(match) {
62
+ const positionMatch = /:(\d+)(?::(\d+))?$/.exec(match);
63
+ if (!positionMatch) {
64
+ return { fileUri: match };
65
+ }
66
+ const line = Math.max(0, parseInt(positionMatch[1], 10) - 1);
67
+ const character = positionMatch[2] !== undefined ? Math.max(0, parseInt(positionMatch[2], 10) - 1) : 0;
68
+ return {
69
+ fileUri: match.slice(0, positionMatch.index),
70
+ position: { line, character }
71
+ };
72
+ }
73
+ toURI(match) {
74
+ try {
75
+ const uri = new uri_1.default(match);
76
+ return uri.scheme === 'file' ? uri : undefined;
77
+ }
78
+ catch {
79
+ return undefined;
80
+ }
81
+ }
82
+ trimTrailingPunctuation(match) {
83
+ return match.replace(/[.,;:]+$/, '');
84
+ }
85
+ };
86
+ exports.FileUriLinkProvider = FileUriLinkProvider;
87
+ tslib_1.__decorate([
88
+ (0, inversify_1.inject)(core_1.ILogger),
89
+ (0, inversify_1.named)('terminal:FileUriLinkProvider'),
90
+ tslib_1.__metadata("design:type", Object)
91
+ ], FileUriLinkProvider.prototype, "logger", void 0);
92
+ exports.FileUriLinkProvider = FileUriLinkProvider = tslib_1.__decorate([
93
+ (0, inversify_1.injectable)()
94
+ ], FileUriLinkProvider);
95
+ //# sourceMappingURL=terminal-file-uri-link-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-file-uri-link-provider.js","sourceRoot":"","sources":["../../src/browser/terminal-file-uri-link-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=terminal-file-uri-link-provider.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-file-uri-link-provider.spec.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-file-uri-link-provider.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 JuliaHub, Inc. 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 jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
+ const disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ // Importing the provider pulls in xterm, which probes a canvas 2d context on load; JSDOM has no
21
+ // canvas backend, so stub it out to keep this spec runnable without the native `canvas` package.
22
+ HTMLCanvasElement.prototype.getContext = () => undefined;
23
+ const frontend_application_config_provider_1 = require("@theia/core/lib/browser/frontend-application-config-provider");
24
+ frontend_application_config_provider_1.FrontendApplicationConfigProvider.set({});
25
+ const chai = require("chai");
26
+ const uri_1 = require("@theia/core/lib/common/uri");
27
+ const terminal_file_uri_link_provider_1 = require("./terminal-file-uri-link-provider");
28
+ disableJSDOM();
29
+ const expect = chai.expect;
30
+ class TestFileUriLinkProvider extends terminal_file_uri_link_provider_1.FileUriLinkProvider {
31
+ constructor(existingFiles, directories = []) {
32
+ super();
33
+ this.loggedErrors = [];
34
+ this.opened = [];
35
+ this.openedOptions = [];
36
+ const files = new Set(existingFiles);
37
+ const dirs = new Set(directories.map(uri => new uri_1.default(uri).toString()));
38
+ this.logger = {
39
+ error: (message) => { this.loggedErrors.push(String(message)); }
40
+ };
41
+ this.fileService = {
42
+ resolve: async (uri) => {
43
+ if (dirs.has(uri.toString())) {
44
+ return { isDirectory: true };
45
+ }
46
+ if (files.has(uri.toString())) {
47
+ return { isDirectory: false };
48
+ }
49
+ throw new Error('does not exist');
50
+ }
51
+ };
52
+ const opener = {
53
+ id: 'test',
54
+ canHandle: () => 1,
55
+ open: async (uri, options) => {
56
+ this.opened.push(uri.toString());
57
+ this.openedOptions.push(options);
58
+ return undefined;
59
+ }
60
+ };
61
+ this.openerService = {
62
+ getOpener: async () => opener,
63
+ getOpeners: async () => [opener]
64
+ };
65
+ }
66
+ }
67
+ const terminal = {};
68
+ describe('FileUriLinkProvider', () => {
69
+ it('should linkify and open a POSIX file:// URL that resolves to a file', async () => {
70
+ const uri = 'file:///home/user/project/file.ts';
71
+ const provider = new TestFileUriLinkProvider([uri]);
72
+ const links = await provider.provideLinks(`open ${uri} now`, terminal);
73
+ expect(links).to.have.lengthOf(1);
74
+ expect(links[0].startIndex).to.equal('open '.length);
75
+ expect(links[0].length).to.equal(uri.length);
76
+ expect(provider.loggedErrors).to.deep.equal([]);
77
+ await links[0].handle();
78
+ expect(provider.opened).to.deep.equal([new uri_1.default(uri).toString()]);
79
+ });
80
+ it('should linkify a Windows drive file:// URL', async () => {
81
+ const uri = 'file:///C:/Users/dev/file.ts';
82
+ const provider = new TestFileUriLinkProvider([new uri_1.default(uri).toString()]);
83
+ const links = await provider.provideLinks(`see ${uri}`, terminal);
84
+ expect(links).to.have.lengthOf(1);
85
+ expect(provider.loggedErrors).to.deep.equal([]);
86
+ });
87
+ it('should linkify a UNC file:// URL with an authority', async () => {
88
+ const uri = 'file://server/share/file.ts';
89
+ const provider = new TestFileUriLinkProvider([new uri_1.default(uri).toString()]);
90
+ const links = await provider.provideLinks(uri, terminal);
91
+ expect(links).to.have.lengthOf(1);
92
+ expect(provider.loggedErrors).to.deep.equal([]);
93
+ });
94
+ it('should not produce a link for a file:// URL that does not resolve, without throwing or logging', async () => {
95
+ const provider = new TestFileUriLinkProvider([]);
96
+ const links = await provider.provideLinks('open file:///home/user/missing.ts now', terminal);
97
+ expect(links).to.deep.equal([]);
98
+ expect(provider.loggedErrors).to.deep.equal([]);
99
+ });
100
+ it('should ignore http(s) URLs', async () => {
101
+ const provider = new TestFileUriLinkProvider([]);
102
+ const links = await provider.provideLinks('see https://example.com/path for details', terminal);
103
+ expect(links).to.deep.equal([]);
104
+ });
105
+ it('should trim trailing sentence punctuation from the matched URL', async () => {
106
+ const uri = 'file:///home/user/project/file.ts';
107
+ const provider = new TestFileUriLinkProvider([uri]);
108
+ const links = await provider.provideLinks(`the file is ${uri}.`, terminal);
109
+ expect(links).to.have.lengthOf(1);
110
+ expect(links[0].length).to.equal(uri.length);
111
+ });
112
+ it('should open at the given line and column for a file://…:line:column suffix', async () => {
113
+ const uri = 'file:///home/user/project/file.ts';
114
+ const provider = new TestFileUriLinkProvider([uri]);
115
+ const match = `${uri}:10:5`;
116
+ const links = await provider.provideLinks(`error at ${match}`, terminal);
117
+ expect(links).to.have.lengthOf(1);
118
+ // The whole `file://…:10:5` is clickable, but the URI drops the position suffix.
119
+ expect(links[0].length).to.equal(match.length);
120
+ await links[0].handle();
121
+ expect(provider.opened).to.deep.equal([new uri_1.default(uri).toString()]);
122
+ // one-based `10:5` becomes a zero-based editor position.
123
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 9, character: 4 } } }]);
124
+ });
125
+ it('should open at the given line with a file://…:line suffix (no column)', async () => {
126
+ const uri = 'file:///home/user/project/file.ts';
127
+ const provider = new TestFileUriLinkProvider([uri]);
128
+ const links = await provider.provideLinks(`${uri}:42`, terminal);
129
+ expect(links).to.have.lengthOf(1);
130
+ await links[0].handle();
131
+ expect(provider.opened).to.deep.equal([new uri_1.default(uri).toString()]);
132
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 41, character: 0 } } }]);
133
+ });
134
+ it('should keep the Windows drive colon and still apply a trailing position', async () => {
135
+ const uri = 'file:///C:/Users/dev/file.ts';
136
+ const provider = new TestFileUriLinkProvider([new uri_1.default(uri).toString()]);
137
+ const links = await provider.provideLinks(`${uri}:7:3`, terminal);
138
+ expect(links).to.have.lengthOf(1);
139
+ await links[0].handle();
140
+ expect(provider.opened).to.deep.equal([new uri_1.default(uri).toString()]);
141
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 6, character: 2 } } }]);
142
+ });
143
+ it('should clamp a zero line/column to the first position', async () => {
144
+ const uri = 'file:///home/user/project/file.ts';
145
+ const provider = new TestFileUriLinkProvider([uri]);
146
+ const links = await provider.provideLinks(`${uri}:0`, terminal);
147
+ expect(links).to.have.lengthOf(1);
148
+ await links[0].handle();
149
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 0, character: 0 } } }]);
150
+ });
151
+ it('should not produce a link for a file:// URL that resolves to a directory', async () => {
152
+ const uri = 'file:///home/user/project';
153
+ const provider = new TestFileUriLinkProvider([], [uri]);
154
+ const links = await provider.provideLinks(`open ${uri} now`, terminal);
155
+ expect(links).to.deep.equal([]);
156
+ expect(provider.loggedErrors).to.deep.equal([]);
157
+ });
158
+ it('should linkify every file:// URL on a line at the correct offsets', async () => {
159
+ const a = 'file:///home/user/a.ts';
160
+ const b = 'file:///home/user/b.ts';
161
+ const provider = new TestFileUriLinkProvider([a, b]);
162
+ const line = `first ${a} then ${b}`;
163
+ const links = await provider.provideLinks(line, terminal);
164
+ expect(links).to.have.lengthOf(2);
165
+ expect(links.map(link => link.startIndex)).to.deep.equal([line.indexOf(a), line.indexOf(b)]);
166
+ expect(links.map(link => line.substr(link.startIndex, link.length))).to.deep.equal([a, b]);
167
+ });
168
+ it('should not leak regex state across concurrent invocations', async () => {
169
+ const a = 'file:///home/user/a.ts';
170
+ const b = 'file:///home/user/b.ts';
171
+ const provider = new TestFileUriLinkProvider([a, b]);
172
+ const [linksA, linksB] = await Promise.all([
173
+ provider.provideLinks(`x ${a}`, terminal),
174
+ provider.provideLinks(b, terminal)
175
+ ]);
176
+ expect(linksA.map(link => link.length)).to.deep.equal([a.length]);
177
+ expect(linksB.map(link => link.length)).to.deep.equal([b.length]);
178
+ });
179
+ });
180
+ //# sourceMappingURL=terminal-file-uri-link-provider.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-file-uri-link-provider.spec.js","sourceRoot":"","sources":["../../src/browser/terminal-file-uri-link-provider.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAa,MAAM,8BAA8B,CAAC;;AAgC1E,wBA8FG"}
1
+ {"version":3,"file":"terminal-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/terminal-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAa,MAAM,8BAA8B,CAAC;;AAiC1E,wBAgGG"}
@@ -43,6 +43,7 @@ const quick_access_1 = require("@theia/core/lib/browser/quick-input/quick-access
43
43
  const terminal_link_provider_1 = require("./terminal-link-provider");
44
44
  const terminal_url_link_provider_1 = require("./terminal-url-link-provider");
45
45
  const terminal_file_link_provider_1 = require("./terminal-file-link-provider");
46
+ const terminal_file_uri_link_provider_1 = require("./terminal-file-uri-link-provider");
46
47
  const terminal_profile_service_1 = require("./terminal-profile-service");
47
48
  const terminal_command_history_1 = require("./terminal-command-history");
48
49
  exports.default = new inversify_1.ContainerModule(bind => {
@@ -104,6 +105,8 @@ exports.default = new inversify_1.ContainerModule(bind => {
104
105
  // default terminal link provider
105
106
  bind(terminal_url_link_provider_1.UrlLinkProvider).toSelf().inSingletonScope();
106
107
  bind(terminal_link_provider_1.TerminalLinkProvider).toService(terminal_url_link_provider_1.UrlLinkProvider);
108
+ bind(terminal_file_uri_link_provider_1.FileUriLinkProvider).toSelf().inSingletonScope();
109
+ bind(terminal_link_provider_1.TerminalLinkProvider).toService(terminal_file_uri_link_provider_1.FileUriLinkProvider);
107
110
  bind(terminal_file_link_provider_1.FileLinkProvider).toSelf().inSingletonScope();
108
111
  bind(terminal_link_provider_1.TerminalLinkProvider).toService(terminal_file_link_provider_1.FileLinkProvider);
109
112
  bind(terminal_file_link_provider_1.FileDiffPreLinkProvider).toSelf().inSingletonScope();
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-frontend-module.js","sourceRoot":"","sources":["../../src/browser/terminal-frontend-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-frontend-module.js","sourceRoot":"","sources":["../../src/browser/terminal-frontend-module.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@theia/terminal",
3
- "version": "1.74.0-next.35+9ecf480ca",
3
+ "version": "1.74.0-next.44+a2edcb58b",
4
4
  "description": "Theia - Terminal Extension",
5
5
  "dependencies": {
6
- "@theia/core": "1.74.0-next.35+9ecf480ca",
7
- "@theia/editor": "1.74.0-next.35+9ecf480ca",
8
- "@theia/file-search": "1.74.0-next.35+9ecf480ca",
9
- "@theia/filesystem": "1.74.0-next.35+9ecf480ca",
10
- "@theia/process": "1.74.0-next.35+9ecf480ca",
11
- "@theia/variable-resolver": "1.74.0-next.35+9ecf480ca",
12
- "@theia/workspace": "1.74.0-next.35+9ecf480ca",
6
+ "@theia/core": "1.74.0-next.44+a2edcb58b",
7
+ "@theia/editor": "1.74.0-next.44+a2edcb58b",
8
+ "@theia/file-search": "1.74.0-next.44+a2edcb58b",
9
+ "@theia/filesystem": "1.74.0-next.44+a2edcb58b",
10
+ "@theia/process": "1.74.0-next.44+a2edcb58b",
11
+ "@theia/variable-resolver": "1.74.0-next.44+a2edcb58b",
12
+ "@theia/workspace": "1.74.0-next.44+a2edcb58b",
13
13
  "tslib": "^2.8.1",
14
14
  "xterm": "^5.3.0",
15
15
  "xterm-addon-fit": "^0.8.0",
@@ -56,5 +56,5 @@
56
56
  "nyc": {
57
57
  "extends": "../../configs/nyc.json"
58
58
  },
59
- "gitHead": "9ecf480caa3af5c4f78af906654a88948f477b34"
59
+ "gitHead": "a2edcb58ba5792bb20b3d604b98e1920a219bb2e"
60
60
  }
@@ -15,22 +15,19 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { OS, Path, QuickInputService, ILogger } from '@theia/core';
18
- import { OpenerService } from '@theia/core/lib/browser';
19
18
  import URI from '@theia/core/lib/common/uri';
20
19
  import { inject, injectable, named } from '@theia/core/shared/inversify';
21
20
  import { Position } from '@theia/editor/lib/browser';
22
- import { FileService } from '@theia/filesystem/lib/browser/file-service';
21
+ import { AbstractFileOpeningLinkProvider } from './terminal-file-opening-link-provider';
23
22
  import { TerminalWidget } from './base/terminal-widget';
24
- import { TerminalLink, TerminalLinkProvider } from './terminal-link-provider';
23
+ import { TerminalLink } from './terminal-link-provider';
25
24
  import { TerminalWidgetImpl } from './terminal-widget-impl';
26
25
  import { FileSearchService } from '@theia/file-search/lib/common/file-search-service';
27
26
  import { WorkspaceService } from '@theia/workspace/lib/browser';
28
27
  @injectable()
29
- export class FileLinkProvider implements TerminalLinkProvider {
28
+ export class FileLinkProvider extends AbstractFileOpeningLinkProvider {
30
29
 
31
- @inject(OpenerService) protected readonly openerService: OpenerService;
32
30
  @inject(QuickInputService) protected readonly quickInputService: QuickInputService;
33
- @inject(FileService) protected fileService: FileService;
34
31
  @inject(FileSearchService) protected searchService: FileSearchService;
35
32
  @inject(WorkspaceService) protected readonly workspaceService: WorkspaceService;
36
33
  @inject(ILogger) @named('terminal:FileLinkProvider')
@@ -71,14 +68,6 @@ export class FileLinkProvider implements TerminalLinkProvider {
71
68
  return false;
72
69
  }
73
70
 
74
- protected async isValidFileURI(uri: URI): Promise<boolean> {
75
- try {
76
- const stat = await this.fileService.resolve(uri);
77
- return !stat.isDirectory;
78
- } catch { }
79
- return false;
80
- }
81
-
82
71
  protected async toURI(match: string, cwd: URI): Promise<URI | undefined> {
83
72
  const path = await this.extractPath(match);
84
73
  if (!path) {
@@ -120,20 +109,6 @@ export class FileLinkProvider implements TerminalLinkProvider {
120
109
  return this.openURI(toOpen, position);
121
110
  }
122
111
 
123
- async openURI(toOpen: URI, position: Position): Promise<void> {
124
- let options = {};
125
- if (position) {
126
- options = { selection: { start: position } };
127
- }
128
-
129
- try {
130
- const opener = await this.openerService.getOpener(toOpen, options);
131
- opener.open(toOpen, options);
132
- } catch (err) {
133
- this.logger.error('Cannot open link ' + toOpen, err);
134
- }
135
- }
136
-
137
112
  protected async extractPosition(link: string): Promise<Position> {
138
113
  const matches: string[] | null = (await this.createRegExp()).exec(link);
139
114
  const info: Position = { line: 1, character: 1 };
@@ -0,0 +1,57 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 JuliaHub, Inc. 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 { ILogger } from '@theia/core';
18
+ import { OpenerService } from '@theia/core/lib/browser';
19
+ import URI from '@theia/core/lib/common/uri';
20
+ import { inject, injectable } from '@theia/core/shared/inversify';
21
+ import { Position } from '@theia/editor/lib/browser';
22
+ import { FileService } from '@theia/filesystem/lib/browser/file-service';
23
+ import { TerminalWidget } from './base/terminal-widget';
24
+ import { TerminalLink, TerminalLinkProvider } from './terminal-link-provider';
25
+
26
+ /**
27
+ * Base for terminal link providers that resolve a matched string to a local file URI and open it in
28
+ * the editor. Subclasses contribute their own matching in {@link provideLinks} and a named logger.
29
+ */
30
+ @injectable()
31
+ export abstract class AbstractFileOpeningLinkProvider implements TerminalLinkProvider {
32
+
33
+ @inject(OpenerService) protected readonly openerService: OpenerService;
34
+ @inject(FileService) protected readonly fileService: FileService;
35
+
36
+ protected abstract readonly logger: ILogger;
37
+
38
+ abstract provideLinks(line: string, terminal: TerminalWidget): Promise<TerminalLink[]>;
39
+
40
+ protected async isValidFileURI(uri: URI): Promise<boolean> {
41
+ try {
42
+ const stat = await this.fileService.resolve(uri);
43
+ return !stat.isDirectory;
44
+ } catch { }
45
+ return false;
46
+ }
47
+
48
+ async openURI(uri: URI, position?: Position): Promise<void> {
49
+ const options = position ? { selection: { start: position } } : {};
50
+ try {
51
+ const opener = await this.openerService.getOpener(uri, options);
52
+ await opener.open(uri, options);
53
+ } catch (err) {
54
+ this.logger.error('Cannot open link ' + uri, err);
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,203 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 JuliaHub, Inc. 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 { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
18
+ const disableJSDOM = enableJSDOM();
19
+ // Importing the provider pulls in xterm, which probes a canvas 2d context on load; JSDOM has no
20
+ // canvas backend, so stub it out to keep this spec runnable without the native `canvas` package.
21
+ (HTMLCanvasElement.prototype as unknown as { getContext: () => unknown }).getContext = () => undefined;
22
+
23
+ import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
24
+ FrontendApplicationConfigProvider.set({});
25
+
26
+ import * as chai from 'chai';
27
+ import { ILogger } from '@theia/core';
28
+ import { OpenerService, OpenHandler } from '@theia/core/lib/browser';
29
+ import URI from '@theia/core/lib/common/uri';
30
+ import { FileService } from '@theia/filesystem/lib/browser/file-service';
31
+ import { TerminalWidget } from './base/terminal-widget';
32
+ import { FileUriLinkProvider } from './terminal-file-uri-link-provider';
33
+
34
+ disableJSDOM();
35
+
36
+ const expect = chai.expect;
37
+
38
+ class TestFileUriLinkProvider extends FileUriLinkProvider {
39
+ readonly loggedErrors: string[] = [];
40
+ readonly opened: string[] = [];
41
+ readonly openedOptions: unknown[] = [];
42
+
43
+ constructor(existingFiles: string[], directories: string[] = []) {
44
+ super();
45
+ const files = new Set(existingFiles);
46
+ const dirs = new Set(directories.map(uri => new URI(uri).toString()));
47
+ (this as unknown as { logger: ILogger }).logger = {
48
+ error: (message: unknown) => { this.loggedErrors.push(String(message)); }
49
+ } as unknown as ILogger;
50
+ (this as unknown as { fileService: FileService }).fileService = {
51
+ resolve: async (uri: URI) => {
52
+ if (dirs.has(uri.toString())) {
53
+ return { isDirectory: true };
54
+ }
55
+ if (files.has(uri.toString())) {
56
+ return { isDirectory: false };
57
+ }
58
+ throw new Error('does not exist');
59
+ }
60
+ } as unknown as FileService;
61
+ const opener: OpenHandler = {
62
+ id: 'test',
63
+ canHandle: () => 1,
64
+ open: async (uri: URI, options?: unknown) => {
65
+ this.opened.push(uri.toString());
66
+ this.openedOptions.push(options);
67
+ return undefined;
68
+ }
69
+ };
70
+ (this as unknown as { openerService: OpenerService }).openerService = {
71
+ getOpener: async () => opener,
72
+ getOpeners: async () => [opener]
73
+ } as unknown as OpenerService;
74
+ }
75
+ }
76
+
77
+ const terminal = {} as unknown as TerminalWidget;
78
+
79
+ describe('FileUriLinkProvider', () => {
80
+
81
+ it('should linkify and open a POSIX file:// URL that resolves to a file', async () => {
82
+ const uri = 'file:///home/user/project/file.ts';
83
+ const provider = new TestFileUriLinkProvider([uri]);
84
+ const links = await provider.provideLinks(`open ${uri} now`, terminal);
85
+ expect(links).to.have.lengthOf(1);
86
+ expect(links[0].startIndex).to.equal('open '.length);
87
+ expect(links[0].length).to.equal(uri.length);
88
+ expect(provider.loggedErrors).to.deep.equal([]);
89
+ await links[0].handle();
90
+ expect(provider.opened).to.deep.equal([new URI(uri).toString()]);
91
+ });
92
+
93
+ it('should linkify a Windows drive file:// URL', async () => {
94
+ const uri = 'file:///C:/Users/dev/file.ts';
95
+ const provider = new TestFileUriLinkProvider([new URI(uri).toString()]);
96
+ const links = await provider.provideLinks(`see ${uri}`, terminal);
97
+ expect(links).to.have.lengthOf(1);
98
+ expect(provider.loggedErrors).to.deep.equal([]);
99
+ });
100
+
101
+ it('should linkify a UNC file:// URL with an authority', async () => {
102
+ const uri = 'file://server/share/file.ts';
103
+ const provider = new TestFileUriLinkProvider([new URI(uri).toString()]);
104
+ const links = await provider.provideLinks(uri, terminal);
105
+ expect(links).to.have.lengthOf(1);
106
+ expect(provider.loggedErrors).to.deep.equal([]);
107
+ });
108
+
109
+ it('should not produce a link for a file:// URL that does not resolve, without throwing or logging', async () => {
110
+ const provider = new TestFileUriLinkProvider([]);
111
+ const links = await provider.provideLinks('open file:///home/user/missing.ts now', terminal);
112
+ expect(links).to.deep.equal([]);
113
+ expect(provider.loggedErrors).to.deep.equal([]);
114
+ });
115
+
116
+ it('should ignore http(s) URLs', async () => {
117
+ const provider = new TestFileUriLinkProvider([]);
118
+ const links = await provider.provideLinks('see https://example.com/path for details', terminal);
119
+ expect(links).to.deep.equal([]);
120
+ });
121
+
122
+ it('should trim trailing sentence punctuation from the matched URL', async () => {
123
+ const uri = 'file:///home/user/project/file.ts';
124
+ const provider = new TestFileUriLinkProvider([uri]);
125
+ const links = await provider.provideLinks(`the file is ${uri}.`, terminal);
126
+ expect(links).to.have.lengthOf(1);
127
+ expect(links[0].length).to.equal(uri.length);
128
+ });
129
+
130
+ it('should open at the given line and column for a file://…:line:column suffix', async () => {
131
+ const uri = 'file:///home/user/project/file.ts';
132
+ const provider = new TestFileUriLinkProvider([uri]);
133
+ const match = `${uri}:10:5`;
134
+ const links = await provider.provideLinks(`error at ${match}`, terminal);
135
+ expect(links).to.have.lengthOf(1);
136
+ // The whole `file://…:10:5` is clickable, but the URI drops the position suffix.
137
+ expect(links[0].length).to.equal(match.length);
138
+ await links[0].handle();
139
+ expect(provider.opened).to.deep.equal([new URI(uri).toString()]);
140
+ // one-based `10:5` becomes a zero-based editor position.
141
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 9, character: 4 } } }]);
142
+ });
143
+
144
+ it('should open at the given line with a file://…:line suffix (no column)', async () => {
145
+ const uri = 'file:///home/user/project/file.ts';
146
+ const provider = new TestFileUriLinkProvider([uri]);
147
+ const links = await provider.provideLinks(`${uri}:42`, terminal);
148
+ expect(links).to.have.lengthOf(1);
149
+ await links[0].handle();
150
+ expect(provider.opened).to.deep.equal([new URI(uri).toString()]);
151
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 41, character: 0 } } }]);
152
+ });
153
+
154
+ it('should keep the Windows drive colon and still apply a trailing position', async () => {
155
+ const uri = 'file:///C:/Users/dev/file.ts';
156
+ const provider = new TestFileUriLinkProvider([new URI(uri).toString()]);
157
+ const links = await provider.provideLinks(`${uri}:7:3`, terminal);
158
+ expect(links).to.have.lengthOf(1);
159
+ await links[0].handle();
160
+ expect(provider.opened).to.deep.equal([new URI(uri).toString()]);
161
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 6, character: 2 } } }]);
162
+ });
163
+
164
+ it('should clamp a zero line/column to the first position', async () => {
165
+ const uri = 'file:///home/user/project/file.ts';
166
+ const provider = new TestFileUriLinkProvider([uri]);
167
+ const links = await provider.provideLinks(`${uri}:0`, terminal);
168
+ expect(links).to.have.lengthOf(1);
169
+ await links[0].handle();
170
+ expect(provider.openedOptions).to.deep.equal([{ selection: { start: { line: 0, character: 0 } } }]);
171
+ });
172
+
173
+ it('should not produce a link for a file:// URL that resolves to a directory', async () => {
174
+ const uri = 'file:///home/user/project';
175
+ const provider = new TestFileUriLinkProvider([], [uri]);
176
+ const links = await provider.provideLinks(`open ${uri} now`, terminal);
177
+ expect(links).to.deep.equal([]);
178
+ expect(provider.loggedErrors).to.deep.equal([]);
179
+ });
180
+
181
+ it('should linkify every file:// URL on a line at the correct offsets', async () => {
182
+ const a = 'file:///home/user/a.ts';
183
+ const b = 'file:///home/user/b.ts';
184
+ const provider = new TestFileUriLinkProvider([a, b]);
185
+ const line = `first ${a} then ${b}`;
186
+ const links = await provider.provideLinks(line, terminal);
187
+ expect(links).to.have.lengthOf(2);
188
+ expect(links.map(link => link.startIndex)).to.deep.equal([line.indexOf(a), line.indexOf(b)]);
189
+ expect(links.map(link => line.substr(link.startIndex, link.length))).to.deep.equal([a, b]);
190
+ });
191
+
192
+ it('should not leak regex state across concurrent invocations', async () => {
193
+ const a = 'file:///home/user/a.ts';
194
+ const b = 'file:///home/user/b.ts';
195
+ const provider = new TestFileUriLinkProvider([a, b]);
196
+ const [linksA, linksB] = await Promise.all([
197
+ provider.provideLinks(`x ${a}`, terminal),
198
+ provider.provideLinks(b, terminal)
199
+ ]);
200
+ expect(linksA.map(link => link.length)).to.deep.equal([a.length]);
201
+ expect(linksB.map(link => link.length)).to.deep.equal([b.length]);
202
+ });
203
+ });
@@ -0,0 +1,91 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 JuliaHub, Inc. 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 { ILogger } from '@theia/core';
18
+ import URI from '@theia/core/lib/common/uri';
19
+ import { inject, injectable, named } from '@theia/core/shared/inversify';
20
+ import { Position } from '@theia/editor/lib/browser';
21
+ import { AbstractFileOpeningLinkProvider } from './terminal-file-opening-link-provider';
22
+ import { TerminalWidget } from './base/terminal-widget';
23
+ import { TerminalLink } from './terminal-link-provider';
24
+
25
+ /**
26
+ * Linkifies `file://` URLs printed in the terminal and opens the referenced local file in the editor.
27
+ *
28
+ * A dedicated provider is needed because `UrlLinkProvider` only matches `http(s)` and
29
+ * `FileLinkProvider`'s path regex excludes `:`, so neither recognizes the `file:` scheme.
30
+ */
31
+ @injectable()
32
+ export class FileUriLinkProvider extends AbstractFileOpeningLinkProvider {
33
+
34
+ @inject(ILogger) @named('terminal:FileUriLinkProvider')
35
+ protected readonly logger: ILogger;
36
+
37
+ // The optional third slash denotes an empty authority (`file:///path`); the match runs to the first
38
+ // whitespace or character that commonly delimits a URL in prose.
39
+ protected readonly fileUriRegExp = /file:\/\/\/?[^\s'"`<>()[\]]+/g;
40
+
41
+ async provideLinks(line: string, terminal: TerminalWidget): Promise<TerminalLink[]> {
42
+ // Collect all matches synchronously before awaiting: the `g`-flag regex is instance-shared, so
43
+ // yielding mid-iteration would let a concurrent call corrupt its `lastIndex`.
44
+ const candidates: Array<{ match: string, startIndex: number }> = [];
45
+ this.fileUriRegExp.lastIndex = 0;
46
+ let regExpResult: RegExpExecArray | null;
47
+ while (regExpResult = this.fileUriRegExp.exec(line)) {
48
+ candidates.push({ match: this.trimTrailingPunctuation(regExpResult[0]), startIndex: regExpResult.index });
49
+ }
50
+ const links = await Promise.all(candidates.map(async ({ match, startIndex }) => {
51
+ const { fileUri, position } = this.splitPosition(match);
52
+ const uri = this.toURI(fileUri);
53
+ if (uri && await this.isValidFileURI(uri)) {
54
+ return { startIndex, length: match.length, handle: () => this.openURI(uri, position) };
55
+ }
56
+ return undefined;
57
+ }));
58
+ return links.filter((link): link is TerminalLink => link !== undefined);
59
+ }
60
+
61
+ /**
62
+ * Splits a trailing `:line` or `:line:column` suffix (as in `file:///x.ts:10:5`) off the matched
63
+ * URL into a one-based editor position. The drive colon of `file:///C:/x.ts` is not affected, as
64
+ * it is not followed by digits at the end of the string.
65
+ */
66
+ protected splitPosition(match: string): { fileUri: string, position?: Position } {
67
+ const positionMatch = /:(\d+)(?::(\d+))?$/.exec(match);
68
+ if (!positionMatch) {
69
+ return { fileUri: match };
70
+ }
71
+ const line = Math.max(0, parseInt(positionMatch[1], 10) - 1);
72
+ const character = positionMatch[2] !== undefined ? Math.max(0, parseInt(positionMatch[2], 10) - 1) : 0;
73
+ return {
74
+ fileUri: match.slice(0, positionMatch.index),
75
+ position: { line, character }
76
+ };
77
+ }
78
+
79
+ protected toURI(match: string): URI | undefined {
80
+ try {
81
+ const uri = new URI(match);
82
+ return uri.scheme === 'file' ? uri : undefined;
83
+ } catch {
84
+ return undefined;
85
+ }
86
+ }
87
+
88
+ protected trimTrailingPunctuation(match: string): string {
89
+ return match.replace(/[.,;:]+$/, '');
90
+ }
91
+ }
@@ -43,6 +43,7 @@ import { QuickAccessContribution } from '@theia/core/lib/browser/quick-input/qui
43
43
  import { createXtermLinkFactory, TerminalLinkProvider, TerminalLinkProviderContribution, XtermLinkFactory } from './terminal-link-provider';
44
44
  import { UrlLinkProvider } from './terminal-url-link-provider';
45
45
  import { FileDiffPostLinkProvider, FileDiffPreLinkProvider, FileLinkProvider, LocalFileLinkProvider } from './terminal-file-link-provider';
46
+ import { FileUriLinkProvider } from './terminal-file-uri-link-provider';
46
47
  import {
47
48
  ContributedTerminalProfileStore, DefaultProfileStore, DefaultTerminalProfileService,
48
49
  TerminalProfileService, TerminalProfileStore, UserTerminalProfileStore
@@ -120,6 +121,8 @@ export default new ContainerModule(bind => {
120
121
  // default terminal link provider
121
122
  bind(UrlLinkProvider).toSelf().inSingletonScope();
122
123
  bind(TerminalLinkProvider).toService(UrlLinkProvider);
124
+ bind(FileUriLinkProvider).toSelf().inSingletonScope();
125
+ bind(TerminalLinkProvider).toService(FileUriLinkProvider);
123
126
  bind(FileLinkProvider).toSelf().inSingletonScope();
124
127
  bind(TerminalLinkProvider).toService(FileLinkProvider);
125
128
  bind(FileDiffPreLinkProvider).toSelf().inSingletonScope();