@codingame/monaco-vscode-files-service-override 1.83.7 → 1.83.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/external/tslib/tslib.es6.js +11 -0
- package/files.d.ts +14 -2
- package/files.js +520 -0
- package/index.d.ts +2 -2
- package/index.js +7 -2
- package/package.json +2 -2
- package/vscode/src/vs/platform/files/browser/indexedDBFileSystemProvider.js +406 -0
- package/vscode/src/vs/platform/files/common/fileService.js +959 -0
- package/vscode/src/vs/platform/files/common/files.js +134 -0
- package/vscode/src/vs/platform/files/common/inMemoryFilesystemProvider.js +222 -0
- package/vscode/src/vs/platform/files/common/io.js +77 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function __decorate(decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
}
|
|
7
|
+
function __param(paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { __decorate, __param };
|
package/files.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { Disposable, IDisposable } from 'vscode/vscode/vs/base/common/lifecycle'
|
|
|
4
4
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
5
5
|
import { FileType, IStat, IFileSystemProviderWithFileReadWriteCapability, IFileChange, IFileSystemProvider, FileSystemProviderCapabilities, FileChangeType, IFileWriteOptions, IWatchOptions, IFileDeleteOptions, IFileOverwriteOptions } from 'vscode/vscode/vs/platform/files/common/files';
|
|
6
6
|
export { FileChangeType, FilePermission, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileChange, IFileDeleteOptions, IFileOverwriteOptions, IFileSystemProviderWithFileReadWriteCapability, IFileWriteOptions, IStat, IWatchOptions } from 'vscode/vscode/vs/platform/files/common/files';
|
|
7
|
+
import { IndexedDBFileSystemProvider } from './vscode/src/vs/platform/files/browser/indexedDBFileSystemProvider.js';
|
|
7
8
|
|
|
8
9
|
declare abstract class RegisteredFile {
|
|
9
10
|
uri: URI;
|
|
@@ -83,6 +84,13 @@ declare class DelegateFileSystemProvider implements IFileSystemProvider {
|
|
|
83
84
|
delete(resource: URI, opts: IFileDeleteOptions): Promise<void>;
|
|
84
85
|
rename(from: URI, to: URI, opts: IFileOverwriteOptions): Promise<void>;
|
|
85
86
|
}
|
|
87
|
+
declare namespace CustomSchemas {
|
|
88
|
+
/**
|
|
89
|
+
* A schema that is used for models that exist in memory
|
|
90
|
+
* only and that have no correspondence on a server or such.
|
|
91
|
+
*/
|
|
92
|
+
const extensionFile = "extension-file";
|
|
93
|
+
}
|
|
86
94
|
declare function getServiceOverride(): IEditorOverrideServices;
|
|
87
95
|
/**
|
|
88
96
|
* Register a custom file system provider for the given scheme. This allows us to override
|
|
@@ -93,7 +101,11 @@ declare function registerExtensionFile(extensionLocation: URI, filePath: string,
|
|
|
93
101
|
/**
|
|
94
102
|
* Can be used to create a file before the fileService is initialized
|
|
95
103
|
*/
|
|
96
|
-
declare function initFile(
|
|
104
|
+
declare function initFile(file: URI, content: Uint8Array | string, options?: Partial<IFileWriteOptions>): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Can be used to replace memory providers by indexeddb providers before the fileService is initialized
|
|
107
|
+
*/
|
|
108
|
+
declare function createIndexedDBProviders(): Promise<IndexedDBFileSystemProvider>;
|
|
97
109
|
/**
|
|
98
110
|
* Register a file system overlay
|
|
99
111
|
*
|
|
@@ -107,4 +119,4 @@ declare function initFile(scheme: string, file: URI, content: Uint8Array | strin
|
|
|
107
119
|
*/
|
|
108
120
|
declare function registerFileSystemOverlay(priority: number, provider: IFileSystemProviderWithFileReadWriteCapability): IDisposable;
|
|
109
121
|
|
|
110
|
-
export { DelegateFileSystemProvider, RegisteredFile, RegisteredFileSystemProvider, RegisteredMemoryFile, RegisteredReadOnlyFile, getServiceOverride as default, initFile, registerCustomProvider, registerExtensionFile, registerFileSystemOverlay };
|
|
122
|
+
export { CustomSchemas, DelegateFileSystemProvider, IndexedDBFileSystemProvider, RegisteredFile, RegisteredFileSystemProvider, RegisteredMemoryFile, RegisteredReadOnlyFile, createIndexedDBProviders, getServiceOverride as default, initFile, registerCustomProvider, registerExtensionFile, registerFileSystemOverlay };
|
package/files.js
ADDED
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
import { __decorate, __param } from './external/tslib/tslib.es6.js';
|
|
2
|
+
import { SyncDescriptor } from 'monaco-editor/esm/vs/platform/instantiation/common/descriptors.js';
|
|
3
|
+
import { FileService } from './vscode/src/vs/platform/files/common/fileService.js';
|
|
4
|
+
import { ILogService } from 'monaco-editor/esm/vs/platform/log/common/log.js';
|
|
5
|
+
import { InMemoryFileSystemProvider } from './vscode/src/vs/platform/files/common/inMemoryFilesystemProvider.js';
|
|
6
|
+
import { URI } from 'monaco-editor/esm/vs/base/common/uri.js';
|
|
7
|
+
import { FileType, FilePermission, toFileSystemProviderErrorCode } from './vscode/src/vs/platform/files/common/files.js';
|
|
8
|
+
export { FileChangeType, FileSystemProviderCapabilities } from './vscode/src/vs/platform/files/common/files.js';
|
|
9
|
+
import { createFileSystemProviderError, FileSystemProviderErrorCode, FileSystemProviderError, IFileService } from 'monaco-editor/esm/vs/platform/files/common/files.js';
|
|
10
|
+
export { FileSystemProviderError, FileSystemProviderErrorCode } from 'monaco-editor/esm/vs/platform/files/common/files.js';
|
|
11
|
+
import { Disposable, DisposableStore, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
|
|
12
|
+
import { extUri, joinPath } from 'monaco-editor/esm/vs/base/common/resources.js';
|
|
13
|
+
import { Emitter, Event } from 'monaco-editor/esm/vs/base/common/event.js';
|
|
14
|
+
export { HTMLFileSystemProvider } from 'monaco-editor/esm/vs/platform/files/browser/htmlFileSystemProvider.js';
|
|
15
|
+
import * as path from 'monaco-editor/esm/vs/base/common/path.js';
|
|
16
|
+
import 'vscode/vscode/vs/workbench/contrib/files/browser/files.contribution';
|
|
17
|
+
import { Schemas } from 'monaco-editor/esm/vs/base/common/network.js';
|
|
18
|
+
import { IndexedDBFileSystemProvider } from './vscode/src/vs/platform/files/browser/indexedDBFileSystemProvider.js';
|
|
19
|
+
import { IndexedDB } from 'monaco-editor/esm/vs/base/browser/indexedDB.js';
|
|
20
|
+
export { IndexedDB } from 'monaco-editor/esm/vs/base/browser/indexedDB.js';
|
|
21
|
+
import { ITelemetryService } from 'monaco-editor/esm/vs/platform/telemetry/common/telemetry.js';
|
|
22
|
+
import { BufferLogger } from 'vscode/vscode/vs/platform/log/common/bufferLog';
|
|
23
|
+
import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
|
|
24
|
+
import { logsPath } from 'vscode/workbench';
|
|
25
|
+
import { registerServiceInitializePreParticipant, checkServicesNotInitialized } from 'vscode/lifecycle';
|
|
26
|
+
|
|
27
|
+
class RegisteredFile {
|
|
28
|
+
constructor(uri, readonly) {
|
|
29
|
+
this.uri = uri;
|
|
30
|
+
this.readonly = readonly;
|
|
31
|
+
this._onDidChange = new Emitter();
|
|
32
|
+
this.onDidChange = this._onDidChange.event;
|
|
33
|
+
this._onDidDelete = new Emitter();
|
|
34
|
+
this.onDidDelete = this._onDidDelete.event;
|
|
35
|
+
this._onDidRename = new Emitter();
|
|
36
|
+
this.onDidRename = this._onDidRename.event;
|
|
37
|
+
this.ctime = Date.now();
|
|
38
|
+
this.mtime = Date.now();
|
|
39
|
+
this.type = FileType.File;
|
|
40
|
+
}
|
|
41
|
+
async stats() {
|
|
42
|
+
return {
|
|
43
|
+
ctime: this.ctime,
|
|
44
|
+
mtime: this.mtime,
|
|
45
|
+
size: await this.getSize(),
|
|
46
|
+
type: FileType.File,
|
|
47
|
+
permissions: this.readonly ? FilePermission.Readonly : undefined
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async getSize() {
|
|
51
|
+
return (await this.read()).length;
|
|
52
|
+
}
|
|
53
|
+
async delete() {
|
|
54
|
+
this._onDidDelete.fire();
|
|
55
|
+
}
|
|
56
|
+
async rename(to) {
|
|
57
|
+
const previousUri = this.uri;
|
|
58
|
+
this.uri = to;
|
|
59
|
+
this._onDidRename.fire({ from: previousUri, to });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
class RegisteredReadOnlyFile extends RegisteredFile {
|
|
63
|
+
constructor(uri, read) {
|
|
64
|
+
super(uri, true);
|
|
65
|
+
this.read = read;
|
|
66
|
+
}
|
|
67
|
+
write() {
|
|
68
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.FileWriteLocked);
|
|
69
|
+
}
|
|
70
|
+
async delete() {
|
|
71
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.FileWriteLocked);
|
|
72
|
+
}
|
|
73
|
+
async rename() {
|
|
74
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.FileWriteLocked);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
class RegisteredMemoryFile extends RegisteredFile {
|
|
78
|
+
constructor(uri, content) {
|
|
79
|
+
super(uri, false);
|
|
80
|
+
this.content = content;
|
|
81
|
+
}
|
|
82
|
+
async read() {
|
|
83
|
+
return this.content;
|
|
84
|
+
}
|
|
85
|
+
async write(content) {
|
|
86
|
+
this.content = content;
|
|
87
|
+
this._onDidChange.fire();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const encoder = new TextEncoder();
|
|
91
|
+
const decoder = new TextDecoder();
|
|
92
|
+
class RegisteredFileSystemProvider extends Disposable {
|
|
93
|
+
constructor(readonly) {
|
|
94
|
+
super();
|
|
95
|
+
this.onDidChangeCapabilities = Event.None;
|
|
96
|
+
this._onDidChangeFile = new Emitter();
|
|
97
|
+
this.onDidChangeFile = this._onDidChangeFile.event;
|
|
98
|
+
this.files = new Map();
|
|
99
|
+
this.capabilities = 2 | 1024 ;
|
|
100
|
+
if (readonly) {
|
|
101
|
+
this.capabilities |= 2048 ;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
registerFile(file) {
|
|
105
|
+
this.files.set(( file.uri.toString()), file);
|
|
106
|
+
this._onDidChangeFile.fire([{
|
|
107
|
+
resource: file.uri,
|
|
108
|
+
type: 1
|
|
109
|
+
}]);
|
|
110
|
+
const disposableStore = new DisposableStore();
|
|
111
|
+
disposableStore.add(toDisposable(() => {
|
|
112
|
+
if (this.files.get(( file.uri.toString())) === file) {
|
|
113
|
+
this.files.delete(( file.uri.toString()));
|
|
114
|
+
this._onDidChangeFile.fire([{
|
|
115
|
+
resource: file.uri,
|
|
116
|
+
type: 2
|
|
117
|
+
}]);
|
|
118
|
+
}
|
|
119
|
+
}));
|
|
120
|
+
disposableStore.add(file.onDidDelete(() => {
|
|
121
|
+
disposableStore.dispose();
|
|
122
|
+
}));
|
|
123
|
+
disposableStore.add(file.onDidChange(() => {
|
|
124
|
+
this._onDidChangeFile.fire([{
|
|
125
|
+
resource: file.uri,
|
|
126
|
+
type: 0
|
|
127
|
+
}]);
|
|
128
|
+
}));
|
|
129
|
+
disposableStore.add(file.onDidRename(({ from, to }) => {
|
|
130
|
+
if (this.files.get(( from.toString())) === file) {
|
|
131
|
+
this.files.delete(( from.toString()));
|
|
132
|
+
this._onDidChangeFile.fire([{
|
|
133
|
+
resource: from,
|
|
134
|
+
type: 2
|
|
135
|
+
}]);
|
|
136
|
+
this.files.set(( to.toString()), file);
|
|
137
|
+
this._onDidChangeFile.fire([{
|
|
138
|
+
resource: to,
|
|
139
|
+
type: 1
|
|
140
|
+
}]);
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
return disposableStore;
|
|
144
|
+
}
|
|
145
|
+
async stat(resource) {
|
|
146
|
+
const resourceUri = ( resource.toString());
|
|
147
|
+
const file = this.files.get(resourceUri);
|
|
148
|
+
if (file != null) {
|
|
149
|
+
return file.stats();
|
|
150
|
+
}
|
|
151
|
+
const handledUris = Array.from(( this.files.keys()));
|
|
152
|
+
for (const handledUri of handledUris) {
|
|
153
|
+
if (handledUri.startsWith(resourceUri + '/')) {
|
|
154
|
+
return {
|
|
155
|
+
ctime: Date.now(),
|
|
156
|
+
mtime: Date.now(),
|
|
157
|
+
size: 0,
|
|
158
|
+
type: FileType.Directory
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound);
|
|
163
|
+
}
|
|
164
|
+
async readdir(resource) {
|
|
165
|
+
const includedPaths = ( Array.from(( this.files.keys()))
|
|
166
|
+
.map(uri => path.relative(resource.path, ( URI.parse(uri)).path)))
|
|
167
|
+
.filter(path => !path.startsWith('..'));
|
|
168
|
+
const files = includedPaths.filter(path => !path.includes('/'));
|
|
169
|
+
const directories = ( includedPaths.filter(path => path.includes('/')).map(path => path.slice(0, path.indexOf('/'))));
|
|
170
|
+
return [
|
|
171
|
+
...( files.map(path => [
|
|
172
|
+
path,
|
|
173
|
+
FileType.File
|
|
174
|
+
])),
|
|
175
|
+
...( directories.map(path => [
|
|
176
|
+
path,
|
|
177
|
+
FileType.Directory
|
|
178
|
+
]))
|
|
179
|
+
];
|
|
180
|
+
}
|
|
181
|
+
async readFile(resource) {
|
|
182
|
+
const file = this.files.get(( resource.toString()));
|
|
183
|
+
if (file != null) {
|
|
184
|
+
const data = await file.read();
|
|
185
|
+
if (data instanceof Uint8Array) {
|
|
186
|
+
return data;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
return encoder.encode(data);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
throw FileSystemProviderError.create('file not found', FileSystemProviderErrorCode.FileNotFound);
|
|
193
|
+
}
|
|
194
|
+
watch() {
|
|
195
|
+
return Disposable.None;
|
|
196
|
+
}
|
|
197
|
+
async writeFile(resource, content) {
|
|
198
|
+
const file = this.files.get(( resource.toString()));
|
|
199
|
+
if (file?.write != null) {
|
|
200
|
+
await file.write(decoder.decode(content));
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.NoPermissions);
|
|
204
|
+
}
|
|
205
|
+
async delete(resource) {
|
|
206
|
+
const file = this.files.get(( resource.toString()));
|
|
207
|
+
if (file != null) {
|
|
208
|
+
await file.delete();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
throw createFileSystemProviderError('File not found', FileSystemProviderErrorCode.FileNotFound);
|
|
212
|
+
}
|
|
213
|
+
async rename(from, to) {
|
|
214
|
+
const file = this.files.get(( from.toString()));
|
|
215
|
+
if (file != null) {
|
|
216
|
+
await file.rename(to);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
throw createFileSystemProviderError('File not found', FileSystemProviderErrorCode.FileNotFound);
|
|
220
|
+
}
|
|
221
|
+
async mkdir() {
|
|
222
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.NoPermissions);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function isFullfiled(result) {
|
|
226
|
+
return result.status === 'fulfilled';
|
|
227
|
+
}
|
|
228
|
+
class OverlayFileSystemProvider {
|
|
229
|
+
constructor() {
|
|
230
|
+
this.providers = [];
|
|
231
|
+
this.onDidChangeCapabilities = Event.None;
|
|
232
|
+
this._onDidChangeFile = new Emitter();
|
|
233
|
+
this.onDidChangeFile = this._onDidChangeFile.event;
|
|
234
|
+
this._onDidChangeOverlays = new Emitter();
|
|
235
|
+
this.onDidChangeOverlays = this._onDidChangeOverlays.event;
|
|
236
|
+
this.capabilities = 2 | 1024 ;
|
|
237
|
+
}
|
|
238
|
+
register(priority, provider) {
|
|
239
|
+
const item = { priority, provider };
|
|
240
|
+
this.providers.push(item);
|
|
241
|
+
this.providers.sort((a, b) => b.priority - a.priority);
|
|
242
|
+
const disposableStore = new DisposableStore();
|
|
243
|
+
disposableStore.add(provider.onDidChangeFile(e => {
|
|
244
|
+
this._onDidChangeFile.fire(e);
|
|
245
|
+
}));
|
|
246
|
+
disposableStore.add({
|
|
247
|
+
dispose: () => {
|
|
248
|
+
const index = this.providers.indexOf(item);
|
|
249
|
+
if (index >= 0) {
|
|
250
|
+
this.providers.splice(index, 1);
|
|
251
|
+
this._onDidChangeOverlays.fire();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
this._onDidChangeOverlays.fire();
|
|
256
|
+
return disposableStore;
|
|
257
|
+
}
|
|
258
|
+
get delegates() {
|
|
259
|
+
return ( this.providers.map(({ provider }) => provider));
|
|
260
|
+
}
|
|
261
|
+
async readFromDelegates(caller) {
|
|
262
|
+
let firstError;
|
|
263
|
+
for (const delegate of this.delegates) {
|
|
264
|
+
try {
|
|
265
|
+
return await caller(delegate);
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
firstError ?? (firstError = err);
|
|
269
|
+
if (err instanceof FileSystemProviderError && [
|
|
270
|
+
FileSystemProviderErrorCode.NoPermissions,
|
|
271
|
+
FileSystemProviderErrorCode.FileNotFound,
|
|
272
|
+
FileSystemProviderErrorCode.Unavailable
|
|
273
|
+
].includes(err.code)) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
throw err;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
throw firstError;
|
|
280
|
+
}
|
|
281
|
+
async writeToDelegates(resource, caller) {
|
|
282
|
+
for (const provider of this.delegates) {
|
|
283
|
+
if (((provider.capabilities & 2048) ) > 0) {
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
try {
|
|
287
|
+
return await caller(provider);
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
if (err instanceof FileSystemProviderError && [
|
|
291
|
+
FileSystemProviderErrorCode.NoPermissions,
|
|
292
|
+
FileSystemProviderErrorCode.FileNotFound,
|
|
293
|
+
FileSystemProviderErrorCode.Unavailable
|
|
294
|
+
].includes(err.code)) {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
throw err;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.NoPermissions);
|
|
301
|
+
}
|
|
302
|
+
async stat(resource) {
|
|
303
|
+
return this.readFromDelegates(async (delegate) => {
|
|
304
|
+
const result = await delegate.stat(resource);
|
|
305
|
+
const readOnly = ((delegate.capabilities & 2048) ) > 0;
|
|
306
|
+
return {
|
|
307
|
+
...result,
|
|
308
|
+
permissions: result.permissions ?? (readOnly ? FilePermission.Readonly : undefined)
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
async readFile(resource) {
|
|
313
|
+
return this.readFromDelegates(delegate => delegate.readFile(resource));
|
|
314
|
+
}
|
|
315
|
+
async readdir(resource) {
|
|
316
|
+
const results = await Promise.allSettled(( this.delegates.map(delegate => delegate.readdir(resource))));
|
|
317
|
+
if (!( results.some(isFullfiled))) {
|
|
318
|
+
throw results[0].reason;
|
|
319
|
+
}
|
|
320
|
+
return Object.entries(Object.fromEntries(( results.filter(isFullfiled).map(result => result.value)).flat()));
|
|
321
|
+
}
|
|
322
|
+
watch(resource, opts) {
|
|
323
|
+
const store = new DisposableStore();
|
|
324
|
+
for (const delegate of this.delegates) {
|
|
325
|
+
store.add(delegate.watch(resource, opts));
|
|
326
|
+
}
|
|
327
|
+
return store;
|
|
328
|
+
}
|
|
329
|
+
async writeFile(resource, content, opts) {
|
|
330
|
+
await this.writeToDelegates(resource, async (delegate) => {
|
|
331
|
+
try {
|
|
332
|
+
const stats = await delegate.stat(resource);
|
|
333
|
+
if (((stats.permissions ?? 0) & FilePermission.Readonly) > 0) {
|
|
334
|
+
throw createFileSystemProviderError('Not allowed', FileSystemProviderErrorCode.NoPermissions);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch (err) {
|
|
338
|
+
}
|
|
339
|
+
return delegate.writeFile(resource, content, opts);
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
async mkdir(resource) {
|
|
343
|
+
await this.writeToDelegates(resource, delegate => delegate.mkdir(resource));
|
|
344
|
+
}
|
|
345
|
+
async delete(resource, opts) {
|
|
346
|
+
await this.writeToDelegates(resource, delegate => delegate.delete(resource, opts));
|
|
347
|
+
}
|
|
348
|
+
async rename(from, to, opts) {
|
|
349
|
+
await this.writeToDelegates(from, delegate => delegate.rename(from, to, opts));
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
function resourceForError(resource) {
|
|
353
|
+
if (resource.scheme === Schemas.file) {
|
|
354
|
+
return resource.fsPath;
|
|
355
|
+
}
|
|
356
|
+
return ( resource.toString(true));
|
|
357
|
+
}
|
|
358
|
+
async function mkdirp(provider, directory) {
|
|
359
|
+
const directoriesToCreate = [];
|
|
360
|
+
while (!extUri.isEqual(directory, extUri.dirname(directory))) {
|
|
361
|
+
try {
|
|
362
|
+
const stat = await provider.stat(directory);
|
|
363
|
+
if ((stat.type & FileType.Directory) === 0) {
|
|
364
|
+
throw new Error(localizeWithPath('mkdirExistsError', "Unable to create folder '{0}' that already exists but is not a directory", resourceForError(directory)));
|
|
365
|
+
}
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
catch (error) {
|
|
369
|
+
if (toFileSystemProviderErrorCode(error) !== FileSystemProviderErrorCode.FileNotFound) {
|
|
370
|
+
throw error;
|
|
371
|
+
}
|
|
372
|
+
directoriesToCreate.push(extUri.basename(directory));
|
|
373
|
+
directory = extUri.dirname(directory);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
for (let i = directoriesToCreate.length - 1; i >= 0; i--) {
|
|
377
|
+
directory = extUri.joinPath(directory, directoriesToCreate[i]);
|
|
378
|
+
try {
|
|
379
|
+
await provider.mkdir(directory);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
if (toFileSystemProviderErrorCode(error) !== FileSystemProviderErrorCode.FileExists) {
|
|
383
|
+
throw error;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
class MkdirpOnWriteInMemoryFileSystemProvider extends InMemoryFileSystemProvider {
|
|
389
|
+
async writeFile(resource, content, opts) {
|
|
390
|
+
await mkdirp(this, extUri.dirname(resource));
|
|
391
|
+
return super.writeFile(resource, content, opts);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
class DelegateFileSystemProvider {
|
|
395
|
+
constructor(options) {
|
|
396
|
+
this.options = options;
|
|
397
|
+
this.onDidChangeCapabilities = this.options.delegate.onDidChangeCapabilities;
|
|
398
|
+
this.onDidChangeFile = ( Event.map(this.options.delegate.onDidChangeFile, changes => ( changes.map(change => ({
|
|
399
|
+
type: change.type,
|
|
400
|
+
resource: this.options.fromDeletate(change.resource)
|
|
401
|
+
})))));
|
|
402
|
+
this.readFile = this.options.delegate.readFile != null
|
|
403
|
+
? (resource) => {
|
|
404
|
+
return this.options.delegate.readFile(this.options.toDelegate(resource));
|
|
405
|
+
}
|
|
406
|
+
: undefined;
|
|
407
|
+
this.writeFile = this.options.delegate.writeFile != null
|
|
408
|
+
? (resource, content, opts) => {
|
|
409
|
+
return this.options.delegate.writeFile(this.options.toDelegate(resource), content, opts);
|
|
410
|
+
}
|
|
411
|
+
: undefined;
|
|
412
|
+
}
|
|
413
|
+
get capabilities() { return this.options.delegate.capabilities; }
|
|
414
|
+
watch(resource, opts) {
|
|
415
|
+
return this.options.delegate.watch(this.options.toDelegate(resource), opts);
|
|
416
|
+
}
|
|
417
|
+
stat(resource) {
|
|
418
|
+
return this.options.delegate.stat(this.options.toDelegate(resource));
|
|
419
|
+
}
|
|
420
|
+
mkdir(resource) {
|
|
421
|
+
return this.options.delegate.mkdir(this.options.toDelegate(resource));
|
|
422
|
+
}
|
|
423
|
+
readdir(resource) {
|
|
424
|
+
return this.options.delegate.readdir(this.options.toDelegate(resource));
|
|
425
|
+
}
|
|
426
|
+
delete(resource, opts) {
|
|
427
|
+
return this.options.delegate.delete(this.options.toDelegate(resource), opts);
|
|
428
|
+
}
|
|
429
|
+
rename(from, to, opts) {
|
|
430
|
+
return this.options.delegate.rename(this.options.toDelegate(from), this.options.toDelegate(to), opts);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
const fileSystemProvider = new OverlayFileSystemProvider();
|
|
434
|
+
fileSystemProvider.register(0, new MkdirpOnWriteInMemoryFileSystemProvider());
|
|
435
|
+
const extensionFileSystemProvider = new RegisteredFileSystemProvider(true);
|
|
436
|
+
const userDataFileSystemProvider = new InMemoryFileSystemProvider();
|
|
437
|
+
void userDataFileSystemProvider.mkdir(( URI.from({ scheme: Schemas.vscodeUserData, path: '/User/' })));
|
|
438
|
+
var CustomSchemas;
|
|
439
|
+
( (function(CustomSchemas) {
|
|
440
|
+
CustomSchemas.extensionFile = 'extension-file';
|
|
441
|
+
})(CustomSchemas || (CustomSchemas = {})));
|
|
442
|
+
const providers = {
|
|
443
|
+
[CustomSchemas.extensionFile]: extensionFileSystemProvider,
|
|
444
|
+
[logsPath.scheme]: new InMemoryFileSystemProvider(),
|
|
445
|
+
[Schemas.vscodeUserData]: userDataFileSystemProvider,
|
|
446
|
+
[Schemas.tmp]: new InMemoryFileSystemProvider(),
|
|
447
|
+
[Schemas.file]: fileSystemProvider
|
|
448
|
+
};
|
|
449
|
+
let MemoryFileService = class MemoryFileService extends FileService {
|
|
450
|
+
constructor(logService, telemetryService) {
|
|
451
|
+
super(logService);
|
|
452
|
+
for (const [scheme, provider] of Object.entries(providers)) {
|
|
453
|
+
let disposable = this.registerProvider(scheme, provider);
|
|
454
|
+
if (provider instanceof OverlayFileSystemProvider) {
|
|
455
|
+
provider.onDidChangeOverlays(() => {
|
|
456
|
+
disposable.dispose();
|
|
457
|
+
disposable = this.registerProvider(scheme, fileSystemProvider);
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
if (provider instanceof IndexedDBFileSystemProvider) {
|
|
461
|
+
this._register(provider.onReportError(e => telemetryService.publicLog2('indexedDBFileSystemProviderError', e)));
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
MemoryFileService = __decorate([
|
|
467
|
+
( __param(1, ITelemetryService))
|
|
468
|
+
], MemoryFileService);
|
|
469
|
+
const fileLogger = new BufferLogger();
|
|
470
|
+
registerServiceInitializePreParticipant(async (accessor) => {
|
|
471
|
+
fileLogger.logger = accessor.get(ILogService);
|
|
472
|
+
});
|
|
473
|
+
function getServiceOverride() {
|
|
474
|
+
return {
|
|
475
|
+
[( IFileService.toString())]: new SyncDescriptor(MemoryFileService, [fileLogger], true)
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
function registerCustomProvider(scheme, provider) {
|
|
479
|
+
checkServicesNotInitialized();
|
|
480
|
+
providers[scheme] = provider;
|
|
481
|
+
}
|
|
482
|
+
function registerExtensionFile(extensionLocation, filePath, getContent) {
|
|
483
|
+
return extensionFileSystemProvider.registerFile(new RegisteredReadOnlyFile(joinPath(extensionLocation, filePath), getContent));
|
|
484
|
+
}
|
|
485
|
+
async function initFile(file, content, options) {
|
|
486
|
+
checkServicesNotInitialized();
|
|
487
|
+
const provider = providers[file.scheme];
|
|
488
|
+
if (provider == null || provider.writeFile == null) {
|
|
489
|
+
throw new Error(`${file.scheme} provider doesn't exist or doesn't support writing files`);
|
|
490
|
+
}
|
|
491
|
+
if (!(options?.overwrite ?? false)) {
|
|
492
|
+
try {
|
|
493
|
+
await provider.stat(file);
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
await provider.writeFile(file, content instanceof Uint8Array ? content : encoder.encode(content), {
|
|
500
|
+
atomic: false,
|
|
501
|
+
create: true,
|
|
502
|
+
overwrite: false,
|
|
503
|
+
unlock: false,
|
|
504
|
+
...options
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
async function createIndexedDBProviders() {
|
|
508
|
+
const userDataStore = 'vscode-userdata-store';
|
|
509
|
+
const logsStore = 'vscode-logs-store';
|
|
510
|
+
const indexedDB = await IndexedDB.create('vscode-web-db', 3, [userDataStore, logsStore]);
|
|
511
|
+
registerCustomProvider(logsPath.scheme, new IndexedDBFileSystemProvider(logsPath.scheme, indexedDB, logsStore, false));
|
|
512
|
+
const userDataProvider = new IndexedDBFileSystemProvider(Schemas.vscodeUserData, indexedDB, userDataStore, true);
|
|
513
|
+
registerCustomProvider(Schemas.vscodeUserData, userDataProvider);
|
|
514
|
+
return userDataProvider;
|
|
515
|
+
}
|
|
516
|
+
function registerFileSystemOverlay(priority, provider) {
|
|
517
|
+
return fileSystemProvider.register(priority, provider);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
export { CustomSchemas, DelegateFileSystemProvider, FilePermission, FileType, InMemoryFileSystemProvider, IndexedDBFileSystemProvider, RegisteredFile, RegisteredFileSystemProvider, RegisteredMemoryFile, RegisteredReadOnlyFile, createIndexedDBProviders, getServiceOverride as default, initFile, registerCustomProvider, registerExtensionFile, registerFileSystemOverlay };
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { DelegateFileSystemProvider, RegisteredFile, RegisteredFileSystemProvider, RegisteredMemoryFile, RegisteredReadOnlyFile, default, initFile, registerCustomProvider, registerExtensionFile, registerFileSystemOverlay } from './files.js';
|
|
1
|
+
export { CustomSchemas, DelegateFileSystemProvider, RegisteredFile, RegisteredFileSystemProvider, RegisteredMemoryFile, RegisteredReadOnlyFile, createIndexedDBProviders, default, initFile, registerCustomProvider, registerExtensionFile, registerFileSystemOverlay } from './files.js';
|
|
2
2
|
export { InMemoryFileSystemProvider } from './vscode/src/vs/platform/files/common/inMemoryFilesystemProvider.js';
|
|
3
3
|
export { FileChangeType, FilePermission, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode, FileType, IFileChange, IFileDeleteOptions, IFileOverwriteOptions, IFileSystemProviderWithFileReadWriteCapability, IFileWriteOptions, IStat, IWatchOptions } from 'vscode/vscode/vs/platform/files/common/files';
|
|
4
4
|
export { HTMLFileSystemProvider } from './vscode/src/vs/platform/files/browser/htmlFileSystemProvider.js';
|
|
5
|
-
export { IndexedDBFileSystemProvider } from './vscode/src/vs/platform/files/browser/indexedDBFileSystemProvider.js';
|
|
6
5
|
export { IndexedDB } from './vscode/src/vs/base/browser/indexedDB.js';
|
|
6
|
+
export { IndexedDBFileSystemProvider } from './vscode/src/vs/platform/files/browser/indexedDBFileSystemProvider.js';
|
package/index.js
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
1
|
+
export { CustomSchemas, DelegateFileSystemProvider, RegisteredFile, RegisteredFileSystemProvider, RegisteredMemoryFile, RegisteredReadOnlyFile, createIndexedDBProviders, default, initFile, registerCustomProvider, registerExtensionFile, registerFileSystemOverlay } from './files.js';
|
|
2
|
+
export { FileChangeType, FilePermission, FileSystemProviderCapabilities, FileType } from './vscode/src/vs/platform/files/common/files.js';
|
|
3
|
+
export { FileSystemProviderError, FileSystemProviderErrorCode } from 'monaco-editor/esm/vs/platform/files/common/files.js';
|
|
4
|
+
export { HTMLFileSystemProvider } from 'monaco-editor/esm/vs/platform/files/browser/htmlFileSystemProvider.js';
|
|
5
|
+
export { IndexedDB } from 'monaco-editor/esm/vs/base/browser/indexedDB.js';
|
|
6
|
+
export { InMemoryFileSystemProvider } from './vscode/src/vs/platform/files/common/inMemoryFilesystemProvider.js';
|
|
7
|
+
export { IndexedDBFileSystemProvider } from './vscode/src/vs/platform/files/browser/indexedDBFileSystemProvider.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-files-service-override",
|
|
3
|
-
"version": "1.83.
|
|
3
|
+
"version": "1.83.9",
|
|
4
4
|
"keywords": [],
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CodinGame",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"module": "index.js",
|
|
19
19
|
"types": "index.d.ts",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"vscode": "npm:@codingame/monaco-vscode-api@1.83.
|
|
21
|
+
"vscode": "npm:@codingame/monaco-vscode-api@1.83.9",
|
|
22
22
|
"monaco-editor": "0.44.0"
|
|
23
23
|
}
|
|
24
24
|
}
|