@theia/filesystem 1.65.0-next.6 → 1.65.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.
Files changed (147) hide show
  1. package/lib/browser/download/file-download-command-contribution.d.ts +1 -1
  2. package/lib/browser/download/file-download-command-contribution.d.ts.map +1 -1
  3. package/lib/browser/download/file-download-command-contribution.js +3 -3
  4. package/lib/browser/download/file-download-command-contribution.js.map +1 -1
  5. package/lib/browser/download/file-download-frontend-module.d.ts.map +1 -1
  6. package/lib/browser/download/file-download-frontend-module.js +2 -1
  7. package/lib/browser/download/file-download-frontend-module.js.map +1 -1
  8. package/lib/browser/download/file-download-service.d.ts +2 -10
  9. package/lib/browser/download/file-download-service.d.ts.map +1 -1
  10. package/lib/browser/download/file-download-service.js +8 -7
  11. package/lib/browser/download/file-download-service.js.map +1 -1
  12. package/lib/browser/file-resource.js +1 -1
  13. package/lib/browser/file-resource.js.map +1 -1
  14. package/lib/browser/file-service.d.ts +1 -1
  15. package/lib/browser/file-service.d.ts.map +1 -1
  16. package/lib/browser/file-service.js +1 -1
  17. package/lib/browser/file-service.js.map +1 -1
  18. package/lib/browser/file-tree/file-tree-widget.d.ts +1 -1
  19. package/lib/browser/file-tree/file-tree-widget.d.ts.map +1 -1
  20. package/lib/browser/file-tree/file-tree-widget.js +3 -3
  21. package/lib/browser/file-tree/file-tree-widget.js.map +1 -1
  22. package/lib/browser/filesystem-frontend-contribution.d.ts +5 -4
  23. package/lib/browser/filesystem-frontend-contribution.d.ts.map +1 -1
  24. package/lib/browser/filesystem-frontend-contribution.js +5 -5
  25. package/lib/browser/filesystem-frontend-contribution.js.map +1 -1
  26. package/lib/browser/filesystem-frontend-module.d.ts.map +1 -1
  27. package/lib/browser/filesystem-frontend-module.js +4 -3
  28. package/lib/browser/filesystem-frontend-module.js.map +1 -1
  29. package/lib/browser/filesystem-saveable-service.d.ts.map +1 -1
  30. package/lib/browser/filesystem-saveable-service.js +5 -1
  31. package/lib/browser/filesystem-saveable-service.js.map +1 -1
  32. package/lib/browser/index.d.ts +0 -1
  33. package/lib/browser/index.d.ts.map +1 -1
  34. package/lib/browser/index.js +0 -1
  35. package/lib/browser/index.js.map +1 -1
  36. package/lib/browser/{file-upload-service.d.ts → upload/file-upload-service-impl.d.ts} +16 -52
  37. package/lib/browser/upload/file-upload-service-impl.d.ts.map +1 -0
  38. package/lib/browser/{file-upload-service.js → upload/file-upload-service-impl.js} +27 -27
  39. package/lib/browser/upload/file-upload-service-impl.js.map +1 -0
  40. package/lib/browser-only/browser-only-filesystem-frontend-module.d.ts.map +1 -1
  41. package/lib/browser-only/browser-only-filesystem-frontend-module.js +8 -0
  42. package/lib/browser-only/browser-only-filesystem-frontend-module.js.map +1 -1
  43. package/lib/browser-only/download/file-download-command-contribution.d.ts +15 -0
  44. package/lib/browser-only/download/file-download-command-contribution.d.ts.map +1 -0
  45. package/lib/browser-only/download/file-download-command-contribution.js +55 -0
  46. package/lib/browser-only/download/file-download-command-contribution.js.map +1 -0
  47. package/lib/browser-only/download/file-download-frontend-module.d.ts +4 -0
  48. package/lib/browser-only/download/file-download-frontend-module.d.ts.map +1 -0
  49. package/lib/browser-only/download/file-download-frontend-module.js +27 -0
  50. package/lib/browser-only/download/file-download-frontend-module.js.map +1 -0
  51. package/lib/browser-only/download/file-download-service.d.ts +86 -0
  52. package/lib/browser-only/download/file-download-service.d.ts.map +1 -0
  53. package/lib/browser-only/download/file-download-service.js +551 -0
  54. package/lib/browser-only/download/file-download-service.js.map +1 -0
  55. package/lib/browser-only/file-search.d.ts +38 -0
  56. package/lib/browser-only/file-search.d.ts.map +1 -0
  57. package/lib/browser-only/file-search.js +153 -0
  58. package/lib/browser-only/file-search.js.map +1 -0
  59. package/lib/browser-only/opfs-filesystem-initialization.d.ts +4 -2
  60. package/lib/browser-only/opfs-filesystem-initialization.d.ts.map +1 -1
  61. package/lib/browser-only/opfs-filesystem-initialization.js +4 -1
  62. package/lib/browser-only/opfs-filesystem-initialization.js.map +1 -1
  63. package/lib/browser-only/opfs-filesystem-provider.d.ts +89 -12
  64. package/lib/browser-only/opfs-filesystem-provider.d.ts.map +1 -1
  65. package/lib/browser-only/opfs-filesystem-provider.js +345 -181
  66. package/lib/browser-only/opfs-filesystem-provider.js.map +1 -1
  67. package/lib/browser-only/upload/file-upload-service-impl.d.ts +67 -0
  68. package/lib/browser-only/upload/file-upload-service-impl.d.ts.map +1 -0
  69. package/lib/browser-only/upload/file-upload-service-impl.js +328 -0
  70. package/lib/browser-only/upload/file-upload-service-impl.js.map +1 -0
  71. package/lib/common/download/file-download.d.ts +17 -0
  72. package/lib/common/download/file-download.d.ts.map +1 -0
  73. package/lib/common/download/{file-download-data.js → file-download.js} +3 -2
  74. package/lib/common/download/file-download.js.map +1 -0
  75. package/lib/common/files.d.ts +8 -1
  76. package/lib/common/files.d.ts.map +1 -1
  77. package/lib/common/files.js +35 -1
  78. package/lib/common/files.js.map +1 -1
  79. package/lib/{browser → common}/filesystem-preferences.d.ts +3 -1
  80. package/lib/common/filesystem-preferences.d.ts.map +1 -0
  81. package/lib/{browser → common}/filesystem-preferences.js +17 -11
  82. package/lib/common/filesystem-preferences.js.map +1 -0
  83. package/lib/common/index.d.ts +1 -0
  84. package/lib/common/index.d.ts.map +1 -1
  85. package/lib/common/index.js +1 -0
  86. package/lib/common/index.js.map +1 -1
  87. package/lib/common/io.js +7 -1
  88. package/lib/common/io.js.map +1 -1
  89. package/lib/common/upload/file-upload.d.ts +45 -0
  90. package/lib/common/upload/file-upload.d.ts.map +1 -0
  91. package/{src/common/download/file-download-data.ts → lib/common/upload/file-upload.js} +6 -13
  92. package/lib/common/upload/file-upload.js.map +1 -0
  93. package/lib/node/disk-file-system-provider.d.ts.map +1 -1
  94. package/lib/node/disk-file-system-provider.js +2 -4
  95. package/lib/node/disk-file-system-provider.js.map +1 -1
  96. package/lib/node/download/file-download-handler.js +2 -2
  97. package/lib/node/download/file-download-handler.js.map +1 -1
  98. package/lib/node/filesystem-backend-module.d.ts.map +1 -1
  99. package/lib/node/filesystem-backend-module.js +3 -1
  100. package/lib/node/filesystem-backend-module.js.map +1 -1
  101. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts +2 -2
  102. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts.map +1 -1
  103. package/lib/node/parcel-watcher/parcel-filesystem-service.js.map +1 -1
  104. package/lib/node/upload/node-file-upload-service.d.ts.map +1 -0
  105. package/lib/node/{node-file-upload-service.js → upload/node-file-upload-service.js} +1 -1
  106. package/lib/node/upload/node-file-upload-service.js.map +1 -0
  107. package/package.json +11 -5
  108. package/src/browser/download/file-download-command-contribution.ts +1 -1
  109. package/src/browser/download/file-download-frontend-module.ts +3 -2
  110. package/src/browser/download/file-download-service.ts +7 -12
  111. package/src/browser/file-resource.ts +1 -1
  112. package/src/browser/file-service.ts +1 -1
  113. package/src/browser/file-tree/file-tree-widget.tsx +1 -1
  114. package/src/browser/filesystem-frontend-contribution.ts +4 -5
  115. package/src/browser/filesystem-frontend-module.ts +4 -3
  116. package/src/browser/filesystem-saveable-service.ts +5 -1
  117. package/src/browser/index.ts +0 -1
  118. package/src/browser/{file-upload-service.ts → upload/file-upload-service-impl.ts} +31 -72
  119. package/src/browser-only/browser-only-filesystem-frontend-module.ts +10 -0
  120. package/src/browser-only/download/file-download-command-contribution.ts +56 -0
  121. package/src/browser-only/download/file-download-frontend-module.ts +26 -0
  122. package/src/browser-only/download/file-download-service.ts +726 -0
  123. package/src/browser-only/file-search.ts +170 -0
  124. package/src/browser-only/opfs-filesystem-initialization.ts +7 -4
  125. package/src/browser-only/opfs-filesystem-provider.ts +402 -189
  126. package/src/browser-only/upload/file-upload-service-impl.ts +408 -0
  127. package/src/common/download/file-download.ts +40 -0
  128. package/src/common/files.ts +42 -1
  129. package/src/{browser → common}/filesystem-preferences.ts +14 -14
  130. package/src/common/index.ts +1 -0
  131. package/src/common/io.ts +6 -1
  132. package/src/common/upload/file-upload.ts +65 -0
  133. package/src/node/disk-file-system-provider.ts +3 -4
  134. package/src/node/download/file-download-handler.ts +1 -1
  135. package/src/node/filesystem-backend-module.ts +3 -1
  136. package/src/node/parcel-watcher/parcel-filesystem-service.ts +2 -2
  137. package/src/node/{node-file-upload-service.ts → upload/node-file-upload-service.ts} +1 -1
  138. package/lib/browser/file-upload-service.d.ts.map +0 -1
  139. package/lib/browser/file-upload-service.js.map +0 -1
  140. package/lib/browser/filesystem-preferences.d.ts.map +0 -1
  141. package/lib/browser/filesystem-preferences.js.map +0 -1
  142. package/lib/common/download/file-download-data.d.ts +0 -7
  143. package/lib/common/download/file-download-data.d.ts.map +0 -1
  144. package/lib/common/download/file-download-data.js.map +0 -1
  145. package/lib/node/node-file-upload-service.d.ts.map +0 -1
  146. package/lib/node/node-file-upload-service.js.map +0 -1
  147. /package/lib/node/{node-file-upload-service.d.ts → upload/node-file-upload-service.d.ts} +0 -0
