@pyric/ui 0.1.0-alpha.8 → 0.1.0-alpha.9
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/LICENSE +216 -0
- package/dist/auth/components/AuthUserList.d.ts +15 -4
- package/dist/auth/components/AuthUserList.d.ts.map +1 -1
- package/dist/auth/components/AuthUserList.js +3 -3
- package/dist/auth/components/AuthUserList.js.map +1 -1
- package/dist/firestore/components/DocumentList.d.ts +5 -2
- package/dist/firestore/components/DocumentList.d.ts.map +1 -1
- package/dist/firestore/components/DocumentList.js +17 -3
- package/dist/firestore/components/DocumentList.js.map +1 -1
- package/dist/firestore/firestoreApi.d.ts +2 -2
- package/dist/firestore/firestoreApi.d.ts.map +1 -1
- package/dist/firestore/firestoreApi.js +2 -1
- package/dist/firestore/firestoreApi.js.map +1 -1
- package/dist/firestore/hooks/useDocumentEditor.d.ts +7 -4
- package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -1
- package/dist/firestore/hooks/useDocumentEditor.js +7 -4
- package/dist/firestore/hooks/useDocumentEditor.js.map +1 -1
- package/dist/firestore/hooks/useDocumentList.d.ts +18 -13
- package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -1
- package/dist/firestore/hooks/useDocumentList.js +77 -27
- package/dist/firestore/hooks/useDocumentList.js.map +1 -1
- package/dist/firestore/hooks/useFirestoreCollection.d.ts +1 -1
- package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -1
- package/dist/firestore/hooks/useFirestoreCollection.js +3 -2
- package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -1
- package/dist/firestore/hooks/useFirestoreDoc.d.ts +1 -1
- package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -1
- package/dist/firestore/hooks/useFirestoreDoc.js +3 -2
- package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -1
- package/dist/firestore/index.d.ts +1 -0
- package/dist/firestore/index.d.ts.map +1 -1
- package/dist/firestore/index.js +1 -0
- package/dist/firestore/index.js.map +1 -1
- package/dist/firestore/reducers/documentEditor.d.ts.map +1 -1
- package/dist/firestore/reducers/documentEditor.js +2 -0
- package/dist/firestore/reducers/documentEditor.js.map +1 -1
- package/dist/firestore/reducers/types.d.ts +3 -0
- package/dist/firestore/reducers/types.d.ts.map +1 -1
- package/dist/firestore/valueEquality.d.ts +4 -0
- package/dist/firestore/valueEquality.d.ts.map +1 -0
- package/dist/firestore/valueEquality.js +44 -0
- package/dist/firestore/valueEquality.js.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts +18 -0
- package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
- package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
- package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +1 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/rtdb/components/RtdbTree.js +2 -1
- package/dist/rtdb/components/RtdbTree.js.map +1 -1
- package/dist/rtdb/hooks/useRtdbTree.d.ts +2 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -1
- package/dist/rtdb/hooks/useRtdbTree.js +20 -2
- package/dist/rtdb/hooks/useRtdbTree.js.map +1 -1
- package/dist/rtdb/values.d.ts +6 -0
- package/dist/rtdb/values.d.ts.map +1 -1
- package/dist/rtdb/values.js +43 -0
- package/dist/rtdb/values.js.map +1 -1
- package/dist/rules/hooks/useDenialTrace.d.ts +1 -1
- package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -1
- package/dist/rules/hooks/useDenialTrace.js +1 -1
- package/dist/rules/hooks/useDenialTrace.js.map +1 -1
- package/dist/rules/types.d.ts +1 -1
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +0 -2
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -1
- package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -1
- package/dist/storage/components/ObjectBrowser.d.ts +6 -3
- package/dist/storage/components/ObjectBrowser.d.ts.map +1 -1
- package/dist/storage/components/ObjectBrowser.js +6 -5
- package/dist/storage/components/ObjectBrowser.js.map +1 -1
- package/dist/storage/components/ObjectInspector.d.ts +1 -1
- package/dist/storage/components/ObjectInspector.d.ts.map +1 -1
- package/dist/storage/folderPlaceholder.d.ts +9 -3
- package/dist/storage/folderPlaceholder.d.ts.map +1 -1
- package/dist/storage/folderPlaceholder.js +12 -5
- package/dist/storage/folderPlaceholder.js.map +1 -1
- package/dist/storage/hooks/useObjectUpload.d.ts +5 -9
- package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -1
- package/dist/storage/hooks/useObjectUpload.js.map +1 -1
- package/dist/storage/hooks/useStorageDelete.d.ts +2 -1
- package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageDelete.js +19 -13
- package/dist/storage/hooks/useStorageDelete.js.map +1 -1
- package/dist/storage/hooks/useStorageList.d.ts +5 -7
- package/dist/storage/hooks/useStorageList.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageList.js +5 -8
- package/dist/storage/hooks/useStorageList.js.map +1 -1
- package/dist/storage/hooks/useStorageObject.d.ts +4 -5
- package/dist/storage/hooks/useStorageObject.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageObject.js.map +1 -1
- package/dist/storage/hooks/useStorageRulesGate.d.ts +5 -17
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageRulesGate.js +35 -43
- package/dist/storage/hooks/useStorageRulesGate.js.map +1 -1
- package/dist/storage/pendingPrefixes.d.ts +7 -3
- package/dist/storage/pendingPrefixes.d.ts.map +1 -1
- package/dist/storage/pendingPrefixes.js +9 -3
- package/dist/storage/pendingPrefixes.js.map +1 -1
- package/dist/storage/storageApi.d.ts +1 -1
- package/dist/storage/storageApi.d.ts.map +1 -1
- package/dist/storage/storageApi.js +9 -2
- package/dist/storage/storageApi.js.map +1 -1
- package/dist/traffic/components/TrafficLineChart.d.ts +4 -1
- package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -1
- package/dist/traffic/components/TrafficLineChart.js +3 -3
- package/dist/traffic/components/TrafficLineChart.js.map +1 -1
- package/dist/traffic/components/TrafficRow.js +1 -1
- package/dist/traffic/components/TrafficRow.js.map +1 -1
- package/dist/traffic/components/TrafficTimeline.d.ts +12 -5
- package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -1
- package/dist/traffic/components/TrafficTimeline.js +20 -6
- package/dist/traffic/components/TrafficTimeline.js.map +1 -1
- package/dist/traffic/hooks/useTrafficMetrics.js +1 -1
- package/package.json +16 -6
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type FirebaseStorage, type StorageReference } from 'pyric/storage';
|
|
2
2
|
import type { StorageSelectionEntry } from './useStorageSelection.js';
|
|
3
3
|
import type { UseStorageListResult } from './useStorageList.js';
|
|
4
|
+
import { type StorageApi } from '../storageApi.js';
|
|
4
5
|
export interface StorageDeleteProgress {
|
|
5
6
|
/** Objects deleted so far in this folder walk. */
|
|
6
7
|
deletedCount: number;
|
|
@@ -26,7 +27,7 @@ export interface StorageRecursiveDeleteImpl {
|
|
|
26
27
|
* so the walk alone would leave ghost folders). Placeholder sweeps
|
|
27
28
|
* are best-effort — `deletedCount` counts listed objects only.
|
|
28
29
|
*/
|
|
29
|
-
export declare function createListAllDeleteImpl(): StorageRecursiveDeleteImpl;
|
|
30
|
+
export declare function createListAllDeleteImpl(api?: Pick<StorageApi, 'listAll' | 'deleteObject'>): StorageRecursiveDeleteImpl;
|
|
30
31
|
/** One entry's failure in a bulk run. `error` is the typed
|
|
31
32
|
* `StorageError` (`.code` e.g. `storage/unauthorized`). */
|
|
32
33
|
export interface StorageDeleteFailure {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageDelete.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageDelete.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"useStorageDelete.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageDelete.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGlE,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,CACL,MAAM,EAAE,gBAAgB,KACrB,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,cAAc,CAAC,GACjD,0BAA0B,CAiC5B;AAED;4DAC4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,0BAA0B,CAAC;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,aAAa,EAAE,CACb,OAAO,EAAE,qBAAqB,EAAE,KAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAiExB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useCallback, useRef, useState } from 'react';
|
|
2
|
-
import { deleteObject, listAll
|
|
3
|
-
import {
|
|
2
|
+
import { deleteObject as defaultDeleteObject, listAll as defaultListAll, } from 'pyric/storage';
|
|
3
|
+
import { useStorageApi } from '../storageApi.js';
|
|
4
|
+
import { asFolderPlaceholder } from '../folderPlaceholder.js';
|
|
4
5
|
/**
|
|
5
6
|
* The default, `listAll`-driven impl: walks the prefix tree,
|
|
6
7
|
* `deleteObject`s every item (yielding progress per object), then
|
|
@@ -9,31 +10,35 @@ import { folderPlaceholderRef } from '../folderPlaceholder.js';
|
|
|
9
10
|
* so the walk alone would leave ghost folders). Placeholder sweeps
|
|
10
11
|
* are best-effort — `deletedCount` counts listed objects only.
|
|
11
12
|
*/
|
|
12
|
-
export function createListAllDeleteImpl() {
|
|
13
|
+
export function createListAllDeleteImpl(api) {
|
|
13
14
|
return {
|
|
14
15
|
async *start(target) {
|
|
16
|
+
const operations = api ?? {
|
|
17
|
+
listAll: defaultListAll,
|
|
18
|
+
deleteObject: defaultDeleteObject,
|
|
19
|
+
};
|
|
15
20
|
let deletedCount = 0;
|
|
16
21
|
const stack = [target];
|
|
17
22
|
const visited = [];
|
|
18
23
|
while (stack.length > 0) {
|
|
19
24
|
const folder = stack.pop();
|
|
20
25
|
visited.push(folder);
|
|
21
|
-
const result = await listAll(folder);
|
|
26
|
+
const result = await operations.listAll(folder);
|
|
22
27
|
stack.push(...result.prefixes);
|
|
23
28
|
for (const item of result.items) {
|
|
24
|
-
await deleteObject(item);
|
|
29
|
+
await operations.deleteObject(item);
|
|
25
30
|
deletedCount++;
|
|
26
31
|
yield { deletedCount, done: false };
|
|
27
32
|
}
|
|
28
33
|
}
|
|
29
34
|
for (const folder of visited) {
|
|
30
35
|
try {
|
|
31
|
-
await deleteObject(
|
|
36
|
+
await operations.deleteObject(asFolderPlaceholder(folder));
|
|
32
37
|
}
|
|
33
38
|
catch {
|
|
34
|
-
// Best-effort:
|
|
35
|
-
//
|
|
36
|
-
//
|
|
39
|
+
// Best-effort: a strict backend may reject the structural
|
|
40
|
+
// placeholder or throw not-found. Neither should fail the
|
|
41
|
+
// recursive delete that already succeeded.
|
|
37
42
|
}
|
|
38
43
|
}
|
|
39
44
|
yield { deletedCount, done: true };
|
|
@@ -47,6 +52,7 @@ export function createListAllDeleteImpl() {
|
|
|
47
52
|
* because storage selections are flat multi-row affairs.
|
|
48
53
|
*/
|
|
49
54
|
export function useStorageDelete(storage, options = {}) {
|
|
55
|
+
const api = useStorageApi();
|
|
50
56
|
const [progress, setProgress] = useState(0);
|
|
51
57
|
const [isRunning, setIsRunning] = useState(false);
|
|
52
58
|
const [error, setError] = useState(undefined);
|
|
@@ -63,7 +69,7 @@ export function useStorageDelete(storage, options = {}) {
|
|
|
63
69
|
if (storage == null || entries.length === 0)
|
|
64
70
|
return outcome;
|
|
65
71
|
setIsRunning(true);
|
|
66
|
-
const impl = optionsRef.current.impl ?? createListAllDeleteImpl();
|
|
72
|
+
const impl = optionsRef.current.impl ?? createListAllDeleteImpl(api);
|
|
67
73
|
let count = 0;
|
|
68
74
|
try {
|
|
69
75
|
for (const entry of entries) {
|
|
@@ -71,11 +77,11 @@ export function useStorageDelete(storage, options = {}) {
|
|
|
71
77
|
optionsRef.current.list?.removeItem(entry.fullPath);
|
|
72
78
|
try {
|
|
73
79
|
if (entry.kind === 'object') {
|
|
74
|
-
await deleteObject(
|
|
80
|
+
await api.deleteObject(api.ref(storage, entry.fullPath));
|
|
75
81
|
count++;
|
|
76
82
|
}
|
|
77
83
|
else {
|
|
78
|
-
for await (const evt of impl.start(
|
|
84
|
+
for await (const evt of impl.start(api.ref(storage, entry.fullPath))) {
|
|
79
85
|
if (myGen !== generationRef.current)
|
|
80
86
|
return outcome;
|
|
81
87
|
// The impl reports counts local to its walk; add the
|
|
@@ -108,7 +114,7 @@ export function useStorageDelete(storage, options = {}) {
|
|
|
108
114
|
if (myGen === generationRef.current)
|
|
109
115
|
setIsRunning(false);
|
|
110
116
|
}
|
|
111
|
-
}, [storage]);
|
|
117
|
+
}, [api, storage]);
|
|
112
118
|
return { deleteEntries, progress, isRunning, error };
|
|
113
119
|
}
|
|
114
120
|
//# sourceMappingURL=useStorageDelete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageDelete.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageDelete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"useStorageDelete.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageDelete.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,8 @@ export interface UseStorageListResult {
|
|
|
25
25
|
entries: StorageListEntry[];
|
|
26
26
|
/**
|
|
27
27
|
* `StorageError` (with a typed `storage/<code>` on `.code`) from the
|
|
28
|
-
* sandbox
|
|
29
|
-
*
|
|
28
|
+
* sandbox. A denied list is `error.code === 'storage/unauthorized'`
|
|
29
|
+
* (ST-B2).
|
|
30
30
|
*/
|
|
31
31
|
error: Error | undefined;
|
|
32
32
|
/** Re-run `listAll` for the current path. */
|
|
@@ -60,15 +60,13 @@ export interface UseStorageListResult {
|
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* List the objects + synthetic folders directly under `path` :
|
|
63
|
-
* `listAll` over the package's
|
|
64
|
-
* or prod, same contract as the `firestore` prop). Read-via-get,
|
|
63
|
+
* `listAll` over the package's sandbox Storage handle. Read-via-get,
|
|
65
64
|
* not realtime: the list updates on `refresh`, path change, or the
|
|
66
65
|
* optimistic seam. Pass `''` (or the result of `usePathState`) for
|
|
67
66
|
* the bucket root.
|
|
68
67
|
*
|
|
69
|
-
* `listAll` has no pagination
|
|
70
|
-
*
|
|
71
|
-
* which `<ObjectBrowser>` does).
|
|
68
|
+
* `listAll` has no pagination; a very large prefix arrives as one flat
|
|
69
|
+
* result (virtualize the rendering, which `<ObjectBrowser>` does).
|
|
72
70
|
*/
|
|
73
71
|
export declare function useStorageList(storage: FirebaseStorage | null | undefined, path: string): UseStorageListResult;
|
|
74
72
|
//# sourceMappingURL=useStorageList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageList.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,+DAA+D;IAC/D,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,yEAAyE;IACzE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;;OAaG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;;;;;;OASG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AA0BD
|
|
1
|
+
{"version":3,"file":"useStorageList.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,+DAA+D;IAC/D,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,yEAAyE;IACzE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;;OAaG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;;;;;;OASG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,GACX,oBAAoB,CA0JtB"}
|
|
@@ -14,15 +14,13 @@ function insertSorted(list, next) {
|
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* List the objects + synthetic folders directly under `path` :
|
|
17
|
-
* `listAll` over the package's
|
|
18
|
-
* or prod, same contract as the `firestore` prop). Read-via-get,
|
|
17
|
+
* `listAll` over the package's sandbox Storage handle. Read-via-get,
|
|
19
18
|
* not realtime: the list updates on `refresh`, path change, or the
|
|
20
19
|
* optimistic seam. Pass `''` (or the result of `usePathState`) for
|
|
21
20
|
* the bucket root.
|
|
22
21
|
*
|
|
23
|
-
* `listAll` has no pagination
|
|
24
|
-
*
|
|
25
|
-
* which `<ObjectBrowser>` does).
|
|
22
|
+
* `listAll` has no pagination; a very large prefix arrives as one flat
|
|
23
|
+
* result (virtualize the rendering, which `<ObjectBrowser>` does).
|
|
26
24
|
*/
|
|
27
25
|
export function useStorageList(storage, path) {
|
|
28
26
|
// Injected: in-process `pyric/storage` by default, or the SharedWorker client
|
|
@@ -55,9 +53,8 @@ export function useStorageList(storage, path) {
|
|
|
55
53
|
return;
|
|
56
54
|
setState({
|
|
57
55
|
status: 'success',
|
|
58
|
-
// Defensive copy + sort
|
|
59
|
-
//
|
|
60
|
-
// sort pins the invariant the optimistic seam relies on.
|
|
56
|
+
// Defensive copy + sort pins the invariant the optimistic seam
|
|
57
|
+
// relies on even if the backing implementation changes.
|
|
61
58
|
items: [...result.items].sort(byFullPath),
|
|
62
59
|
prefixes: [...result.prefixes].sort(byFullPath),
|
|
63
60
|
error: undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageList.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAK1E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuEjD,2EAA2E;AAC3E,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,UAAU,CAAC,CAAmB,EAAE,CAAmB;IAC1D,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,YAAY,CACnB,IAAwB,EACxB,IAAsB;IAEtB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"useStorageList.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageList.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export interface UseStorageObjectResult {
|
|
|
5
5
|
status: StorageObjectStatus;
|
|
6
6
|
metadata: FullMetadata | undefined;
|
|
7
7
|
/** Typed `StorageError` (`storage/object-not-found`,
|
|
8
|
-
* `storage/unauthorized`, …)
|
|
8
|
+
* `storage/unauthorized`, …). */
|
|
9
9
|
error: Error | undefined;
|
|
10
10
|
/** Re-read the metadata (also resets the blob, the object may
|
|
11
11
|
* have been overwritten). */
|
|
@@ -15,10 +15,9 @@ export interface UseStorageObjectResult {
|
|
|
15
15
|
blobStatus: StorageObjectStatus;
|
|
16
16
|
blob: Blob | undefined;
|
|
17
17
|
/**
|
|
18
|
-
* `URL.createObjectURL` handle for the loaded blob, the
|
|
19
|
-
* channel
|
|
20
|
-
*
|
|
21
|
-
* is replaced, the path changes, or the hook unmounts.
|
|
18
|
+
* `URL.createObjectURL` handle for the loaded blob, used as the local
|
|
19
|
+
* preview channel. Revoked automatically when the blob is replaced,
|
|
20
|
+
* the path changes, or the hook unmounts.
|
|
22
21
|
*/
|
|
23
22
|
blobUrl: string | undefined;
|
|
24
23
|
blobError: Error | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageObject.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,eAAe,CAAC;AAIvB,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC;
|
|
1
|
+
{"version":3,"file":"useStorageObject.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,eAAe,CAAC;AAIvB,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC;sCACkC;IAClC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB;kCAC8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;yDACqD;IACrD,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAsBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,sBAAsB,CAkGxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageObject.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAKjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useStorageObject.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,16 +46,12 @@ export interface UseStorageRulesGateOptions {
|
|
|
46
46
|
* Explicit rules source — raw rules text (parsed here; a malformed
|
|
47
47
|
* string surfaces as `status: 'error'`) or a pre-parsed
|
|
48
48
|
* `StorageRules` handle. Overrides the sandbox's deployed ruleset
|
|
49
|
-
* when both exist.
|
|
50
|
-
* handles: production rules live server-side and are not readable
|
|
51
|
-
* through the client SDK, so the gate cannot discover them.
|
|
49
|
+
* when both exist.
|
|
52
50
|
*/
|
|
53
51
|
rules?: string | StorageRules;
|
|
54
52
|
/**
|
|
55
53
|
* Identity override. `null` is anonymous; OMIT the field to use
|
|
56
|
-
* the handle's own identity (the sandbox context's `auth`).
|
|
57
|
-
* handles carry no client-readable identity claims here, so prod
|
|
58
|
-
* callers pass the signed-in user's `{ uid, token }` explicitly.
|
|
54
|
+
* the handle's own identity (the sandbox context's `auth`).
|
|
59
55
|
*/
|
|
60
56
|
identity?: StorageAuth | null;
|
|
61
57
|
/**
|
|
@@ -77,13 +73,7 @@ export interface UseStorageRulesGateResult {
|
|
|
77
73
|
status: StorageRulesGateStatus;
|
|
78
74
|
/** Where the active ruleset came from. */
|
|
79
75
|
source: StorageRulesSource;
|
|
80
|
-
/**
|
|
81
|
-
* True for prod handles: client-side evaluation is ADVISORY there
|
|
82
|
-
* — the server's evaluator is authoritative, and this gate only
|
|
83
|
-
* sees whatever the `rules` option mirrors (which can drift from
|
|
84
|
-
* what is deployed). Sandbox verdicts come from the same evaluator
|
|
85
|
-
* the sandbox enforces with, so they are truthful.
|
|
86
|
-
*/
|
|
76
|
+
/** Always false: `pyric/storage` handles are sandbox mirrors. */
|
|
87
77
|
advisory: boolean;
|
|
88
78
|
/** The identity the verdicts evaluate under. */
|
|
89
79
|
identity: StorageAuth | null;
|
|
@@ -112,10 +102,8 @@ export interface UseStorageRulesGateResult {
|
|
|
112
102
|
* (`getStorageSandbox(ctx, { rules })` parses it into the handle's
|
|
113
103
|
* `StorageService`) — the hook reads it through the handle's target,
|
|
114
104
|
* so sandbox callers pass nothing. Identity likewise defaults to the
|
|
115
|
-
* handle's `SandboxContext.auth`.
|
|
116
|
-
*
|
|
117
|
-
* `identity` explicitly and treat verdicts as advisory (`advisory:
|
|
118
|
-
* true` — the server is authoritative).
|
|
105
|
+
* handle's `SandboxContext.auth`. An explicit `rules` or `identity`
|
|
106
|
+
* option overrides the handle when evaluating a what-if scenario.
|
|
119
107
|
*
|
|
120
108
|
* Evaluation contract (mirrors `pyric/storage`'s own enforcement):
|
|
121
109
|
* `resource` (the existing object) is bound as `null` — the gate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageRulesGate.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEhB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC
|
|
1
|
+
{"version":3,"file":"useStorageRulesGate.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEhB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,MAAM,WAAW,yBAAyB;IACxC,sDAAsD;IACtD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,0CAA0C;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAC;IACjD,kEAAkE;IAClE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAqBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CA2H3B"}
|
|
@@ -23,10 +23,8 @@ const ALLOW_ALL = Object.freeze({
|
|
|
23
23
|
* (`getStorageSandbox(ctx, { rules })` parses it into the handle's
|
|
24
24
|
* `StorageService`) — the hook reads it through the handle's target,
|
|
25
25
|
* so sandbox callers pass nothing. Identity likewise defaults to the
|
|
26
|
-
* handle's `SandboxContext.auth`.
|
|
27
|
-
*
|
|
28
|
-
* `identity` explicitly and treat verdicts as advisory (`advisory:
|
|
29
|
-
* true` — the server is authoritative).
|
|
26
|
+
* handle's `SandboxContext.auth`. An explicit `rules` or `identity`
|
|
27
|
+
* option overrides the handle when evaluating a what-if scenario.
|
|
30
28
|
*
|
|
31
29
|
* Evaluation contract (mirrors `pyric/storage`'s own enforcement):
|
|
32
30
|
* `resource` (the existing object) is bound as `null` — the gate
|
|
@@ -49,7 +47,7 @@ export function useStorageRulesGate(storage, options = {}) {
|
|
|
49
47
|
setState({ status: 'idle', rules: null, source: 'none', error: undefined });
|
|
50
48
|
return;
|
|
51
49
|
}
|
|
52
|
-
// Explicit option wins
|
|
50
|
+
// Explicit option wins for what-if evaluation.
|
|
53
51
|
if (rulesOption != null) {
|
|
54
52
|
try {
|
|
55
53
|
const parsed = typeof rulesOption === 'string' ? parseStorageRules(rulesOption) : rulesOption;
|
|
@@ -65,56 +63,50 @@ export function useStorageRulesGate(storage, options = {}) {
|
|
|
65
63
|
}
|
|
66
64
|
return;
|
|
67
65
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
error: undefined,
|
|
80
|
-
});
|
|
81
|
-
})
|
|
82
|
-
.catch((e) => {
|
|
83
|
-
if (cancelled)
|
|
84
|
-
return;
|
|
85
|
-
setState({
|
|
86
|
-
status: 'error',
|
|
87
|
-
rules: null,
|
|
88
|
-
source: 'none',
|
|
89
|
-
error: e instanceof Error ? e : new Error(String(e)),
|
|
90
|
-
});
|
|
66
|
+
let cancelled = false;
|
|
67
|
+
setState({ status: 'loading', rules: null, source: 'none', error: undefined });
|
|
68
|
+
target.servicePromise
|
|
69
|
+
.then((service) => {
|
|
70
|
+
if (cancelled)
|
|
71
|
+
return;
|
|
72
|
+
setState({
|
|
73
|
+
status: 'ready',
|
|
74
|
+
rules: service.rules,
|
|
75
|
+
source: service.rules ? 'sandbox' : 'none',
|
|
76
|
+
error: undefined,
|
|
91
77
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
78
|
+
})
|
|
79
|
+
.catch((e) => {
|
|
80
|
+
if (cancelled)
|
|
81
|
+
return;
|
|
82
|
+
setState({
|
|
83
|
+
status: 'error',
|
|
84
|
+
rules: null,
|
|
85
|
+
source: 'none',
|
|
86
|
+
error: e instanceof Error ? e : new Error(String(e)),
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
return () => {
|
|
90
|
+
cancelled = true;
|
|
91
|
+
};
|
|
99
92
|
}, [target, rulesOption]);
|
|
100
93
|
// `undefined` means "derive from the handle"; an explicit `null`
|
|
101
94
|
// means anonymous.
|
|
102
|
-
const identity = identityOption !== undefined
|
|
103
|
-
? identityOption
|
|
104
|
-
: target?.kind === 'sandbox'
|
|
105
|
-
? target.context.auth
|
|
106
|
-
: null;
|
|
95
|
+
const identity = identityOption !== undefined ? identityOption : (target?.context.auth ?? null);
|
|
107
96
|
const { rules, status } = state;
|
|
108
97
|
const writeSize = writeResource?.size;
|
|
109
98
|
const writeContentType = writeResource?.contentType;
|
|
110
99
|
const verdictFor = useCallback((path) => {
|
|
111
100
|
if (rules == null)
|
|
112
101
|
return ALLOW_ALL;
|
|
102
|
+
const objectPath = normalizeStoragePath(path);
|
|
103
|
+
const bucket = target?.bucket ?? 'pyric-default';
|
|
104
|
+
const rulesPath = objectPath === '' ? `b/${bucket}/o` : `b/${bucket}/o/${objectPath}`;
|
|
113
105
|
const evaluate = (method) => evaluateStorageRules(rules, {
|
|
114
106
|
request: {
|
|
115
107
|
auth: identity,
|
|
116
108
|
method,
|
|
117
|
-
path:
|
|
109
|
+
path: rulesPath,
|
|
118
110
|
...(method === 'write' && writeSize !== undefined
|
|
119
111
|
? { resource: { size: writeSize, contentType: writeContentType } }
|
|
120
112
|
: {}),
|
|
@@ -133,7 +125,7 @@ export function useStorageRulesGate(storage, options = {}) {
|
|
|
133
125
|
write: write.allowed ? [] : write.reasons,
|
|
134
126
|
},
|
|
135
127
|
};
|
|
136
|
-
}, [rules, identity, writeSize, writeContentType]);
|
|
128
|
+
}, [rules, target?.bucket, identity, writeSize, writeContentType]);
|
|
137
129
|
const pathsKey = typeof paths === 'string' ? paths : (paths ?? []).join('\n');
|
|
138
130
|
const verdicts = useMemo(() => {
|
|
139
131
|
const list = typeof paths === 'string' ? [paths] : (paths ?? []);
|
|
@@ -148,7 +140,7 @@ export function useStorageRulesGate(storage, options = {}) {
|
|
|
148
140
|
return {
|
|
149
141
|
status,
|
|
150
142
|
source: state.source,
|
|
151
|
-
advisory:
|
|
143
|
+
advisory: false,
|
|
152
144
|
identity,
|
|
153
145
|
verdicts,
|
|
154
146
|
verdictFor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageRulesGate.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useStorageRulesGate.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
* a) write a zero-byte `<path>/` placeholder object (the emulator-UI
|
|
9
9
|
* convention — `useObjectUpload.createFolder` does this): the
|
|
10
10
|
* folder survives reloads, but every created folder deposits a
|
|
11
|
-
* phantom object in the sandbox store, and the
|
|
12
|
-
*
|
|
13
|
-
* `StorageApi` path has no channel for it at all);
|
|
11
|
+
* phantom object in the sandbox store, and the Studio worker
|
|
12
|
+
* `StorageApi` path has no channel for the trailing-slash ref;
|
|
14
13
|
*
|
|
15
14
|
* b) hold the created prefix as CLIENT-SIDE PENDING STATE and let the
|
|
16
15
|
* first upload into it materialize it for real. The store stays
|
|
@@ -48,6 +47,11 @@ export type PendingPrefixAction =
|
|
|
48
47
|
| {
|
|
49
48
|
type: 'materialize';
|
|
50
49
|
path: string;
|
|
50
|
+
}
|
|
51
|
+
/** Remove a session-only folder and every pending descendant beneath it. */
|
|
52
|
+
| {
|
|
53
|
+
type: 'discard';
|
|
54
|
+
path: string;
|
|
51
55
|
} | {
|
|
52
56
|
type: 'clear';
|
|
53
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pendingPrefixes.d.ts","sourceRoot":"","sources":["../../src/storage/pendingPrefixes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pendingPrefixes.d.ts","sourceRoot":"","sources":["../../src/storage/pendingPrefixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,wDAAwD;AACxD,MAAM,MAAM,kBAAkB,GAAG,SAAS,MAAM,EAAE,CAAC;AAEnD,MAAM,MAAM,mBAAmB;AAC7B;+CAC+C;AAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAClC;2DAC2D;GACzD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACvC,4EAA4E;GAC1E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKtD;AAED,eAAO,MAAM,sBAAsB,EAAE,kBAAuB,CAAC;AAE7D,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,mBAAmB,GAC1B,kBAAkB,CAsBpB;AAED;;oCAEoC;AACpC,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAMV;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7D"}
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
* a) write a zero-byte `<path>/` placeholder object (the emulator-UI
|
|
9
9
|
* convention — `useObjectUpload.createFolder` does this): the
|
|
10
10
|
* folder survives reloads, but every created folder deposits a
|
|
11
|
-
* phantom object in the sandbox store, and the
|
|
12
|
-
*
|
|
13
|
-
* `StorageApi` path has no channel for it at all);
|
|
11
|
+
* phantom object in the sandbox store, and the Studio worker
|
|
12
|
+
* `StorageApi` path has no channel for the trailing-slash ref;
|
|
14
13
|
*
|
|
15
14
|
* b) hold the created prefix as CLIENT-SIDE PENDING STATE and let the
|
|
16
15
|
* first upload into it materialize it for real. The store stays
|
|
@@ -59,6 +58,13 @@ export function pendingPrefixReducer(state, action) {
|
|
|
59
58
|
const next = state.filter((p) => !real.has(p));
|
|
60
59
|
return next.length === state.length ? state : next;
|
|
61
60
|
}
|
|
61
|
+
case 'discard': {
|
|
62
|
+
const path = normalizeStoragePath(action.path);
|
|
63
|
+
if (path === '')
|
|
64
|
+
return state;
|
|
65
|
+
const next = state.filter((entry) => entry !== path && !entry.startsWith(`${path}/`));
|
|
66
|
+
return next.length === state.length ? state : next;
|
|
67
|
+
}
|
|
62
68
|
case 'clear':
|
|
63
69
|
return state.length === 0 ? state : initialPendingPrefixes;
|
|
64
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pendingPrefixes.js","sourceRoot":"","sources":["../../src/storage/pendingPrefixes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pendingPrefixes.js","sourceRoot":"","sources":["../../src/storage/pendingPrefixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAgB/D,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAuB,EAAE,CAAC;AAE7D,MAAM,UAAU,oBAAoB,CAClC,KAAyB,EACzB,MAA2B;IAE3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YACrC,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,CAAC;QACD,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;oCAEoC;AACpC,MAAM,UAAU,mBAAmB,CACjC,KAAyB,EACzB,UAAkB;IAElB,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;IACjD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SAC5F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAAC,KAAyB,EAAE,IAAY;IACrE,OAAO,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,sBAAsB,CAAC;IACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,sCAAsC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -19,7 +19,7 @@ import { type ReactNode } from 'react';
|
|
|
19
19
|
* rules internals and no-ops on a handle without them (worker handles), which is
|
|
20
20
|
* the correct degrade (the worker enforces read rules on `listAll` server-side).
|
|
21
21
|
*/
|
|
22
|
-
export type StorageApi = Pick<typeof import('pyric/storage'), 'ref' | 'listAll' | 'getMetadata' | 'getBlob' | 'uploadBytes'>;
|
|
22
|
+
export type StorageApi = Pick<typeof import('pyric/storage'), 'ref' | 'listAll' | 'getMetadata' | 'getBlob' | 'uploadBytes' | 'deleteObject'>;
|
|
23
23
|
/** Read the active Storage API bundle (defaults to in-process `pyric/storage`). */
|
|
24
24
|
export declare function useStorageApi(): StorageApi;
|
|
25
25
|
/** Provide a Storage API bundle to the subtree (Studio's worker client). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storageApi.d.ts","sourceRoot":"","sources":["../../src/storage/storageApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,cAAc,eAAe,CAAC,EAC9B,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"storageApi.d.ts","sourceRoot":"","sources":["../../src/storage/storageApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAC3B,cAAc,eAAe,CAAC,EAC9B,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,CAC/E,CAAC;AAaF,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB,uFAEA"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { createContext, createElement, useContext } from 'react';
|
|
2
|
-
import { ref, listAll, getMetadata, getBlob, uploadBytes } from 'pyric/storage';
|
|
3
|
-
const inProcessStorageApi = {
|
|
2
|
+
import { ref, listAll, getMetadata, getBlob, uploadBytes, deleteObject } from 'pyric/storage';
|
|
3
|
+
const inProcessStorageApi = {
|
|
4
|
+
ref,
|
|
5
|
+
listAll,
|
|
6
|
+
getMetadata,
|
|
7
|
+
getBlob,
|
|
8
|
+
uploadBytes,
|
|
9
|
+
deleteObject,
|
|
10
|
+
};
|
|
4
11
|
const StorageApiContext = createContext(inProcessStorageApi);
|
|
5
12
|
/** Read the active Storage API bundle (defaults to in-process `pyric/storage`). */
|
|
6
13
|
export function useStorageApi() {
|