@vscode/test-web 0.0.15 → 0.0.16
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/CHANGELOG.md +4 -0
- package/README.md +2 -1
- package/fs-provider/dist/extension-web.js +273 -273
- package/fs-provider/dist/fsExtensionMain.js +311 -283
- package/out/index.d.ts +95 -85
- package/out/index.js +350 -321
- package/out/server/app.js +49 -42
- package/out/server/download.js +171 -171
- package/out/server/extensions.js +53 -45
- package/out/server/main.js +15 -15
- package/out/server/mounts.js +78 -78
- package/out/server/workbench.js +112 -149
- package/package.json +2 -2
- package/views/workbench.html +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.16
|
|
4
|
+
* new option `--sourcesPath`: If provided, runs the server from VS Code sources at the given location.
|
|
5
|
+
* option `--version` is deprecated and replaced with `quality`. Supported values: `stable`, `insiders`. Instead of `sources` use `--insiders`
|
|
6
|
+
|
|
3
7
|
## 0.0.14
|
|
4
8
|
* new option `--extensionPath` : A path pointing to a folder containing additional extensions to include. Argument can be provided multiple times.
|
|
5
9
|
* new option `--permission`: Permission granted to the opened browser: e.g. clipboard-read, clipboard-write. See full list of options [here](https://playwright.dev/docs/1.14/emulation#permissions). Argument can be provided multiple times.
|
package/README.md
CHANGED
|
@@ -70,7 +70,8 @@ CLI options:
|
|
|
70
70
|
| --browserType | The browser to launch: `chromium` (default), `firefox` or `webkit` |
|
|
71
71
|
| --extensionDevelopmentPath | A path pointing to an extension under development to include. |
|
|
72
72
|
| --extensionTestsPath | A path to a test module to run. |
|
|
73
|
-
| --
|
|
73
|
+
| --quality | `insiders` (default), or `stable`. Ignored when sourcesPath is provided. |
|
|
74
|
+
| --sourcesPath | If set, runs from VS Code sources located at the given path. Make sure the sources and extensions are compiled (`yarn compile` and `yarn compile-web`) |
|
|
74
75
|
| --open-devtools| If set, opens the dev tools |
|
|
75
76
|
| --headless| If set, hides the browser. Defaults to true when an extensionTestsPath is provided, otherwise false. |
|
|
76
77
|
| --hideServerLog| If set, hides the server log. Defaults to true when an extensionTestsPath is provided, otherwise false. |
|
|
@@ -5,269 +5,269 @@
|
|
|
5
5
|
/***/ ((module) => {
|
|
6
6
|
|
|
7
7
|
"use strict";
|
|
8
|
-
module.exports = require("vscode")
|
|
8
|
+
module.exports = require("vscode");;
|
|
9
9
|
|
|
10
10
|
/***/ }),
|
|
11
11
|
/* 2 */
|
|
12
12
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
13
13
|
|
|
14
14
|
"use strict";
|
|
15
|
-
|
|
16
|
-
/*---------------------------------------------------------------------------------------------
|
|
17
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
18
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
19
|
-
*--------------------------------------------------------------------------------------------*/
|
|
20
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
21
|
-
exports.MountsFileSystemProvider = exports.SCHEME = void 0;
|
|
22
|
-
const vscode_1 = __webpack_require__(1);
|
|
23
|
-
const vscode_uri_1 = __webpack_require__(3);
|
|
24
|
-
const request_light_1 = __webpack_require__(5);
|
|
25
|
-
exports.SCHEME = 'vscode-test-web';
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
-
function isEntry(e) {
|
|
28
|
-
return e && (e.type == vscode_1.FileType.Directory || e.type == vscode_1.FileType.File) && typeof e.name === 'string' && e.name.length > 0;
|
|
29
|
-
}
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
-
function isStat(e) {
|
|
32
|
-
return e && (e.type == vscode_1.FileType.Directory || e.type == vscode_1.FileType.File) && typeof e.ctime === 'number' && typeof e.mtime === 'number' && typeof e.size === 'number';
|
|
33
|
-
}
|
|
34
|
-
function newFileStat(type, size) {
|
|
35
|
-
return { type, ctime: Date.now(), mtime: Date.now(), size };
|
|
36
|
-
}
|
|
37
|
-
function modifiedFileStat(stats, size) {
|
|
38
|
-
return { type: stats.type, ctime: stats.ctime, mtime: Date.now(), size: size !== null && size !== void 0 ? size : stats.size };
|
|
39
|
-
}
|
|
40
|
-
async function getStats(entry) {
|
|
41
|
-
let stats = entry.stats;
|
|
42
|
-
if (stats === undefined) {
|
|
43
|
-
if (entry.serverUri) {
|
|
44
|
-
const url = entry.serverUri.with({ query: 'stat' }).toString();
|
|
45
|
-
const response = await
|
|
46
|
-
if (response.status === 200) {
|
|
47
|
-
try {
|
|
48
|
-
const res = JSON.parse(response.responseText);
|
|
49
|
-
if (isStat(res)) {
|
|
50
|
-
stats = res;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
// ignore
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (!stats) {
|
|
59
|
-
stats = newFileStat(entry.type, 0);
|
|
60
|
-
}
|
|
61
|
-
entry.stats = stats;
|
|
62
|
-
}
|
|
63
|
-
return stats;
|
|
64
|
-
}
|
|
65
|
-
async function getEntries(entry) {
|
|
66
|
-
if (entry.entries === undefined) {
|
|
67
|
-
entry.entries = new Map();
|
|
68
|
-
if (entry.serverUri) {
|
|
69
|
-
const url = entry.serverUri.with({ query: 'readdir' }).toString();
|
|
70
|
-
const response = await
|
|
71
|
-
if (response.status === 200) {
|
|
72
|
-
try {
|
|
73
|
-
const res = JSON.parse(response.responseText);
|
|
74
|
-
if (Array.isArray(res)) {
|
|
75
|
-
for (const r of res) {
|
|
76
|
-
if (isEntry(r)) {
|
|
77
|
-
const newEntry = { type: r.type, name: r.name, serverUri: vscode_uri_1.Utils.joinPath(entry.serverUri, r.name) };
|
|
78
|
-
entry.entries.set(newEntry.name, newEntry);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// ignore
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return entry.entries;
|
|
90
|
-
}
|
|
91
|
-
class MountsFileSystemProvider {
|
|
92
|
-
constructor(serverUri) {
|
|
93
|
-
// --- manage file events
|
|
94
|
-
this._onDidChangeFile = new vscode_1.EventEmitter();
|
|
95
|
-
this.onDidChangeFile = this._onDidChangeFile.event;
|
|
96
|
-
this._bufferedChanges = [];
|
|
97
|
-
this.root = { type: vscode_1.FileType.Directory, name: '', serverUri };
|
|
98
|
-
}
|
|
99
|
-
// --- manage file metadata
|
|
100
|
-
async stat(resource) {
|
|
101
|
-
const entry = await this._lookup(resource, false);
|
|
102
|
-
return getStats(entry);
|
|
103
|
-
}
|
|
104
|
-
async readDirectory(resource) {
|
|
105
|
-
const entry = await this._lookupAsDirectory(resource, false);
|
|
106
|
-
const entries = await getEntries(entry);
|
|
107
|
-
const result = [];
|
|
108
|
-
entries.forEach((child, name) => result.push([name, child.type]));
|
|
109
|
-
return result;
|
|
110
|
-
}
|
|
111
|
-
// --- manage file contents
|
|
112
|
-
async readFile(resource) {
|
|
113
|
-
const entry = await this._lookupAsFile(resource, false);
|
|
114
|
-
let content = entry.content;
|
|
115
|
-
if (content) {
|
|
116
|
-
return content;
|
|
117
|
-
}
|
|
118
|
-
const serverUri = entry.serverUri;
|
|
119
|
-
if (serverUri) {
|
|
120
|
-
const response = await
|
|
121
|
-
if (response.status >= 200 && response.status <= 204) {
|
|
122
|
-
content = entry.content = response.body;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (!content) {
|
|
126
|
-
throw vscode_1.FileSystemError.FileNotFound(resource);
|
|
127
|
-
}
|
|
128
|
-
return content;
|
|
129
|
-
}
|
|
130
|
-
async writeFile(uri, content, opts) {
|
|
131
|
-
const basename = vscode_uri_1.Utils.basename(uri);
|
|
132
|
-
const parent = await this._lookupParentDirectory(uri);
|
|
133
|
-
const entries = await getEntries(parent);
|
|
134
|
-
let entry = entries.get(basename);
|
|
135
|
-
if (entry && entry.type === vscode_1.FileType.Directory) {
|
|
136
|
-
throw vscode_1.FileSystemError.FileIsADirectory(uri);
|
|
137
|
-
}
|
|
138
|
-
if (!entry && !opts.create) {
|
|
139
|
-
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
140
|
-
}
|
|
141
|
-
if (entry && opts.create && !opts.overwrite) {
|
|
142
|
-
throw vscode_1.FileSystemError.FileExists(uri);
|
|
143
|
-
}
|
|
144
|
-
const stats = newFileStat(vscode_1.FileType.File, content.byteLength);
|
|
145
|
-
if (!entry) {
|
|
146
|
-
entry = { type: vscode_1.FileType.File, name: basename, stats, content };
|
|
147
|
-
entries.set(basename, entry);
|
|
148
|
-
this._fireSoon({ type: vscode_1.FileChangeType.Created, uri });
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
entry.stats = stats;
|
|
152
|
-
entry.content = content;
|
|
153
|
-
}
|
|
154
|
-
this._fireSoon({ type: vscode_1.FileChangeType.Changed, uri });
|
|
155
|
-
}
|
|
156
|
-
// --- manage files/folders
|
|
157
|
-
async rename(from, to, opts) {
|
|
158
|
-
if (!opts.overwrite && await this._lookup(to, true)) {
|
|
159
|
-
throw vscode_1.FileSystemError.FileExists(to);
|
|
160
|
-
}
|
|
161
|
-
const entry = await this._lookup(from, false);
|
|
162
|
-
const oldParent = await this._lookupParentDirectory(from);
|
|
163
|
-
const newParent = await this._lookupParentDirectory(to);
|
|
164
|
-
const newName = vscode_uri_1.Utils.basename(to);
|
|
165
|
-
const oldParentEntries = await getEntries(oldParent);
|
|
166
|
-
oldParentEntries.delete(entry.name);
|
|
167
|
-
let newEntry;
|
|
168
|
-
if (entry.type === vscode_1.FileType.File) {
|
|
169
|
-
newEntry = { type: vscode_1.FileType.File, name: newName, stats: entry.stats, serverUri: entry.serverUri, content: entry.content };
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
newEntry = { type: vscode_1.FileType.Directory, name: newName, stats: entry.stats, serverUri: entry.serverUri, entries: entry.entries };
|
|
173
|
-
}
|
|
174
|
-
const newParentEntries = await getEntries(newParent);
|
|
175
|
-
newParentEntries.set(newName, newEntry);
|
|
176
|
-
this._fireSoon({ type: vscode_1.FileChangeType.Deleted, uri: from }, { type: vscode_1.FileChangeType.Created, uri: to });
|
|
177
|
-
}
|
|
178
|
-
async delete(uri, opts) {
|
|
179
|
-
const dirname = vscode_uri_1.Utils.dirname(uri);
|
|
180
|
-
const basename = vscode_uri_1.Utils.basename(uri);
|
|
181
|
-
const parent = await this._lookupAsDirectory(dirname, false);
|
|
182
|
-
const parentEntries = await getEntries(parent);
|
|
183
|
-
if (parentEntries.has(basename)) {
|
|
184
|
-
parentEntries.delete(basename);
|
|
185
|
-
parent.stats = newFileStat(parent.type, -1);
|
|
186
|
-
this._fireSoon({ type: vscode_1.FileChangeType.Changed, uri: dirname }, { uri, type: vscode_1.FileChangeType.Deleted });
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
async createDirectory(uri) {
|
|
190
|
-
const basename = vscode_uri_1.Utils.basename(uri);
|
|
191
|
-
const dirname = vscode_uri_1.Utils.dirname(uri);
|
|
192
|
-
const parent = await this._lookupAsDirectory(dirname, false);
|
|
193
|
-
const parentEntries = await getEntries(parent);
|
|
194
|
-
const entry = { type: vscode_1.FileType.Directory, name: basename, stats: newFileStat(vscode_1.FileType.Directory, 0) };
|
|
195
|
-
parentEntries.set(entry.name, entry);
|
|
196
|
-
const stats = await getStats(parent);
|
|
197
|
-
parent.stats = modifiedFileStat(stats, stats.size + 1);
|
|
198
|
-
this._fireSoon({ type: vscode_1.FileChangeType.Changed, uri: dirname }, { type: vscode_1.FileChangeType.Created, uri });
|
|
199
|
-
}
|
|
200
|
-
async _lookup(uri, silent) {
|
|
201
|
-
if (uri.scheme !== exports.SCHEME) {
|
|
202
|
-
if (!silent) {
|
|
203
|
-
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
return undefined;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
let entry = this.root;
|
|
210
|
-
const parts = uri.path.split('/');
|
|
211
|
-
for (const part of parts) {
|
|
212
|
-
if (!part) {
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
let child;
|
|
216
|
-
if (entry.type === vscode_1.FileType.Directory) {
|
|
217
|
-
child = (await getEntries(entry)).get(part);
|
|
218
|
-
}
|
|
219
|
-
if (!child) {
|
|
220
|
-
if (!silent) {
|
|
221
|
-
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
return undefined;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
entry = child;
|
|
228
|
-
}
|
|
229
|
-
return entry;
|
|
230
|
-
}
|
|
231
|
-
async _lookupAsDirectory(uri, silent) {
|
|
232
|
-
const entry = await this._lookup(uri, silent);
|
|
233
|
-
if ((entry === null || entry === void 0 ? void 0 : entry.type) === vscode_1.FileType.Directory) {
|
|
234
|
-
return entry;
|
|
235
|
-
}
|
|
236
|
-
throw vscode_1.FileSystemError.FileNotADirectory(uri);
|
|
237
|
-
}
|
|
238
|
-
async _lookupAsFile(uri, silent) {
|
|
239
|
-
const entry = await this._lookup(uri, silent);
|
|
240
|
-
if (!entry) {
|
|
241
|
-
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
242
|
-
}
|
|
243
|
-
if (entry.type === vscode_1.FileType.File) {
|
|
244
|
-
return entry;
|
|
245
|
-
}
|
|
246
|
-
throw vscode_1.FileSystemError.FileIsADirectory(uri);
|
|
247
|
-
}
|
|
248
|
-
_lookupParentDirectory(uri) {
|
|
249
|
-
const dirname = vscode_uri_1.Utils.dirname(uri);
|
|
250
|
-
return this._lookupAsDirectory(dirname, false);
|
|
251
|
-
}
|
|
252
|
-
watch(resource, opts) {
|
|
253
|
-
// ignore, fires for all changes...
|
|
254
|
-
return vscode_1.Disposable.from();
|
|
255
|
-
}
|
|
256
|
-
_fireSoon(...changes) {
|
|
257
|
-
this._bufferedChanges.push(...changes);
|
|
258
|
-
if (this._fireSoonHandle) {
|
|
259
|
-
clearTimeout(this._fireSoonHandle);
|
|
260
|
-
}
|
|
261
|
-
this._fireSoonHandle = setTimeout(() => {
|
|
262
|
-
this._onDidChangeFile.fire(this._bufferedChanges);
|
|
263
|
-
this._bufferedChanges.length = 0;
|
|
264
|
-
}, 5);
|
|
265
|
-
}
|
|
266
|
-
dispose() {
|
|
267
|
-
this._onDidChangeFile.dispose();
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
exports.MountsFileSystemProvider = MountsFileSystemProvider;
|
|
15
|
+
|
|
16
|
+
/*---------------------------------------------------------------------------------------------
|
|
17
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
18
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
19
|
+
*--------------------------------------------------------------------------------------------*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
21
|
+
exports.MountsFileSystemProvider = exports.SCHEME = void 0;
|
|
22
|
+
const vscode_1 = __webpack_require__(1);
|
|
23
|
+
const vscode_uri_1 = __webpack_require__(3);
|
|
24
|
+
const request_light_1 = __webpack_require__(5);
|
|
25
|
+
exports.SCHEME = 'vscode-test-web';
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
+
function isEntry(e) {
|
|
28
|
+
return e && (e.type == vscode_1.FileType.Directory || e.type == vscode_1.FileType.File) && typeof e.name === 'string' && e.name.length > 0;
|
|
29
|
+
}
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
+
function isStat(e) {
|
|
32
|
+
return e && (e.type == vscode_1.FileType.Directory || e.type == vscode_1.FileType.File) && typeof e.ctime === 'number' && typeof e.mtime === 'number' && typeof e.size === 'number';
|
|
33
|
+
}
|
|
34
|
+
function newFileStat(type, size) {
|
|
35
|
+
return { type, ctime: Date.now(), mtime: Date.now(), size };
|
|
36
|
+
}
|
|
37
|
+
function modifiedFileStat(stats, size) {
|
|
38
|
+
return { type: stats.type, ctime: stats.ctime, mtime: Date.now(), size: size !== null && size !== void 0 ? size : stats.size };
|
|
39
|
+
}
|
|
40
|
+
async function getStats(entry) {
|
|
41
|
+
let stats = entry.stats;
|
|
42
|
+
if (stats === undefined) {
|
|
43
|
+
if (entry.serverUri) {
|
|
44
|
+
const url = entry.serverUri.with({ query: 'stat' }).toString();
|
|
45
|
+
const response = await request_light_1.xhr({ url: url.toString() });
|
|
46
|
+
if (response.status === 200) {
|
|
47
|
+
try {
|
|
48
|
+
const res = JSON.parse(response.responseText);
|
|
49
|
+
if (isStat(res)) {
|
|
50
|
+
stats = res;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// ignore
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!stats) {
|
|
59
|
+
stats = newFileStat(entry.type, 0);
|
|
60
|
+
}
|
|
61
|
+
entry.stats = stats;
|
|
62
|
+
}
|
|
63
|
+
return stats;
|
|
64
|
+
}
|
|
65
|
+
async function getEntries(entry) {
|
|
66
|
+
if (entry.entries === undefined) {
|
|
67
|
+
entry.entries = new Map();
|
|
68
|
+
if (entry.serverUri) {
|
|
69
|
+
const url = entry.serverUri.with({ query: 'readdir' }).toString();
|
|
70
|
+
const response = await request_light_1.xhr({ url });
|
|
71
|
+
if (response.status === 200) {
|
|
72
|
+
try {
|
|
73
|
+
const res = JSON.parse(response.responseText);
|
|
74
|
+
if (Array.isArray(res)) {
|
|
75
|
+
for (const r of res) {
|
|
76
|
+
if (isEntry(r)) {
|
|
77
|
+
const newEntry = { type: r.type, name: r.name, serverUri: vscode_uri_1.Utils.joinPath(entry.serverUri, r.name) };
|
|
78
|
+
entry.entries.set(newEntry.name, newEntry);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// ignore
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return entry.entries;
|
|
90
|
+
}
|
|
91
|
+
class MountsFileSystemProvider {
|
|
92
|
+
constructor(serverUri) {
|
|
93
|
+
// --- manage file events
|
|
94
|
+
this._onDidChangeFile = new vscode_1.EventEmitter();
|
|
95
|
+
this.onDidChangeFile = this._onDidChangeFile.event;
|
|
96
|
+
this._bufferedChanges = [];
|
|
97
|
+
this.root = { type: vscode_1.FileType.Directory, name: '', serverUri };
|
|
98
|
+
}
|
|
99
|
+
// --- manage file metadata
|
|
100
|
+
async stat(resource) {
|
|
101
|
+
const entry = await this._lookup(resource, false);
|
|
102
|
+
return getStats(entry);
|
|
103
|
+
}
|
|
104
|
+
async readDirectory(resource) {
|
|
105
|
+
const entry = await this._lookupAsDirectory(resource, false);
|
|
106
|
+
const entries = await getEntries(entry);
|
|
107
|
+
const result = [];
|
|
108
|
+
entries.forEach((child, name) => result.push([name, child.type]));
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
// --- manage file contents
|
|
112
|
+
async readFile(resource) {
|
|
113
|
+
const entry = await this._lookupAsFile(resource, false);
|
|
114
|
+
let content = entry.content;
|
|
115
|
+
if (content) {
|
|
116
|
+
return content;
|
|
117
|
+
}
|
|
118
|
+
const serverUri = entry.serverUri;
|
|
119
|
+
if (serverUri) {
|
|
120
|
+
const response = await request_light_1.xhr({ url: serverUri.toString() });
|
|
121
|
+
if (response.status >= 200 && response.status <= 204) {
|
|
122
|
+
content = entry.content = response.body;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (!content) {
|
|
126
|
+
throw vscode_1.FileSystemError.FileNotFound(resource);
|
|
127
|
+
}
|
|
128
|
+
return content;
|
|
129
|
+
}
|
|
130
|
+
async writeFile(uri, content, opts) {
|
|
131
|
+
const basename = vscode_uri_1.Utils.basename(uri);
|
|
132
|
+
const parent = await this._lookupParentDirectory(uri);
|
|
133
|
+
const entries = await getEntries(parent);
|
|
134
|
+
let entry = entries.get(basename);
|
|
135
|
+
if (entry && entry.type === vscode_1.FileType.Directory) {
|
|
136
|
+
throw vscode_1.FileSystemError.FileIsADirectory(uri);
|
|
137
|
+
}
|
|
138
|
+
if (!entry && !opts.create) {
|
|
139
|
+
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
140
|
+
}
|
|
141
|
+
if (entry && opts.create && !opts.overwrite) {
|
|
142
|
+
throw vscode_1.FileSystemError.FileExists(uri);
|
|
143
|
+
}
|
|
144
|
+
const stats = newFileStat(vscode_1.FileType.File, content.byteLength);
|
|
145
|
+
if (!entry) {
|
|
146
|
+
entry = { type: vscode_1.FileType.File, name: basename, stats, content };
|
|
147
|
+
entries.set(basename, entry);
|
|
148
|
+
this._fireSoon({ type: vscode_1.FileChangeType.Created, uri });
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
entry.stats = stats;
|
|
152
|
+
entry.content = content;
|
|
153
|
+
}
|
|
154
|
+
this._fireSoon({ type: vscode_1.FileChangeType.Changed, uri });
|
|
155
|
+
}
|
|
156
|
+
// --- manage files/folders
|
|
157
|
+
async rename(from, to, opts) {
|
|
158
|
+
if (!opts.overwrite && await this._lookup(to, true)) {
|
|
159
|
+
throw vscode_1.FileSystemError.FileExists(to);
|
|
160
|
+
}
|
|
161
|
+
const entry = await this._lookup(from, false);
|
|
162
|
+
const oldParent = await this._lookupParentDirectory(from);
|
|
163
|
+
const newParent = await this._lookupParentDirectory(to);
|
|
164
|
+
const newName = vscode_uri_1.Utils.basename(to);
|
|
165
|
+
const oldParentEntries = await getEntries(oldParent);
|
|
166
|
+
oldParentEntries.delete(entry.name);
|
|
167
|
+
let newEntry;
|
|
168
|
+
if (entry.type === vscode_1.FileType.File) {
|
|
169
|
+
newEntry = { type: vscode_1.FileType.File, name: newName, stats: entry.stats, serverUri: entry.serverUri, content: entry.content };
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
newEntry = { type: vscode_1.FileType.Directory, name: newName, stats: entry.stats, serverUri: entry.serverUri, entries: entry.entries };
|
|
173
|
+
}
|
|
174
|
+
const newParentEntries = await getEntries(newParent);
|
|
175
|
+
newParentEntries.set(newName, newEntry);
|
|
176
|
+
this._fireSoon({ type: vscode_1.FileChangeType.Deleted, uri: from }, { type: vscode_1.FileChangeType.Created, uri: to });
|
|
177
|
+
}
|
|
178
|
+
async delete(uri, opts) {
|
|
179
|
+
const dirname = vscode_uri_1.Utils.dirname(uri);
|
|
180
|
+
const basename = vscode_uri_1.Utils.basename(uri);
|
|
181
|
+
const parent = await this._lookupAsDirectory(dirname, false);
|
|
182
|
+
const parentEntries = await getEntries(parent);
|
|
183
|
+
if (parentEntries.has(basename)) {
|
|
184
|
+
parentEntries.delete(basename);
|
|
185
|
+
parent.stats = newFileStat(parent.type, -1);
|
|
186
|
+
this._fireSoon({ type: vscode_1.FileChangeType.Changed, uri: dirname }, { uri, type: vscode_1.FileChangeType.Deleted });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async createDirectory(uri) {
|
|
190
|
+
const basename = vscode_uri_1.Utils.basename(uri);
|
|
191
|
+
const dirname = vscode_uri_1.Utils.dirname(uri);
|
|
192
|
+
const parent = await this._lookupAsDirectory(dirname, false);
|
|
193
|
+
const parentEntries = await getEntries(parent);
|
|
194
|
+
const entry = { type: vscode_1.FileType.Directory, name: basename, stats: newFileStat(vscode_1.FileType.Directory, 0) };
|
|
195
|
+
parentEntries.set(entry.name, entry);
|
|
196
|
+
const stats = await getStats(parent);
|
|
197
|
+
parent.stats = modifiedFileStat(stats, stats.size + 1);
|
|
198
|
+
this._fireSoon({ type: vscode_1.FileChangeType.Changed, uri: dirname }, { type: vscode_1.FileChangeType.Created, uri });
|
|
199
|
+
}
|
|
200
|
+
async _lookup(uri, silent) {
|
|
201
|
+
if (uri.scheme !== exports.SCHEME) {
|
|
202
|
+
if (!silent) {
|
|
203
|
+
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
let entry = this.root;
|
|
210
|
+
const parts = uri.path.split('/');
|
|
211
|
+
for (const part of parts) {
|
|
212
|
+
if (!part) {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
let child;
|
|
216
|
+
if (entry.type === vscode_1.FileType.Directory) {
|
|
217
|
+
child = (await getEntries(entry)).get(part);
|
|
218
|
+
}
|
|
219
|
+
if (!child) {
|
|
220
|
+
if (!silent) {
|
|
221
|
+
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
entry = child;
|
|
228
|
+
}
|
|
229
|
+
return entry;
|
|
230
|
+
}
|
|
231
|
+
async _lookupAsDirectory(uri, silent) {
|
|
232
|
+
const entry = await this._lookup(uri, silent);
|
|
233
|
+
if ((entry === null || entry === void 0 ? void 0 : entry.type) === vscode_1.FileType.Directory) {
|
|
234
|
+
return entry;
|
|
235
|
+
}
|
|
236
|
+
throw vscode_1.FileSystemError.FileNotADirectory(uri);
|
|
237
|
+
}
|
|
238
|
+
async _lookupAsFile(uri, silent) {
|
|
239
|
+
const entry = await this._lookup(uri, silent);
|
|
240
|
+
if (!entry) {
|
|
241
|
+
throw vscode_1.FileSystemError.FileNotFound(uri);
|
|
242
|
+
}
|
|
243
|
+
if (entry.type === vscode_1.FileType.File) {
|
|
244
|
+
return entry;
|
|
245
|
+
}
|
|
246
|
+
throw vscode_1.FileSystemError.FileIsADirectory(uri);
|
|
247
|
+
}
|
|
248
|
+
_lookupParentDirectory(uri) {
|
|
249
|
+
const dirname = vscode_uri_1.Utils.dirname(uri);
|
|
250
|
+
return this._lookupAsDirectory(dirname, false);
|
|
251
|
+
}
|
|
252
|
+
watch(resource, opts) {
|
|
253
|
+
// ignore, fires for all changes...
|
|
254
|
+
return vscode_1.Disposable.from();
|
|
255
|
+
}
|
|
256
|
+
_fireSoon(...changes) {
|
|
257
|
+
this._bufferedChanges.push(...changes);
|
|
258
|
+
if (this._fireSoonHandle) {
|
|
259
|
+
clearTimeout(this._fireSoonHandle);
|
|
260
|
+
}
|
|
261
|
+
this._fireSoonHandle = setTimeout(() => {
|
|
262
|
+
this._onDidChangeFile.fire(this._bufferedChanges);
|
|
263
|
+
this._bufferedChanges.length = 0;
|
|
264
|
+
}, 5);
|
|
265
|
+
}
|
|
266
|
+
dispose() {
|
|
267
|
+
this._onDidChangeFile.dispose();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
exports.MountsFileSystemProvider = MountsFileSystemProvider;
|
|
271
271
|
|
|
272
272
|
|
|
273
273
|
/***/ }),
|
|
@@ -542,22 +542,22 @@ var __webpack_exports__ = {};
|
|
|
542
542
|
(() => {
|
|
543
543
|
"use strict";
|
|
544
544
|
var exports = __webpack_exports__;
|
|
545
|
-
|
|
546
|
-
/*---------------------------------------------------------------------------------------------
|
|
547
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
548
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
549
|
-
*--------------------------------------------------------------------------------------------*/
|
|
550
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
551
|
-
exports.activate = void 0;
|
|
552
|
-
const vscode = __webpack_require__(1);
|
|
553
|
-
const fsProvider_1 = __webpack_require__(2);
|
|
554
|
-
function activate(context) {
|
|
555
|
-
const serverUri = context.extensionUri.with({ path: '/static/mount', query: undefined });
|
|
556
|
-
const disposable = vscode.workspace.registerFileSystemProvider(fsProvider_1.SCHEME, new fsProvider_1.MountsFileSystemProvider(serverUri));
|
|
557
|
-
context.subscriptions.push(disposable);
|
|
558
|
-
console.log(`vscode-test-web-support fs provider registeres for ${fsProvider_1.SCHEME}, mount ${serverUri.toString()}`);
|
|
559
|
-
}
|
|
560
|
-
exports.activate = activate;
|
|
545
|
+
|
|
546
|
+
/*---------------------------------------------------------------------------------------------
|
|
547
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
548
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
549
|
+
*--------------------------------------------------------------------------------------------*/
|
|
550
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
551
|
+
exports.activate = void 0;
|
|
552
|
+
const vscode = __webpack_require__(1);
|
|
553
|
+
const fsProvider_1 = __webpack_require__(2);
|
|
554
|
+
function activate(context) {
|
|
555
|
+
const serverUri = context.extensionUri.with({ path: '/static/mount', query: undefined });
|
|
556
|
+
const disposable = vscode.workspace.registerFileSystemProvider(fsProvider_1.SCHEME, new fsProvider_1.MountsFileSystemProvider(serverUri));
|
|
557
|
+
context.subscriptions.push(disposable);
|
|
558
|
+
console.log(`vscode-test-web-support fs provider registeres for ${fsProvider_1.SCHEME}, mount ${serverUri.toString()}`);
|
|
559
|
+
}
|
|
560
|
+
exports.activate = activate;
|
|
561
561
|
|
|
562
562
|
})();
|
|
563
563
|
|