@e280/quay 0.0.0-11 → 0.0.0-13

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.
Files changed (58) hide show
  1. package/README.md +59 -0
  2. package/package.json +2 -1
  3. package/s/cellar/cask.ts +13 -7
  4. package/s/cellar/cellar.test.ts +20 -18
  5. package/s/cellar/cellar.ts +3 -3
  6. package/s/cellar/forklift.ts +2 -2
  7. package/s/cellar/memory-forklift.ts +4 -3
  8. package/s/cellar/opfs-forklift.ts +4 -6
  9. package/s/dom/components/browser/style.css.ts +30 -30
  10. package/s/dom/components/dropzone/style.css.ts +11 -12
  11. package/s/dom/components/filter/component.ts +2 -2
  12. package/s/dom/components/searchbar/component.ts +5 -2
  13. package/s/dom/components/sort/component.ts +3 -3
  14. package/s/dom/theme.css.ts +28 -0
  15. package/s/dom/views/tree/style.css.ts +9 -9
  16. package/s/logic/aspects/codex/parts/hierarchy.ts +1 -0
  17. package/s/logic/group.ts +5 -3
  18. package/s/logic/presets/media/library.test.ts +41 -14
  19. package/s/logic/presets/media/library.ts +25 -17
  20. package/x/cellar/cask.d.ts +4 -4
  21. package/x/cellar/cask.js +13 -9
  22. package/x/cellar/cask.js.map +1 -1
  23. package/x/cellar/cellar.d.ts +1 -1
  24. package/x/cellar/cellar.js +3 -3
  25. package/x/cellar/cellar.js.map +1 -1
  26. package/x/cellar/cellar.test.js +19 -18
  27. package/x/cellar/cellar.test.js.map +1 -1
  28. package/x/cellar/forklift.d.ts +2 -2
  29. package/x/cellar/memory-forklift.d.ts +2 -2
  30. package/x/cellar/memory-forklift.js +3 -2
  31. package/x/cellar/memory-forklift.js.map +1 -1
  32. package/x/cellar/opfs-forklift.d.ts +2 -2
  33. package/x/cellar/opfs-forklift.js +3 -5
  34. package/x/cellar/opfs-forklift.js.map +1 -1
  35. package/x/demo/main.bundle.min.js +104 -71
  36. package/x/demo/main.bundle.min.js.map +2 -2
  37. package/x/dom/components/browser/style.css.js +30 -29
  38. package/x/dom/components/browser/style.css.js.map +1 -1
  39. package/x/dom/components/dropzone/style.css.js +11 -11
  40. package/x/dom/components/filter/component.js +2 -2
  41. package/x/dom/components/searchbar/component.js +5 -1
  42. package/x/dom/components/searchbar/component.js.map +1 -1
  43. package/x/dom/components/sort/component.js +3 -3
  44. package/x/dom/theme.css.js +28 -0
  45. package/x/dom/theme.css.js.map +1 -1
  46. package/x/dom/views/tree/style.css.js +9 -9
  47. package/x/index.html +2 -2
  48. package/x/logic/aspects/codex/parts/hierarchy.js +1 -0
  49. package/x/logic/aspects/codex/parts/hierarchy.js.map +1 -1
  50. package/x/logic/group.d.ts +3 -3
  51. package/x/logic/group.js +3 -2
  52. package/x/logic/group.js.map +1 -1
  53. package/x/logic/presets/media/library.d.ts +4 -40
  54. package/x/logic/presets/media/library.js +21 -16
  55. package/x/logic/presets/media/library.js.map +1 -1
  56. package/x/logic/presets/media/library.test.d.ts +3 -2
  57. package/x/logic/presets/media/library.test.js +34 -14
  58. package/x/logic/presets/media/library.test.js.map +1 -1
@@ -1,31 +1,51 @@
1
1
  import { Txt } from "@e280/stz";
2
2
  import { expect, Science, test } from "@e280/science";
3
3
  import { MediaLibrary } from "./library.js";
4
+ import { Permissions } from "../../permissions.js";
4
5
  delete globalThis.localStorage;
5
6
  export default Science.suite({
6
- "imports files into cellar and index": test(async () => {
7
+ "uploads files into cellar and index": test(async () => {
7
8
  const group = new MediaLibrary();
8
- const file = new File([Txt.toBytes("hello")], "hello.txt", { type: "text/plain" });
9
- const [record] = await group.importFiles([file]);
9
+ await group.upload([file("hello.txt", "hello")], group.config.root);
10
+ const record = await recordByLabel(group, "hello.txt");
11
+ const item = group.findByHash(record.hash);
12
+ expect(item.specimen.label).is("hello.txt");
10
13
  expect(await group.cellar.has(record.hash)).is(true);
11
- expect(group.findByHash(record.hash)?.specimen.label).is("hello.txt");
14
+ }),
15
+ "upload respects upload permission": test(async () => {
16
+ const group = new MediaLibrary();
17
+ const file = new File([Txt.toBytes("hello")], "hello.txt", { type: "text/plain" });
18
+ group.config.permissions = () => Permissions.readOnly;
19
+ expect(() => group.upload([file], group.config.root)).throws();
12
20
  }),
13
21
  "lists media records": test(async () => {
14
22
  const store = new MediaLibrary();
15
- const file = new File([Txt.toBytes("image")], "image.png", { type: "image/png" });
16
- const record = await store.importFile(file);
17
- const records = [];
18
- for await (const record of store.records())
19
- records.push(record);
20
- expect(records.some(r => r.hash === record.hash)).is(true);
23
+ await store.upload([file("image.png", "image", "image/png")], store.config.root);
24
+ expect(await recordByLabel(store, "image.png")).ok();
21
25
  }),
22
- "removes media records and bytes": test(async () => {
26
+ "deletes media records and bytes": test(async () => {
23
27
  const store = new MediaLibrary();
24
- const file = new File([Txt.toBytes("image")], "image.png", { type: "image/png" });
25
- const record = await store.importFile(file);
26
- await store.remove(record.hash);
28
+ await store.upload([file("delete.png", "delete-image", "image/png")], store.config.root);
29
+ const record = await recordByLabel(store, "delete.png");
30
+ const item = store.findByHash(record.hash);
31
+ await store.delete(item);
27
32
  expect(await store.cellar.has(record.hash)).is(false);
28
33
  expect(store.findByHash(record.hash)).is(undefined);
29
34
  }),
30
35
  });
36
+ function file(name, text, type = "text/plain") {
37
+ return new File([Txt.toBytes(text)], name, { type });
38
+ }
39
+ async function records(store) {
40
+ const records = [];
41
+ for await (const record of store.records())
42
+ records.push(record);
43
+ return records;
44
+ }
45
+ async function recordByLabel(store, label) {
46
+ const record = (await records(store)).find(r => r.label === label);
47
+ if (!record)
48
+ throw new Error(`expected record "${label}"`);
49
+ return record;
50
+ }
31
51
  //# sourceMappingURL=library.test.js.map
@@ -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;AAEzC,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,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAA;QAEhF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhD,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;IACtE,CAAC,CAAC;IAEF,qBAAqB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrC,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,WAAW,EAAC,CAAC,CAAA;QAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAErB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAC3D,CAAC,CAAC;IAEF,iCAAiC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACjD,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,WAAW,EAAC,CAAC,CAAA;QAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAE/B,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACpD,CAAC,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"library.test.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/library.test.ts"],"names":[],"mappings":"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"}