@pyric/ui 0.1.0-alpha.7
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 +79 -0
- package/dist/agents/ContextWindowUsage.d.ts +67 -0
- package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
- package/dist/agents/ContextWindowUsage.js +115 -0
- package/dist/agents/ContextWindowUsage.js.map +1 -0
- package/dist/agents/EmptyState.d.ts +18 -0
- package/dist/agents/EmptyState.d.ts.map +1 -0
- package/dist/agents/EmptyState.js +11 -0
- package/dist/agents/EmptyState.js.map +1 -0
- package/dist/agents/Fold.d.ts +37 -0
- package/dist/agents/Fold.d.ts.map +1 -0
- package/dist/agents/Fold.js +18 -0
- package/dist/agents/Fold.js.map +1 -0
- package/dist/agents/Modal.d.ts +25 -0
- package/dist/agents/Modal.d.ts.map +1 -0
- package/dist/agents/Modal.js +28 -0
- package/dist/agents/Modal.js.map +1 -0
- package/dist/agents/PulsingDot.d.ts +21 -0
- package/dist/agents/PulsingDot.d.ts.map +1 -0
- package/dist/agents/PulsingDot.js +18 -0
- package/dist/agents/PulsingDot.js.map +1 -0
- package/dist/agents/index.d.ts +15 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +15 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/auth/authApi.d.ts +32 -0
- package/dist/auth/authApi.d.ts.map +1 -0
- package/dist/auth/authApi.js +27 -0
- package/dist/auth/authApi.js.map +1 -0
- package/dist/auth/claims.d.ts +27 -0
- package/dist/auth/claims.d.ts.map +1 -0
- package/dist/auth/claims.js +58 -0
- package/dist/auth/claims.js.map +1 -0
- package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
- package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
- package/dist/auth/components/AuthProviderToggles.js +48 -0
- package/dist/auth/components/AuthProviderToggles.js.map +1 -0
- package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
- package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
- package/dist/auth/components/AuthSignInHelper.js +69 -0
- package/dist/auth/components/AuthSignInHelper.js.map +1 -0
- package/dist/auth/components/AuthUserForm.d.ts +84 -0
- package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
- package/dist/auth/components/AuthUserForm.js +89 -0
- package/dist/auth/components/AuthUserForm.js.map +1 -0
- package/dist/auth/components/AuthUserList.d.ts +51 -0
- package/dist/auth/components/AuthUserList.d.ts.map +1 -0
- package/dist/auth/components/AuthUserList.js +46 -0
- package/dist/auth/components/AuthUserList.js.map +1 -0
- package/dist/auth/components/ClaimsField.d.ts +22 -0
- package/dist/auth/components/ClaimsField.d.ts.map +1 -0
- package/dist/auth/components/ClaimsField.js +11 -0
- package/dist/auth/components/ClaimsField.js.map +1 -0
- package/dist/auth/components/confirmActions.d.ts +40 -0
- package/dist/auth/components/confirmActions.d.ts.map +1 -0
- package/dist/auth/components/confirmActions.js +49 -0
- package/dist/auth/components/confirmActions.js.map +1 -0
- package/dist/auth/controller.d.ts +73 -0
- package/dist/auth/controller.d.ts.map +1 -0
- package/dist/auth/controller.js +139 -0
- package/dist/auth/controller.js.map +1 -0
- package/dist/auth/hooks/index.d.ts +7 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +7 -0
- package/dist/auth/hooks/index.js.map +1 -0
- package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
- package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
- package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
- package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
- package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
- package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
- package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
- package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthUserEditor.js +27 -0
- package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
- package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
- package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
- package/dist/auth/hooks/useAuthUsers.js +111 -0
- package/dist/auth/hooks/useAuthUsers.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +13 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/providers.d.ts +11 -0
- package/dist/auth/providers.d.ts.map +1 -0
- package/dist/auth/providers.js +28 -0
- package/dist/auth/providers.js.map +1 -0
- package/dist/auth/reducers/userEditor.d.ts +55 -0
- package/dist/auth/reducers/userEditor.d.ts.map +1 -0
- package/dist/auth/reducers/userEditor.js +136 -0
- package/dist/auth/reducers/userEditor.js.map +1 -0
- package/dist/events/components/ActivityActionItems.d.ts +45 -0
- package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
- package/dist/events/components/ActivityActionItems.js +68 -0
- package/dist/events/components/ActivityActionItems.js.map +1 -0
- package/dist/events/components/ActivityGrid.d.ts +65 -0
- package/dist/events/components/ActivityGrid.d.ts.map +1 -0
- package/dist/events/components/ActivityGrid.js +61 -0
- package/dist/events/components/ActivityGrid.js.map +1 -0
- package/dist/events/components/ActivityGridRow.d.ts +31 -0
- package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
- package/dist/events/components/ActivityGridRow.js +23 -0
- package/dist/events/components/ActivityGridRow.js.map +1 -0
- package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
- package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
- package/dist/events/components/ProposedChangeDiff.js +60 -0
- package/dist/events/components/ProposedChangeDiff.js.map +1 -0
- package/dist/events/components/format.d.ts +11 -0
- package/dist/events/components/format.d.ts.map +1 -0
- package/dist/events/components/format.js +26 -0
- package/dist/events/components/format.js.map +1 -0
- package/dist/events/components/index.d.ts +6 -0
- package/dist/events/components/index.d.ts.map +1 -0
- package/dist/events/components/index.js +6 -0
- package/dist/events/components/index.js.map +1 -0
- package/dist/events/digest.d.ts +167 -0
- package/dist/events/digest.d.ts.map +1 -0
- package/dist/events/digest.js +426 -0
- package/dist/events/digest.js.map +1 -0
- package/dist/events/hooks/index.d.ts +3 -0
- package/dist/events/hooks/index.d.ts.map +1 -0
- package/dist/events/hooks/index.js +3 -0
- package/dist/events/hooks/index.js.map +1 -0
- package/dist/events/hooks/useActivityDigest.d.ts +27 -0
- package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
- package/dist/events/hooks/useActivityDigest.js +18 -0
- package/dist/events/hooks/useActivityDigest.js.map +1 -0
- package/dist/events/hooks/useActivityStream.d.ts +44 -0
- package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
- package/dist/events/hooks/useActivityStream.js +38 -0
- package/dist/events/hooks/useActivityStream.js.map +1 -0
- package/dist/events/index.d.ts +15 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +14 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +160 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +21 -0
- package/dist/events/types.js.map +1 -0
- package/dist/firestore/components/CollectionList.d.ts +22 -0
- package/dist/firestore/components/CollectionList.d.ts.map +1 -0
- package/dist/firestore/components/CollectionList.js +21 -0
- package/dist/firestore/components/CollectionList.js.map +1 -0
- package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
- package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
- package/dist/firestore/components/DeleteWithConfirm.js +33 -0
- package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
- package/dist/firestore/components/DocumentEditor.d.ts +47 -0
- package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
- package/dist/firestore/components/DocumentEditor.js +176 -0
- package/dist/firestore/components/DocumentEditor.js.map +1 -0
- package/dist/firestore/components/DocumentList.d.ts +60 -0
- package/dist/firestore/components/DocumentList.d.ts.map +1 -0
- package/dist/firestore/components/DocumentList.js +39 -0
- package/dist/firestore/components/DocumentList.js.map +1 -0
- package/dist/firestore/components/DocumentPreview.d.ts +68 -0
- package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
- package/dist/firestore/components/DocumentPreview.js +76 -0
- package/dist/firestore/components/DocumentPreview.js.map +1 -0
- package/dist/firestore/components/FieldRenderer.d.ts +17 -0
- package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
- package/dist/firestore/components/FieldRenderer.js +16 -0
- package/dist/firestore/components/FieldRenderer.js.map +1 -0
- package/dist/firestore/components/QueryBuilder.d.ts +25 -0
- package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
- package/dist/firestore/components/QueryBuilder.js +78 -0
- package/dist/firestore/components/QueryBuilder.js.map +1 -0
- package/dist/firestore/components/ReferencePicker.d.ts +33 -0
- package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
- package/dist/firestore/components/ReferencePicker.js +42 -0
- package/dist/firestore/components/ReferencePicker.js.map +1 -0
- package/dist/firestore/components/TreeEntry.d.ts +15 -0
- package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
- package/dist/firestore/components/TreeEntry.js +23 -0
- package/dist/firestore/components/TreeEntry.js.map +1 -0
- package/dist/firestore/components/context.d.ts +18 -0
- package/dist/firestore/components/context.d.ts.map +1 -0
- package/dist/firestore/components/context.js +7 -0
- package/dist/firestore/components/context.js.map +1 -0
- package/dist/firestore/fieldEditors/array.d.ts +3 -0
- package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/array.js +16 -0
- package/dist/firestore/fieldEditors/array.js.map +1 -0
- package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
- package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/boolean.js +13 -0
- package/dist/firestore/fieldEditors/boolean.js.map +1 -0
- package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
- package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/bytes.js +31 -0
- package/dist/firestore/fieldEditors/bytes.js.map +1 -0
- package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
- package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/geopoint.js +32 -0
- package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
- package/dist/firestore/fieldEditors/map.d.ts +3 -0
- package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/map.js +19 -0
- package/dist/firestore/fieldEditors/map.js.map +1 -0
- package/dist/firestore/fieldEditors/null.d.ts +3 -0
- package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/null.js +17 -0
- package/dist/firestore/fieldEditors/null.js.map +1 -0
- package/dist/firestore/fieldEditors/number.d.ts +3 -0
- package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/number.js +24 -0
- package/dist/firestore/fieldEditors/number.js.map +1 -0
- package/dist/firestore/fieldEditors/reference.d.ts +4 -0
- package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/reference.js +49 -0
- package/dist/firestore/fieldEditors/reference.js.map +1 -0
- package/dist/firestore/fieldEditors/registry.d.ts +16 -0
- package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/registry.js +42 -0
- package/dist/firestore/fieldEditors/registry.js.map +1 -0
- package/dist/firestore/fieldEditors/string.d.ts +3 -0
- package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/string.js +13 -0
- package/dist/firestore/fieldEditors/string.js.map +1 -0
- package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
- package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/timestamp.js +52 -0
- package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
- package/dist/firestore/fieldEditors/types.d.ts +64 -0
- package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/types.js +2 -0
- package/dist/firestore/fieldEditors/types.js.map +1 -0
- package/dist/firestore/fieldEditors/vector.d.ts +29 -0
- package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
- package/dist/firestore/fieldEditors/vector.js +93 -0
- package/dist/firestore/fieldEditors/vector.js.map +1 -0
- package/dist/firestore/firestoreApi.d.ts +35 -0
- package/dist/firestore/firestoreApi.d.ts.map +1 -0
- package/dist/firestore/firestoreApi.js +28 -0
- package/dist/firestore/firestoreApi.js.map +1 -0
- package/dist/firestore/hooks/coerceError.d.ts +17 -0
- package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
- package/dist/firestore/hooks/coerceError.js +41 -0
- package/dist/firestore/hooks/coerceError.js.map +1 -0
- package/dist/firestore/hooks/index.d.ts +10 -0
- package/dist/firestore/hooks/index.d.ts.map +1 -0
- package/dist/firestore/hooks/index.js +10 -0
- package/dist/firestore/hooks/index.js.map +1 -0
- package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
- package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
- package/dist/firestore/hooks/useCollectionList.js +51 -0
- package/dist/firestore/hooks/useCollectionList.js.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts +58 -0
- package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentEditor.js +68 -0
- package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
- package/dist/firestore/hooks/useDocumentList.d.ts +45 -0
- package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentList.js +112 -0
- package/dist/firestore/hooks/useDocumentList.js.map +1 -0
- package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
- package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
- package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
- package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
- package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
- package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
- package/dist/firestore/hooks/useFirestoreCollection.js +35 -0
- package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
- package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
- package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
- package/dist/firestore/hooks/useFirestoreDoc.js +34 -0
- package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
- package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
- package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
- package/dist/firestore/hooks/useQueryBuilder.js +110 -0
- package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
- package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
- package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
- package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
- package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
- package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
- package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
- package/dist/firestore/hooks/useReferencePicker.js +140 -0
- package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
- package/dist/firestore/import/parseImport.d.ts +55 -0
- package/dist/firestore/import/parseImport.d.ts.map +1 -0
- package/dist/firestore/import/parseImport.js +101 -0
- package/dist/firestore/import/parseImport.js.map +1 -0
- package/dist/firestore/index.d.ts +20 -0
- package/dist/firestore/index.d.ts.map +1 -0
- package/dist/firestore/index.js +28 -0
- package/dist/firestore/index.js.map +1 -0
- package/dist/firestore/reducers/defaults.d.ts +10 -0
- package/dist/firestore/reducers/defaults.d.ts.map +1 -0
- package/dist/firestore/reducers/defaults.js +37 -0
- package/dist/firestore/reducers/defaults.js.map +1 -0
- package/dist/firestore/reducers/documentEditor.d.ts +23 -0
- package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
- package/dist/firestore/reducers/documentEditor.js +199 -0
- package/dist/firestore/reducers/documentEditor.js.map +1 -0
- package/dist/firestore/reducers/tree.d.ts +28 -0
- package/dist/firestore/reducers/tree.d.ts.map +1 -0
- package/dist/firestore/reducers/tree.js +129 -0
- package/dist/firestore/reducers/tree.js.map +1 -0
- package/dist/firestore/reducers/types.d.ts +112 -0
- package/dist/firestore/reducers/types.d.ts.map +1 -0
- package/dist/firestore/reducers/types.js +2 -0
- package/dist/firestore/reducers/types.js.map +1 -0
- package/dist/firestore/reducers/validation.d.ts +25 -0
- package/dist/firestore/reducers/validation.d.ts.map +1 -0
- package/dist/firestore/reducers/validation.js +121 -0
- package/dist/firestore/reducers/validation.js.map +1 -0
- package/dist/firestore/types.d.ts +77 -0
- package/dist/firestore/types.d.ts.map +1 -0
- package/dist/firestore/types.js +196 -0
- package/dist/firestore/types.js.map +1 -0
- package/dist/firestore/validation/ids.d.ts +23 -0
- package/dist/firestore/validation/ids.d.ts.map +1 -0
- package/dist/firestore/validation/ids.js +46 -0
- package/dist/firestore/validation/ids.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/Badge.d.ts +28 -0
- package/dist/primitives/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge.js +11 -0
- package/dist/primitives/Badge.js.map +1 -0
- package/dist/primitives/ConfirmDialog.d.ts +42 -0
- package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
- package/dist/primitives/ConfirmDialog.js +61 -0
- package/dist/primitives/ConfirmDialog.js.map +1 -0
- package/dist/primitives/CopyButton.d.ts +28 -0
- package/dist/primitives/CopyButton.d.ts.map +1 -0
- package/dist/primitives/CopyButton.js +27 -0
- package/dist/primitives/CopyButton.js.map +1 -0
- package/dist/primitives/JsonView.d.ts +29 -0
- package/dist/primitives/JsonView.d.ts.map +1 -0
- package/dist/primitives/JsonView.js +56 -0
- package/dist/primitives/JsonView.js.map +1 -0
- package/dist/primitives/SegmentedControl.d.ts +37 -0
- package/dist/primitives/SegmentedControl.d.ts.map +1 -0
- package/dist/primitives/SegmentedControl.js +18 -0
- package/dist/primitives/SegmentedControl.js.map +1 -0
- package/dist/primitives/Toast.d.ts +48 -0
- package/dist/primitives/Toast.d.ts.map +1 -0
- package/dist/primitives/Toast.js +60 -0
- package/dist/primitives/Toast.js.map +1 -0
- package/dist/primitives/VirtualList.d.ts +37 -0
- package/dist/primitives/VirtualList.d.ts.map +1 -0
- package/dist/primitives/VirtualList.js +47 -0
- package/dist/primitives/VirtualList.js.map +1 -0
- package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
- package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
- package/dist/primitives/hooks/useContainerSize.js +45 -0
- package/dist/primitives/hooks/useContainerSize.js.map +1 -0
- package/dist/primitives/index.d.ts +10 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +10 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/useConfirm.d.ts +34 -0
- package/dist/primitives/useConfirm.d.ts.map +1 -0
- package/dist/primitives/useConfirm.js +63 -0
- package/dist/primitives/useConfirm.js.map +1 -0
- package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
- package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
- package/dist/rtdb/components/RtdbPathBar.js +47 -0
- package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
- package/dist/rtdb/components/RtdbTree.d.ts +38 -0
- package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
- package/dist/rtdb/components/RtdbTree.js +103 -0
- package/dist/rtdb/components/RtdbTree.js.map +1 -0
- package/dist/rtdb/editor.d.ts +25 -0
- package/dist/rtdb/editor.d.ts.map +1 -0
- package/dist/rtdb/editor.js +79 -0
- package/dist/rtdb/editor.js.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts +31 -0
- package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
- package/dist/rtdb/hooks/useRtdbTree.js +49 -0
- package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
- package/dist/rtdb/index.d.ts +17 -0
- package/dist/rtdb/index.d.ts.map +1 -0
- package/dist/rtdb/index.js +21 -0
- package/dist/rtdb/index.js.map +1 -0
- package/dist/rtdb/pathInput.d.ts +28 -0
- package/dist/rtdb/pathInput.d.ts.map +1 -0
- package/dist/rtdb/pathInput.js +40 -0
- package/dist/rtdb/pathInput.js.map +1 -0
- package/dist/rtdb/reducers/tree.d.ts +86 -0
- package/dist/rtdb/reducers/tree.d.ts.map +1 -0
- package/dist/rtdb/reducers/tree.js +131 -0
- package/dist/rtdb/reducers/tree.js.map +1 -0
- package/dist/rtdb/rtdbApi.d.ts +20 -0
- package/dist/rtdb/rtdbApi.d.ts.map +1 -0
- package/dist/rtdb/rtdbApi.js +2 -0
- package/dist/rtdb/rtdbApi.js.map +1 -0
- package/dist/rtdb/values.d.ts +44 -0
- package/dist/rtdb/values.d.ts.map +1 -0
- package/dist/rtdb/values.js +143 -0
- package/dist/rtdb/values.js.map +1 -0
- package/dist/rules/components/DenialInspector.d.ts +18 -0
- package/dist/rules/components/DenialInspector.d.ts.map +1 -0
- package/dist/rules/components/DenialInspector.js +58 -0
- package/dist/rules/components/DenialInspector.js.map +1 -0
- package/dist/rules/components/format.d.ts +56 -0
- package/dist/rules/components/format.d.ts.map +1 -0
- package/dist/rules/components/format.js +137 -0
- package/dist/rules/components/format.js.map +1 -0
- package/dist/rules/components/index.d.ts +4 -0
- package/dist/rules/components/index.d.ts.map +1 -0
- package/dist/rules/components/index.js +4 -0
- package/dist/rules/components/index.js.map +1 -0
- package/dist/rules/components/scope.d.ts +10 -0
- package/dist/rules/components/scope.d.ts.map +1 -0
- package/dist/rules/components/scope.js +72 -0
- package/dist/rules/components/scope.js.map +1 -0
- package/dist/rules/hooks/index.d.ts +2 -0
- package/dist/rules/hooks/index.d.ts.map +1 -0
- package/dist/rules/hooks/index.js +2 -0
- package/dist/rules/hooks/index.js.map +1 -0
- package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
- package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
- package/dist/rules/hooks/useDenialTrace.js +58 -0
- package/dist/rules/hooks/useDenialTrace.js.map +1 -0
- package/dist/rules/index.d.ts +14 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +13 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/types.d.ts +75 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/storage/collisionRename.d.ts +73 -0
- package/dist/storage/collisionRename.d.ts.map +1 -0
- package/dist/storage/collisionRename.js +113 -0
- package/dist/storage/collisionRename.js.map +1 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +68 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
- package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
- package/dist/storage/components/ObjectBrowser.d.ts +75 -0
- package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
- package/dist/storage/components/ObjectBrowser.js +59 -0
- package/dist/storage/components/ObjectBrowser.js.map +1 -0
- package/dist/storage/components/ObjectInspector.d.ts +43 -0
- package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
- package/dist/storage/components/ObjectInspector.js +92 -0
- package/dist/storage/components/ObjectInspector.js.map +1 -0
- package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
- package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
- package/dist/storage/components/PathBreadcrumb.js +26 -0
- package/dist/storage/components/PathBreadcrumb.js.map +1 -0
- package/dist/storage/components/UploadDropzone.d.ts +50 -0
- package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
- package/dist/storage/components/UploadDropzone.js +109 -0
- package/dist/storage/components/UploadDropzone.js.map +1 -0
- package/dist/storage/folderPlaceholder.d.ts +14 -0
- package/dist/storage/folderPlaceholder.d.ts.map +1 -0
- package/dist/storage/folderPlaceholder.js +27 -0
- package/dist/storage/folderPlaceholder.js.map +1 -0
- package/dist/storage/hooks/index.d.ts +9 -0
- package/dist/storage/hooks/index.d.ts.map +1 -0
- package/dist/storage/hooks/index.js +9 -0
- package/dist/storage/hooks/index.js.map +1 -0
- package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
- package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
- package/dist/storage/hooks/useMetadataEditor.js +193 -0
- package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
- package/dist/storage/hooks/useObjectUpload.d.ts +109 -0
- package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
- package/dist/storage/hooks/useObjectUpload.js +134 -0
- package/dist/storage/hooks/useObjectUpload.js.map +1 -0
- package/dist/storage/hooks/usePathState.d.ts +43 -0
- package/dist/storage/hooks/usePathState.d.ts.map +1 -0
- package/dist/storage/hooks/usePathState.js +42 -0
- package/dist/storage/hooks/usePathState.js.map +1 -0
- package/dist/storage/hooks/useStorageDelete.d.ts +73 -0
- package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageDelete.js +114 -0
- package/dist/storage/hooks/useStorageDelete.js.map +1 -0
- package/dist/storage/hooks/useStorageList.d.ts +74 -0
- package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageList.js +167 -0
- package/dist/storage/hooks/useStorageList.js.map +1 -0
- package/dist/storage/hooks/useStorageObject.d.ts +34 -0
- package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageObject.js +114 -0
- package/dist/storage/hooks/useStorageObject.js.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts +128 -0
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageRulesGate.js +158 -0
- package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
- package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
- package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
- package/dist/storage/hooks/useStorageSelection.js +55 -0
- package/dist/storage/hooks/useStorageSelection.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +17 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/pendingPrefixes.d.ts +73 -0
- package/dist/storage/pendingPrefixes.d.ts.map +1 -0
- package/dist/storage/pendingPrefixes.js +98 -0
- package/dist/storage/pendingPrefixes.js.map +1 -0
- package/dist/storage/previews.d.ts +51 -0
- package/dist/storage/previews.d.ts.map +1 -0
- package/dist/storage/previews.js +73 -0
- package/dist/storage/previews.js.map +1 -0
- package/dist/storage/storageApi.d.ts +30 -0
- package/dist/storage/storageApi.d.ts.map +1 -0
- package/dist/storage/storageApi.js +13 -0
- package/dist/storage/storageApi.js.map +1 -0
- package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
- package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
- package/dist/traffic/components/RuleHeatmap.js +40 -0
- package/dist/traffic/components/RuleHeatmap.js.map +1 -0
- package/dist/traffic/components/TrafficDetail.d.ts +33 -0
- package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
- package/dist/traffic/components/TrafficDetail.js +28 -0
- package/dist/traffic/components/TrafficDetail.js.map +1 -0
- package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
- package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
- package/dist/traffic/components/TrafficGroupRow.js +18 -0
- package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
- package/dist/traffic/components/TrafficLineChart.d.ts +34 -0
- package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
- package/dist/traffic/components/TrafficLineChart.js +49 -0
- package/dist/traffic/components/TrafficLineChart.js.map +1 -0
- package/dist/traffic/components/TrafficLog.d.ts +52 -0
- package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
- package/dist/traffic/components/TrafficLog.js +34 -0
- package/dist/traffic/components/TrafficLog.js.map +1 -0
- package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
- package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
- package/dist/traffic/components/TrafficMetricCards.js +24 -0
- package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
- package/dist/traffic/components/TrafficRow.d.ts +40 -0
- package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
- package/dist/traffic/components/TrafficRow.js +27 -0
- package/dist/traffic/components/TrafficRow.js.map +1 -0
- package/dist/traffic/components/TrafficStats.d.ts +18 -0
- package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
- package/dist/traffic/components/TrafficStats.js +19 -0
- package/dist/traffic/components/TrafficStats.js.map +1 -0
- package/dist/traffic/components/TrafficTimeline.d.ts +81 -0
- package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
- package/dist/traffic/components/TrafficTimeline.js +72 -0
- package/dist/traffic/components/TrafficTimeline.js.map +1 -0
- package/dist/traffic/components/format.d.ts +13 -0
- package/dist/traffic/components/format.d.ts.map +1 -0
- package/dist/traffic/components/format.js +24 -0
- package/dist/traffic/components/format.js.map +1 -0
- package/dist/traffic/components/index.d.ts +11 -0
- package/dist/traffic/components/index.d.ts.map +1 -0
- package/dist/traffic/components/index.js +11 -0
- package/dist/traffic/components/index.js.map +1 -0
- package/dist/traffic/hooks/index.d.ts +8 -0
- package/dist/traffic/hooks/index.d.ts.map +1 -0
- package/dist/traffic/hooks/index.js +8 -0
- package/dist/traffic/hooks/index.js.map +1 -0
- package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
- package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
- package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
- package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
- package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
- package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
- package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
- package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
- package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficFilter.js +33 -0
- package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
- package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
- package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficGroups.js +73 -0
- package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
- package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
- package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
- package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
- package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
- package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
- package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
- package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
- package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
- package/dist/traffic/hooks/useTrafficStats.js +45 -0
- package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
- package/dist/traffic/index.d.ts +4 -0
- package/dist/traffic/index.d.ts.map +1 -0
- package/dist/traffic/index.js +3 -0
- package/dist/traffic/index.js.map +1 -0
- package/dist/traffic/types.d.ts +72 -0
- package/dist/traffic/types.d.ts.map +1 -0
- package/dist/traffic/types.js +10 -0
- package/dist/traffic/types.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@pyric/ui/rtdb` — the headless RTDB data viewer, in the Firebase console /
|
|
3
|
+
* firebase-tools-ui form: an editable path bar (crumbs + direct path entry)
|
|
4
|
+
* over an expandable tree with inline add/edit/delete affordances. Follows
|
|
5
|
+
* this package's firestore/auth/storage split: pure logic + hooks +
|
|
6
|
+
* unstyled components on `data-*` styling contracts; the consumer (Studio)
|
|
7
|
+
* brings the CSS and the backend bundle ({@link RtdbApi}).
|
|
8
|
+
*/
|
|
9
|
+
// Pure path + value helpers.
|
|
10
|
+
export { normalizeRtdbPath, rtdbPathSegments, joinRtdbPath, parentRtdbPath, relativeRtdbPath, isRtdbObjectValue, hasRtdbChildren, rtdbChildEntries, rtdbValueAt, formatRtdbJson, parseRtdbJson, rtdbValueKind, previewRtdbValue, normalizeRtdbSnapshotValue, formatRtdbValueLabel, } from './values.js';
|
|
11
|
+
// Path-bar input parsing + crumb derivation.
|
|
12
|
+
export { parseRtdbPathInput, rtdbCrumbs } from './pathInput.js';
|
|
13
|
+
// Inline value-editor logic.
|
|
14
|
+
export { RTDB_EDITOR_TYPES, inferRtdbEditorType, formatRtdbEditorValue, coerceRtdbEditorValue, rtdbKeyInputError, } from './editor.js';
|
|
15
|
+
// Tree state (pure reducer + selectors).
|
|
16
|
+
export { initialRtdbTree, rtdbTreeReducer, rtdbTreeValueAt, isRtdbPathExpanded, rtdbVisibleChildren, } from './reducers/tree.js';
|
|
17
|
+
// Hook + components.
|
|
18
|
+
export { useRtdbTree, RTDB_DEFAULT_PAGE_SIZE, } from './hooks/useRtdbTree.js';
|
|
19
|
+
export { RtdbPathBar } from './components/RtdbPathBar.js';
|
|
20
|
+
export { RtdbTree } from './components/RtdbTree.js';
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rtdb/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6BAA6B;AAC7B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,6CAA6C;AAC7C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AAEhF,6BAA6B;AAC7B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAGlB,MAAM,aAAa,CAAC;AAKrB,yCAAyC;AACzC,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GAIpB,MAAM,oBAAoB,CAAC;AAE5B,qBAAqB;AACrB,OAAO,EACL,WAAW,EACX,sBAAsB,GAGvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editable path-bar logic (pure): parse what a user TYPES OR PASTES into the
|
|
3
|
+
* path input, and derive the clickable crumb list for display mode. The
|
|
4
|
+
* interaction form follows the Firebase console / firebase-tools-ui database
|
|
5
|
+
* viewer's editable breadcrumb bar (clean-room adaptation — behavior only).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Normalize raw path-input text to a database path. Tolerant of what people
|
|
9
|
+
* paste into a database URL bar:
|
|
10
|
+
* - a plain path, with or without the leading slash (`rooms/r1`, `/rooms`)
|
|
11
|
+
* - a full URL (`https://x.firebaseio.com/rooms/r1` → `/rooms/r1`)
|
|
12
|
+
* - repeated/trailing slashes, surrounding whitespace
|
|
13
|
+
* - a `?query` / `#hash` tail (dropped)
|
|
14
|
+
* Empty input is the root.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseRtdbPathInput(raw: string): string;
|
|
17
|
+
export interface RtdbCrumb {
|
|
18
|
+
/** The path segment to display. */
|
|
19
|
+
label: string;
|
|
20
|
+
/** Absolute database path this crumb navigates to. */
|
|
21
|
+
path: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The non-root crumbs for a path, in order. `'/'` yields `[]` — the root crumb
|
|
25
|
+
* is the caller's (it carries the database/instance label, not a segment).
|
|
26
|
+
*/
|
|
27
|
+
export declare function rtdbCrumbs(path: string): RtdbCrumb[];
|
|
28
|
+
//# sourceMappingURL=pathInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathInput.d.ts","sourceRoot":"","sources":["../../src/rtdb/pathInput.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAStD;AAED,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAMpD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editable path-bar logic (pure): parse what a user TYPES OR PASTES into the
|
|
3
|
+
* path input, and derive the clickable crumb list for display mode. The
|
|
4
|
+
* interaction form follows the Firebase console / firebase-tools-ui database
|
|
5
|
+
* viewer's editable breadcrumb bar (clean-room adaptation — behavior only).
|
|
6
|
+
*/
|
|
7
|
+
import { normalizeRtdbPath, rtdbPathSegments } from './values.js';
|
|
8
|
+
/**
|
|
9
|
+
* Normalize raw path-input text to a database path. Tolerant of what people
|
|
10
|
+
* paste into a database URL bar:
|
|
11
|
+
* - a plain path, with or without the leading slash (`rooms/r1`, `/rooms`)
|
|
12
|
+
* - a full URL (`https://x.firebaseio.com/rooms/r1` → `/rooms/r1`)
|
|
13
|
+
* - repeated/trailing slashes, surrounding whitespace
|
|
14
|
+
* - a `?query` / `#hash` tail (dropped)
|
|
15
|
+
* Empty input is the root.
|
|
16
|
+
*/
|
|
17
|
+
export function parseRtdbPathInput(raw) {
|
|
18
|
+
let text = raw.trim();
|
|
19
|
+
if (text.length === 0)
|
|
20
|
+
return '/';
|
|
21
|
+
// A pasted absolute URL: strip `scheme://host[:port]`.
|
|
22
|
+
const url = /^[a-z][a-z0-9+.-]*:\/\/[^/?#]+/i.exec(text);
|
|
23
|
+
if (url)
|
|
24
|
+
text = text.slice(url[0].length);
|
|
25
|
+
// Drop a query/hash tail (URL bars carry them; database paths do not).
|
|
26
|
+
text = text.replace(/[?#].*$/, '');
|
|
27
|
+
return normalizeRtdbPath(text);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The non-root crumbs for a path, in order. `'/'` yields `[]` — the root crumb
|
|
31
|
+
* is the caller's (it carries the database/instance label, not a segment).
|
|
32
|
+
*/
|
|
33
|
+
export function rtdbCrumbs(path) {
|
|
34
|
+
const segments = rtdbPathSegments(path);
|
|
35
|
+
return segments.map((label, i) => ({
|
|
36
|
+
label,
|
|
37
|
+
path: `/${segments.slice(0, i + 1).join('/')}`,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=pathInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathInput.js","sourceRoot":"","sources":["../../src/rtdb/pathInput.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAClC,uDAAuD;IACvD,MAAM,GAAG,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,GAAG;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1C,uEAAuE;IACvE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,KAAK;QACL,IAAI,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RTDB viewer tree state (pure reducer). The interaction form is the Firebase
|
|
3
|
+
* console / firebase-tools-ui data viewer: one view root (set by the path
|
|
4
|
+
* bar), expandable/collapsible descendants, and per-level paging for wide
|
|
5
|
+
* child lists.
|
|
6
|
+
*
|
|
7
|
+
* DATA-LOADING STRATEGY (documented decision): the worker protocol exposes
|
|
8
|
+
* `rtdb.get` / value subscriptions per PATH but no shallow or depth-limited
|
|
9
|
+
* reads — a read at a path always ships that path's WHOLE subtree over the
|
|
10
|
+
* MessagePort. A per-expand fetch would therefore re-ship data the view-root
|
|
11
|
+
* read already delivered. So the viewer holds ONE live value subscription at
|
|
12
|
+
* the view root (realtime by construction) and makes RENDERING lazy instead:
|
|
13
|
+
* nodes below the root start collapsed and mount nothing until expanded, and
|
|
14
|
+
* an expanded level renders at most `pageSize` children until "show more"
|
|
15
|
+
* (console-style paging at 50, chosen over virtualization for its simplicity —
|
|
16
|
+
* it bounds the mounted DOM the same way). Cost is bounded by navigating the
|
|
17
|
+
* view root deeper, which is the path bar's job.
|
|
18
|
+
*/
|
|
19
|
+
export interface RtdbTreeState {
|
|
20
|
+
/** The view root — the absolute database path the path bar points at. */
|
|
21
|
+
path: string;
|
|
22
|
+
/** `loading` until the first snapshot after a navigate; then `live`. */
|
|
23
|
+
status: 'loading' | 'live' | 'error';
|
|
24
|
+
/** The subtree value AT `path` (plain JSON; `null` = nothing there). */
|
|
25
|
+
value: unknown;
|
|
26
|
+
error: string | null;
|
|
27
|
+
/** Expanded descendant paths (absolute). The view root itself is always
|
|
28
|
+
* expanded and is never in this set. */
|
|
29
|
+
expanded: Record<string, true>;
|
|
30
|
+
/** Per-path shown-children override (absolute path → count). Absent means
|
|
31
|
+
* one page. */
|
|
32
|
+
pages: Record<string, number>;
|
|
33
|
+
}
|
|
34
|
+
export type RtdbTreeAction =
|
|
35
|
+
/** Path bar navigation: reset to a new view root. */
|
|
36
|
+
{
|
|
37
|
+
type: 'navigate';
|
|
38
|
+
path: string;
|
|
39
|
+
}
|
|
40
|
+
/** A value snapshot arrived. `path` is the subscription's view root — a
|
|
41
|
+
* snapshot from a superseded subscription (its path no longer the state's)
|
|
42
|
+
* is ignored. */
|
|
43
|
+
| {
|
|
44
|
+
type: 'value';
|
|
45
|
+
path: string;
|
|
46
|
+
value: unknown;
|
|
47
|
+
}
|
|
48
|
+
/** The view-root subscription failed (same `path` guard as `value`). */
|
|
49
|
+
| {
|
|
50
|
+
type: 'error';
|
|
51
|
+
path: string;
|
|
52
|
+
message: string;
|
|
53
|
+
} | {
|
|
54
|
+
type: 'toggle';
|
|
55
|
+
path: string;
|
|
56
|
+
} | {
|
|
57
|
+
type: 'expand';
|
|
58
|
+
path: string;
|
|
59
|
+
} | {
|
|
60
|
+
type: 'collapse';
|
|
61
|
+
path: string;
|
|
62
|
+
}
|
|
63
|
+
/** Reveal one more page of children at `path`. */
|
|
64
|
+
| {
|
|
65
|
+
type: 'show-more';
|
|
66
|
+
path: string;
|
|
67
|
+
pageSize: number;
|
|
68
|
+
};
|
|
69
|
+
export declare function initialRtdbTree(path: string): RtdbTreeState;
|
|
70
|
+
/** The subtree value at an ABSOLUTE database path, resolved against the
|
|
71
|
+
* loaded view-root value. `null` outside the view root. */
|
|
72
|
+
export declare function rtdbTreeValueAt(state: RtdbTreeState, path: string): unknown;
|
|
73
|
+
/** Is this absolute path expanded? The view root always is. */
|
|
74
|
+
export declare function isRtdbPathExpanded(state: RtdbTreeState, path: string): boolean;
|
|
75
|
+
export interface RtdbVisibleChildren {
|
|
76
|
+
/** The children to render, in key order, capped at the shown count. */
|
|
77
|
+
entries: Array<[string, unknown]>;
|
|
78
|
+
/** Total direct children at this path. */
|
|
79
|
+
total: number;
|
|
80
|
+
/** How many more "show more" would reveal (0 = all shown). */
|
|
81
|
+
hiddenCount: number;
|
|
82
|
+
}
|
|
83
|
+
/** The page-capped child list at an absolute path (console pages at 50). */
|
|
84
|
+
export declare function rtdbVisibleChildren(state: RtdbTreeState, path: string, pageSize: number): RtdbVisibleChildren;
|
|
85
|
+
export declare function rtdbTreeReducer(state: RtdbTreeState, action: RtdbTreeAction): RtdbTreeState;
|
|
86
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/rtdb/reducers/tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;6CACyC;IACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B;oBACgB;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,cAAc;AACxB,qDAAqD;AACnD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACpC;;kBAEkB;GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AACjD,wEAAwE;GACtE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACpC,kDAAkD;GAChD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAS3D;AAED;4DAC4D;AAC5D,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9E;AAED,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAWrB;AAqBD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,GACrB,aAAa,CA0Df"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RTDB viewer tree state (pure reducer). The interaction form is the Firebase
|
|
3
|
+
* console / firebase-tools-ui data viewer: one view root (set by the path
|
|
4
|
+
* bar), expandable/collapsible descendants, and per-level paging for wide
|
|
5
|
+
* child lists.
|
|
6
|
+
*
|
|
7
|
+
* DATA-LOADING STRATEGY (documented decision): the worker protocol exposes
|
|
8
|
+
* `rtdb.get` / value subscriptions per PATH but no shallow or depth-limited
|
|
9
|
+
* reads — a read at a path always ships that path's WHOLE subtree over the
|
|
10
|
+
* MessagePort. A per-expand fetch would therefore re-ship data the view-root
|
|
11
|
+
* read already delivered. So the viewer holds ONE live value subscription at
|
|
12
|
+
* the view root (realtime by construction) and makes RENDERING lazy instead:
|
|
13
|
+
* nodes below the root start collapsed and mount nothing until expanded, and
|
|
14
|
+
* an expanded level renders at most `pageSize` children until "show more"
|
|
15
|
+
* (console-style paging at 50, chosen over virtualization for its simplicity —
|
|
16
|
+
* it bounds the mounted DOM the same way). Cost is bounded by navigating the
|
|
17
|
+
* view root deeper, which is the path bar's job.
|
|
18
|
+
*/
|
|
19
|
+
import { hasRtdbChildren, normalizeRtdbPath, normalizeRtdbSnapshotValue, relativeRtdbPath, rtdbChildEntries, rtdbValueAt, } from '../values.js';
|
|
20
|
+
export function initialRtdbTree(path) {
|
|
21
|
+
return {
|
|
22
|
+
path: normalizeRtdbPath(path),
|
|
23
|
+
status: 'loading',
|
|
24
|
+
value: null,
|
|
25
|
+
error: null,
|
|
26
|
+
expanded: {},
|
|
27
|
+
pages: {},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** The subtree value at an ABSOLUTE database path, resolved against the
|
|
31
|
+
* loaded view-root value. `null` outside the view root. */
|
|
32
|
+
export function rtdbTreeValueAt(state, path) {
|
|
33
|
+
const rel = relativeRtdbPath(state.path, path);
|
|
34
|
+
return rel === null ? null : rtdbValueAt(state.value, rel);
|
|
35
|
+
}
|
|
36
|
+
/** Is this absolute path expanded? The view root always is. */
|
|
37
|
+
export function isRtdbPathExpanded(state, path) {
|
|
38
|
+
const normalized = normalizeRtdbPath(path);
|
|
39
|
+
return normalized === state.path || state.expanded[normalized] === true;
|
|
40
|
+
}
|
|
41
|
+
/** The page-capped child list at an absolute path (console pages at 50). */
|
|
42
|
+
export function rtdbVisibleChildren(state, path, pageSize) {
|
|
43
|
+
const entries = rtdbChildEntries(rtdbTreeValueAt(state, path));
|
|
44
|
+
const shown = Math.min(entries.length, state.pages[normalizeRtdbPath(path)] ?? pageSize);
|
|
45
|
+
return {
|
|
46
|
+
entries: entries.slice(0, shown),
|
|
47
|
+
total: entries.length,
|
|
48
|
+
hiddenCount: entries.length - shown,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Keep only entries whose path still resolves to a node WITH children under
|
|
52
|
+
* the new value — a removed or scalar-ified node can't stay expanded/paged. */
|
|
53
|
+
function pruneByValue(record, state) {
|
|
54
|
+
const next = {};
|
|
55
|
+
let changed = false;
|
|
56
|
+
for (const [path, v] of Object.entries(record)) {
|
|
57
|
+
const rel = relativeRtdbPath(state.path, path);
|
|
58
|
+
if (rel !== null && hasRtdbChildren(rtdbValueAt(state.value, rel))) {
|
|
59
|
+
next[path] = v;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
changed = true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return changed ? next : record;
|
|
66
|
+
}
|
|
67
|
+
export function rtdbTreeReducer(state, action) {
|
|
68
|
+
switch (action.type) {
|
|
69
|
+
case 'navigate': {
|
|
70
|
+
const path = normalizeRtdbPath(action.path);
|
|
71
|
+
// Re-navigating to the current root keeps the loaded value + expansion.
|
|
72
|
+
if (path === state.path)
|
|
73
|
+
return state;
|
|
74
|
+
return initialRtdbTree(path);
|
|
75
|
+
}
|
|
76
|
+
case 'value': {
|
|
77
|
+
if (normalizeRtdbPath(action.path) !== state.path)
|
|
78
|
+
return state;
|
|
79
|
+
const next = {
|
|
80
|
+
...state,
|
|
81
|
+
status: 'live',
|
|
82
|
+
// RTDB semantics at the ingestion seam: an empty object IS null (an
|
|
83
|
+
// empty database reads back as `{}`), so the tree never holds a
|
|
84
|
+
// childless object that would render as a scalar leaf.
|
|
85
|
+
value: normalizeRtdbSnapshotValue(action.value),
|
|
86
|
+
error: null,
|
|
87
|
+
};
|
|
88
|
+
// UPDATE-MERGE: a live snapshot keeps expansion/paging for surviving
|
|
89
|
+
// paths and prunes state for nodes that vanished or became scalars.
|
|
90
|
+
next.expanded = pruneByValue(state.expanded, next);
|
|
91
|
+
next.pages = pruneByValue(state.pages, next);
|
|
92
|
+
return next;
|
|
93
|
+
}
|
|
94
|
+
case 'error':
|
|
95
|
+
if (normalizeRtdbPath(action.path) !== state.path)
|
|
96
|
+
return state;
|
|
97
|
+
return { ...state, status: 'error', error: action.message };
|
|
98
|
+
case 'expand': {
|
|
99
|
+
const path = normalizeRtdbPath(action.path);
|
|
100
|
+
if (path === state.path || state.expanded[path])
|
|
101
|
+
return state;
|
|
102
|
+
// LAZY RENDER: expanding only flips the flag — children mount from the
|
|
103
|
+
// already-loaded subtree (see the data-loading strategy note above).
|
|
104
|
+
return { ...state, expanded: { ...state.expanded, [path]: true } };
|
|
105
|
+
}
|
|
106
|
+
case 'collapse': {
|
|
107
|
+
const path = normalizeRtdbPath(action.path);
|
|
108
|
+
if (!state.expanded[path])
|
|
109
|
+
return state;
|
|
110
|
+
const expanded = { ...state.expanded };
|
|
111
|
+
delete expanded[path];
|
|
112
|
+
return { ...state, expanded };
|
|
113
|
+
}
|
|
114
|
+
case 'toggle': {
|
|
115
|
+
const path = normalizeRtdbPath(action.path);
|
|
116
|
+
return rtdbTreeReducer(state, {
|
|
117
|
+
type: state.expanded[path] ? 'collapse' : 'expand',
|
|
118
|
+
path,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
case 'show-more': {
|
|
122
|
+
const path = normalizeRtdbPath(action.path);
|
|
123
|
+
const shown = state.pages[path] ?? action.pageSize;
|
|
124
|
+
return {
|
|
125
|
+
...state,
|
|
126
|
+
pages: { ...state.pages, [path]: shown + action.pageSize },
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../src/rtdb/reducers/tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The RTDB backend seam the viewer drives — an EXPLICIT bundle, not a context
|
|
3
|
+
* default. Unlike Firestore/Auth/Storage there is no in-process handle typed
|
|
4
|
+
* into `@pyric/ui`, so the consumer constructs the bundle and passes it to the
|
|
5
|
+
* hook/components directly (Studio wires it to the SharedWorker client's
|
|
6
|
+
* admin-lens ops; data views are always admin — PRINCIPLES M3).
|
|
7
|
+
*/
|
|
8
|
+
export interface RtdbApi {
|
|
9
|
+
/** Replace the value at `path` (`null` deletes, RTDB semantics). */
|
|
10
|
+
set(path: string, value: unknown): Promise<void>;
|
|
11
|
+
/** Delete the subtree at `path`. */
|
|
12
|
+
remove(path: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Live value subscription at `path`: `next` fires with the subtree's plain
|
|
15
|
+
* JSON value (`null` when absent) on subscribe and after every change.
|
|
16
|
+
* Returns the unsubscribe.
|
|
17
|
+
*/
|
|
18
|
+
subscribeValue(path: string, next: (value: unknown) => void, error?: (err: unknown) => void): () => void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=rtdbApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtdbApi.d.ts","sourceRoot":"","sources":["../../src/rtdb/rtdbApi.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,oEAAoE;IACpE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,oCAAoC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC;;;;OAIG;IACH,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EAC9B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAC7B,MAAM,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtdbApi.js","sourceRoot":"","sources":["../../src/rtdb/rtdbApi.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RTDB path + value helpers (pure). Paths are ALWAYS normalized to the
|
|
3
|
+
* `'/'`-rooted form (`'/'` for the root, `'/a/b'` otherwise) so every module in
|
|
4
|
+
* this package — the tree reducer, the path bar, the viewer components — agrees
|
|
5
|
+
* on what a path is.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeRtdbPath(path: string): string;
|
|
8
|
+
export declare function rtdbPathSegments(path: string): string[];
|
|
9
|
+
export declare function joinRtdbPath(base: string, child: string): string;
|
|
10
|
+
export declare function parentRtdbPath(path: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* The path of `target` RELATIVE to `base`, or `null` when `target` is not
|
|
13
|
+
* `base` or one of its descendants. `'/'` means "target IS base". Lets the
|
|
14
|
+
* tree address nodes by absolute database path while the loaded value sits at
|
|
15
|
+
* the view root.
|
|
16
|
+
*/
|
|
17
|
+
export declare function relativeRtdbPath(base: string, target: string): string | null;
|
|
18
|
+
export declare function isRtdbObjectValue(value: unknown): value is Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a snapshot value to RTDB semantics before it enters tree state:
|
|
21
|
+
* an empty object IS null (RTDB has no empty containers — the server prunes
|
|
22
|
+
* them), so `{}` — and any object whose children all normalize away — becomes
|
|
23
|
+
* `null`. Without this, an empty database's root value `{}` fails
|
|
24
|
+
* `hasRtdbChildren` and renders as a scalar leaf (`String({})` →
|
|
25
|
+
* `"[object Object]"`). Reuses the input object when nothing changed.
|
|
26
|
+
*/
|
|
27
|
+
export declare function normalizeRtdbSnapshotValue(value: unknown): unknown;
|
|
28
|
+
/** Leaf value text, console style: strings quoted, primitives literal.
|
|
29
|
+
* Defensive on objects: never `String`-coerce (that's `[object Object]`) —
|
|
30
|
+
* fall back to JSON. Object values should have been normalized/expanded away
|
|
31
|
+
* before reaching a leaf label; this keeps the label honest if one slips in. */
|
|
32
|
+
export declare function formatRtdbValueLabel(value: unknown): string;
|
|
33
|
+
/** Does this value render as a PARENT node (has child keys)? RTDB has no true
|
|
34
|
+
* arrays — an array is an object with numeric keys, and renders as one. */
|
|
35
|
+
export declare function hasRtdbChildren(value: unknown): boolean;
|
|
36
|
+
/** Child entries sorted RTDB-console style: numeric-aware key order
|
|
37
|
+
* (`2` before `10`), then lexicographic. */
|
|
38
|
+
export declare function rtdbChildEntries(value: unknown): Array<[string, unknown]>;
|
|
39
|
+
export declare function rtdbValueAt(root: unknown, path: string): unknown;
|
|
40
|
+
export declare function formatRtdbJson(value: unknown): string;
|
|
41
|
+
export declare function parseRtdbJson(value: string): unknown;
|
|
42
|
+
export declare function rtdbValueKind(value: unknown): string;
|
|
43
|
+
export declare function previewRtdbValue(value: unknown): string;
|
|
44
|
+
//# sourceMappingURL=values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/rtdb/values.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElF;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiBlE;AAED;;;iFAGiF;AACjF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW3D;AAED;4EAC4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGvD;AAED;6CAC6C;AAC7C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKzE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOhE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIpD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASvD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RTDB path + value helpers (pure). Paths are ALWAYS normalized to the
|
|
3
|
+
* `'/'`-rooted form (`'/'` for the root, `'/a/b'` otherwise) so every module in
|
|
4
|
+
* this package — the tree reducer, the path bar, the viewer components — agrees
|
|
5
|
+
* on what a path is.
|
|
6
|
+
*/
|
|
7
|
+
export function normalizeRtdbPath(path) {
|
|
8
|
+
const segments = path.split('/').filter(Boolean);
|
|
9
|
+
return segments.length === 0 ? '/' : `/${segments.join('/')}`;
|
|
10
|
+
}
|
|
11
|
+
export function rtdbPathSegments(path) {
|
|
12
|
+
return normalizeRtdbPath(path).split('/').filter(Boolean);
|
|
13
|
+
}
|
|
14
|
+
export function joinRtdbPath(base, child) {
|
|
15
|
+
return normalizeRtdbPath([...rtdbPathSegments(base), ...child.split('/').filter(Boolean)].join('/'));
|
|
16
|
+
}
|
|
17
|
+
export function parentRtdbPath(path) {
|
|
18
|
+
const segments = rtdbPathSegments(path);
|
|
19
|
+
if (segments.length <= 1)
|
|
20
|
+
return '/';
|
|
21
|
+
return `/${segments.slice(0, -1).join('/')}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The path of `target` RELATIVE to `base`, or `null` when `target` is not
|
|
25
|
+
* `base` or one of its descendants. `'/'` means "target IS base". Lets the
|
|
26
|
+
* tree address nodes by absolute database path while the loaded value sits at
|
|
27
|
+
* the view root.
|
|
28
|
+
*/
|
|
29
|
+
export function relativeRtdbPath(base, target) {
|
|
30
|
+
const baseSegs = rtdbPathSegments(base);
|
|
31
|
+
const targetSegs = rtdbPathSegments(target);
|
|
32
|
+
if (targetSegs.length < baseSegs.length)
|
|
33
|
+
return null;
|
|
34
|
+
for (let i = 0; i < baseSegs.length; i++) {
|
|
35
|
+
if (targetSegs[i] !== baseSegs[i])
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const rest = targetSegs.slice(baseSegs.length);
|
|
39
|
+
return rest.length === 0 ? '/' : `/${rest.join('/')}`;
|
|
40
|
+
}
|
|
41
|
+
export function isRtdbObjectValue(value) {
|
|
42
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Normalize a snapshot value to RTDB semantics before it enters tree state:
|
|
46
|
+
* an empty object IS null (RTDB has no empty containers — the server prunes
|
|
47
|
+
* them), so `{}` — and any object whose children all normalize away — becomes
|
|
48
|
+
* `null`. Without this, an empty database's root value `{}` fails
|
|
49
|
+
* `hasRtdbChildren` and renders as a scalar leaf (`String({})` →
|
|
50
|
+
* `"[object Object]"`). Reuses the input object when nothing changed.
|
|
51
|
+
*/
|
|
52
|
+
export function normalizeRtdbSnapshotValue(value) {
|
|
53
|
+
if (value === null || value === undefined)
|
|
54
|
+
return null;
|
|
55
|
+
if (typeof value !== 'object')
|
|
56
|
+
return value;
|
|
57
|
+
const record = value;
|
|
58
|
+
let changed = false;
|
|
59
|
+
const next = {};
|
|
60
|
+
for (const [key, child] of Object.entries(record)) {
|
|
61
|
+
const normalized = normalizeRtdbSnapshotValue(child);
|
|
62
|
+
if (normalized === null) {
|
|
63
|
+
changed = true;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (normalized !== child)
|
|
67
|
+
changed = true;
|
|
68
|
+
next[key] = normalized;
|
|
69
|
+
}
|
|
70
|
+
if (Object.keys(next).length === 0)
|
|
71
|
+
return null;
|
|
72
|
+
return changed ? next : value;
|
|
73
|
+
}
|
|
74
|
+
/** Leaf value text, console style: strings quoted, primitives literal.
|
|
75
|
+
* Defensive on objects: never `String`-coerce (that's `[object Object]`) —
|
|
76
|
+
* fall back to JSON. Object values should have been normalized/expanded away
|
|
77
|
+
* before reaching a leaf label; this keeps the label honest if one slips in. */
|
|
78
|
+
export function formatRtdbValueLabel(value) {
|
|
79
|
+
if (typeof value === 'string')
|
|
80
|
+
return JSON.stringify(value);
|
|
81
|
+
if (value === null || value === undefined)
|
|
82
|
+
return 'null';
|
|
83
|
+
if (typeof value === 'object') {
|
|
84
|
+
try {
|
|
85
|
+
return JSON.stringify(value) ?? 'null';
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return 'null';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return String(value);
|
|
92
|
+
}
|
|
93
|
+
/** Does this value render as a PARENT node (has child keys)? RTDB has no true
|
|
94
|
+
* arrays — an array is an object with numeric keys, and renders as one. */
|
|
95
|
+
export function hasRtdbChildren(value) {
|
|
96
|
+
if (value === null || typeof value !== 'object')
|
|
97
|
+
return false;
|
|
98
|
+
return Object.keys(value).length > 0;
|
|
99
|
+
}
|
|
100
|
+
/** Child entries sorted RTDB-console style: numeric-aware key order
|
|
101
|
+
* (`2` before `10`), then lexicographic. */
|
|
102
|
+
export function rtdbChildEntries(value) {
|
|
103
|
+
if (value === null || typeof value !== 'object')
|
|
104
|
+
return [];
|
|
105
|
+
return Object.entries(value).sort(([a], [b]) => a.localeCompare(b, undefined, { numeric: true }));
|
|
106
|
+
}
|
|
107
|
+
export function rtdbValueAt(root, path) {
|
|
108
|
+
let value = root ?? null;
|
|
109
|
+
for (const segment of rtdbPathSegments(path)) {
|
|
110
|
+
if (value === null || typeof value !== 'object')
|
|
111
|
+
return null;
|
|
112
|
+
value = value[segment] ?? null;
|
|
113
|
+
}
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
export function formatRtdbJson(value) {
|
|
117
|
+
return JSON.stringify(value ?? null, null, 2);
|
|
118
|
+
}
|
|
119
|
+
export function parseRtdbJson(value) {
|
|
120
|
+
const text = value.trim();
|
|
121
|
+
return text.length === 0 ? null : JSON.parse(text);
|
|
122
|
+
}
|
|
123
|
+
export function rtdbValueKind(value) {
|
|
124
|
+
if (value === null || value === undefined)
|
|
125
|
+
return 'null';
|
|
126
|
+
if (Array.isArray(value))
|
|
127
|
+
return 'array';
|
|
128
|
+
return typeof value;
|
|
129
|
+
}
|
|
130
|
+
export function previewRtdbValue(value) {
|
|
131
|
+
if (value === null || value === undefined)
|
|
132
|
+
return 'null';
|
|
133
|
+
if (Array.isArray(value))
|
|
134
|
+
return `${value.length} items`;
|
|
135
|
+
if (isRtdbObjectValue(value)) {
|
|
136
|
+
const count = Object.keys(value).length;
|
|
137
|
+
return count === 1 ? '1 child' : `${count} children`;
|
|
138
|
+
}
|
|
139
|
+
if (typeof value === 'string')
|
|
140
|
+
return JSON.stringify(value);
|
|
141
|
+
return String(value);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/rtdb/values.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DenialInspectorProps } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Headless inspector for a single denied Firestore request. Renders, per
|
|
4
|
+
* the `denial-inspector-spec`:
|
|
5
|
+
* - the plain-language reason (`data-pyric-denial-reason`)
|
|
6
|
+
* - the rule source, line-marked (`data-pyric-rule-source`, per-line
|
|
7
|
+
* `data-pyric-line-verdict="deny|allow|skip"`)
|
|
8
|
+
* - the expression step-through (`data-pyric-trace` + per-node hooks)
|
|
9
|
+
* - data in scope (`data-pyric-scope`, `-scope-var`, `-scope-hit`)
|
|
10
|
+
* - the re-run / verify loop (`data-pyric-rerun`)
|
|
11
|
+
* - the cluster of sibling denials (`data-pyric-denial-cluster`)
|
|
12
|
+
* - path resolution for no-match denials (`data-pyric-path-resolution`)
|
|
13
|
+
*
|
|
14
|
+
* Zero styling — every visual decision is a consumer's via the
|
|
15
|
+
* `data-pyric-*` hooks. `mocks/c-debug.html` is the CSS spec.
|
|
16
|
+
*/
|
|
17
|
+
export declare function DenialInspector({ denial, cluster, onRerunAs, onTestEditedRule, onSelectCluster, className, }: DenialInspectorProps): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=DenialInspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DenialInspector.d.ts","sourceRoot":"","sources":["../../../src/rules/components/DenialInspector.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,oBAAoB,EAAkB,MAAM,aAAa,CAAC;AAyEhF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,SAAS,GACV,EAAE,oBAAoB,+BAkItB"}
|