@e280/quay 0.0.0-17 → 0.0.0-19
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/README.md +8 -4
- package/package.json +6 -4
- package/s/cellar/cask.ts +0 -18
- package/s/cellar/cellar.test.ts +19 -38
- package/s/cellar/cellar.ts +16 -20
- package/s/cellar/index.ts +0 -4
- package/s/cellar/mammoth.ts +50 -0
- package/s/cellar/mammoth.worker.bundle.ts +30 -0
- package/s/genius/parts/hy-tree.ts +10 -9
- package/s/logic/presets/media/library.test.ts +2 -3
- package/s/logic/presets/media/library.ts +84 -14
- package/s/logic/presets/media/schema.ts +6 -0
- package/x/cellar/cask.d.ts +0 -2
- package/x/cellar/cask.js +0 -13
- package/x/cellar/cask.js.map +1 -1
- package/x/cellar/cellar.d.ts +9 -7
- package/x/cellar/cellar.js +17 -22
- package/x/cellar/cellar.js.map +1 -1
- package/x/cellar/cellar.test.d.ts +2 -3
- package/x/cellar/cellar.test.js +19 -35
- package/x/cellar/cellar.test.js.map +1 -1
- package/x/cellar/index.d.ts +0 -3
- package/x/cellar/index.js +0 -3
- package/x/cellar/index.js.map +1 -1
- package/x/cellar/mammoth.d.ts +23 -0
- package/x/cellar/mammoth.js +34 -0
- package/x/cellar/mammoth.js.map +1 -0
- package/x/cellar/mammoth.worker.bundle.d.ts +1 -0
- package/x/cellar/mammoth.worker.bundle.js +20 -0
- package/x/cellar/mammoth.worker.bundle.js.map +1 -0
- package/x/cellar/mammoth.worker.bundle.min.js +8 -0
- package/x/cellar/mammoth.worker.bundle.min.js.map +7 -0
- package/x/demo/main.bundle.min.js +43 -43
- package/x/demo/main.bundle.min.js.map +4 -4
- package/x/genius/parts/hy-tree.js +9 -8
- package/x/genius/parts/hy-tree.js.map +1 -1
- package/x/index.html +2 -2
- package/x/logic/presets/media/library.d.ts +4 -2
- package/x/logic/presets/media/library.js +71 -12
- package/x/logic/presets/media/library.js.map +1 -1
- package/x/logic/presets/media/library.test.d.ts +1 -1
- package/x/logic/presets/media/library.test.js +2 -2
- package/x/logic/presets/media/library.test.js.map +1 -1
- package/x/logic/presets/media/schema.d.ts +6 -0
- package/s/cellar/forklift.ts +0 -9
- package/s/cellar/memory-forklift.ts +0 -30
- package/s/cellar/opfs-forklift.ts +0 -47
- package/x/cellar/forklift.d.ts +0 -7
- package/x/cellar/forklift.js +0 -2
- package/x/cellar/forklift.js.map +0 -1
- package/x/cellar/memory-forklift.d.ts +0 -9
- package/x/cellar/memory-forklift.js +0 -22
- package/x/cellar/memory-forklift.js.map +0 -1
- package/x/cellar/opfs-forklift.d.ts +0 -11
- package/x/cellar/opfs-forklift.js +0 -42
- package/x/cellar/opfs-forklift.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { collect } from "@e280/
|
|
1
|
+
import { collect } from "@e280/stz";
|
|
2
2
|
/**
|
|
3
3
|
* Async hierarchy of nestable items.
|
|
4
4
|
* - items can have multiple children.
|
|
@@ -21,7 +21,7 @@ export class HyTree {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
async gets(...ids) {
|
|
24
|
-
const records = await this.records.
|
|
24
|
+
const records = await this.records.getMany(ids);
|
|
25
25
|
return records.map(r => {
|
|
26
26
|
if (!r)
|
|
27
27
|
return undefined;
|
|
@@ -30,12 +30,12 @@ export class HyTree {
|
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
async require(id) {
|
|
33
|
-
const record = await this.records.
|
|
33
|
+
const record = await this.records.need(id);
|
|
34
34
|
const [parent, children] = record;
|
|
35
35
|
return { parent, children };
|
|
36
36
|
}
|
|
37
37
|
async requires(...ids) {
|
|
38
|
-
const records = await this.records.
|
|
38
|
+
const records = await this.records.needMany(ids);
|
|
39
39
|
return records.map(([parent, children]) => ({ parent, children }));
|
|
40
40
|
}
|
|
41
41
|
/** establish an id as a root with no parents, but ready to accept children */
|
|
@@ -61,9 +61,10 @@ export class HyTree {
|
|
|
61
61
|
siblings.add(id);
|
|
62
62
|
}
|
|
63
63
|
// save all new children
|
|
64
|
-
await this.records.
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
await this.records.commit([
|
|
65
|
+
...newcomers.map(([id, record]) => this.records.op.set(id, record)),
|
|
66
|
+
this.records.op.set(parent, [parentItem.parent, [...siblings]]),
|
|
67
|
+
]);
|
|
67
68
|
}
|
|
68
69
|
/** detach this id from its parent in the hierarchy */
|
|
69
70
|
async detach(id) {
|
|
@@ -85,7 +86,7 @@ export class HyTree {
|
|
|
85
86
|
await this.detach(id);
|
|
86
87
|
const tree = await collect(this.crawl(id));
|
|
87
88
|
const ids = tree.map(({ id }) => id);
|
|
88
|
-
await this.records.
|
|
89
|
+
await this.records.commit(ids.map(id => this.records.op.delete(id)));
|
|
89
90
|
}
|
|
90
91
|
/** delete absolutely everything */
|
|
91
92
|
async clear() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hy-tree.js","sourceRoot":"","sources":["../../../s/genius/parts/hy-tree.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"hy-tree.js","sourceRoot":"","sources":["../../../s/genius/parts/hy-tree.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAOjC;;;;;GAKG;AACH,MAAM,OAAO,MAAM;IACE;IAApB,YAAoB,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAE7C,KAAK,CAAC,GAAG,CAAC,EAAQ;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAQ;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACzC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAA;YACjC,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAA;QAC1B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,GAAW;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAA;YACxB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5B,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAQ;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAA;QACjC,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAW;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAChD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,aAAa,CAAC,IAAU;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,MAAM,CAAC,MAAY,EAAE,GAAG,QAAgB;QAC7C,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAuB,EAAE,CAAA;QAExC,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAEjC,wBAAwB;YACxB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAEpE,6CAA6C;;gBACxC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;YAEvC,sBAAsB;YACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;QAED,wBAAwB;QACxB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACzB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;SAC/D,CAAC,CAAA;IACH,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,MAAM,CAAC,EAAQ;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAE3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAEnB,0CAA0C;YAC1C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEvE,kCAAkC;YAClC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClD,CAAC;IACF,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,OAAO,CAAC,EAAQ;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,KAAK;QACV,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,CAAC,KAAK;QACX,IAAI,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAClE,IAAI,MAAM,KAAK,IAAI;gBAClB,MAAM,EAAC,EAAE,EAAE,IAAI,EAAE,EAAC,MAAM,EAAE,QAAQ,EAAC,EAA6B,CAAA;IACnE,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,CAAC,KAAK,CACV,EAAQ,EACR,YAA0D,KAAK,IAAG,EAAE,CAAC,IAAI;QAG1E,MAAM,IAAI,GAAiC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAQ,CAAA;QAE5B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAG,CAAA;YAChC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;gBAAE,SAAQ;YACxD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACnC,MAAM,EAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAA2C,CAAA;YAEhE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAClC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;IACF,CAAC;CACD"}
|
package/x/index.html
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
<link rel="stylesheet" href="demo/main.css?v=c15dc8e40513"/>
|
|
21
|
-
<script type="module" src="demo/main.bundle.min.js?v=
|
|
21
|
+
<script type="module" src="demo/main.bundle.min.js?v=070c4ac9ec8b"></script>
|
|
22
22
|
|
|
23
23
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.20.0/cdn/themes/dark.css"/>
|
|
24
24
|
<!-- loading every shoelace component for now (should be cherry picked instead) -->
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<img alt="" src="/assets/favicon.png"/>
|
|
30
30
|
<div>
|
|
31
31
|
<h1>Quay</h1>
|
|
32
|
-
<span class=version>v0.0.0-
|
|
32
|
+
<span class=version>v0.0.0-19</span>
|
|
33
33
|
</div>
|
|
34
34
|
</header>
|
|
35
35
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MediaGroup } from "./group.js";
|
|
2
2
|
import { Cellar } from "../../../cellar/cellar.js";
|
|
3
|
-
import { MediaFormat } from "./schema.js";
|
|
3
|
+
import { MediaFormat, MediaProgress } from "./schema.js";
|
|
4
4
|
import { CodexItem } from "../../aspects/codex/parts/codex-item.js";
|
|
5
5
|
export type MediaRecord = {
|
|
6
6
|
hash: string;
|
|
@@ -14,8 +14,10 @@ export type MediaRecord = {
|
|
|
14
14
|
export declare class MediaLibrary extends MediaGroup {
|
|
15
15
|
#private;
|
|
16
16
|
static open(scope?: string): Promise<MediaLibrary>;
|
|
17
|
+
progress: import("@e280/stz").Sub<[MediaProgress]>;
|
|
17
18
|
cellar: Cellar;
|
|
18
19
|
constructor();
|
|
20
|
+
scope(name: string): Promise<MediaLibrary>;
|
|
19
21
|
records(): AsyncGenerator<MediaRecord, void, unknown>;
|
|
20
22
|
findByHash(hash: string): (CodexItem<{
|
|
21
23
|
taxon: {
|
|
@@ -34,7 +36,7 @@ export declare class MediaLibrary extends MediaGroup {
|
|
|
34
36
|
size?: number;
|
|
35
37
|
};
|
|
36
38
|
};
|
|
37
|
-
}, "
|
|
39
|
+
}, "folder" | "file"> & CodexItem<{
|
|
38
40
|
taxon: {
|
|
39
41
|
icon: import("@e280/sly").Content;
|
|
40
42
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { collect, sub } from "@e280/stz";
|
|
2
|
+
import { Kv, StorageMagazine } from "@e280/kv";
|
|
2
3
|
import { MediaGroup } from "./group.js";
|
|
3
4
|
import { Cellar } from "../../../cellar/cellar.js";
|
|
4
5
|
export class MediaLibrary extends MediaGroup {
|
|
@@ -6,15 +7,20 @@ export class MediaLibrary extends MediaGroup {
|
|
|
6
7
|
const group = new this();
|
|
7
8
|
group.cellar = await Cellar.opfs("media");
|
|
8
9
|
group.#index = mediaIndex(scope);
|
|
10
|
+
group.#lineage = [group.#index];
|
|
9
11
|
await group.#load();
|
|
10
12
|
return group;
|
|
11
13
|
}
|
|
12
|
-
#objectUrls = new Map();
|
|
13
14
|
#index;
|
|
15
|
+
#lineage;
|
|
16
|
+
#root = this;
|
|
17
|
+
#objectUrls = new Map();
|
|
18
|
+
progress = sub();
|
|
14
19
|
cellar = new Cellar();
|
|
15
20
|
constructor() {
|
|
16
21
|
super();
|
|
17
22
|
this.#index = mediaIndex("default");
|
|
23
|
+
this.#lineage = [this.#index];
|
|
18
24
|
this.on.upload.sub(({ files, target }) => {
|
|
19
25
|
return this.#upload(files, target);
|
|
20
26
|
});
|
|
@@ -23,6 +29,18 @@ export class MediaLibrary extends MediaGroup {
|
|
|
23
29
|
return this.#delete(hashes);
|
|
24
30
|
});
|
|
25
31
|
}
|
|
32
|
+
get #isRoot() {
|
|
33
|
+
return this === this.#root;
|
|
34
|
+
}
|
|
35
|
+
async scope(name) {
|
|
36
|
+
const child = new MediaLibrary();
|
|
37
|
+
child.cellar = this.cellar;
|
|
38
|
+
child.#index = this.#index.scope(name);
|
|
39
|
+
child.#lineage = [...this.#lineage, child.#index];
|
|
40
|
+
child.#root = this.#root;
|
|
41
|
+
await child.#load();
|
|
42
|
+
return child;
|
|
43
|
+
}
|
|
26
44
|
async *records() {
|
|
27
45
|
for await (const [, record] of this.#index.entries())
|
|
28
46
|
yield record;
|
|
@@ -38,11 +56,37 @@ export class MediaLibrary extends MediaGroup {
|
|
|
38
56
|
await Promise.all(files.map(file => this.#storeFile(file, parent)));
|
|
39
57
|
}
|
|
40
58
|
async #storeFile(file, parent) {
|
|
41
|
-
const
|
|
42
|
-
|
|
59
|
+
const item = this.#attachPending(file, parent);
|
|
60
|
+
try {
|
|
61
|
+
const hash = await this.cellar.write(trackProgress(file.stream(), loaded => this.progress.pub({ item, loaded, total: file.size })));
|
|
62
|
+
const record = await this.#saveRecord(file, hash);
|
|
63
|
+
item.destroy();
|
|
64
|
+
this.#attachRecord(record, parent);
|
|
65
|
+
return record;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
item.destroy();
|
|
69
|
+
this.on.refresh.pub({});
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
#attachPending(file, parent) {
|
|
74
|
+
const item = this.config.codex.create("file", {
|
|
75
|
+
label: file.name,
|
|
76
|
+
format: mediaFormat(file.type),
|
|
77
|
+
mime: file.type,
|
|
78
|
+
size: file.size,
|
|
79
|
+
previewUrl: null,
|
|
80
|
+
});
|
|
81
|
+
parent.attach(item);
|
|
82
|
+
this.on.refresh.pub({});
|
|
83
|
+
return item;
|
|
84
|
+
}
|
|
85
|
+
async #saveRecord(file, hash) {
|
|
86
|
+
const existing = await this.#index.get(hash) ?? await this.#root.#index.get(hash);
|
|
43
87
|
const now = Date.now();
|
|
44
88
|
const record = {
|
|
45
|
-
hash
|
|
89
|
+
hash,
|
|
46
90
|
label: existing?.label ?? file.name,
|
|
47
91
|
format: mediaFormat(file.type),
|
|
48
92
|
mime: file.type,
|
|
@@ -50,10 +94,9 @@ export class MediaLibrary extends MediaGroup {
|
|
|
50
94
|
createdAt: existing?.createdAt ?? now,
|
|
51
95
|
updatedAt: now,
|
|
52
96
|
};
|
|
53
|
-
await this.#index.set(
|
|
97
|
+
await this.#index.commit(this.#lineage.map(index => index.op.set(hash, record)));
|
|
54
98
|
if (record.format === "image")
|
|
55
|
-
this.#setPreview(
|
|
56
|
-
this.#attachRecord(record, parent);
|
|
99
|
+
this.#setPreview(hash, URL.createObjectURL(file));
|
|
57
100
|
return record;
|
|
58
101
|
}
|
|
59
102
|
#hashes(items) {
|
|
@@ -62,10 +105,15 @@ export class MediaLibrary extends MediaGroup {
|
|
|
62
105
|
.filter((hash) => !!hash);
|
|
63
106
|
}
|
|
64
107
|
async #delete(hashes) {
|
|
108
|
+
const index = this.#index.crush();
|
|
109
|
+
const keys = (await collect(index.entries()))
|
|
110
|
+
.filter(([, record]) => hashes.includes(record.hash))
|
|
111
|
+
.map(([key]) => key);
|
|
112
|
+
await index.commit(keys.map(key => index.op.delete(key)));
|
|
65
113
|
for (const hash of hashes) {
|
|
66
|
-
await this.#index.del(hash);
|
|
67
|
-
await this.cellar.delete(hash);
|
|
68
114
|
this.#revokePreview(hash);
|
|
115
|
+
if (this.#isRoot)
|
|
116
|
+
await this.cellar.delete(hash);
|
|
69
117
|
}
|
|
70
118
|
}
|
|
71
119
|
findByHash(hash) {
|
|
@@ -121,8 +169,9 @@ function mediaFormat(mime) {
|
|
|
121
169
|
function mediaIndex(scope) {
|
|
122
170
|
const storage = globalThis.localStorage;
|
|
123
171
|
if (storage)
|
|
124
|
-
return new Kv(new
|
|
125
|
-
.scope("quay
|
|
172
|
+
return new Kv(new StorageMagazine(storage))
|
|
173
|
+
.scope("quay")
|
|
174
|
+
.scope("media")
|
|
126
175
|
.scope(scope);
|
|
127
176
|
const existing = memoryIndexes.get(scope);
|
|
128
177
|
if (existing)
|
|
@@ -131,4 +180,14 @@ function mediaIndex(scope) {
|
|
|
131
180
|
memoryIndexes.set(scope, index);
|
|
132
181
|
return index;
|
|
133
182
|
}
|
|
183
|
+
function trackProgress(readable, onProgress) {
|
|
184
|
+
let loaded = 0;
|
|
185
|
+
return readable.pipeThrough(new TransformStream({
|
|
186
|
+
transform(chunk, controller) {
|
|
187
|
+
loaded += chunk.byteLength;
|
|
188
|
+
onProgress(loaded);
|
|
189
|
+
controller.enqueue(chunk);
|
|
190
|
+
},
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
134
193
|
//# sourceMappingURL=library.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/library.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/library.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ declare const _default: {
|
|
|
3
3
|
"uploads files into cellar and index": Science.Test;
|
|
4
4
|
"upload respects upload permission": Science.Test;
|
|
5
5
|
"lists media records": Science.Test;
|
|
6
|
-
"
|
|
6
|
+
"root deletion removes media records and resources": Science.Test;
|
|
7
7
|
};
|
|
8
8
|
export default _default;
|
|
@@ -23,14 +23,14 @@ export default Science.suite({
|
|
|
23
23
|
await store.upload([file("image.png", "image", "image/png")], store.config.root);
|
|
24
24
|
expect(await recordByLabel(store, "image.png")).ok();
|
|
25
25
|
}),
|
|
26
|
-
"
|
|
26
|
+
"root deletion removes media records and resources": test(async () => {
|
|
27
27
|
const store = new MediaLibrary();
|
|
28
28
|
await store.upload([file("delete.png", "delete-image", "image/png")], store.config.root);
|
|
29
29
|
const record = await recordByLabel(store, "delete.png");
|
|
30
30
|
const item = store.findByHash(record.hash);
|
|
31
31
|
await store.delete(item);
|
|
32
|
-
expect(await store.cellar.has(record.hash)).is(false);
|
|
33
32
|
expect(store.findByHash(record.hash)).is(undefined);
|
|
33
|
+
expect(await store.cellar.has(record.hash)).is(false);
|
|
34
34
|
}),
|
|
35
35
|
});
|
|
36
36
|
function file(name, text, type = "text/plain") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.test.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/library.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAA;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAEhD,OAAQ,UAAkB,CAAC,YAAY,CAAA;AAEvC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,qCAAqC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;QAChC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAE,CAAA;QAE3C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACrD,CAAC,CAAC;IAEF,mCAAmC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAA;QAChF,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAA;QAErD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IAC/D,CAAC,CAAC;IAEF,qBAAqB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrC,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;QAChC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEhF,MAAM,CAAC,MAAM,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IACrD,CAAC,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"library.test.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/library.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Content } from "@e280/sly";
|
|
2
2
|
import { AsSchema } from "../../aspects/codex/parts/types.js";
|
|
3
|
+
import { CodexItem } from "../../aspects/codex/parts/codex-item.js";
|
|
3
4
|
export type MediaFormat = "video" | "image" | "audio" | "other";
|
|
4
5
|
export type MediaSchema = AsSchema<{
|
|
5
6
|
taxon: {
|
|
@@ -19,3 +20,8 @@ export type MediaSchema = AsSchema<{
|
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
22
|
}>;
|
|
23
|
+
export type MediaProgress = {
|
|
24
|
+
item: CodexItem<MediaSchema>;
|
|
25
|
+
loaded: number;
|
|
26
|
+
total: number;
|
|
27
|
+
};
|
package/s/cellar/forklift.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import {MapG} from "@e280/stz"
|
|
3
|
-
import {Forklift} from "./forklift.js"
|
|
4
|
-
|
|
5
|
-
export class MemoryForklift implements Forklift {
|
|
6
|
-
#map = new MapG<string, Uint8Array>()
|
|
7
|
-
|
|
8
|
-
async *list(): AsyncIterable<string> {
|
|
9
|
-
for (const label of this.#map.keys())
|
|
10
|
-
yield label
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async has(label: string): Promise<boolean> {
|
|
14
|
-
return this.#map.has(label)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async save(label: string, file: Blob): Promise<void> {
|
|
18
|
-
const bytes = new Uint8Array(await file.arrayBuffer())
|
|
19
|
-
this.#map.set(label, bytes)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async load(label: string): Promise<Blob> {
|
|
23
|
-
return new Blob([this.#map.require(label)])
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async delete(label: string) {
|
|
27
|
-
this.#map.delete(label)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import {Forklift} from "./forklift.js"
|
|
3
|
-
|
|
4
|
-
export class OpfsForklift implements Forklift {
|
|
5
|
-
static async setup(dirname: string) {
|
|
6
|
-
const root = await navigator.storage.getDirectory()
|
|
7
|
-
const directory = await root.getDirectoryHandle(dirname, {create: true})
|
|
8
|
-
return new this(directory)
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
constructor(private directory: FileSystemDirectoryHandle) {}
|
|
12
|
-
|
|
13
|
-
async *list(): AsyncIterable<string> {
|
|
14
|
-
for await (const [name, handle] of this.directory.entries()) {
|
|
15
|
-
if (handle.kind === "file")
|
|
16
|
-
yield name
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async has(label: string): Promise<boolean> {
|
|
21
|
-
try {
|
|
22
|
-
await this.directory.getFileHandle(label)
|
|
23
|
-
return true
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
if ((err as DOMException).name === "NotFoundError") return false
|
|
27
|
-
throw err
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async save(label: string, file: Blob): Promise<void> {
|
|
32
|
-
const fileHandle = await this.directory.getFileHandle(label, {create: true})
|
|
33
|
-
const writable = await fileHandle.createWritable()
|
|
34
|
-
await writable.write(file)
|
|
35
|
-
await writable.close()
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async load(label: string): Promise<Blob> {
|
|
39
|
-
const fileHandle = await this.directory.getFileHandle(label)
|
|
40
|
-
return await fileHandle.getFile()
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async delete(label: string) {
|
|
44
|
-
await this.directory.removeEntry(label)
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
package/x/cellar/forklift.d.ts
DELETED
package/x/cellar/forklift.js
DELETED
package/x/cellar/forklift.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"forklift.js","sourceRoot":"","sources":["../../s/cellar/forklift.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Forklift } from "./forklift.js";
|
|
2
|
-
export declare class MemoryForklift implements Forklift {
|
|
3
|
-
#private;
|
|
4
|
-
list(): AsyncIterable<string>;
|
|
5
|
-
has(label: string): Promise<boolean>;
|
|
6
|
-
save(label: string, file: Blob): Promise<void>;
|
|
7
|
-
load(label: string): Promise<Blob>;
|
|
8
|
-
delete(label: string): Promise<void>;
|
|
9
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { MapG } from "@e280/stz";
|
|
2
|
-
export class MemoryForklift {
|
|
3
|
-
#map = new MapG();
|
|
4
|
-
async *list() {
|
|
5
|
-
for (const label of this.#map.keys())
|
|
6
|
-
yield label;
|
|
7
|
-
}
|
|
8
|
-
async has(label) {
|
|
9
|
-
return this.#map.has(label);
|
|
10
|
-
}
|
|
11
|
-
async save(label, file) {
|
|
12
|
-
const bytes = new Uint8Array(await file.arrayBuffer());
|
|
13
|
-
this.#map.set(label, bytes);
|
|
14
|
-
}
|
|
15
|
-
async load(label) {
|
|
16
|
-
return new Blob([this.#map.require(label)]);
|
|
17
|
-
}
|
|
18
|
-
async delete(label) {
|
|
19
|
-
this.#map.delete(label);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=memory-forklift.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-forklift.js","sourceRoot":"","sources":["../../s/cellar/memory-forklift.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAG9B,MAAM,OAAO,cAAc;IAC1B,IAAI,GAAG,IAAI,IAAI,EAAsB,CAAA;IAErC,KAAK,CAAC,CAAC,IAAI;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACnC,MAAM,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAAU;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACvB,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;CACD"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Forklift } from "./forklift.js";
|
|
2
|
-
export declare class OpfsForklift implements Forklift {
|
|
3
|
-
private directory;
|
|
4
|
-
static setup(dirname: string): Promise<OpfsForklift>;
|
|
5
|
-
constructor(directory: FileSystemDirectoryHandle);
|
|
6
|
-
list(): AsyncIterable<string>;
|
|
7
|
-
has(label: string): Promise<boolean>;
|
|
8
|
-
save(label: string, file: Blob): Promise<void>;
|
|
9
|
-
load(label: string): Promise<Blob>;
|
|
10
|
-
delete(label: string): Promise<void>;
|
|
11
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
export class OpfsForklift {
|
|
2
|
-
directory;
|
|
3
|
-
static async setup(dirname) {
|
|
4
|
-
const root = await navigator.storage.getDirectory();
|
|
5
|
-
const directory = await root.getDirectoryHandle(dirname, { create: true });
|
|
6
|
-
return new this(directory);
|
|
7
|
-
}
|
|
8
|
-
constructor(directory) {
|
|
9
|
-
this.directory = directory;
|
|
10
|
-
}
|
|
11
|
-
async *list() {
|
|
12
|
-
for await (const [name, handle] of this.directory.entries()) {
|
|
13
|
-
if (handle.kind === "file")
|
|
14
|
-
yield name;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
async has(label) {
|
|
18
|
-
try {
|
|
19
|
-
await this.directory.getFileHandle(label);
|
|
20
|
-
return true;
|
|
21
|
-
}
|
|
22
|
-
catch (err) {
|
|
23
|
-
if (err.name === "NotFoundError")
|
|
24
|
-
return false;
|
|
25
|
-
throw err;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
async save(label, file) {
|
|
29
|
-
const fileHandle = await this.directory.getFileHandle(label, { create: true });
|
|
30
|
-
const writable = await fileHandle.createWritable();
|
|
31
|
-
await writable.write(file);
|
|
32
|
-
await writable.close();
|
|
33
|
-
}
|
|
34
|
-
async load(label) {
|
|
35
|
-
const fileHandle = await this.directory.getFileHandle(label);
|
|
36
|
-
return await fileHandle.getFile();
|
|
37
|
-
}
|
|
38
|
-
async delete(label) {
|
|
39
|
-
await this.directory.removeEntry(label);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=opfs-forklift.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opfs-forklift.js","sourceRoot":"","sources":["../../s/cellar/opfs-forklift.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IAOJ;IANpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAe;QACjC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;QACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;QACxE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,YAAoB,SAAoC;QAApC,cAAS,GAAT,SAAS,CAA2B;IAAG,CAAC;IAE5D,KAAK,CAAC,CAAC,IAAI;QACV,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;gBACzB,MAAM,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YACzC,OAAO,IAAI,CAAA;QACZ,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACZ,IAAK,GAAoB,CAAC,IAAI,KAAK,eAAe;gBAAE,OAAO,KAAK,CAAA;YAChE,MAAM,GAAG,CAAA;QACV,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAAU;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;QAC5E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAA;QAClD,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC5D,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;CACD"}
|