shelving 1.236.0 → 1.236.2
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/api/cache/APICache.d.ts +69 -6
- package/api/cache/APICache.js +61 -5
- package/api/cache/EndpointCache.d.ts +75 -7
- package/api/cache/EndpointCache.js +75 -7
- package/api/endpoint/Endpoint.d.ts +141 -25
- package/api/endpoint/Endpoint.js +55 -9
- package/api/endpoint/util.d.ts +28 -6
- package/api/provider/APIProvider.d.ts +58 -14
- package/api/provider/APIProvider.js +24 -2
- package/api/provider/CachedAPIProvider.d.ts +58 -5
- package/api/provider/CachedAPIProvider.js +58 -6
- package/api/provider/ClientAPIProvider.d.ts +80 -4
- package/api/provider/ClientAPIProvider.js +75 -4
- package/api/provider/DebugAPIProvider.d.ts +40 -1
- package/api/provider/DebugAPIProvider.js +40 -1
- package/api/provider/JSONAPIProvider.d.ts +18 -2
- package/api/provider/JSONAPIProvider.js +18 -2
- package/api/provider/LoggingAPIProvider.d.ts +25 -2
- package/api/provider/LoggingAPIProvider.js +25 -2
- package/api/provider/MockAPIProvider.d.ts +72 -1
- package/api/provider/MockAPIProvider.js +60 -4
- package/api/provider/MockEndpointAPIProvider.d.ts +9 -0
- package/api/provider/MockEndpointAPIProvider.js +9 -0
- package/api/provider/ThroughAPIProvider.d.ts +67 -1
- package/api/provider/ThroughAPIProvider.js +67 -1
- package/api/provider/ValidationAPIProvider.d.ts +32 -1
- package/api/provider/ValidationAPIProvider.js +32 -1
- package/api/provider/XMLAPIProvider.d.ts +18 -2
- package/api/provider/XMLAPIProvider.js +18 -2
- package/api/store/EndpointStore.d.ts +24 -1
- package/api/store/EndpointStore.js +24 -1
- package/bun/BunPostgreSQLProvider.d.ts +38 -0
- package/bun/BunPostgreSQLProvider.js +38 -2
- package/cloudflare/CloudflareD1Provider.d.ts +29 -2
- package/cloudflare/CloudflareD1Provider.js +29 -2
- package/cloudflare/CloudflareKVProvider.d.ts +115 -0
- package/cloudflare/CloudflareKVProvider.js +115 -0
- package/cloudflare/types.d.ts +41 -7
- package/db/cache/CollectionCache.d.ts +83 -7
- package/db/cache/CollectionCache.js +83 -7
- package/db/cache/DBCache.d.ts +93 -8
- package/db/cache/DBCache.js +85 -7
- package/db/collection/Collection.d.ts +103 -15
- package/db/collection/Collection.js +58 -6
- package/db/migrate/DBMigrator.d.ts +29 -1
- package/db/migrate/DBMigrator.js +20 -1
- package/db/migrate/PostgreSQLMigrator.d.ts +8 -1
- package/db/migrate/PostgreSQLMigrator.js +8 -1
- package/db/migrate/SQLMigrator.d.ts +63 -4
- package/db/migrate/SQLMigrator.js +51 -1
- package/db/migrate/SQLiteMigrator.d.ts +8 -1
- package/db/migrate/SQLiteMigrator.js +8 -1
- package/db/provider/CacheDBProvider.d.ts +135 -1
- package/db/provider/CacheDBProvider.js +135 -1
- package/db/provider/ChangesDBProvider.d.ts +84 -3
- package/db/provider/ChangesDBProvider.js +77 -2
- package/db/provider/DBProvider.d.ts +148 -1
- package/db/provider/DBProvider.js +51 -1
- package/db/provider/DebugDBProvider.d.ts +118 -1
- package/db/provider/DebugDBProvider.js +118 -1
- package/db/provider/MemoryDBProvider.d.ts +262 -7
- package/db/provider/MemoryDBProvider.js +262 -7
- package/db/provider/MockDBProvider.d.ts +113 -2
- package/db/provider/MockDBProvider.js +106 -1
- package/db/provider/PostgreSQLProvider.d.ts +34 -2
- package/db/provider/PostgreSQLProvider.js +34 -4
- package/db/provider/SQLProvider.d.ts +250 -14
- package/db/provider/SQLProvider.js +237 -13
- package/db/provider/SQLiteProvider.d.ts +41 -1
- package/db/provider/SQLiteProvider.js +41 -4
- package/db/provider/ThroughDBProvider.d.ts +156 -1
- package/db/provider/ThroughDBProvider.js +156 -1
- package/db/provider/ValidationDBProvider.d.ts +120 -1
- package/db/provider/ValidationDBProvider.js +120 -1
- package/db/store/ItemStore.d.ts +38 -2
- package/db/store/ItemStore.js +38 -2
- package/db/store/QueryStore.d.ts +64 -6
- package/db/store/QueryStore.js +64 -6
- package/error/BaseError.d.ts +27 -2
- package/error/BaseError.js +14 -0
- package/error/Errors.d.ts +12 -1
- package/error/Errors.js +12 -1
- package/error/NetworkError.d.ts +13 -1
- package/error/NetworkError.js +13 -1
- package/error/RequestError.d.ts +90 -7
- package/error/RequestError.js +90 -7
- package/error/RequiredError.d.ts +11 -1
- package/error/RequiredError.js +11 -1
- package/error/ResponseError.d.ts +19 -2
- package/error/ResponseError.js +19 -2
- package/error/UnexpectedError.d.ts +14 -1
- package/error/UnexpectedError.js +14 -1
- package/error/UnimplementedError.d.ts +13 -1
- package/error/UnimplementedError.js +13 -1
- package/error/ValueError.d.ts +14 -1
- package/error/ValueError.js +14 -1
- package/extract/DirectoryExtractor.d.ts +35 -1
- package/extract/DirectoryExtractor.js +30 -0
- package/extract/Extractor.d.ts +21 -2
- package/extract/Extractor.js +7 -1
- package/extract/FileExtractor.d.ts +18 -0
- package/extract/FileExtractor.js +18 -0
- package/extract/IndexExtractor.d.ts +36 -1
- package/extract/IndexExtractor.js +31 -0
- package/extract/MarkupExtractor.d.ts +15 -0
- package/extract/MarkupExtractor.js +15 -0
- package/extract/MergingExtractor.d.ts +36 -1
- package/extract/MergingExtractor.js +31 -0
- package/extract/ModuleExtractor.d.ts +25 -1
- package/extract/ModuleExtractor.js +20 -0
- package/extract/PackageExtractor.d.ts +36 -1
- package/extract/PackageExtractor.js +31 -0
- package/extract/ThroughExtractor.d.ts +22 -1
- package/extract/ThroughExtractor.js +22 -1
- package/extract/TypescriptExtractor.d.ts +21 -0
- package/extract/TypescriptExtractor.js +28 -3
- package/firestore/client/FirestoreClientProvider.d.ts +129 -4
- package/firestore/client/FirestoreClientProvider.js +129 -4
- package/firestore/lite/FirestoreLiteProvider.d.ts +128 -3
- package/firestore/lite/FirestoreLiteProvider.js +128 -3
- package/firestore/server/FirestoreServerProvider.d.ts +129 -2
- package/firestore/server/FirestoreServerProvider.js +129 -2
- package/markup/MarkupParser.d.ts +57 -10
- package/markup/MarkupParser.js +50 -9
- package/markup/MarkupRule.d.ts +34 -1
- package/markup/Parser.d.ts +18 -0
- package/markup/Parser.js +11 -0
- package/markup/rule/blockquote.d.ts +3 -0
- package/markup/rule/blockquote.js +3 -0
- package/markup/rule/code.d.ts +3 -0
- package/markup/rule/code.js +3 -0
- package/markup/rule/fenced.d.ts +3 -0
- package/markup/rule/fenced.js +3 -0
- package/markup/rule/heading.d.ts +3 -0
- package/markup/rule/heading.js +3 -0
- package/markup/rule/index.d.ts +16 -3
- package/markup/rule/index.js +16 -3
- package/markup/rule/inline.d.ts +4 -1
- package/markup/rule/inline.js +5 -2
- package/markup/rule/linebreak.d.ts +3 -0
- package/markup/rule/linebreak.js +3 -0
- package/markup/rule/link.d.ts +6 -0
- package/markup/rule/link.js +6 -0
- package/markup/rule/ordered.d.ts +3 -0
- package/markup/rule/ordered.js +3 -0
- package/markup/rule/paragraph.d.ts +3 -0
- package/markup/rule/paragraph.js +3 -0
- package/markup/rule/separator.d.ts +3 -0
- package/markup/rule/separator.js +3 -0
- package/markup/rule/table.d.ts +3 -0
- package/markup/rule/table.js +3 -0
- package/markup/rule/unordered.d.ts +3 -0
- package/markup/rule/unordered.js +3 -0
- package/markup/util/regexp.d.ts +80 -3
- package/markup/util/regexp.js +44 -0
- package/package.json +1 -1
- package/react/createAPIContext.d.ts +15 -0
- package/react/createAPIContext.js +10 -0
- package/react/createDBContext.d.ts +15 -0
- package/react/createDBContext.js +10 -0
- package/react/useInstance.d.ts +11 -0
- package/react/useInstance.js +11 -0
- package/react/useLazy.d.ts +11 -0
- package/react/useMap.d.ts +14 -1
- package/react/useMap.js +14 -1
- package/react/useReduce.d.ts +12 -0
- package/react/useSequence.d.ts +10 -0
- package/react/useSequence.js +10 -0
- package/react/useStore.d.ts +16 -1
- package/schema/AddressSchema.d.ts +41 -4
- package/schema/AddressSchema.js +36 -3
- package/schema/ArraySchema.d.ts +48 -6
- package/schema/ArraySchema.js +40 -5
- package/schema/BooleanSchema.d.ts +59 -3
- package/schema/BooleanSchema.js +51 -2
- package/schema/ChoiceSchema.d.ts +61 -7
- package/schema/ChoiceSchema.js +44 -2
- package/schema/ColorSchema.d.ts +41 -8
- package/schema/ColorSchema.js +36 -7
- package/schema/CountrySchema.d.ts +44 -4
- package/schema/CountrySchema.js +39 -3
- package/schema/CurrencyAmountSchema.d.ts +104 -8
- package/schema/CurrencyAmountSchema.js +91 -4
- package/schema/CurrencyCodeSchema.d.ts +56 -4
- package/schema/CurrencyCodeSchema.js +49 -3
- package/schema/DataSchema.d.ts +101 -10
- package/schema/DataSchema.js +87 -8
- package/schema/DateSchema.d.ts +73 -4
- package/schema/DateSchema.js +57 -2
- package/schema/DateTimeSchema.d.ts +40 -3
- package/schema/DateTimeSchema.js +40 -3
- package/schema/DictionarySchema.d.ts +54 -4
- package/schema/DictionarySchema.js +47 -3
- package/schema/EmailSchema.d.ts +34 -3
- package/schema/EmailSchema.js +34 -3
- package/schema/EntitySchema.d.ts +45 -4
- package/schema/EntitySchema.js +38 -3
- package/schema/FileSchema.d.ts +45 -4
- package/schema/FileSchema.js +39 -3
- package/schema/KeySchema.d.ts +32 -3
- package/schema/KeySchema.js +32 -3
- package/schema/NullableSchema.d.ts +64 -4
- package/schema/NullableSchema.js +59 -3
- package/schema/NumberSchema.d.ts +137 -12
- package/schema/NumberSchema.js +127 -11
- package/schema/OptionalSchema.d.ts +61 -4
- package/schema/OptionalSchema.js +56 -4
- package/schema/PasswordSchema.d.ts +37 -1
- package/schema/PasswordSchema.js +32 -1
- package/schema/PhoneSchema.d.ts +40 -4
- package/schema/PhoneSchema.js +35 -3
- package/schema/RequiredSchema.d.ts +39 -3
- package/schema/RequiredSchema.js +41 -3
- package/schema/Schema.d.ts +67 -7
- package/schema/Schema.js +42 -6
- package/schema/SlugSchema.d.ts +37 -5
- package/schema/SlugSchema.js +37 -5
- package/schema/StringSchema.d.ts +124 -19
- package/schema/StringSchema.js +107 -17
- package/schema/ThroughSchema.d.ts +35 -2
- package/schema/ThroughSchema.js +30 -1
- package/schema/TimeSchema.d.ts +43 -3
- package/schema/TimeSchema.js +43 -3
- package/schema/URISchema.d.ts +67 -6
- package/schema/URISchema.js +60 -6
- package/schema/URLSchema.d.ts +69 -6
- package/schema/URLSchema.js +61 -6
- package/schema/UUIDSchema.d.ts +37 -4
- package/schema/UUIDSchema.js +37 -4
- package/sequence/DeferredSequence.d.ts +49 -3
- package/sequence/DeferredSequence.js +39 -3
- package/sequence/InspectSequence.d.ts +59 -5
- package/sequence/InspectSequence.js +59 -5
- package/sequence/LazySequence.d.ts +30 -2
- package/sequence/LazySequence.js +30 -2
- package/sequence/Sequence.d.ts +11 -0
- package/sequence/Sequence.js +10 -0
- package/sequence/ThroughSequence.d.ts +15 -0
- package/sequence/ThroughSequence.js +15 -0
- package/store/ArrayStore.d.ts +74 -11
- package/store/ArrayStore.js +74 -11
- package/store/BooleanStore.d.ts +19 -2
- package/store/BooleanStore.js +19 -2
- package/store/BusyStore.d.ts +13 -1
- package/store/BusyStore.js +13 -1
- package/store/DataStore.d.ts +118 -15
- package/store/DataStore.js +118 -15
- package/store/DictionaryStore.d.ts +66 -8
- package/store/DictionaryStore.js +66 -8
- package/store/FetchStore.d.ts +43 -6
- package/store/FetchStore.js +36 -5
- package/store/PathStore.d.ts +44 -5
- package/store/PathStore.js +44 -5
- package/store/PayloadFetchStore.d.ts +16 -1
- package/store/PayloadFetchStore.js +9 -1
- package/store/Store.d.ts +85 -16
- package/store/Store.js +52 -10
- package/store/URLStore.d.ts +173 -15
- package/store/URLStore.js +173 -15
- package/test/basics.d.ts +70 -0
- package/test/basics.js +60 -0
- package/test/people.d.ts +45 -0
- package/test/people.js +35 -0
- package/test/util.d.ts +30 -3
- package/test/util.js +30 -3
- package/ui/app/App.d.ts +14 -2
- package/ui/app/App.js +9 -2
- package/ui/app/App.tsx +14 -2
- package/ui/block/Address.d.ts +45 -3
- package/ui/block/Address.js +30 -3
- package/ui/block/Address.tsx +46 -3
- package/ui/block/Block.d.ts +23 -1
- package/ui/block/Block.js +13 -1
- package/ui/block/Block.tsx +23 -1
- package/ui/block/Blockquote.d.ts +21 -0
- package/ui/block/Blockquote.js +16 -0
- package/ui/block/Blockquote.tsx +22 -0
- package/ui/block/Caption.d.ts +21 -1
- package/ui/block/Caption.js +16 -1
- package/ui/block/Caption.tsx +22 -1
- package/ui/block/Card.d.ts +6 -0
- package/ui/block/Card.js +1 -0
- package/ui/block/Card.tsx +6 -0
- package/ui/block/Definitions.d.ts +18 -0
- package/ui/block/Definitions.js +13 -0
- package/ui/block/Definitions.tsx +19 -0
- package/ui/block/Divider.d.ts +21 -0
- package/ui/block/Divider.js +16 -0
- package/ui/block/Divider.tsx +22 -0
- package/ui/block/Heading.d.ts +20 -1
- package/ui/block/Heading.js +15 -0
- package/ui/block/Heading.tsx +21 -1
- package/ui/block/Image.d.ts +23 -0
- package/ui/block/Image.js +18 -0
- package/ui/block/Image.tsx +24 -0
- package/ui/block/Label.d.ts +18 -3
- package/ui/block/Label.js +13 -3
- package/ui/block/Label.tsx +18 -3
- package/ui/block/List.d.ts +30 -0
- package/ui/block/List.js +25 -0
- package/ui/block/List.tsx +32 -0
- package/ui/block/Panel.d.ts +13 -1
- package/ui/block/Panel.js +3 -0
- package/ui/block/Panel.tsx +13 -1
- package/ui/block/Paragraph.d.ts +23 -0
- package/ui/block/Paragraph.js +18 -0
- package/ui/block/Paragraph.tsx +24 -0
- package/ui/block/Preformatted.d.ts +20 -0
- package/ui/block/Preformatted.js +15 -0
- package/ui/block/Preformatted.tsx +21 -0
- package/ui/block/Prose.d.ts +14 -1
- package/ui/block/Prose.js +9 -1
- package/ui/block/Prose.tsx +14 -1
- package/ui/block/Section.d.ts +69 -6
- package/ui/block/Section.js +59 -6
- package/ui/block/Section.tsx +70 -6
- package/ui/block/Subheading.d.ts +20 -1
- package/ui/block/Subheading.js +15 -0
- package/ui/block/Subheading.tsx +21 -1
- package/ui/block/Table.d.ts +20 -0
- package/ui/block/Table.js +15 -0
- package/ui/block/Table.tsx +21 -0
- package/ui/block/Title.d.ts +20 -1
- package/ui/block/Title.js +15 -0
- package/ui/block/Title.tsx +21 -1
- package/ui/block/Video.d.ts +50 -3
- package/ui/block/Video.js +30 -3
- package/ui/block/Video.tsx +50 -3
- package/ui/dialog/Dialog.d.ts +28 -1
- package/ui/dialog/Dialog.js +18 -1
- package/ui/dialog/Dialog.tsx +28 -1
- package/ui/dialog/Dialogs.d.ts +53 -6
- package/ui/dialog/Dialogs.js +43 -6
- package/ui/dialog/Dialogs.tsx +53 -6
- package/ui/dialog/Modal.d.ts +13 -0
- package/ui/dialog/Modal.js +8 -0
- package/ui/dialog/Modal.tsx +13 -0
- package/ui/docs/DocumentationButtons.d.ts +5 -1
- package/ui/docs/DocumentationButtons.tsx +5 -1
- package/ui/docs/DocumentationCard.d.ts +6 -1
- package/ui/docs/DocumentationCard.js +6 -1
- package/ui/docs/DocumentationCard.tsx +6 -1
- package/ui/docs/DocumentationKind.d.ts +13 -1
- package/ui/docs/DocumentationKind.js +8 -0
- package/ui/docs/DocumentationKind.tsx +13 -1
- package/ui/docs/DocumentationPage.d.ts +6 -1
- package/ui/docs/DocumentationPage.js +6 -1
- package/ui/docs/DocumentationPage.tsx +6 -1
- package/ui/docs/DocumentationSignatures.d.ts +10 -1
- package/ui/docs/DocumentationSignatures.js +5 -0
- package/ui/docs/DocumentationSignatures.tsx +10 -1
- package/ui/form/ArrayInput.d.ts +15 -0
- package/ui/form/ArrayInput.tsx +15 -0
- package/ui/form/ArrayRadioInputs.d.ts +10 -0
- package/ui/form/ArrayRadioInputs.js +5 -0
- package/ui/form/ArrayRadioInputs.tsx +10 -0
- package/ui/form/Button.d.ts +19 -3
- package/ui/form/Button.js +14 -2
- package/ui/form/Button.tsx +19 -3
- package/ui/form/ButtonInput.d.ts +14 -1
- package/ui/form/ButtonInput.js +9 -1
- package/ui/form/ButtonInput.tsx +14 -1
- package/ui/form/ButtonInputPopover.d.ts +10 -0
- package/ui/form/ButtonInputPopover.js +5 -0
- package/ui/form/ButtonInputPopover.tsx +10 -0
- package/ui/form/ButtonPopover.d.ts +11 -1
- package/ui/form/ButtonPopover.js +6 -1
- package/ui/form/ButtonPopover.tsx +11 -1
- package/ui/form/CheckboxInput.d.ts +14 -1
- package/ui/form/CheckboxInput.js +9 -1
- package/ui/form/CheckboxInput.tsx +14 -1
- package/ui/form/ChoiceRadioInputs.d.ts +10 -0
- package/ui/form/ChoiceRadioInputs.tsx +10 -0
- package/ui/form/Clickable.d.ts +45 -5
- package/ui/form/Clickable.js +30 -3
- package/ui/form/Clickable.tsx +45 -5
- package/ui/form/DataInput.d.ts +14 -0
- package/ui/form/DataInput.tsx +14 -0
- package/ui/form/DateInput.d.ts +14 -0
- package/ui/form/DateInput.js +9 -0
- package/ui/form/DateInput.tsx +14 -0
- package/ui/form/DictionaryInput.d.ts +15 -0
- package/ui/form/DictionaryInput.tsx +15 -0
- package/ui/form/Field.d.ts +5 -0
- package/ui/form/Field.tsx +5 -0
- package/ui/form/FileInput.d.ts +14 -0
- package/ui/form/FileInput.js +9 -0
- package/ui/form/FileInput.tsx +14 -0
- package/ui/form/Form.d.ts +55 -6
- package/ui/form/Form.js +35 -3
- package/ui/form/Form.tsx +55 -6
- package/ui/form/FormContext.d.ts +24 -3
- package/ui/form/FormContext.js +5 -1
- package/ui/form/FormContext.tsx +24 -3
- package/ui/form/FormFields.d.ts +15 -2
- package/ui/form/FormFields.js +15 -2
- package/ui/form/FormFields.tsx +15 -2
- package/ui/form/FormFooter.d.ts +13 -3
- package/ui/form/FormFooter.js +8 -3
- package/ui/form/FormFooter.tsx +13 -3
- package/ui/form/FormInput.d.ts +21 -2
- package/ui/form/FormInput.js +16 -2
- package/ui/form/FormInput.tsx +21 -2
- package/ui/form/FormMessage.d.ts +8 -1
- package/ui/form/FormMessage.js +8 -1
- package/ui/form/FormMessage.tsx +8 -2
- package/ui/form/FormNotice.d.ts +8 -1
- package/ui/form/FormNotice.js +8 -1
- package/ui/form/FormNotice.tsx +8 -2
- package/ui/form/FormNotify.d.ts +8 -1
- package/ui/form/FormNotify.js +8 -1
- package/ui/form/FormNotify.tsx +8 -2
- package/ui/form/FormStore.d.ts +50 -6
- package/ui/form/FormStore.js +50 -6
- package/ui/form/FormStore.tsx +50 -6
- package/ui/form/Input.d.ts +65 -1
- package/ui/form/Input.js +60 -0
- package/ui/form/Input.tsx +77 -1
- package/ui/form/NumberInput.d.ts +14 -0
- package/ui/form/NumberInput.js +9 -0
- package/ui/form/NumberInput.tsx +14 -0
- package/ui/form/OutputInput.d.ts +13 -1
- package/ui/form/OutputInput.js +8 -1
- package/ui/form/OutputInput.tsx +13 -1
- package/ui/form/Popover.d.ts +18 -2
- package/ui/form/Popover.js +8 -2
- package/ui/form/Popover.tsx +18 -2
- package/ui/form/Progress.d.ts +26 -2
- package/ui/form/Progress.js +16 -2
- package/ui/form/Progress.tsx +26 -2
- package/ui/form/QueryInput.d.ts +14 -5
- package/ui/form/QueryInput.js +9 -5
- package/ui/form/QueryInput.tsx +14 -5
- package/ui/form/RadioInput.d.ts +14 -1
- package/ui/form/RadioInput.js +9 -1
- package/ui/form/RadioInput.tsx +14 -1
- package/ui/form/SchemaInput.d.ts +138 -7
- package/ui/form/SchemaInput.js +79 -4
- package/ui/form/SchemaInput.tsx +138 -7
- package/ui/form/SelectInput.d.ts +14 -0
- package/ui/form/SelectInput.tsx +14 -0
- package/ui/form/SubmitButton.d.ts +14 -1
- package/ui/form/SubmitButton.js +9 -1
- package/ui/form/SubmitButton.tsx +14 -1
- package/ui/form/TextInput.d.ts +15 -0
- package/ui/form/TextInput.js +10 -0
- package/ui/form/TextInput.tsx +15 -0
- package/ui/inline/Code.d.ts +29 -0
- package/ui/inline/Code.js +24 -0
- package/ui/inline/Code.tsx +31 -0
- package/ui/inline/Deleted.d.ts +23 -0
- package/ui/inline/Deleted.js +18 -0
- package/ui/inline/Deleted.tsx +24 -0
- package/ui/inline/Emphasis.d.ts +23 -0
- package/ui/inline/Emphasis.js +18 -0
- package/ui/inline/Emphasis.tsx +24 -0
- package/ui/inline/Inserted.d.ts +23 -0
- package/ui/inline/Inserted.js +18 -0
- package/ui/inline/Inserted.tsx +24 -0
- package/ui/inline/Link.d.ts +23 -0
- package/ui/inline/Link.js +18 -0
- package/ui/inline/Link.tsx +24 -0
- package/ui/inline/Mark.d.ts +23 -0
- package/ui/inline/Mark.js +18 -0
- package/ui/inline/Mark.tsx +24 -0
- package/ui/inline/Small.d.ts +23 -0
- package/ui/inline/Small.js +18 -0
- package/ui/inline/Small.tsx +24 -0
- package/ui/inline/Strong.d.ts +23 -0
- package/ui/inline/Strong.js +18 -0
- package/ui/inline/Strong.tsx +24 -0
- package/ui/inline/Subscript.d.ts +23 -0
- package/ui/inline/Subscript.js +18 -0
- package/ui/inline/Subscript.tsx +24 -0
- package/ui/inline/Superscript.d.ts +23 -0
- package/ui/inline/Superscript.js +18 -0
- package/ui/inline/Superscript.tsx +24 -0
- package/ui/inline/When.d.ts +42 -3
- package/ui/inline/When.js +27 -3
- package/ui/inline/When.tsx +42 -3
- package/ui/layout/CenteredLayout.d.ts +12 -1
- package/ui/layout/CenteredLayout.js +7 -1
- package/ui/layout/CenteredLayout.tsx +12 -1
- package/ui/layout/Layout.d.ts +12 -3
- package/ui/layout/Layout.js +12 -3
- package/ui/layout/Layout.ts +12 -3
- package/ui/layout/SidebarLayout.d.ts +12 -0
- package/ui/layout/SidebarLayout.js +7 -0
- package/ui/layout/SidebarLayout.tsx +12 -0
- package/ui/menu/Menu.d.ts +22 -0
- package/ui/menu/Menu.js +12 -0
- package/ui/menu/Menu.tsx +22 -0
- package/ui/misc/Catcher.d.ts +77 -5
- package/ui/misc/Catcher.js +47 -5
- package/ui/misc/Catcher.tsx +77 -5
- package/ui/misc/Loading.d.ts +20 -0
- package/ui/misc/Loading.js +15 -0
- package/ui/misc/Loading.tsx +20 -0
- package/ui/misc/Mapper.d.ts +13 -1
- package/ui/misc/Mapper.js +4 -0
- package/ui/misc/Mapper.tsx +13 -1
- package/ui/misc/Markup.d.ts +9 -1
- package/ui/misc/Markup.js +4 -0
- package/ui/misc/Markup.tsx +9 -1
- package/ui/misc/MetaContext.d.ts +24 -7
- package/ui/misc/MetaContext.js +19 -6
- package/ui/misc/MetaContext.tsx +24 -7
- package/ui/misc/StatusIcon.d.ts +16 -1
- package/ui/misc/StatusIcon.js +11 -1
- package/ui/misc/StatusIcon.tsx +16 -1
- package/ui/misc/Tag.d.ts +21 -0
- package/ui/misc/Tag.js +11 -0
- package/ui/misc/Tag.tsx +21 -0
- package/ui/notice/Message.d.ts +27 -1
- package/ui/notice/Message.js +22 -1
- package/ui/notice/Message.tsx +27 -1
- package/ui/notice/Notice.d.ts +24 -0
- package/ui/notice/Notice.js +19 -0
- package/ui/notice/Notice.tsx +24 -0
- package/ui/notice/NoticeStore.d.ts +30 -2
- package/ui/notice/NoticeStore.js +30 -2
- package/ui/notice/NoticeStore.ts +30 -2
- package/ui/notice/Notices.d.ts +11 -1
- package/ui/notice/Notices.js +6 -1
- package/ui/notice/Notices.tsx +11 -1
- package/ui/notice/NoticesStore.d.ts +23 -3
- package/ui/notice/NoticesStore.js +23 -3
- package/ui/notice/NoticesStore.ts +23 -3
- package/ui/page/HTML.d.ts +13 -2
- package/ui/page/HTML.js +8 -2
- package/ui/page/HTML.tsx +13 -2
- package/ui/page/Head.d.ts +5 -1
- package/ui/page/Head.js +5 -1
- package/ui/page/Head.tsx +5 -1
- package/ui/page/Page.d.ts +12 -1
- package/ui/page/Page.js +7 -1
- package/ui/page/Page.tsx +12 -1
- package/ui/router/Navigation.d.ts +11 -0
- package/ui/router/Navigation.js +6 -0
- package/ui/router/Navigation.tsx +11 -0
- package/ui/router/NavigationContext.d.ts +14 -2
- package/ui/router/NavigationContext.js +14 -2
- package/ui/router/NavigationContext.tsx +14 -2
- package/ui/router/NavigationStore.d.ts +29 -1
- package/ui/router/NavigationStore.js +29 -1
- package/ui/router/NavigationStore.tsx +29 -1
- package/ui/router/Router.d.ts +12 -1
- package/ui/router/Router.js +7 -1
- package/ui/router/Router.tsx +12 -1
- package/ui/router/Routes.d.ts +14 -4
- package/ui/router/Routes.tsx +14 -4
- package/ui/style/Color.d.ts +15 -2
- package/ui/style/Color.js +5 -0
- package/ui/style/Color.tsx +15 -2
- package/ui/style/Flex.d.ts +41 -4
- package/ui/style/Flex.js +26 -3
- package/ui/style/Flex.tsx +41 -4
- package/ui/style/Gap.d.ts +18 -3
- package/ui/style/Gap.js +8 -1
- package/ui/style/Gap.tsx +18 -3
- package/ui/style/Padding.d.ts +18 -3
- package/ui/style/Padding.js +8 -1
- package/ui/style/Padding.tsx +18 -3
- package/ui/style/Scroll.d.ts +36 -1
- package/ui/style/Scroll.js +26 -1
- package/ui/style/Scroll.tsx +37 -1
- package/ui/style/Space.d.ts +18 -3
- package/ui/style/Space.js +8 -1
- package/ui/style/Space.tsx +18 -3
- package/ui/style/Status.d.ts +23 -7
- package/ui/style/Status.js +13 -5
- package/ui/style/Status.tsx +23 -7
- package/ui/style/Tint.d.ts +7 -1
- package/ui/style/Tint.js +7 -1
- package/ui/style/Tint.tsx +7 -1
- package/ui/style/Typography.d.ts +38 -6
- package/ui/style/Typography.js +8 -0
- package/ui/style/Typography.tsx +38 -6
- package/ui/style/Width.d.ts +18 -1
- package/ui/style/Width.js +8 -0
- package/ui/style/Width.tsx +18 -1
- package/ui/transition/CollapseTransition.d.ts +13 -0
- package/ui/transition/CollapseTransition.js +8 -0
- package/ui/transition/CollapseTransition.tsx +13 -0
- package/ui/transition/FadeTransition.d.ts +13 -0
- package/ui/transition/FadeTransition.js +8 -0
- package/ui/transition/FadeTransition.tsx +13 -0
- package/ui/transition/HorizontalTransition.d.ts +13 -0
- package/ui/transition/HorizontalTransition.js +8 -0
- package/ui/transition/HorizontalTransition.tsx +13 -0
- package/ui/transition/Transition.d.ts +12 -4
- package/ui/transition/Transition.js +7 -3
- package/ui/transition/Transition.tsx +12 -4
- package/ui/transition/VerticalTransition.d.ts +13 -0
- package/ui/transition/VerticalTransition.js +8 -0
- package/ui/transition/VerticalTransition.tsx +13 -0
- package/ui/transition/util.d.ts +16 -6
- package/ui/transition/util.js +7 -1
- package/ui/transition/util.tsx +16 -6
- package/ui/tree/TreeApp.d.ts +11 -0
- package/ui/tree/TreeApp.js +6 -0
- package/ui/tree/TreeApp.tsx +11 -0
- package/ui/tree/TreeBreadcrumbs.d.ts +11 -0
- package/ui/tree/TreeBreadcrumbs.js +6 -0
- package/ui/tree/TreeBreadcrumbs.tsx +11 -0
- package/ui/tree/TreeButton.d.ts +9 -1
- package/ui/tree/TreeButton.js +4 -0
- package/ui/tree/TreeButton.tsx +9 -1
- package/ui/tree/TreeCard.d.ts +8 -1
- package/ui/tree/TreeCard.js +8 -1
- package/ui/tree/TreeCard.tsx +8 -1
- package/ui/tree/TreeCards.d.ts +16 -1
- package/ui/tree/TreeCards.js +11 -1
- package/ui/tree/TreeCards.tsx +16 -1
- package/ui/tree/TreeContext.d.ts +18 -1
- package/ui/tree/TreeContext.js +18 -1
- package/ui/tree/TreeContext.tsx +18 -1
- package/ui/tree/TreeMenu.d.ts +28 -1
- package/ui/tree/TreeMenu.js +23 -1
- package/ui/tree/TreeMenu.tsx +28 -1
- package/ui/tree/TreePage.d.ts +6 -0
- package/ui/tree/TreePage.js +6 -0
- package/ui/tree/TreePage.tsx +6 -0
- package/ui/tree/TreeRouter.d.ts +17 -2
- package/ui/tree/TreeRouter.js +12 -2
- package/ui/tree/TreeRouter.tsx +17 -2
- package/ui/tree/TreeSidebar.d.ts +11 -0
- package/ui/tree/TreeSidebar.js +6 -0
- package/ui/tree/TreeSidebar.tsx +11 -0
- package/ui/util/context.d.ts +13 -1
- package/ui/util/context.ts +13 -1
- package/ui/util/css.d.ts +17 -4
- package/ui/util/css.js +5 -1
- package/ui/util/css.ts +17 -4
- package/ui/util/event.d.ts +9 -1
- package/ui/util/event.js +9 -1
- package/ui/util/event.ts +9 -1
- package/ui/util/focus.d.ts +24 -5
- package/ui/util/focus.js +24 -5
- package/ui/util/focus.ts +24 -5
- package/ui/util/meta.d.ts +113 -21
- package/ui/util/meta.js +73 -13
- package/ui/util/meta.ts +113 -21
- package/ui/util/notice.d.ts +98 -10
- package/ui/util/notice.js +93 -9
- package/ui/util/notice.ts +98 -10
- package/ui/util/props.d.ts +10 -2
- package/ui/util/props.ts +10 -2
- package/ui/util/refresh.d.ts +10 -1
- package/ui/util/refresh.js +10 -1
- package/ui/util/refresh.ts +10 -1
- package/ui/util/scroll.d.ts +20 -4
- package/ui/util/scroll.js +20 -4
- package/ui/util/scroll.ts +20 -4
- package/ui/util/state.d.ts +19 -5
- package/ui/util/state.js +19 -5
- package/ui/util/state.ts +19 -5
- package/util/ansi.d.ts +118 -0
- package/util/ansi.js +116 -0
- package/util/array.d.ts +349 -33
- package/util/array.js +284 -27
- package/util/async.d.ts +87 -9
- package/util/async.js +80 -8
- package/util/base64.d.ts +56 -6
- package/util/base64.js +56 -6
- package/util/boolean.d.ts +75 -10
- package/util/boolean.js +75 -10
- package/util/buffer.d.ts +26 -3
- package/util/buffer.js +21 -3
- package/util/bytes.d.ts +42 -4
- package/util/bytes.js +32 -2
- package/util/class.d.ts +59 -8
- package/util/class.js +44 -5
- package/util/color.d.ts +131 -13
- package/util/color.js +126 -12
- package/util/constants.d.ts +132 -19
- package/util/constants.js +132 -19
- package/util/crypto.d.ts +17 -1
- package/util/crypto.js +17 -1
- package/util/currency.d.ts +38 -4
- package/util/currency.js +33 -3
- package/util/data.d.ts +139 -24
- package/util/data.js +39 -5
- package/util/date.d.ts +152 -18
- package/util/date.js +147 -17
- package/util/debug.d.ts +112 -11
- package/util/debug.js +114 -11
- package/util/dictionary.d.ts +205 -24
- package/util/dictionary.js +162 -17
- package/util/diff.d.ts +22 -3
- package/util/diff.js +11 -1
- package/util/dispose.d.ts +74 -2
- package/util/dispose.js +74 -2
- package/util/duration.d.ts +278 -16
- package/util/duration.js +267 -15
- package/util/element.d.ts +59 -6
- package/util/element.js +32 -3
- package/util/entity.d.ts +39 -6
- package/util/entity.js +5 -1
- package/util/entry.d.ts +56 -9
- package/util/entry.js +32 -4
- package/util/env.d.ts +26 -4
- package/util/env.js +26 -4
- package/util/equal.d.ts +181 -17
- package/util/equal.js +181 -17
- package/util/error.d.ts +57 -5
- package/util/error.js +52 -4
- package/util/file.d.ts +30 -7
- package/util/file.js +25 -6
- package/util/filter.d.ts +36 -4
- package/util/filter.js +31 -3
- package/util/focus.d.ts +9 -1
- package/util/focus.js +9 -1
- package/util/format.d.ts +186 -22
- package/util/format.js +135 -14
- package/util/function.d.ts +66 -11
- package/util/function.js +31 -4
- package/util/geo.d.ts +60 -8
- package/util/geo.js +45 -5
- package/util/hash.d.ts +21 -2
- package/util/hash.js +21 -2
- package/util/http.d.ts +134 -19
- package/util/http.js +94 -11
- package/util/hydrate.d.ts +19 -2
- package/util/hydrate.js +12 -1
- package/util/item.d.ts +70 -11
- package/util/item.js +35 -4
- package/util/iterate.d.ts +109 -13
- package/util/iterate.js +86 -10
- package/util/jwt.d.ts +47 -13
- package/util/jwt.js +36 -12
- package/util/lazy.d.ts +9 -6
- package/util/link.d.ts +10 -3
- package/util/link.js +5 -2
- package/util/log.d.ts +26 -3
- package/util/log.js +26 -3
- package/util/map.d.ts +144 -19
- package/util/map.js +101 -11
- package/util/merge.d.ts +23 -1
- package/util/merge.js +6 -0
- package/util/null.d.ts +102 -13
- package/util/null.js +92 -11
- package/util/number.d.ts +125 -8
- package/util/number.js +120 -7
- package/util/object.d.ts +263 -31
- package/util/object.js +154 -17
- package/util/path.d.ts +91 -15
- package/util/path.js +60 -9
- package/util/query.d.ts +78 -9
- package/util/query.js +58 -6
- package/util/random.d.ts +67 -4
- package/util/random.js +67 -4
- package/util/regexp.d.ts +201 -24
- package/util/regexp.js +106 -11
- package/util/sequence.d.ts +66 -8
- package/util/sequence.js +52 -7
- package/util/serialise.d.ts +7 -1
- package/util/serialise.js +7 -1
- package/util/set.d.ts +103 -13
- package/util/set.js +83 -9
- package/util/sort.d.ts +32 -7
- package/util/sort.js +26 -6
- package/util/source.d.ts +28 -3
- package/util/source.js +22 -2
- package/util/start.d.ts +62 -5
- package/util/start.js +47 -2
- package/util/string.d.ts +209 -25
- package/util/string.js +188 -21
- package/util/template.d.ts +58 -9
- package/util/template.js +45 -6
- package/util/timeout.d.ts +35 -11
- package/util/timeout.js +35 -11
- package/util/transform.d.ts +87 -8
- package/util/transform.js +75 -7
- package/util/tree.d.ts +39 -6
- package/util/tree.js +3 -0
- package/util/types.d.ts +8 -2
- package/util/undefined.d.ts +47 -6
- package/util/undefined.js +47 -6
- package/util/units.d.ts +107 -12
- package/util/units.js +97 -12
- package/util/update.d.ts +36 -4
- package/util/update.js +24 -2
- package/util/uri.d.ts +138 -6
- package/util/uri.js +44 -3
- package/util/url.d.ts +152 -7
- package/util/url.js +136 -5
- package/util/uuid.d.ts +28 -3
- package/util/uuid.js +28 -3
- package/util/validate.d.ts +85 -20
- package/util/validate.js +61 -12
- package/util/xml.d.ts +9 -10
- package/util/xml.js +9 -10
|
@@ -62,13 +62,26 @@ function _getFieldValue({ key, action, value }) {
|
|
|
62
62
|
return action; // Never happens.
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
* Firestore Lite
|
|
66
|
-
*
|
|
65
|
+
* Cloud Firestore database provider backed by the Firebase Lite SDK, implementing the `DBProvider` abstraction.
|
|
66
|
+
*
|
|
67
|
+
* - Works with the Firebase JS SDK via `firebase/firestore/lite`, which keeps bundle size small.
|
|
67
68
|
* - Does not support offline mode.
|
|
68
|
-
* - Does not support realtime subscriptions
|
|
69
|
+
* - Does not support realtime subscriptions: `getItemSequence()` and `getQuerySequence()` throw `UnimplementedError`.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* import { getFirestore } from "firebase/firestore/lite";
|
|
73
|
+
* const provider = new FirestoreLiteProvider(getFirestore());
|
|
74
|
+
*
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider
|
|
69
76
|
*/
|
|
70
77
|
export class FirestoreLiteProvider extends DBProvider {
|
|
71
78
|
_firestore;
|
|
79
|
+
/**
|
|
80
|
+
* Create a provider wrapping a Firebase Lite `Firestore` instance.
|
|
81
|
+
*
|
|
82
|
+
* @param firestore The `Firestore` instance to read and write through.
|
|
83
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider
|
|
84
|
+
*/
|
|
72
85
|
constructor(firestore) {
|
|
73
86
|
super();
|
|
74
87
|
this._firestore = firestore;
|
|
@@ -85,45 +98,157 @@ export class FirestoreLiteProvider extends DBProvider {
|
|
|
85
98
|
_query(c, q) {
|
|
86
99
|
return q ? query(this._collection(c), ..._getConstraints(q)) : this._collection(c);
|
|
87
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Read a single item by ID from its Firestore document.
|
|
103
|
+
*
|
|
104
|
+
* @param c The collection the item belongs to.
|
|
105
|
+
* @param id The ID of the item to read.
|
|
106
|
+
* @returns Promise resolving to the item, or `undefined` if the document does not exist.
|
|
107
|
+
* @example await provider.getItem(users, "abc123")
|
|
108
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getItem
|
|
109
|
+
*/
|
|
88
110
|
async getItem(c, id) {
|
|
89
111
|
const snapshot = await getDoc(this._doc(c, id));
|
|
90
112
|
return _getOptionalItem(snapshot);
|
|
91
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Not supported — the Firebase Lite SDK has no realtime listeners.
|
|
116
|
+
*
|
|
117
|
+
* @param _c The collection the item belongs to.
|
|
118
|
+
* @param _id The ID of the item to subscribe to.
|
|
119
|
+
* @returns Never returns normally.
|
|
120
|
+
* @throws {UnimplementedError} Always, because Firestore Lite does not support realtime subscriptions.
|
|
121
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getItemSequence
|
|
122
|
+
*/
|
|
92
123
|
getItemSequence(_c, _id) {
|
|
93
124
|
throw new UnimplementedError("FirestoreLiteProvider does not support realtime subscriptions");
|
|
94
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Add an item to a collection, letting Firestore generate its document ID.
|
|
128
|
+
*
|
|
129
|
+
* @param c The collection to add the item to.
|
|
130
|
+
* @param data The data for the new item.
|
|
131
|
+
* @returns Promise resolving to the generated ID of the new item.
|
|
132
|
+
* @example const id = await provider.addItem(users, { name: "Dave" })
|
|
133
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/addItem
|
|
134
|
+
*/
|
|
95
135
|
async addItem(c, data) {
|
|
96
136
|
const reference = await addDoc(this._collection(c), data);
|
|
97
137
|
return reference.id; // `as II` needed: Firestore returns string, not II.
|
|
98
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Write an item by ID, overwriting any existing document.
|
|
141
|
+
*
|
|
142
|
+
* @param c The collection the item belongs to.
|
|
143
|
+
* @param id The ID of the item to write.
|
|
144
|
+
* @param data The data to store for the item.
|
|
145
|
+
* @returns Promise resolving once the write completes.
|
|
146
|
+
* @example await provider.setItem(users, "abc123", { name: "Dave" })
|
|
147
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/setItem
|
|
148
|
+
*/
|
|
99
149
|
async setItem(c, id, data) {
|
|
100
150
|
await setDoc(this._doc(c, id), data);
|
|
101
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Apply partial updates to a single item, translating them into Firestore `FieldValue` operations.
|
|
154
|
+
*
|
|
155
|
+
* @param c The collection the item belongs to.
|
|
156
|
+
* @param id The ID of the item to update.
|
|
157
|
+
* @param updates The updates to apply to the item.
|
|
158
|
+
* @returns Promise resolving once the update completes.
|
|
159
|
+
* @example await provider.updateItem(users, "abc123", { name: "Dave" })
|
|
160
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/updateItem
|
|
161
|
+
*/
|
|
102
162
|
async updateItem(c, id, updates) {
|
|
103
163
|
await updateDoc(this._doc(c, id), _getFieldValues(updates));
|
|
104
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Delete a single item by ID from its collection.
|
|
167
|
+
*
|
|
168
|
+
* @param c The collection the item belongs to.
|
|
169
|
+
* @param id The ID of the item to delete.
|
|
170
|
+
* @returns Promise resolving once the deletion completes.
|
|
171
|
+
* @example await provider.deleteItem(users, "abc123")
|
|
172
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/deleteItem
|
|
173
|
+
*/
|
|
105
174
|
async deleteItem(c, id) {
|
|
106
175
|
await deleteDoc(this._doc(c, id));
|
|
107
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Count the items matching a query using Firestore's server-side aggregation.
|
|
179
|
+
*
|
|
180
|
+
* @param c The collection to query.
|
|
181
|
+
* @param q The query selecting which items to count; counts the whole collection when omitted.
|
|
182
|
+
* @returns Promise resolving to the number of matching items.
|
|
183
|
+
* @example const total = await provider.countQuery(users)
|
|
184
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/countQuery
|
|
185
|
+
*/
|
|
108
186
|
async countQuery(c, q) {
|
|
109
187
|
const snapshot = await getCount(this._query(c, q));
|
|
110
188
|
return snapshot.data().count;
|
|
111
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Read all items matching a query.
|
|
192
|
+
*
|
|
193
|
+
* @param c The collection to query.
|
|
194
|
+
* @param q The query selecting which items to read; reads the whole collection when omitted.
|
|
195
|
+
* @returns Promise resolving to the array of matching items.
|
|
196
|
+
* @example const items = await provider.getQuery(users, { "name": "Dave" })
|
|
197
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getQuery
|
|
198
|
+
*/
|
|
112
199
|
async getQuery(c, q) {
|
|
113
200
|
return _getItems(await getDocs(this._query(c, q)));
|
|
114
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Not supported — the Firebase Lite SDK has no realtime listeners.
|
|
204
|
+
*
|
|
205
|
+
* @param _c The collection to query.
|
|
206
|
+
* @param _q The query to subscribe to.
|
|
207
|
+
* @returns Never returns normally.
|
|
208
|
+
* @throws {UnimplementedError} Always, because Firestore Lite does not support realtime subscriptions.
|
|
209
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getQuerySequence
|
|
210
|
+
*/
|
|
115
211
|
getQuerySequence(_c, _q) {
|
|
116
212
|
throw new UnimplementedError("FirestoreLiteProvider does not support realtime subscriptions");
|
|
117
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Write the same data to every item matching a query, one `setDoc` per matching document.
|
|
216
|
+
*
|
|
217
|
+
* @param c The collection to query.
|
|
218
|
+
* @param q The query selecting which items to write.
|
|
219
|
+
* @param data The data to write to each matching item.
|
|
220
|
+
* @returns Promise resolving once all writes complete.
|
|
221
|
+
* @example await provider.setQuery(users, { "name": "Dave" }, { active: false })
|
|
222
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/setQuery
|
|
223
|
+
*/
|
|
118
224
|
async setQuery(c, q, data) {
|
|
119
225
|
const snapshot = await getDocs(this._query(c, q));
|
|
120
226
|
await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
|
|
121
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Apply the same partial updates to every item matching a query, one `updateDoc` per matching document.
|
|
230
|
+
*
|
|
231
|
+
* @param c The collection to query.
|
|
232
|
+
* @param q The query selecting which items to update.
|
|
233
|
+
* @param updates The updates to apply to each matching item.
|
|
234
|
+
* @returns Promise resolving once all updates complete.
|
|
235
|
+
* @example await provider.updateQuery(users, { "active": true }, { name: "Dave" })
|
|
236
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/updateQuery
|
|
237
|
+
*/
|
|
122
238
|
async updateQuery(c, q, updates) {
|
|
123
239
|
const snapshot = await getDocs(this._query(c, q));
|
|
124
240
|
const fieldValues = _getFieldValues(updates);
|
|
125
241
|
await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, fieldValues)));
|
|
126
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Delete every item matching a query, one `deleteDoc` per matching document.
|
|
245
|
+
*
|
|
246
|
+
* @param c The collection to query.
|
|
247
|
+
* @param q The query selecting which items to delete.
|
|
248
|
+
* @returns Promise resolving once all deletions complete.
|
|
249
|
+
* @example await provider.deleteQuery(users, { "active": false })
|
|
250
|
+
* @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/deleteQuery
|
|
251
|
+
*/
|
|
127
252
|
async deleteQuery(c, q) {
|
|
128
253
|
const snapshot = await getDocs(this._query(c, q));
|
|
129
254
|
await Promise.all(snapshot.docs.map(s => deleteDoc(s.ref)));
|
|
@@ -6,11 +6,26 @@ import type { Item, Items, ItemsSequence, OptionalItem, OptionalItemSequence } f
|
|
|
6
6
|
import { type Query } from "../../util/query.js";
|
|
7
7
|
import type { Updates } from "../../util/update.js";
|
|
8
8
|
/**
|
|
9
|
-
* Firestore
|
|
10
|
-
*
|
|
9
|
+
* Cloud Firestore database provider backed by the Firebase Admin SDK, implementing the `DBProvider` abstraction.
|
|
10
|
+
*
|
|
11
|
+
* - Runs server-side via `@google-cloud/firestore` (the Firebase Admin SDK for Node.JS).
|
|
12
|
+
* - Supports realtime subscriptions through Firestore `onSnapshot` listeners.
|
|
13
|
+
* - Collection writes (`setQuery`, `updateQuery`, `deleteQuery`) are batched through a Firestore `BulkWriter`.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* import { Firestore } from "@google-cloud/firestore";
|
|
17
|
+
* const provider = new FirestoreServerProvider(new Firestore());
|
|
18
|
+
*
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
|
|
11
20
|
*/
|
|
12
21
|
export declare class FirestoreServerProvider<I extends string = string, T extends Data = Data> extends DBProvider<I, T> {
|
|
13
22
|
private readonly _firestore;
|
|
23
|
+
/**
|
|
24
|
+
* Create a provider wrapping a Firestore Admin SDK instance.
|
|
25
|
+
*
|
|
26
|
+
* @param firestore The `Firestore` instance to read and write through; defaults to a new `Firestore()`.
|
|
27
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
|
|
28
|
+
*/
|
|
14
29
|
constructor(firestore?: Firestore);
|
|
15
30
|
/** Create a corresponding `FirestoreCollection` reference from a collection. */
|
|
16
31
|
private _getCollection;
|
|
@@ -18,16 +33,128 @@ export declare class FirestoreServerProvider<I extends string = string, T extend
|
|
|
18
33
|
private _getQuery;
|
|
19
34
|
/** Perform a bulk update on a set of documents using a `BulkWriter` */
|
|
20
35
|
private _bulkWrite;
|
|
36
|
+
/**
|
|
37
|
+
* Read a single item by ID from its Firestore document.
|
|
38
|
+
*
|
|
39
|
+
* @param collection The collection the item belongs to.
|
|
40
|
+
* @param id The ID of the item to read.
|
|
41
|
+
* @returns Promise resolving to the item, or `undefined` if the document does not exist.
|
|
42
|
+
* @example await provider.getItem(users, "abc123")
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItem
|
|
44
|
+
*/
|
|
21
45
|
getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<OptionalItem<II, TT>>;
|
|
46
|
+
/**
|
|
47
|
+
* Subscribe to realtime changes to a single item via a Firestore `onSnapshot` listener.
|
|
48
|
+
*
|
|
49
|
+
* @param c The collection the item belongs to.
|
|
50
|
+
* @param id The ID of the item to subscribe to.
|
|
51
|
+
* @returns An async sequence yielding the item (or `undefined` when absent) on every change.
|
|
52
|
+
* @example for await (const item of provider.getItemSequence(users, "abc123")) console.log(item)
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItemSequence
|
|
54
|
+
*/
|
|
22
55
|
getItemSequence<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II): OptionalItemSequence<II, TT>;
|
|
56
|
+
/**
|
|
57
|
+
* Add an item to a collection, letting Firestore generate its document ID.
|
|
58
|
+
*
|
|
59
|
+
* @param c The collection to add the item to.
|
|
60
|
+
* @param data The data for the new item.
|
|
61
|
+
* @returns Promise resolving to the generated ID of the new item.
|
|
62
|
+
* @example const id = await provider.addItem(users, { name: "Dave" })
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/addItem
|
|
64
|
+
*/
|
|
23
65
|
addItem<II extends I, TT extends T>(c: Collection<string, II, TT>, data: TT): Promise<II>;
|
|
66
|
+
/**
|
|
67
|
+
* Write an item by ID, overwriting any existing document.
|
|
68
|
+
*
|
|
69
|
+
* @param c The collection the item belongs to.
|
|
70
|
+
* @param id The ID of the item to write.
|
|
71
|
+
* @param data The data to store for the item.
|
|
72
|
+
* @returns Promise resolving once the write completes.
|
|
73
|
+
* @example await provider.setItem(users, "abc123", { name: "Dave" })
|
|
74
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setItem
|
|
75
|
+
*/
|
|
24
76
|
setItem<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Apply partial updates to a single item, translating them into Firestore `FieldValue` operations.
|
|
79
|
+
*
|
|
80
|
+
* @param c The collection the item belongs to.
|
|
81
|
+
* @param id The ID of the item to update.
|
|
82
|
+
* @param updates The updates to apply to the item.
|
|
83
|
+
* @returns Promise resolving once the update completes.
|
|
84
|
+
* @example await provider.updateItem(users, "abc123", { name: "Dave" })
|
|
85
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateItem
|
|
86
|
+
*/
|
|
25
87
|
updateItem<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Delete a single item by ID from its collection.
|
|
90
|
+
*
|
|
91
|
+
* @param c The collection the item belongs to.
|
|
92
|
+
* @param id The ID of the item to delete.
|
|
93
|
+
* @returns Promise resolving once the deletion completes.
|
|
94
|
+
* @example await provider.deleteItem(users, "abc123")
|
|
95
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteItem
|
|
96
|
+
*/
|
|
26
97
|
deleteItem<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Count the items matching a query using Firestore's server-side aggregation.
|
|
100
|
+
*
|
|
101
|
+
* @param c The collection to query.
|
|
102
|
+
* @param q The query selecting which items to count; counts the whole collection when omitted.
|
|
103
|
+
* @returns Promise resolving to the number of matching items.
|
|
104
|
+
* @example const total = await provider.countQuery(users)
|
|
105
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/countQuery
|
|
106
|
+
*/
|
|
27
107
|
countQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q?: Query<Item<II, TT>>): Promise<number>;
|
|
108
|
+
/**
|
|
109
|
+
* Read all items matching a query.
|
|
110
|
+
*
|
|
111
|
+
* @param c The collection to query.
|
|
112
|
+
* @param q The query selecting which items to read; reads the whole collection when omitted.
|
|
113
|
+
* @returns Promise resolving to the array of matching items.
|
|
114
|
+
* @example const items = await provider.getQuery(users, { "name": "Dave" })
|
|
115
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuery
|
|
116
|
+
*/
|
|
28
117
|
getQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q?: Query<Item<II, TT>>): Promise<Items<II, TT>>;
|
|
118
|
+
/**
|
|
119
|
+
* Subscribe to realtime changes to a query via a Firestore `onSnapshot` listener.
|
|
120
|
+
*
|
|
121
|
+
* @param c The collection to query.
|
|
122
|
+
* @param q The query selecting which items to subscribe to; subscribes to the whole collection when omitted.
|
|
123
|
+
* @returns An async sequence yielding the matching items on every change.
|
|
124
|
+
* @example for await (const items of provider.getQuerySequence(users)) console.log(items)
|
|
125
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuerySequence
|
|
126
|
+
*/
|
|
29
127
|
getQuerySequence<II extends I, TT extends T>(c: Collection<string, II, TT>, q?: Query<Item<II, TT>>): ItemsSequence<II, TT>;
|
|
128
|
+
/**
|
|
129
|
+
* Write the same data to every item matching a query, batched through a Firestore `BulkWriter`.
|
|
130
|
+
*
|
|
131
|
+
* @param c The collection to query.
|
|
132
|
+
* @param q The query selecting which items to write.
|
|
133
|
+
* @param data The data to write to each matching item.
|
|
134
|
+
* @returns Promise resolving once all writes complete.
|
|
135
|
+
* @example await provider.setQuery(users, { "name": "Dave" }, { active: false })
|
|
136
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setQuery
|
|
137
|
+
*/
|
|
30
138
|
setQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q: Query<Item<II, TT>>, data: TT): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Apply the same partial updates to every item matching a query, batched through a Firestore `BulkWriter`.
|
|
141
|
+
*
|
|
142
|
+
* @param c The collection to query.
|
|
143
|
+
* @param q The query selecting which items to update.
|
|
144
|
+
* @param updates The updates to apply to each matching item.
|
|
145
|
+
* @returns Promise resolving once all updates complete.
|
|
146
|
+
* @example await provider.updateQuery(users, { "active": true }, { name: "Dave" })
|
|
147
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateQuery
|
|
148
|
+
*/
|
|
31
149
|
updateQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Delete every item matching a query, batched through a Firestore `BulkWriter`.
|
|
152
|
+
*
|
|
153
|
+
* @param c The collection to query.
|
|
154
|
+
* @param q The query selecting which items to delete.
|
|
155
|
+
* @returns Promise resolving once all deletions complete.
|
|
156
|
+
* @example await provider.deleteQuery(users, { "active": false })
|
|
157
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteQuery
|
|
158
|
+
*/
|
|
32
159
|
deleteQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q: Query<Item<II, TT>>): Promise<void>;
|
|
33
160
|
}
|
|
@@ -51,11 +51,26 @@ function _getFieldValue({ key, action, value }) {
|
|
|
51
51
|
return action; // Never happens.
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Firestore
|
|
55
|
-
*
|
|
54
|
+
* Cloud Firestore database provider backed by the Firebase Admin SDK, implementing the `DBProvider` abstraction.
|
|
55
|
+
*
|
|
56
|
+
* - Runs server-side via `@google-cloud/firestore` (the Firebase Admin SDK for Node.JS).
|
|
57
|
+
* - Supports realtime subscriptions through Firestore `onSnapshot` listeners.
|
|
58
|
+
* - Collection writes (`setQuery`, `updateQuery`, `deleteQuery`) are batched through a Firestore `BulkWriter`.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* import { Firestore } from "@google-cloud/firestore";
|
|
62
|
+
* const provider = new FirestoreServerProvider(new Firestore());
|
|
63
|
+
*
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
|
|
56
65
|
*/
|
|
57
66
|
export class FirestoreServerProvider extends DBProvider {
|
|
58
67
|
_firestore;
|
|
68
|
+
/**
|
|
69
|
+
* Create a provider wrapping a Firestore Admin SDK instance.
|
|
70
|
+
*
|
|
71
|
+
* @param firestore The `Firestore` instance to read and write through; defaults to a new `Firestore()`.
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
|
|
73
|
+
*/
|
|
59
74
|
constructor(firestore = new Firestore()) {
|
|
60
75
|
super();
|
|
61
76
|
this._firestore = firestore;
|
|
@@ -96,45 +111,157 @@ export class FirestoreServerProvider extends DBProvider {
|
|
|
96
111
|
}
|
|
97
112
|
await writer.close();
|
|
98
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Read a single item by ID from its Firestore document.
|
|
116
|
+
*
|
|
117
|
+
* @param collection The collection the item belongs to.
|
|
118
|
+
* @param id The ID of the item to read.
|
|
119
|
+
* @returns Promise resolving to the item, or `undefined` if the document does not exist.
|
|
120
|
+
* @example await provider.getItem(users, "abc123")
|
|
121
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItem
|
|
122
|
+
*/
|
|
99
123
|
async getItem(collection, id) {
|
|
100
124
|
return _getOptionalItem(await this._getCollection(collection).doc(id).get());
|
|
101
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Subscribe to realtime changes to a single item via a Firestore `onSnapshot` listener.
|
|
128
|
+
*
|
|
129
|
+
* @param c The collection the item belongs to.
|
|
130
|
+
* @param id The ID of the item to subscribe to.
|
|
131
|
+
* @returns An async sequence yielding the item (or `undefined` when absent) on every change.
|
|
132
|
+
* @example for await (const item of provider.getItemSequence(users, "abc123")) console.log(item)
|
|
133
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItemSequence
|
|
134
|
+
*/
|
|
102
135
|
getItemSequence(c, id) {
|
|
103
136
|
const ref = this._getCollection(c).doc(id);
|
|
104
137
|
const sequence = new DeferredSequence();
|
|
105
138
|
return new LazySequence(sequence, () => ref.onSnapshot(snapshot => sequence.resolve(_getOptionalItem(snapshot)), reason => sequence.reject(reason)));
|
|
106
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Add an item to a collection, letting Firestore generate its document ID.
|
|
142
|
+
*
|
|
143
|
+
* @param c The collection to add the item to.
|
|
144
|
+
* @param data The data for the new item.
|
|
145
|
+
* @returns Promise resolving to the generated ID of the new item.
|
|
146
|
+
* @example const id = await provider.addItem(users, { name: "Dave" })
|
|
147
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/addItem
|
|
148
|
+
*/
|
|
107
149
|
async addItem(c, data) {
|
|
108
150
|
return (await this._getCollection(c).add(data)).id; // `as II` needed: Firestore returns string, not II.
|
|
109
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Write an item by ID, overwriting any existing document.
|
|
154
|
+
*
|
|
155
|
+
* @param c The collection the item belongs to.
|
|
156
|
+
* @param id The ID of the item to write.
|
|
157
|
+
* @param data The data to store for the item.
|
|
158
|
+
* @returns Promise resolving once the write completes.
|
|
159
|
+
* @example await provider.setItem(users, "abc123", { name: "Dave" })
|
|
160
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setItem
|
|
161
|
+
*/
|
|
110
162
|
async setItem(c, id, data) {
|
|
111
163
|
await this._getCollection(c).doc(id).set(data);
|
|
112
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Apply partial updates to a single item, translating them into Firestore `FieldValue` operations.
|
|
167
|
+
*
|
|
168
|
+
* @param c The collection the item belongs to.
|
|
169
|
+
* @param id The ID of the item to update.
|
|
170
|
+
* @param updates The updates to apply to the item.
|
|
171
|
+
* @returns Promise resolving once the update completes.
|
|
172
|
+
* @example await provider.updateItem(users, "abc123", { name: "Dave" })
|
|
173
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateItem
|
|
174
|
+
*/
|
|
113
175
|
async updateItem(c, id, updates) {
|
|
114
176
|
await this._getCollection(c).doc(id).update(_getFieldValues(updates));
|
|
115
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Delete a single item by ID from its collection.
|
|
180
|
+
*
|
|
181
|
+
* @param c The collection the item belongs to.
|
|
182
|
+
* @param id The ID of the item to delete.
|
|
183
|
+
* @returns Promise resolving once the deletion completes.
|
|
184
|
+
* @example await provider.deleteItem(users, "abc123")
|
|
185
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteItem
|
|
186
|
+
*/
|
|
116
187
|
async deleteItem(c, id) {
|
|
117
188
|
await this._getCollection(c).doc(id).delete();
|
|
118
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Count the items matching a query using Firestore's server-side aggregation.
|
|
192
|
+
*
|
|
193
|
+
* @param c The collection to query.
|
|
194
|
+
* @param q The query selecting which items to count; counts the whole collection when omitted.
|
|
195
|
+
* @returns Promise resolving to the number of matching items.
|
|
196
|
+
* @example const total = await provider.countQuery(users)
|
|
197
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/countQuery
|
|
198
|
+
*/
|
|
119
199
|
async countQuery(c, q) {
|
|
120
200
|
const snapshot = await this._getQuery(c, q).count().get();
|
|
121
201
|
return snapshot.data().count;
|
|
122
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Read all items matching a query.
|
|
205
|
+
*
|
|
206
|
+
* @param c The collection to query.
|
|
207
|
+
* @param q The query selecting which items to read; reads the whole collection when omitted.
|
|
208
|
+
* @returns Promise resolving to the array of matching items.
|
|
209
|
+
* @example const items = await provider.getQuery(users, { "name": "Dave" })
|
|
210
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuery
|
|
211
|
+
*/
|
|
123
212
|
async getQuery(c, q) {
|
|
124
213
|
return _getItems(await this._getQuery(c, q).get());
|
|
125
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Subscribe to realtime changes to a query via a Firestore `onSnapshot` listener.
|
|
217
|
+
*
|
|
218
|
+
* @param c The collection to query.
|
|
219
|
+
* @param q The query selecting which items to subscribe to; subscribes to the whole collection when omitted.
|
|
220
|
+
* @returns An async sequence yielding the matching items on every change.
|
|
221
|
+
* @example for await (const items of provider.getQuerySequence(users)) console.log(items)
|
|
222
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuerySequence
|
|
223
|
+
*/
|
|
126
224
|
getQuerySequence(c, q) {
|
|
127
225
|
const ref = this._getQuery(c, q);
|
|
128
226
|
const sequence = new DeferredSequence();
|
|
129
227
|
return new LazySequence(sequence, () => ref.onSnapshot(snapshot => sequence.resolve(_getItems(snapshot)), reason => sequence.reject(reason)));
|
|
130
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Write the same data to every item matching a query, batched through a Firestore `BulkWriter`.
|
|
231
|
+
*
|
|
232
|
+
* @param c The collection to query.
|
|
233
|
+
* @param q The query selecting which items to write.
|
|
234
|
+
* @param data The data to write to each matching item.
|
|
235
|
+
* @returns Promise resolving once all writes complete.
|
|
236
|
+
* @example await provider.setQuery(users, { "name": "Dave" }, { active: false })
|
|
237
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setQuery
|
|
238
|
+
*/
|
|
131
239
|
async setQuery(c, q, data) {
|
|
132
240
|
return await this._bulkWrite(c, q, (w, s) => void w.set(s.ref, data));
|
|
133
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Apply the same partial updates to every item matching a query, batched through a Firestore `BulkWriter`.
|
|
244
|
+
*
|
|
245
|
+
* @param c The collection to query.
|
|
246
|
+
* @param q The query selecting which items to update.
|
|
247
|
+
* @param updates The updates to apply to each matching item.
|
|
248
|
+
* @returns Promise resolving once all updates complete.
|
|
249
|
+
* @example await provider.updateQuery(users, { "active": true }, { name: "Dave" })
|
|
250
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateQuery
|
|
251
|
+
*/
|
|
134
252
|
async updateQuery(c, q, updates) {
|
|
135
253
|
const fieldValues = _getFieldValues(updates);
|
|
136
254
|
return await this._bulkWrite(c, q, (w, s) => void w.update(s.ref, fieldValues));
|
|
137
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* Delete every item matching a query, batched through a Firestore `BulkWriter`.
|
|
258
|
+
*
|
|
259
|
+
* @param c The collection to query.
|
|
260
|
+
* @param q The query selecting which items to delete.
|
|
261
|
+
* @returns Promise resolving once all deletions complete.
|
|
262
|
+
* @example await provider.deleteQuery(users, { "active": false })
|
|
263
|
+
* @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteQuery
|
|
264
|
+
*/
|
|
138
265
|
async deleteQuery(c, q) {
|
|
139
266
|
return await this._bulkWrite(c, q, (w, s) => void w.delete(s.ref));
|
|
140
267
|
}
|
package/markup/MarkupParser.d.ts
CHANGED
|
@@ -6,7 +6,13 @@ import { type ImmutableURI, type URISchemes } from "../util/uri.js";
|
|
|
6
6
|
import type { ImmutableURL } from "../util/url.js";
|
|
7
7
|
import type { MarkupRule, MarkupRules } from "./MarkupRule.js";
|
|
8
8
|
import type { Parser } from "./Parser.js";
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Options configuring a `MarkupParser` (represents the current state of the parsing).
|
|
11
|
+
* - Every field is optional — an empty object yields a parser with the default rules and behaviour.
|
|
12
|
+
* - Link resolution honours `url`, `root`, and `schemes`; link safety hinges on `schemes`.
|
|
13
|
+
*
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupOptions
|
|
15
|
+
*/
|
|
10
16
|
export type MarkupOptions = {
|
|
11
17
|
/**
|
|
12
18
|
* The active list of parsing rules.
|
|
@@ -37,61 +43,102 @@ export type MarkupOptions = {
|
|
|
37
43
|
*/
|
|
38
44
|
readonly context?: string;
|
|
39
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Parses a Markdownish markup string and renders it as a React node using a tiered, masking rule engine.
|
|
48
|
+
* - The syntax isn't hardcoded — it's defined entirely by the `rules` supplied (defaults to `MARKUP_RULES`).
|
|
49
|
+
* - Rules are grouped into priority tiers and resolved highest tier first; a claimed region is masked so lower-priority rules can't match into or across it.
|
|
50
|
+
* - Rules own the recursion into their own children by calling `parse()` again, optionally with a different context.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* const node = new MarkupParser().parse("This is a *bold* string.");
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser
|
|
55
|
+
*/
|
|
40
56
|
export declare class MarkupParser implements Parser<string, ReactNode> {
|
|
41
57
|
/**
|
|
42
58
|
* The list of parsing rules this parser applies.
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/rules
|
|
43
60
|
*/
|
|
44
61
|
readonly rules: MarkupRules;
|
|
45
62
|
/**
|
|
46
63
|
* Calculated list of priorities to iterate over (extracted from the rules), e.g. [10, 0, -10]
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/priorities
|
|
47
65
|
*/
|
|
48
66
|
readonly priorities: ImmutableArray<number>;
|
|
49
67
|
/**
|
|
50
68
|
* Set the `rel=""` property used for any links (e.g. `rel="nofollow ugc"`).
|
|
51
69
|
* @example "nofollow ugc"
|
|
70
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/rel
|
|
52
71
|
*/
|
|
53
72
|
readonly rel: string | undefined;
|
|
54
73
|
/**
|
|
55
74
|
* Current page URL — used as the base for resolving relative refs (`./foo`, `#x`, bare segments) in link hrefs.
|
|
56
75
|
* @default Falls back to `root` if not set.
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/url
|
|
57
77
|
*/
|
|
58
78
|
readonly url: ImmutableURL | undefined;
|
|
59
79
|
/**
|
|
60
80
|
* Site root URL — used as the base for resolving site-absolute path hrefs (`/foo`), honoring its subfolder.
|
|
61
81
|
* @default Falls back to `url` if not set.
|
|
82
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/root
|
|
62
83
|
*/
|
|
63
84
|
readonly root: ImmutableURL | undefined;
|
|
64
85
|
/**
|
|
65
86
|
* Valid URI schemes/protocols for URLs and URIs.
|
|
66
87
|
* @example ["http:", "https:"]
|
|
67
88
|
* @default ["http:", "https:"]
|
|
89
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/schemes
|
|
68
90
|
*/
|
|
69
91
|
readonly schemes: URISchemes;
|
|
70
92
|
/**
|
|
71
93
|
* Default context to use if one isn't set. Defaults to `"block"`
|
|
94
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/context
|
|
72
95
|
*/
|
|
73
96
|
readonly context: string;
|
|
97
|
+
/**
|
|
98
|
+
* Create a new `MarkupParser` from a set of options.
|
|
99
|
+
*
|
|
100
|
+
* @param options Options configuring the rules, link resolution, and default context (all optional).
|
|
101
|
+
* @returns A `MarkupParser` instance.
|
|
102
|
+
* @example new MarkupParser({ rel: "nofollow ugc" })
|
|
103
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser
|
|
104
|
+
*/
|
|
74
105
|
constructor({ rules, rel, url, root, schemes, context }?: MarkupOptions);
|
|
75
106
|
/**
|
|
76
|
-
* Parse a text string as Markdownish markup syntax and render it as
|
|
107
|
+
* Parse a text string as Markdownish markup syntax and render it as a React node.
|
|
77
108
|
* - Syntax is not defined by this code, but by the rules supplied to it.
|
|
78
109
|
*
|
|
79
|
-
* @param input The string content possibly containing markup syntax, e.g. "This is a *bold* string.
|
|
80
|
-
* @param parser A markup parser instance.
|
|
110
|
+
* @param input The string content possibly containing markup syntax, e.g. `"This is a *bold* string."`.
|
|
81
111
|
* @param context The context to render in (defaults to `"block"`).
|
|
82
|
-
*
|
|
83
112
|
* @returns A React node — an element, a string, `null`, or an array of zero or more of those.
|
|
113
|
+
* @example new MarkupParser().parse("This is a *bold* string.")
|
|
114
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/parse
|
|
84
115
|
*/
|
|
85
116
|
parse(input: string, context?: string): ReactNode;
|
|
86
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Yield the rules active in `context` that sit in the given priority tier.
|
|
119
|
+
*
|
|
120
|
+
* @param context The render context to filter rules by (e.g. `"block"`, `"inline"`).
|
|
121
|
+
* @param priority The priority tier to filter rules by.
|
|
122
|
+
* @returns An iterable of the matching `MarkupRule` instances.
|
|
123
|
+
* @example for (const rule of parser.getRules("block", 0)) { ... }
|
|
124
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/getRules
|
|
125
|
+
*/
|
|
87
126
|
getRules(context: string, priority: number): Iterable<MarkupRule>;
|
|
88
127
|
/**
|
|
89
|
-
*
|
|
128
|
+
* Resolve a link href against this parser's `url` and `root`, returning it only if its scheme is allowed.
|
|
90
129
|
*
|
|
91
|
-
* @
|
|
92
|
-
* @returns `
|
|
130
|
+
* @param href The raw link reference to resolve (relative or absolute), or a nullish value.
|
|
131
|
+
* @returns An `ImmutableURI` if the link parses and its scheme is in `schemes`, otherwise `undefined`.
|
|
132
|
+
* @example parser.getLink("/about") // ImmutableURI | undefined
|
|
133
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/getLink
|
|
93
134
|
*/
|
|
94
135
|
getLink(href: Nullish<PossibleLink>): ImmutableURI | undefined;
|
|
95
136
|
}
|
|
96
|
-
/**
|
|
137
|
+
/**
|
|
138
|
+
* Shared `MarkupParser` instance configured with the default markup rules and behaviour.
|
|
139
|
+
* - Use this singleton when no custom rules, link resolution, or default context are needed.
|
|
140
|
+
*
|
|
141
|
+
* @example MARKUP_PARSER.parse("This is a *bold* string.")
|
|
142
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MARKUP_PARSER
|
|
143
|
+
*/
|
|
97
144
|
export declare const MARKUP_PARSER: MarkupParser;
|