@jupyterlite/services 0.7.3 → 0.7.4
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/lib/contents/drivecontents.js +12 -7
- package/lib/contents/drivecontents.js.map +1 -1
- package/lib/contents/emscripten.d.ts +5 -1
- package/lib/contents/emscripten.js +11 -0
- package/lib/contents/emscripten.js.map +1 -1
- package/package.json +8 -8
- package/src/contents/drivecontents.ts +13 -7
- package/src/contents/emscripten.ts +15 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PathExt } from '@jupyterlab/coreutils';
|
|
2
2
|
import { BLOCK_SIZE } from './drivefs';
|
|
3
|
-
import { DIR_MODE, FILE_MODE } from './emscripten';
|
|
3
|
+
import { isDirMode, DIR_MODE, FILE_MODE } from './emscripten';
|
|
4
4
|
/**
|
|
5
5
|
* Class for processing a drive request from the DriveFS.
|
|
6
6
|
*/
|
|
@@ -73,12 +73,17 @@ export class DriveContentsProcessor {
|
|
|
73
73
|
return response;
|
|
74
74
|
}
|
|
75
75
|
async mknod(request) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
// Contents API does not permit creating folders with given name. We can only create untitled folder then rename.
|
|
77
|
+
if (isDirMode(request.data.mode)) {
|
|
78
|
+
const model = await this.contentsManager.newUntitled({
|
|
79
|
+
path: PathExt.dirname(request.path),
|
|
80
|
+
type: 'directory',
|
|
81
|
+
ext: PathExt.extname(request.path),
|
|
82
|
+
});
|
|
83
|
+
await this.contentsManager.rename(model.path, request.path);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
await this.contentsManager.save(request.path, { type: 'file' });
|
|
82
87
|
return null;
|
|
83
88
|
}
|
|
84
89
|
async getattr(request) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drivecontents.js","sourceRoot":"","sources":["../../src/contents/drivecontents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"drivecontents.js","sourceRoot":"","sources":["../../src/contents/drivecontents.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,11 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Ideally, much more of these would be taken from `@types/emscripten`.
|
|
5
5
|
*/
|
|
6
|
-
type EmscriptenFS = typeof
|
|
6
|
+
type EmscriptenFS = typeof globalThis extends {
|
|
7
|
+
FS: infer T;
|
|
8
|
+
} ? T : Record<string, any>;
|
|
7
9
|
export declare const DIR_MODE = 16895;
|
|
8
10
|
export declare const FILE_MODE = 33206;
|
|
9
11
|
export declare const SEEK_CUR = 1;
|
|
10
12
|
export declare const SEEK_END = 2;
|
|
13
|
+
export declare function isDirMode(mode: number): boolean;
|
|
14
|
+
export declare function isFileMode(mode: number): boolean;
|
|
11
15
|
export interface IStats {
|
|
12
16
|
dev: number;
|
|
13
17
|
ino?: number;
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
// Copyright (c) Jupyter Development Team.
|
|
2
2
|
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
// Those constants are standard that is very unlikely to change
|
|
4
|
+
// https://github.com/bminor/glibc/blob/04e750e75b73957cf1c791535a3f4319534a52fc/bits/stat.h#L66
|
|
5
|
+
const S_IFMT = 0o170000;
|
|
6
|
+
const S_IFDIR = 0o040000;
|
|
7
|
+
const S_IFREG = 0o100000;
|
|
3
8
|
export const DIR_MODE = 16895; // 040777
|
|
4
9
|
export const FILE_MODE = 33206; // 100666
|
|
5
10
|
export const SEEK_CUR = 1;
|
|
6
11
|
export const SEEK_END = 2;
|
|
12
|
+
export function isDirMode(mode) {
|
|
13
|
+
return (mode & S_IFMT) === S_IFDIR;
|
|
14
|
+
}
|
|
15
|
+
export function isFileMode(mode) {
|
|
16
|
+
return (mode & S_IFMT) === S_IFREG;
|
|
17
|
+
}
|
|
7
18
|
export function instanceOfStream(nodeOrStream) {
|
|
8
19
|
return 'node' in nodeOrStream;
|
|
9
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emscripten.js","sourceRoot":"","sources":["../../src/contents/emscripten.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAgB3D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"emscripten.js","sourceRoot":"","sources":["../../src/contents/emscripten.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAgB3D,+DAA+D;AAC/D,gGAAgG;AAChG,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,OAAO,GAAG,QAAQ,CAAC;AACzB,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,OAAO,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,OAAO,CAAC;AACrC,CAAC;AA4CD,MAAM,UAAU,gBAAgB,CAC9B,YAAmD;IAEnD,OAAO,MAAM,IAAI,YAAY,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlite/services",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.4",
|
|
4
4
|
"description": "JupyterLite - Services",
|
|
5
5
|
"homepage": "https://github.com/jupyterlite/jupyterlite",
|
|
6
6
|
"bugs": {
|
|
@@ -46,12 +46,12 @@
|
|
|
46
46
|
"watch": "tsc -b --watch"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@jupyterlab/coreutils": "~6.5.
|
|
50
|
-
"@jupyterlab/nbformat": "~4.5.
|
|
51
|
-
"@jupyterlab/observables": "~5.5.
|
|
52
|
-
"@jupyterlab/services": "~7.5.
|
|
53
|
-
"@jupyterlab/settingregistry": "~4.5.
|
|
54
|
-
"@jupyterlite/localforage": "^0.7.
|
|
49
|
+
"@jupyterlab/coreutils": "~6.5.6",
|
|
50
|
+
"@jupyterlab/nbformat": "~4.5.6",
|
|
51
|
+
"@jupyterlab/observables": "~5.5.6",
|
|
52
|
+
"@jupyterlab/services": "~7.5.6",
|
|
53
|
+
"@jupyterlab/settingregistry": "~4.5.6",
|
|
54
|
+
"@jupyterlite/localforage": "^0.7.4",
|
|
55
55
|
"@lumino/algorithm": "^2.0.4",
|
|
56
56
|
"@lumino/coreutils": "^2.2.2",
|
|
57
57
|
"@lumino/disposable": "^2.1.5",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@babel/core": "^7.11.6",
|
|
69
69
|
"@babel/preset-env": "^7.12.1",
|
|
70
|
-
"@jupyterlab/testutils": "~4.5.
|
|
70
|
+
"@jupyterlab/testutils": "~4.5.6",
|
|
71
71
|
"@types/jest": "^29.5.3",
|
|
72
72
|
"@types/mime": "^2.0.3",
|
|
73
73
|
"jest": "^29.6.2",
|
|
@@ -2,7 +2,7 @@ import { PathExt } from '@jupyterlab/coreutils';
|
|
|
2
2
|
import type { Contents } from '@jupyterlab/services';
|
|
3
3
|
import type { TDriveMethod, TDriveRequest, TDriveResponse } from './drivefs';
|
|
4
4
|
import { BLOCK_SIZE } from './drivefs';
|
|
5
|
-
import { DIR_MODE, FILE_MODE } from './emscripten';
|
|
5
|
+
import { isDirMode, DIR_MODE, FILE_MODE } from './emscripten';
|
|
6
6
|
|
|
7
7
|
export interface IDriveContentsProcessor {
|
|
8
8
|
/**
|
|
@@ -176,12 +176,18 @@ export class DriveContentsProcessor implements IDriveContentsProcessor {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
async mknod(request: TDriveRequest<'mknod'>): Promise<TDriveResponse<'mknod'>> {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
179
|
+
// Contents API does not permit creating folders with given name. We can only create untitled folder then rename.
|
|
180
|
+
if (isDirMode(request.data.mode)) {
|
|
181
|
+
const model = await this.contentsManager.newUntitled({
|
|
182
|
+
path: PathExt.dirname(request.path),
|
|
183
|
+
type: 'directory',
|
|
184
|
+
ext: PathExt.extname(request.path),
|
|
185
|
+
});
|
|
186
|
+
await this.contentsManager.rename(model.path, request.path);
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
await this.contentsManager.save(request.path, { type: 'file' });
|
|
185
191
|
return null;
|
|
186
192
|
}
|
|
187
193
|
|
|
@@ -13,13 +13,27 @@
|
|
|
13
13
|
* Ideally, much more of these would be taken from `@types/emscripten`.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
type EmscriptenFS = typeof FS
|
|
16
|
+
type EmscriptenFS = typeof globalThis extends { FS: infer T } ? T : Record<string, any>;
|
|
17
|
+
|
|
18
|
+
// Those constants are standard that is very unlikely to change
|
|
19
|
+
// https://github.com/bminor/glibc/blob/04e750e75b73957cf1c791535a3f4319534a52fc/bits/stat.h#L66
|
|
20
|
+
const S_IFMT = 0o170000;
|
|
21
|
+
const S_IFDIR = 0o040000;
|
|
22
|
+
const S_IFREG = 0o100000;
|
|
17
23
|
|
|
18
24
|
export const DIR_MODE = 16895; // 040777
|
|
19
25
|
export const FILE_MODE = 33206; // 100666
|
|
20
26
|
export const SEEK_CUR = 1;
|
|
21
27
|
export const SEEK_END = 2;
|
|
22
28
|
|
|
29
|
+
export function isDirMode(mode: number): boolean {
|
|
30
|
+
return (mode & S_IFMT) === S_IFDIR;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function isFileMode(mode: number): boolean {
|
|
34
|
+
return (mode & S_IFMT) === S_IFREG;
|
|
35
|
+
}
|
|
36
|
+
|
|
23
37
|
export interface IStats {
|
|
24
38
|
dev: number;
|
|
25
39
|
ino?: number;
|