@zenfs/dom 1.0.2 → 1.0.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/dist/IndexedDB.d.ts +7 -22
- package/dist/IndexedDB.js +7 -5
- package/dist/Storage.d.ts +5 -4
- package/dist/Storage.js +4 -1
- package/dist/access.d.ts +4 -18
- package/dist/access.js +56 -66
- package/dist/devices/dsp.d.ts +6 -0
- package/dist/devices/dsp.js +55 -0
- package/dist/devices/framebuffer.d.ts +5 -0
- package/dist/devices/framebuffer.js +30 -0
- package/dist/devices/index.d.ts +2 -0
- package/dist/devices/index.js +2 -0
- package/package.json +7 -3
package/dist/IndexedDB.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { AsyncTransaction, StoreFS } from '@zenfs/core';
|
|
1
|
+
import type { SharedConfig, Store } from '@zenfs/core';
|
|
2
|
+
import { Async, AsyncTransaction, StoreFS } from '@zenfs/core';
|
|
3
3
|
/**
|
|
4
4
|
* @hidden
|
|
5
5
|
*/
|
|
@@ -8,9 +8,10 @@ export declare class IndexedDBTransaction extends AsyncTransaction<IndexedDBStor
|
|
|
8
8
|
store: IndexedDBStore;
|
|
9
9
|
private _idb;
|
|
10
10
|
constructor(tx: IDBTransaction, store: IndexedDBStore);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
keys(): Promise<Iterable<bigint>>;
|
|
12
|
+
get(key: bigint): Promise<Uint8Array>;
|
|
13
|
+
set(key: bigint, data: Uint8Array): Promise<void>;
|
|
14
|
+
remove(key: bigint): Promise<void>;
|
|
14
15
|
commit(): Promise<void>;
|
|
15
16
|
abort(): Promise<void>;
|
|
16
17
|
}
|
|
@@ -45,30 +46,14 @@ declare const _IndexedDB: {
|
|
|
45
46
|
readonly storeName: {
|
|
46
47
|
readonly type: "string";
|
|
47
48
|
readonly required: false;
|
|
48
|
-
readonly description: "The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name.";
|
|
49
49
|
};
|
|
50
50
|
readonly idbFactory: {
|
|
51
51
|
readonly type: "object";
|
|
52
52
|
readonly required: false;
|
|
53
|
-
readonly description: "The IDBFactory to use. Defaults to globalThis.indexedDB.";
|
|
54
53
|
};
|
|
55
54
|
};
|
|
56
55
|
readonly isAvailable: (idbFactory?: IDBFactory) => Promise<boolean>;
|
|
57
|
-
readonly create: (options: IndexedDBOptions & Partial<SharedConfig>) => Promise<
|
|
58
|
-
_sync?: import("@zenfs/core").FileSystem;
|
|
59
|
-
queueDone(): Promise<void>;
|
|
60
|
-
ready(): Promise<void>;
|
|
61
|
-
renameSync(oldPath: string, newPath: string): void;
|
|
62
|
-
statSync(path: string): import("@zenfs/core").Stats;
|
|
63
|
-
createFileSync(path: string, flag: string, mode: number): import("@zenfs/core").File;
|
|
64
|
-
openFileSync(path: string, flag: string): import("@zenfs/core").File;
|
|
65
|
-
unlinkSync(path: string): void;
|
|
66
|
-
rmdirSync(path: string): void;
|
|
67
|
-
mkdirSync(path: string, mode: number): void;
|
|
68
|
-
readdirSync(path: string): string[];
|
|
69
|
-
linkSync(srcpath: string, dstpath: string): void;
|
|
70
|
-
syncSync(path: string, data: Uint8Array, stats: Readonly<import("@zenfs/core").Stats>): void;
|
|
71
|
-
} & StoreFS<IndexedDBStore>>;
|
|
56
|
+
readonly create: (options: IndexedDBOptions & Partial<SharedConfig>) => Promise<Async & StoreFS<IndexedDBStore>>;
|
|
72
57
|
};
|
|
73
58
|
type _IndexedDB = typeof _IndexedDB;
|
|
74
59
|
interface IndexedDB extends _IndexedDB {
|
package/dist/IndexedDB.js
CHANGED
|
@@ -19,6 +19,9 @@ export class IndexedDBTransaction extends AsyncTransaction {
|
|
|
19
19
|
this.store = store;
|
|
20
20
|
this._idb = tx.objectStore(store.name);
|
|
21
21
|
}
|
|
22
|
+
async keys() {
|
|
23
|
+
return (await wrap(this._idb.getAllKeys())).filter(k => typeof k == 'string').map(k => BigInt(k));
|
|
24
|
+
}
|
|
22
25
|
get(key) {
|
|
23
26
|
return wrap(this._idb.get(key.toString()));
|
|
24
27
|
}
|
|
@@ -94,12 +97,10 @@ const _IndexedDB = {
|
|
|
94
97
|
storeName: {
|
|
95
98
|
type: 'string',
|
|
96
99
|
required: false,
|
|
97
|
-
description: 'The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name.',
|
|
98
100
|
},
|
|
99
101
|
idbFactory: {
|
|
100
102
|
type: 'object',
|
|
101
103
|
required: false,
|
|
102
|
-
description: 'The IDBFactory to use. Defaults to globalThis.indexedDB.',
|
|
103
104
|
},
|
|
104
105
|
},
|
|
105
106
|
async isAvailable(idbFactory = globalThis.indexedDB) {
|
|
@@ -109,13 +110,14 @@ const _IndexedDB = {
|
|
|
109
110
|
}
|
|
110
111
|
const req = idbFactory.open('__zenfs_test');
|
|
111
112
|
await wrap(req);
|
|
112
|
-
idbFactory.deleteDatabase('__zenfs_test');
|
|
113
113
|
return true;
|
|
114
114
|
}
|
|
115
|
-
catch
|
|
116
|
-
idbFactory.deleteDatabase('__zenfs_test');
|
|
115
|
+
catch {
|
|
117
116
|
return false;
|
|
118
117
|
}
|
|
118
|
+
finally {
|
|
119
|
+
idbFactory.deleteDatabase('__zenfs_test');
|
|
120
|
+
}
|
|
119
121
|
},
|
|
120
122
|
async create(options) {
|
|
121
123
|
const db = await createDB(options.storeName || 'zenfs', options.idbFactory);
|
package/dist/Storage.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SimpleSyncStore, Store } from '@zenfs/core';
|
|
2
2
|
import { SimpleTransaction, StoreFS } from '@zenfs/core';
|
|
3
3
|
/**
|
|
4
4
|
* A synchronous key-value store backed by Storage.
|
|
@@ -11,9 +11,10 @@ export declare class WebStorageStore implements Store, SimpleSyncStore {
|
|
|
11
11
|
clearSync(): void;
|
|
12
12
|
sync(): Promise<void>;
|
|
13
13
|
transaction(): SimpleTransaction;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
keys(): Iterable<bigint>;
|
|
15
|
+
get(key: bigint): Uint8Array | undefined;
|
|
16
|
+
set(key: bigint, data: Uint8Array): void;
|
|
17
|
+
delete(key: bigint): void;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Options to pass to the StorageFileSystem
|
package/dist/Storage.js
CHANGED
|
@@ -20,6 +20,9 @@ export class WebStorageStore {
|
|
|
20
20
|
// No need to differentiate.
|
|
21
21
|
return new SimpleTransaction(this);
|
|
22
22
|
}
|
|
23
|
+
keys() {
|
|
24
|
+
return Object.keys(this.storage).map(k => BigInt(k));
|
|
25
|
+
}
|
|
23
26
|
get(key) {
|
|
24
27
|
const data = this.storage.getItem(key.toString());
|
|
25
28
|
if (typeof data != 'string') {
|
|
@@ -31,7 +34,7 @@ export class WebStorageStore {
|
|
|
31
34
|
try {
|
|
32
35
|
this.storage.setItem(key.toString(), decodeRaw(data));
|
|
33
36
|
}
|
|
34
|
-
catch
|
|
37
|
+
catch {
|
|
35
38
|
throw new ErrnoError(Errno.ENOSPC, 'Storage is full.');
|
|
36
39
|
}
|
|
37
40
|
}
|
package/dist/access.d.ts
CHANGED
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
import type { FileSystemMetadata } from '@zenfs/core';
|
|
2
|
-
import { FileSystem, PreloadFile, Stats } from '@zenfs/core';
|
|
2
|
+
import { Async, FileSystem, PreloadFile, Stats } from '@zenfs/core';
|
|
3
3
|
export interface WebAccessOptions {
|
|
4
4
|
handle: FileSystemDirectoryHandle;
|
|
5
5
|
}
|
|
6
|
-
declare const WebAccessFS_base: import("@zenfs/core").Mixin<typeof FileSystem,
|
|
7
|
-
_sync?: FileSystem;
|
|
8
|
-
queueDone(): Promise<void>;
|
|
9
|
-
ready(): Promise<void>;
|
|
10
|
-
renameSync(oldPath: string, newPath: string): void;
|
|
11
|
-
statSync(path: string): Stats;
|
|
12
|
-
createFileSync(path: string, flag: string, mode: number): import("@zenfs/core").File;
|
|
13
|
-
openFileSync(path: string, flag: string): import("@zenfs/core").File;
|
|
14
|
-
unlinkSync(path: string): void;
|
|
15
|
-
rmdirSync(path: string): void;
|
|
16
|
-
mkdirSync(path: string, mode: number): void;
|
|
17
|
-
readdirSync(path: string): string[];
|
|
18
|
-
linkSync(srcpath: string, dstpath: string): void;
|
|
19
|
-
syncSync(path: string, data: Uint8Array, stats: Readonly<Stats>): void;
|
|
20
|
-
}>;
|
|
6
|
+
declare const WebAccessFS_base: import("@zenfs/core").Mixin<typeof FileSystem, Async>;
|
|
21
7
|
export declare class WebAccessFS extends WebAccessFS_base {
|
|
22
8
|
private _handles;
|
|
23
9
|
/**
|
|
@@ -26,7 +12,7 @@ export declare class WebAccessFS extends WebAccessFS_base {
|
|
|
26
12
|
_sync: FileSystem;
|
|
27
13
|
constructor(handle: FileSystemDirectoryHandle);
|
|
28
14
|
metadata(): FileSystemMetadata;
|
|
29
|
-
sync(path: string, data: Uint8Array
|
|
15
|
+
sync(path: string, data: Uint8Array): Promise<void>;
|
|
30
16
|
rename(oldPath: string, newPath: string): Promise<void>;
|
|
31
17
|
writeFile(path: string, data: Uint8Array): Promise<void>;
|
|
32
18
|
createFile(path: string, flag: string): Promise<PreloadFile<this>>;
|
|
@@ -37,7 +23,7 @@ export declare class WebAccessFS extends WebAccessFS_base {
|
|
|
37
23
|
rmdir(path: string): Promise<void>;
|
|
38
24
|
mkdir(path: string): Promise<void>;
|
|
39
25
|
readdir(path: string): Promise<string[]>;
|
|
40
|
-
protected getHandle(path: string): Promise<FileSystemHandle>;
|
|
26
|
+
protected getHandle(path: string): Promise<FileSystemHandle | undefined>;
|
|
41
27
|
}
|
|
42
28
|
declare const _WebAccess: {
|
|
43
29
|
readonly name: "WebAccess";
|
package/dist/access.js
CHANGED
|
@@ -19,44 +19,40 @@ export class WebAccessFS extends Async(FileSystem) {
|
|
|
19
19
|
noResizableBuffers: true,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
async sync(path, data
|
|
23
|
-
|
|
24
|
-
if (stats.mtime !== currentStats.mtime) {
|
|
25
|
-
await this.writeFile(path, data);
|
|
26
|
-
}
|
|
22
|
+
async sync(path, data) {
|
|
23
|
+
await this.writeFile(path, data);
|
|
27
24
|
}
|
|
28
25
|
async rename(oldPath, newPath) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
await this.unlink(oldPath);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
for (const file of files) {
|
|
39
|
-
await this.rename(join(oldPath, file), join(newPath, file));
|
|
40
|
-
await this.unlink(oldPath);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (!(handle instanceof FileSystemFileHandle)) {
|
|
26
|
+
const handle = await this.getHandle(oldPath);
|
|
27
|
+
if (handle instanceof FileSystemDirectoryHandle) {
|
|
28
|
+
const files = await this.readdir(oldPath);
|
|
29
|
+
await this.mkdir(newPath);
|
|
30
|
+
if (!files.length) {
|
|
31
|
+
await this.unlink(oldPath);
|
|
45
32
|
return;
|
|
46
33
|
}
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
34
|
+
for (const file of files) {
|
|
35
|
+
await this.rename(join(oldPath, file), join(newPath, file));
|
|
36
|
+
await this.unlink(oldPath);
|
|
50
37
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
await this.unlink(oldPath);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!(handle instanceof FileSystemFileHandle)) {
|
|
41
|
+
throw new ErrnoError(Errno.ENOTSUP, 'Not a file or directory handle', oldPath, 'rename');
|
|
56
42
|
}
|
|
57
|
-
|
|
43
|
+
const oldFile = await handle.getFile().catch((ex) => {
|
|
58
44
|
throw convertException(ex, oldPath, 'rename');
|
|
45
|
+
}), destFolder = await this.getHandle(dirname(newPath));
|
|
46
|
+
if (!(destFolder instanceof FileSystemDirectoryHandle)) {
|
|
47
|
+
return;
|
|
59
48
|
}
|
|
49
|
+
const newFile = await destFolder.getFileHandle(basename(newPath), { create: true }).catch((ex) => {
|
|
50
|
+
throw convertException(ex, newPath, 'rename');
|
|
51
|
+
});
|
|
52
|
+
const writable = await newFile.createWritable();
|
|
53
|
+
await writable.write(await oldFile.arrayBuffer());
|
|
54
|
+
await writable.close();
|
|
55
|
+
await this.unlink(oldPath);
|
|
60
56
|
}
|
|
61
57
|
async writeFile(path, data) {
|
|
62
58
|
if (data.buffer.resizable) {
|
|
@@ -94,35 +90,35 @@ export class WebAccessFS extends Async(FileSystem) {
|
|
|
94
90
|
if (!(handle instanceof FileSystemFileHandle)) {
|
|
95
91
|
throw ErrnoError.With('EISDIR', path, 'openFile');
|
|
96
92
|
}
|
|
97
|
-
|
|
98
|
-
const file = await handle.getFile();
|
|
99
|
-
const data = new Uint8Array(await file.arrayBuffer());
|
|
100
|
-
const stats = new Stats({ mode: 0o777 | S_IFREG, size: file.size, mtimeMs: file.lastModified });
|
|
101
|
-
return new PreloadFile(this, path, flag, stats, data);
|
|
102
|
-
}
|
|
103
|
-
catch (ex) {
|
|
93
|
+
const file = await handle.getFile().catch((ex) => {
|
|
104
94
|
throw convertException(ex, path, 'openFile');
|
|
105
|
-
}
|
|
95
|
+
});
|
|
96
|
+
const data = new Uint8Array(await file.arrayBuffer());
|
|
97
|
+
const stats = new Stats({ mode: 0o777 | S_IFREG, size: file.size, mtimeMs: file.lastModified });
|
|
98
|
+
return new PreloadFile(this, path, flag, stats, data);
|
|
106
99
|
}
|
|
107
100
|
async unlink(path) {
|
|
108
101
|
const handle = await this.getHandle(dirname(path));
|
|
109
|
-
if (handle instanceof FileSystemDirectoryHandle) {
|
|
110
|
-
|
|
111
|
-
await handle.removeEntry(basename(path), { recursive: true });
|
|
112
|
-
}
|
|
113
|
-
catch (ex) {
|
|
114
|
-
throw convertException(ex, path, 'unlink');
|
|
115
|
-
}
|
|
102
|
+
if (!(handle instanceof FileSystemDirectoryHandle)) {
|
|
103
|
+
throw ErrnoError.With('ENOTDIR', dirname(path), 'unlink');
|
|
116
104
|
}
|
|
105
|
+
await handle.removeEntry(basename(path), { recursive: true }).catch((ex) => {
|
|
106
|
+
throw convertException(ex, path, 'unlink');
|
|
107
|
+
});
|
|
117
108
|
}
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
118
110
|
async link(srcpath) {
|
|
119
|
-
|
|
111
|
+
return;
|
|
120
112
|
}
|
|
121
113
|
async rmdir(path) {
|
|
122
114
|
return this.unlink(path);
|
|
123
115
|
}
|
|
124
116
|
async mkdir(path) {
|
|
125
|
-
const existingHandle = await this.getHandle(path)
|
|
117
|
+
const existingHandle = await this.getHandle(path).catch((ex) => {
|
|
118
|
+
if (ex.code != 'ENOENT') {
|
|
119
|
+
throw ex;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
126
122
|
if (existingHandle) {
|
|
127
123
|
throw ErrnoError.With('EEXIST', path, 'mkdir');
|
|
128
124
|
}
|
|
@@ -154,26 +150,20 @@ export class WebAccessFS extends Async(FileSystem) {
|
|
|
154
150
|
throw ErrnoError.With('ENOTDIR', walked, 'getHandle');
|
|
155
151
|
}
|
|
156
152
|
walked = join(walked, part);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
catch (ex) {
|
|
169
|
-
convertException(ex, walked, 'getHandle');
|
|
170
|
-
}
|
|
153
|
+
const child = await handle.getDirectoryHandle(part).catch((ex) => {
|
|
154
|
+
switch (ex.name) {
|
|
155
|
+
case 'TypeMismatchError':
|
|
156
|
+
return handle.getFileHandle(part).catch((ex) => {
|
|
157
|
+
//throw convertException(ex, walked, 'getHandle');
|
|
158
|
+
});
|
|
159
|
+
case 'TypeError':
|
|
160
|
+
throw new ErrnoError(Errno.ENOENT, ex.message, walked, 'getHandle');
|
|
161
|
+
default:
|
|
162
|
+
throw convertException(ex, walked, 'getHandle');
|
|
171
163
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
convertException(ex, walked, 'getHandle');
|
|
176
|
-
}
|
|
164
|
+
});
|
|
165
|
+
if (child)
|
|
166
|
+
this._handles.set(walked, child);
|
|
177
167
|
}
|
|
178
168
|
return this._handles.get(path);
|
|
179
169
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import './audioworklet.d.ts';
|
|
2
|
+
if ('AudioWorkletProcessor' in globalThis) {
|
|
3
|
+
class Dsp extends AudioWorkletProcessor {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
this.port.onmessage = ({ data }) => {
|
|
7
|
+
this.buffer = new Float32Array(data);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
process(inputs, outputs) {
|
|
11
|
+
if (this.buffer && this.buffer.byteLength >= 128) {
|
|
12
|
+
outputs[0][0].set(this.buffer.slice(0, 128));
|
|
13
|
+
this.buffer = this.buffer.slice(128);
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
static get parameterDescriptors() {
|
|
18
|
+
return [
|
|
19
|
+
{
|
|
20
|
+
name: 'gain',
|
|
21
|
+
defaultValue: 1,
|
|
22
|
+
minValue: 0,
|
|
23
|
+
maxValue: 1,
|
|
24
|
+
automationRate: 'a-rate',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
registerProcessor('zenfs:dsp', Dsp);
|
|
30
|
+
}
|
|
31
|
+
export async function dsp(options = {}) {
|
|
32
|
+
const context = options.audioContext || new AudioContext();
|
|
33
|
+
await context.audioWorklet.addModule(import.meta.url);
|
|
34
|
+
const dsp = new AudioWorkletNode(context, 'zenfs:dsp');
|
|
35
|
+
dsp.connect(context.destination);
|
|
36
|
+
// add a click-handler to resume (due to web security) https://goo.gl/7K7WLu
|
|
37
|
+
document.addEventListener('click', () => {
|
|
38
|
+
if (context.state != 'running') {
|
|
39
|
+
void context.resume().catch(() => { });
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
name: 'dsp',
|
|
44
|
+
init() {
|
|
45
|
+
return { data: dsp, major: 14, minor: 3 };
|
|
46
|
+
},
|
|
47
|
+
read() {
|
|
48
|
+
return 0;
|
|
49
|
+
},
|
|
50
|
+
write(file, data) {
|
|
51
|
+
dsp.port.postMessage(data.buffer);
|
|
52
|
+
return data.byteLength;
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* Credit: David Konsumer */
|
|
2
|
+
import { Errno, ErrnoError } from '@zenfs/core';
|
|
3
|
+
let framebufferN = 0;
|
|
4
|
+
export function framebuffer({ canvas } = {}) {
|
|
5
|
+
if (!canvas) {
|
|
6
|
+
canvas = document.createElement('canvas');
|
|
7
|
+
document.body.appendChild(canvas);
|
|
8
|
+
}
|
|
9
|
+
const ctx = canvas.getContext('2d');
|
|
10
|
+
if (!ctx) {
|
|
11
|
+
throw new ErrnoError(Errno.EIO, 'Could not get context from canvas whilst initializing frame buffer.');
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
name: 'framebuffer',
|
|
15
|
+
init() {
|
|
16
|
+
return { data: ctx, major: 29, minor: framebufferN++ };
|
|
17
|
+
},
|
|
18
|
+
read() {
|
|
19
|
+
return 0;
|
|
20
|
+
},
|
|
21
|
+
write(file, data) {
|
|
22
|
+
if (data.byteLength < 4 * canvas.width * canvas.height) {
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
const imageData = new ImageData(new Uint8ClampedArray(data), canvas.width, canvas.height);
|
|
26
|
+
ctx.putImageData(imageData, 0, 0);
|
|
27
|
+
return data.byteLength;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenfs/dom",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "DOM backends for ZenFS",
|
|
5
5
|
"funding": {
|
|
6
6
|
"type": "individual",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"type": "module",
|
|
12
12
|
"homepage": "https://github.com/zen-fs/dom",
|
|
13
13
|
"author": "James Prevett <jp@jamespre.dev> (https://jamespre.dev)",
|
|
14
|
+
"contributors": [
|
|
15
|
+
"David Konsumer <konsumer@jetboystudio.com>"
|
|
16
|
+
],
|
|
14
17
|
"license": "MIT",
|
|
15
18
|
"repository": {
|
|
16
19
|
"type": "git",
|
|
@@ -29,7 +32,8 @@
|
|
|
29
32
|
},
|
|
30
33
|
"exports": {
|
|
31
34
|
".": "./dist/index.js",
|
|
32
|
-
"./*": "./dist/*"
|
|
35
|
+
"./*": "./dist/*",
|
|
36
|
+
"./devices": "./dist/devices.js"
|
|
33
37
|
},
|
|
34
38
|
"scripts": {
|
|
35
39
|
"format": "prettier --write .",
|
|
@@ -51,7 +55,7 @@
|
|
|
51
55
|
"typescript-eslint": "^8.8.1"
|
|
52
56
|
},
|
|
53
57
|
"peerDependencies": {
|
|
54
|
-
"@zenfs/core": "^1.
|
|
58
|
+
"@zenfs/core": "^1.3.0"
|
|
55
59
|
},
|
|
56
60
|
"optionalDependencies": {
|
|
57
61
|
"fake-indexeddb": "^6.0.0",
|