@e280/quay 0.0.0-18 → 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 +1 -1
- package/s/logic/presets/media/library.test.ts +2 -3
- package/s/logic/presets/media/library.ts +32 -7
- package/x/index.html +1 -1
- package/x/logic/presets/media/library.d.ts +1 -0
- package/x/logic/presets/media/library.js +29 -7
- 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/README.md
CHANGED
|
@@ -124,7 +124,7 @@ In this way, you can setup sophisticated rules about what actions are permitted,
|
|
|
124
124
|
```ts
|
|
125
125
|
import {MediaLibrary, brain, register, components} from "@e280/quay"
|
|
126
126
|
|
|
127
|
-
const media = await MediaLibrary.open("my-
|
|
127
|
+
const media = await MediaLibrary.open("my-app")
|
|
128
128
|
brain.setGroup("media", media)
|
|
129
129
|
|
|
130
130
|
register(components)
|
|
@@ -137,13 +137,17 @@ register(components)
|
|
|
137
137
|
</div>
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
Open a library once, then derive nested scopes as needed.
|
|
141
141
|
|
|
142
142
|
```ts
|
|
143
|
-
const
|
|
144
|
-
const
|
|
143
|
+
const project = await media.scope("project-a")
|
|
144
|
+
const favorites = await project.scope("favorites")
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
+
Adding media to a scope also adds it to every parent scope. Removing media from
|
|
148
|
+
a scope removes it from that scope and its child scopes. Removing it from the
|
|
149
|
+
root removes it everywhere, including its stored file.
|
|
150
|
+
|
|
147
151
|
<br/>
|
|
148
152
|
|
|
149
153
|
## Styling
|
package/package.json
CHANGED
|
@@ -34,7 +34,7 @@ export default Science.suite({
|
|
|
34
34
|
expect(await recordByLabel(store, "image.png")).ok()
|
|
35
35
|
}),
|
|
36
36
|
|
|
37
|
-
"
|
|
37
|
+
"root deletion removes media records and resources": test(async() => {
|
|
38
38
|
const store = new MediaLibrary()
|
|
39
39
|
await store.upload([file("delete.png", "delete-image", "image/png")], store.config.root)
|
|
40
40
|
|
|
@@ -43,8 +43,8 @@ export default Science.suite({
|
|
|
43
43
|
|
|
44
44
|
await store.delete(item)
|
|
45
45
|
|
|
46
|
-
expect(await store.cellar.has(record.hash)).is(false)
|
|
47
46
|
expect(store.findByHash(record.hash)).is(undefined)
|
|
47
|
+
expect(await store.cellar.has(record.hash)).is(false)
|
|
48
48
|
}),
|
|
49
49
|
|
|
50
50
|
})
|
|
@@ -66,4 +66,3 @@ async function recordByLabel(store: MediaLibrary, label: string) {
|
|
|
66
66
|
throw new Error(`expected record "${label}"`)
|
|
67
67
|
return record
|
|
68
68
|
}
|
|
69
|
-
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import {sub} from "@e280/stz"
|
|
2
|
+
import {collect, sub} from "@e280/stz"
|
|
3
3
|
import {Kv, StorageMagazine} from "@e280/kv"
|
|
4
4
|
|
|
5
5
|
import {MediaGroup} from "./group.js"
|
|
@@ -22,12 +22,15 @@ export class MediaLibrary extends MediaGroup {
|
|
|
22
22
|
const group = new this()
|
|
23
23
|
group.cellar = await Cellar.opfs("media")
|
|
24
24
|
group.#index = mediaIndex(scope)
|
|
25
|
+
group.#lineage = [group.#index]
|
|
25
26
|
await group.#load()
|
|
26
27
|
return group
|
|
27
28
|
}
|
|
28
29
|
|
|
30
|
+
#index
|
|
31
|
+
#lineage
|
|
32
|
+
#root = this
|
|
29
33
|
#objectUrls = new Map<string, string>()
|
|
30
|
-
#index: Kv<MediaRecord>
|
|
31
34
|
|
|
32
35
|
progress = sub<[MediaProgress]>()
|
|
33
36
|
cellar = new Cellar()
|
|
@@ -35,6 +38,7 @@ export class MediaLibrary extends MediaGroup {
|
|
|
35
38
|
constructor() {
|
|
36
39
|
super()
|
|
37
40
|
this.#index = mediaIndex("default")
|
|
41
|
+
this.#lineage = [this.#index]
|
|
38
42
|
this.on.upload.sub(({files, target}) => {
|
|
39
43
|
return this.#upload(files, target)
|
|
40
44
|
})
|
|
@@ -44,6 +48,20 @@ export class MediaLibrary extends MediaGroup {
|
|
|
44
48
|
})
|
|
45
49
|
}
|
|
46
50
|
|
|
51
|
+
get #isRoot() {
|
|
52
|
+
return this === this.#root
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async scope(name: string) {
|
|
56
|
+
const child = new MediaLibrary()
|
|
57
|
+
child.cellar = this.cellar
|
|
58
|
+
child.#index = this.#index.scope<MediaRecord>(name)
|
|
59
|
+
child.#lineage = [...this.#lineage, child.#index]
|
|
60
|
+
child.#root = this.#root
|
|
61
|
+
await child.#load()
|
|
62
|
+
return child
|
|
63
|
+
}
|
|
64
|
+
|
|
47
65
|
async *records() {
|
|
48
66
|
for await (const [, record] of this.#index.entries())
|
|
49
67
|
yield record
|
|
@@ -94,7 +112,7 @@ export class MediaLibrary extends MediaGroup {
|
|
|
94
112
|
}
|
|
95
113
|
|
|
96
114
|
async #saveRecord(file: File, hash: string) {
|
|
97
|
-
const existing = await this.#index.get(hash)
|
|
115
|
+
const existing = await this.#index.get(hash) ?? await this.#root.#index.get(hash)
|
|
98
116
|
const now = Date.now()
|
|
99
117
|
const record: MediaRecord = {
|
|
100
118
|
hash,
|
|
@@ -105,7 +123,7 @@ export class MediaLibrary extends MediaGroup {
|
|
|
105
123
|
createdAt: existing?.createdAt ?? now,
|
|
106
124
|
updatedAt: now,
|
|
107
125
|
}
|
|
108
|
-
await this.#index.set(hash, record)
|
|
126
|
+
await this.#index.commit(this.#lineage.map(index => index.op.set(hash, record)))
|
|
109
127
|
if (record.format === "image")
|
|
110
128
|
this.#setPreview(hash, URL.createObjectURL(file))
|
|
111
129
|
return record
|
|
@@ -118,10 +136,16 @@ export class MediaLibrary extends MediaGroup {
|
|
|
118
136
|
}
|
|
119
137
|
|
|
120
138
|
async #delete(hashes: string[]) {
|
|
139
|
+
const index = this.#index.crush()
|
|
140
|
+
const keys = (await collect(index.entries()))
|
|
141
|
+
.filter(([, record]) => hashes.includes(record.hash))
|
|
142
|
+
.map(([key]) => key)
|
|
143
|
+
await index.commit(keys.map(key => index.op.delete(key)))
|
|
144
|
+
|
|
121
145
|
for (const hash of hashes) {
|
|
122
|
-
await this.#index.delete(hash)
|
|
123
|
-
await this.cellar.delete(hash)
|
|
124
146
|
this.#revokePreview(hash)
|
|
147
|
+
if (this.#isRoot)
|
|
148
|
+
await this.cellar.delete(hash)
|
|
125
149
|
}
|
|
126
150
|
}
|
|
127
151
|
|
|
@@ -188,7 +212,8 @@ function mediaIndex(scope: string) {
|
|
|
188
212
|
const storage = globalThis.localStorage
|
|
189
213
|
if (storage)
|
|
190
214
|
return new Kv<MediaRecord>(new StorageMagazine(storage))
|
|
191
|
-
.scope
|
|
215
|
+
.scope("quay")
|
|
216
|
+
.scope("media")
|
|
192
217
|
.scope<MediaRecord>(scope)
|
|
193
218
|
|
|
194
219
|
const existing = memoryIndexes.get(scope)
|
package/x/index.html
CHANGED
|
@@ -17,6 +17,7 @@ export declare class MediaLibrary extends MediaGroup {
|
|
|
17
17
|
progress: import("@e280/stz").Sub<[MediaProgress]>;
|
|
18
18
|
cellar: Cellar;
|
|
19
19
|
constructor();
|
|
20
|
+
scope(name: string): Promise<MediaLibrary>;
|
|
20
21
|
records(): AsyncGenerator<MediaRecord, void, unknown>;
|
|
21
22
|
findByHash(hash: string): (CodexItem<{
|
|
22
23
|
taxon: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sub } from "@e280/stz";
|
|
1
|
+
import { collect, sub } from "@e280/stz";
|
|
2
2
|
import { Kv, StorageMagazine } from "@e280/kv";
|
|
3
3
|
import { MediaGroup } from "./group.js";
|
|
4
4
|
import { Cellar } from "../../../cellar/cellar.js";
|
|
@@ -7,16 +7,20 @@ export class MediaLibrary extends MediaGroup {
|
|
|
7
7
|
const group = new this();
|
|
8
8
|
group.cellar = await Cellar.opfs("media");
|
|
9
9
|
group.#index = mediaIndex(scope);
|
|
10
|
+
group.#lineage = [group.#index];
|
|
10
11
|
await group.#load();
|
|
11
12
|
return group;
|
|
12
13
|
}
|
|
13
|
-
#objectUrls = new Map();
|
|
14
14
|
#index;
|
|
15
|
+
#lineage;
|
|
16
|
+
#root = this;
|
|
17
|
+
#objectUrls = new Map();
|
|
15
18
|
progress = sub();
|
|
16
19
|
cellar = new Cellar();
|
|
17
20
|
constructor() {
|
|
18
21
|
super();
|
|
19
22
|
this.#index = mediaIndex("default");
|
|
23
|
+
this.#lineage = [this.#index];
|
|
20
24
|
this.on.upload.sub(({ files, target }) => {
|
|
21
25
|
return this.#upload(files, target);
|
|
22
26
|
});
|
|
@@ -25,6 +29,18 @@ export class MediaLibrary extends MediaGroup {
|
|
|
25
29
|
return this.#delete(hashes);
|
|
26
30
|
});
|
|
27
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
|
+
}
|
|
28
44
|
async *records() {
|
|
29
45
|
for await (const [, record] of this.#index.entries())
|
|
30
46
|
yield record;
|
|
@@ -67,7 +83,7 @@ export class MediaLibrary extends MediaGroup {
|
|
|
67
83
|
return item;
|
|
68
84
|
}
|
|
69
85
|
async #saveRecord(file, hash) {
|
|
70
|
-
const existing = await this.#index.get(hash);
|
|
86
|
+
const existing = await this.#index.get(hash) ?? await this.#root.#index.get(hash);
|
|
71
87
|
const now = Date.now();
|
|
72
88
|
const record = {
|
|
73
89
|
hash,
|
|
@@ -78,7 +94,7 @@ export class MediaLibrary extends MediaGroup {
|
|
|
78
94
|
createdAt: existing?.createdAt ?? now,
|
|
79
95
|
updatedAt: now,
|
|
80
96
|
};
|
|
81
|
-
await this.#index.set(hash, record);
|
|
97
|
+
await this.#index.commit(this.#lineage.map(index => index.op.set(hash, record)));
|
|
82
98
|
if (record.format === "image")
|
|
83
99
|
this.#setPreview(hash, URL.createObjectURL(file));
|
|
84
100
|
return record;
|
|
@@ -89,10 +105,15 @@ export class MediaLibrary extends MediaGroup {
|
|
|
89
105
|
.filter((hash) => !!hash);
|
|
90
106
|
}
|
|
91
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)));
|
|
92
113
|
for (const hash of hashes) {
|
|
93
|
-
await this.#index.delete(hash);
|
|
94
|
-
await this.cellar.delete(hash);
|
|
95
114
|
this.#revokePreview(hash);
|
|
115
|
+
if (this.#isRoot)
|
|
116
|
+
await this.cellar.delete(hash);
|
|
96
117
|
}
|
|
97
118
|
}
|
|
98
119
|
findByHash(hash) {
|
|
@@ -149,7 +170,8 @@ function mediaIndex(scope) {
|
|
|
149
170
|
const storage = globalThis.localStorage;
|
|
150
171
|
if (storage)
|
|
151
172
|
return new Kv(new StorageMagazine(storage))
|
|
152
|
-
.scope("quay
|
|
173
|
+
.scope("quay")
|
|
174
|
+
.scope("media")
|
|
153
175
|
.scope(scope);
|
|
154
176
|
const existing = memoryIndexes.get(scope);
|
|
155
177
|
if (existing)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/library.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;
|
|
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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"}
|