@@ -0,0 +1,170 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 Maksim Kachurin 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 { minimatch, type MinimatchOptions } from 'minimatch';
18
+ import ignore from 'ignore';
19
+
20
+ import type URI from '@theia/core/lib/common/uri';
21
+
22
+ /**
23
+ * Normalizes glob patterns to be consistent with ripgrep behavior.
24
+ *
25
+ * Examples of transformations:
26
+ * - "*.js" -> "**\/*.js" (make non-root patterns match anywhere)
27
+ * - "src/" -> "src\/**" (directory patterns match all contents)
28
+ * - "!*.log" -> "!**\/*.log" (negation patterns)
29
+ * - "src/**\/**\/file.js" -> "src/**\/file.js" (collapse repeated double-star patterns)
30
+ *
31
+ * @param glob - The glob pattern to normalize
32
+ * @returns The normalized glob pattern
33
+ */
34
+ export function normalizeGlob(glob: string): string {
35
+ let neg = '';
36
+ let root = false;
37
+
38
+ // Handle negation patterns (starting with '!')
39
+ if (glob.startsWith('!')) {
40
+ neg = '!';
41
+ glob = glob.slice(1);
42
+ }
43
+
44
+ // Convert Windows backslashes to forward slashes for consistency
45
+ glob = glob.replace(/\\/g, '/');
46
+
47
+ // Remove redundant './' prefix (same as current directory)
48
+ if (glob.startsWith('./')) {
49
+ glob = glob.slice(1);
50
+ }
51
+
52
+ // Check if pattern is root-anchored (starts with '/')
53
+ if (glob.startsWith('/')) {
54
+ root = true;
55
+ }
56
+
57
+ // Convert directory patterns to match all contents
58
+ // "src/" becomes "src/**" to match everything inside the directory
59
+ if (glob.endsWith('/') && !glob.endsWith('/**')) {
60
+ glob = glob + '**';
61
+ }
62
+
63
+ // Make non-root patterns match anywhere in the directory tree
64
+ // "*.js" becomes "**/*.js" to match .js files anywhere
65
+ if (!root && !glob.startsWith('**')) {
66
+ glob = '**/' + glob;
67
+ }
68
+
69
+ // Clean up repeated '**/' patterns
70
+ // "src/**/**/file.js" becomes "src/**/file.js"
71
+ glob = glob.replace(/(\*\*\/)+\*\*\//g, '**/');
72
+
73
+ // Restore negation prefix if it was present
74
+ return neg + glob;
75
+ }
76
+
77
+ /**
78
+ * Checks if a text matches any of the minimatch patterns
79
+ * @param text - The text to check
80
+ * @param patterns - The patterns to check
81
+ * @returns True if the text matches any of the patterns, false otherwise
82
+ */
83
+ export function matchesPattern(text: string, patterns: string[], opts?: MinimatchOptions): boolean {
84
+ return patterns.some(pattern => minimatch(text, pattern, opts));
85
+ }
86
+
87
+ /**
88
+ * Creates a new ignore pattern matcher for managing ignore patterns.
89
+ * @returns An object with add and ignores methods
90
+ */
91
+ export function createIgnoreMatcher(): { add: (patterns: string | string[]) => void; ignores: (path: string) => boolean } {
92
+ const ig = ignore();
93
+
94
+ return {
95
+ add: (patterns: string | string[]) => ig.add(patterns),
96
+ ignores: (path: string) => ig.ignores(path)
97
+ };
98
+ }
99
+
100
+ /**
101
+ * Processes ignore files (.gitignore, .ignore, .rgignore) in a directory.
102
+ * @param dir - The directory URI to process
103
+ * @param read - Function to read the ignore file content
104
+ * @returns Array of processed ignore patterns relative to the directory contains that ignore file
105
+ */
106
+ export async function getIgnorePatterns(dir: URI, read: (uri: URI) => Promise<string>): Promise<string[]> {
107
+ const fromPath = dir.path.toString();
108
+ const ignoreFiles = await Promise.allSettled(
109
+ ['.gitignore', '.ignore', '.rgignore'].map(file => read(dir.resolve(file)))
110
+ );
111
+
112
+ const lines = ignoreFiles
113
+ .filter(result => result.status === 'fulfilled')
114
+ .flatMap((result: PromiseFulfilledResult<string>) =>
115
+ result.value
116
+ .split('\n')
117
+ .map(line => prefixGitignoreLine(fromPath, line))
118
+ .filter((line): line is string => typeof line === 'string')
119
+ );
120
+
121
+ return lines;
122
+ }
123
+
124
+ /**
125
+ * Convert patterns from dir base to root-relative git semantics.
126
+ * @param baseRel - The base relative path
127
+ * @param raw - The raw pattern
128
+ * @returns The processed pattern
129
+ */
130
+ function prefixGitignoreLine(baseRel: string, raw: string): string | undefined {
131
+ let line = raw.replace(/\r?\n$/, '');
132
+ if (!line || /^\s*#/.test(line)) {
133
+ return undefined;
134
+ }
135
+
136
+ // handle escaped leading '!' and '#'
137
+ const escapedBang = line.startsWith('\\!');
138
+ const escapedHash = line.startsWith('\\#');
139
+ if (escapedBang || escapedHash) {
140
+ line = line.slice(1);
141
+ }
142
+
143
+ const neg = !escapedBang && line.startsWith('!');
144
+ if (neg) { line = line.slice(1); }
145
+
146
+ // normalize slashes in the pattern part
147
+ line = line.replace(/\\/g, '/');
148
+
149
+ // strip leading "./"
150
+ if (line.startsWith('./')) { line = line.slice(2); }
151
+
152
+ const anchored = line.startsWith('/');
153
+ const hasSlash = line.includes('/');
154
+ const prefix = baseRel ? baseRel.replace(/\\/g, '/').replace(/^\/+/, '').replace(/\/+$/, '') : '';
155
+
156
+ let pattern: string;
157
+
158
+ if (anchored) {
159
+ // "/foo" in base -> "base/foo"
160
+ pattern = (prefix ? `${prefix}${line}` : line.slice(1)); // remove leading '/' if no base
161
+ } else if (hasSlash) {
162
+ // "bar/*.js" in base -> "base/bar/*.js"
163
+ pattern = prefix ? `${prefix}/${line}` : line;
164
+ } else {
165
+ // "foo" in base -> "base/**/foo"
166
+ pattern = prefix ? `${prefix}/**/${line}` : line;
167
+ }
168
+
169
+ return neg ? `!${pattern}` : pattern;
170
+ }
@@ -19,18 +19,21 @@ import { injectable } from '@theia/core/shared/inversify';
19
19
 
20
20
  export const OPFSInitialization = Symbol('OPFSInitialization');
21
21
  export interface OPFSInitialization {
22
- getRootDirectory(): Promise<FileSystemDirectoryHandle>
22
+ getBroadcastChannel(): BroadcastChannel;
23
+ getRootDirectory(): Promise<string> | string;
23
24
  initializeFS(provider: OPFSFileSystemProvider): Promise<void>;
24
25
  }
25
26
 
26
27
  @injectable()
27
28
  export class DefaultOPFSInitialization implements OPFSInitialization {
29
+ getBroadcastChannel(): BroadcastChannel {
30
+ return new BroadcastChannel('theia-opfs-events');
31
+ }
28
32
 
29
- getRootDirectory(): Promise<FileSystemDirectoryHandle> {
30
- return navigator.storage.getDirectory();
33
+ getRootDirectory(): Promise<string> | string {
34
+ return '/';
31
35
  }
32
36
 
33
37
  async initializeFS(provider: OPFSFileSystemProvider): Promise<void> {
34
-
35
38
  }
36
39
  }