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
|
@@ -3,36 +3,88 @@ import { awaitDispose } from "../../util/dispose.js";
|
|
|
3
3
|
import { APICache } from "../cache/APICache.js";
|
|
4
4
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
5
5
|
/**
|
|
6
|
-
* API provider wrapper that serves requests through an `APICache
|
|
7
|
-
* - Constructor accepts a `source` provider and an optional default `maxAge`.
|
|
6
|
+
* API provider wrapper that serves requests through an `APICache` so repeated calls reuse cached results.
|
|
8
7
|
* - On `call(...)`, triggers `cache.refresh(maxAge)` for the endpoint+payload before awaiting `cache.call(...)`.
|
|
9
8
|
* - `invalidate`, `invalidateAll`, `refresh`, and `refreshAll` pass through to the underlying cache and use `this.maxAge` as the default refresh timing.
|
|
10
9
|
*
|
|
11
|
-
* @
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* @example
|
|
11
|
+
* const api = new CachedAPIProvider(source);
|
|
12
|
+
* const result = await api.call(endpoint, payload);
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider
|
|
14
14
|
*/
|
|
15
15
|
export class CachedAPIProvider extends ThroughAPIProvider {
|
|
16
|
+
/**
|
|
17
|
+
* The maximum age used when calling `call()`, defaulting to `AVOID_REFRESH` (only refresh if invalidated or still loading).
|
|
18
|
+
* - Not used for `refresh()` calls, which always refetch immediately.
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/maxAge
|
|
20
|
+
*/
|
|
16
21
|
maxAge;
|
|
17
22
|
_cache;
|
|
23
|
+
/**
|
|
24
|
+
* Create a cached provider wrapping a source provider.
|
|
25
|
+
*
|
|
26
|
+
* @param source The source provider whose results are cached.
|
|
27
|
+
* @param maxAge Default maximum age in milliseconds for `call()` (defaults to `AVOID_REFRESH`).
|
|
28
|
+
* @example new CachedAPIProvider(source)
|
|
29
|
+
*/
|
|
18
30
|
constructor(source, maxAge = AVOID_REFRESH) {
|
|
19
31
|
super(source);
|
|
20
32
|
this.maxAge = maxAge;
|
|
21
33
|
this._cache = new APICache(source);
|
|
22
34
|
}
|
|
23
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Call an endpoint through the cache, reusing a cached result where possible instead of fetching fresh.
|
|
37
|
+
*
|
|
38
|
+
* @param endpoint The endpoint to call.
|
|
39
|
+
* @param payload The payload to call the endpoint with.
|
|
40
|
+
* @param _options Request options (unused; the cache key is derived from endpoint and payload).
|
|
41
|
+
* @param caller The calling function used for error stack traces.
|
|
42
|
+
* @returns Promise resolving to the (possibly cached) result.
|
|
43
|
+
* @example await api.call(endpoint, payload)
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/call
|
|
45
|
+
*/
|
|
24
46
|
call(endpoint, payload, _options, caller = this.call) {
|
|
25
47
|
return this._cache.call(endpoint, payload, this.maxAge, caller);
|
|
26
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Invalidate the cached result for a specific endpoint and payload.
|
|
51
|
+
*
|
|
52
|
+
* @param endpoint The endpoint whose cached result should be invalidated.
|
|
53
|
+
* @param payload The payload identifying the cached result.
|
|
54
|
+
* @example api.invalidate(endpoint, payload)
|
|
55
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/invalidate
|
|
56
|
+
*/
|
|
27
57
|
invalidate(endpoint, payload) {
|
|
28
58
|
this._cache.invalidate(endpoint, payload);
|
|
29
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Invalidate every cached result for an endpoint, across all payloads.
|
|
62
|
+
*
|
|
63
|
+
* @param endpoint The endpoint whose cached results should be invalidated.
|
|
64
|
+
* @example api.invalidateAll(endpoint)
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/invalidateAll
|
|
66
|
+
*/
|
|
30
67
|
invalidateAll(endpoint) {
|
|
31
68
|
this._cache.invalidateAll(endpoint);
|
|
32
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Refresh the cached result for a specific endpoint and payload.
|
|
72
|
+
*
|
|
73
|
+
* @param endpoint The endpoint whose cached result should be refreshed.
|
|
74
|
+
* @param payload The payload identifying the cached result.
|
|
75
|
+
* @example api.refresh(endpoint, payload)
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/refresh
|
|
77
|
+
*/
|
|
33
78
|
refresh(endpoint, payload) {
|
|
34
79
|
this._cache.refresh(endpoint, payload, this.maxAge);
|
|
35
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Refresh every cached result for an endpoint, across all payloads.
|
|
83
|
+
*
|
|
84
|
+
* @param endpoint The endpoint whose cached results should be refreshed.
|
|
85
|
+
* @example api.refreshAll(endpoint)
|
|
86
|
+
* @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/refreshAll
|
|
87
|
+
*/
|
|
36
88
|
refreshAll(endpoint) {
|
|
37
89
|
this._cache.refreshAll(endpoint, this.maxAge);
|
|
38
90
|
}
|
|
@@ -5,7 +5,11 @@ import { type PossibleURIParams } from "../../util/uri.js";
|
|
|
5
5
|
import { type PossibleURL } from "../../util/url.js";
|
|
6
6
|
import type { Endpoint } from "../endpoint/Endpoint.js";
|
|
7
7
|
import { APIProvider } from "./APIProvider.js";
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Options for constructing a `ClientAPIProvider`.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProviderOptions
|
|
12
|
+
*/
|
|
9
13
|
export interface ClientAPIProviderOptions {
|
|
10
14
|
/**
|
|
11
15
|
* The common base URL for all rendered endpoint requests.
|
|
@@ -35,16 +39,69 @@ export interface ClientAPIProviderOptions {
|
|
|
35
39
|
* - Parses JSON responses and throws `ResponseError` for non-2xx responses.
|
|
36
40
|
* - Extendable with custom request-building and response-parsing logic by overriding `createRequest()` and `parseResponse()`.
|
|
37
41
|
* - Wrap in `ValidationAPIProvider` to add automatic validation of request payloads and response results against endpoint schemas.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* const provider = new ClientAPIProvider({ url: "https://api.example.com" });
|
|
45
|
+
* const user = await provider.call(getUser, { id: "abc" });
|
|
46
|
+
*
|
|
47
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider
|
|
38
48
|
*/
|
|
39
49
|
export declare class ClientAPIProvider<P = unknown, R = unknown> extends APIProvider<P, R> {
|
|
40
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* The common base URL for all rendered endpoint requests.
|
|
52
|
+
*
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/url
|
|
54
|
+
*/
|
|
41
55
|
readonly url: URL;
|
|
42
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Default options used for HTTP requests created with `this.createRequest()` and `this.fetch()`
|
|
58
|
+
*
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/options
|
|
60
|
+
*/
|
|
43
61
|
readonly options: RequestOptions;
|
|
44
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Timeout in milliseconds before the request is aborted, or `0` for no timeout.
|
|
64
|
+
*
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/timeout
|
|
66
|
+
*/
|
|
45
67
|
readonly timeout: number;
|
|
68
|
+
/**
|
|
69
|
+
* Create a `ClientAPIProvider` from a base URL and request options.
|
|
70
|
+
*
|
|
71
|
+
* @param options The `ClientAPIProviderOptions` configuring the base `url`, default request `options`, and `timeout`.
|
|
72
|
+
* @throws {RequiredError} if `url` cannot be resolved to a valid base URL.
|
|
73
|
+
* @example new ClientAPIProvider({ url: "https://api.example.com" })
|
|
74
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider
|
|
75
|
+
*/
|
|
46
76
|
constructor({ url, options, timeout }: ClientAPIProviderOptions);
|
|
77
|
+
/**
|
|
78
|
+
* Render the full request URL, appending `?query` params for `HEAD` and `GET` requests.
|
|
79
|
+
*
|
|
80
|
+
* @param endpoint The endpoint whose path is rendered into the base URL.
|
|
81
|
+
* @param payload The payload supplying `{placeholder}` and query-param values.
|
|
82
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
83
|
+
* @returns The fully resolved request `URL`.
|
|
84
|
+
* @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
|
|
85
|
+
* @throws {RequiredError} if this is a `HEAD` or `GET` request but `payload` is not a data object.
|
|
86
|
+
* @example provider.renderURL(getUser, { id: "abc" })
|
|
87
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/renderURL
|
|
88
|
+
*/
|
|
47
89
|
renderURL<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, caller?: AnyCaller): URL;
|
|
90
|
+
/**
|
|
91
|
+
* Create a `Request` for an endpoint, rendering payload into the URL or body depending on the method.
|
|
92
|
+
* - `HEAD` and `GET` requests carry their payload as `?query` params; other methods carry it as the body.
|
|
93
|
+
* - Merges `options` over the provider's default options and attaches a timeout `AbortSignal` when `timeout` is set.
|
|
94
|
+
*
|
|
95
|
+
* @param endpoint The endpoint the request targets.
|
|
96
|
+
* @param payload The payload to embed into the `Request`.
|
|
97
|
+
* @param options Per-call `RequestOptions` merged over the provider's defaults.
|
|
98
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
99
|
+
* @returns The created `Request`.
|
|
100
|
+
* @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
|
|
101
|
+
* @throws {RequiredError} if this is a `HEAD` or `GET` request but `payload` is not a data object.
|
|
102
|
+
* @example provider.createRequest(getUser, { id: "abc" })
|
|
103
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/createRequest
|
|
104
|
+
*/
|
|
48
105
|
createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
|
|
49
106
|
/** Internal implementation function for `createRequest()` used for requests that have no body. */
|
|
50
107
|
protected _createHeadRequest(method: RequestHeadMethod, //
|
|
@@ -52,6 +109,25 @@ export declare class ClientAPIProvider<P = unknown, R = unknown> extends APIProv
|
|
|
52
109
|
/** Internal implementation function for `createRequest()` used for requests that have a body. */
|
|
53
110
|
protected _createBodyRequest(method: RequestBodyMethod, //
|
|
54
111
|
url: PossibleURL, payload: P, options: RequestOptions, caller: AnyCaller): Request;
|
|
112
|
+
/**
|
|
113
|
+
* Send the request over the network using the global `fetch()` API.
|
|
114
|
+
*
|
|
115
|
+
* @param request The `Request` to send.
|
|
116
|
+
* @returns A promise resolving to the `Response`.
|
|
117
|
+
* @example await provider.fetch(request)
|
|
118
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/fetch
|
|
119
|
+
*/
|
|
55
120
|
fetch(request: Request): Promise<Response>;
|
|
121
|
+
/**
|
|
122
|
+
* Parse a response body into a result, throwing `ResponseError` for non-2xx responses.
|
|
123
|
+
*
|
|
124
|
+
* @param _endpoint The endpoint the response was produced for.
|
|
125
|
+
* @param response The `Response` to parse.
|
|
126
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
127
|
+
* @returns A promise resolving to the parsed result.
|
|
128
|
+
* @throws {ResponseError} if the response status is non-2xx.
|
|
129
|
+
* @example await provider.parseResponse(getUser, response)
|
|
130
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/parseResponse
|
|
131
|
+
*/
|
|
56
132
|
parseResponse<PP extends P, RR extends R>(_endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
57
133
|
}
|
|
@@ -13,20 +13,58 @@ import { APIProvider } from "./APIProvider.js";
|
|
|
13
13
|
* - Parses JSON responses and throws `ResponseError` for non-2xx responses.
|
|
14
14
|
* - Extendable with custom request-building and response-parsing logic by overriding `createRequest()` and `parseResponse()`.
|
|
15
15
|
* - Wrap in `ValidationAPIProvider` to add automatic validation of request payloads and response results against endpoint schemas.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const provider = new ClientAPIProvider({ url: "https://api.example.com" });
|
|
19
|
+
* const user = await provider.call(getUser, { id: "abc" });
|
|
20
|
+
*
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider
|
|
16
22
|
*/
|
|
17
23
|
export class ClientAPIProvider extends APIProvider {
|
|
18
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* The common base URL for all rendered endpoint requests.
|
|
26
|
+
*
|
|
27
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/url
|
|
28
|
+
*/
|
|
19
29
|
url;
|
|
20
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Default options used for HTTP requests created with `this.createRequest()` and `this.fetch()`
|
|
32
|
+
*
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/options
|
|
34
|
+
*/
|
|
21
35
|
options;
|
|
22
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Timeout in milliseconds before the request is aborted, or `0` for no timeout.
|
|
38
|
+
*
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/timeout
|
|
40
|
+
*/
|
|
23
41
|
timeout;
|
|
42
|
+
/**
|
|
43
|
+
* Create a `ClientAPIProvider` from a base URL and request options.
|
|
44
|
+
*
|
|
45
|
+
* @param options The `ClientAPIProviderOptions` configuring the base `url`, default request `options`, and `timeout`.
|
|
46
|
+
* @throws {RequiredError} if `url` cannot be resolved to a valid base URL.
|
|
47
|
+
* @example new ClientAPIProvider({ url: "https://api.example.com" })
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider
|
|
49
|
+
*/
|
|
24
50
|
constructor({ url, options = {}, timeout = 20_000 }) {
|
|
25
51
|
super();
|
|
26
52
|
this.url = requireBaseURL(url, ClientAPIProvider);
|
|
27
53
|
this.options = options;
|
|
28
54
|
this.timeout = timeout;
|
|
29
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Render the full request URL, appending `?query` params for `HEAD` and `GET` requests.
|
|
58
|
+
*
|
|
59
|
+
* @param endpoint The endpoint whose path is rendered into the base URL.
|
|
60
|
+
* @param payload The payload supplying `{placeholder}` and query-param values.
|
|
61
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
62
|
+
* @returns The fully resolved request `URL`.
|
|
63
|
+
* @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
|
|
64
|
+
* @throws {RequiredError} if this is a `HEAD` or `GET` request but `payload` is not a data object.
|
|
65
|
+
* @example provider.renderURL(getUser, { id: "abc" })
|
|
66
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/renderURL
|
|
67
|
+
*/
|
|
30
68
|
renderURL(endpoint, payload, caller = this.renderURL) {
|
|
31
69
|
// Construct the full URL from `this.url` and the rendered path.
|
|
32
70
|
// Adding the `.` turns the absolute path from `renderPath()` into a relative URL.
|
|
@@ -43,6 +81,21 @@ export class ClientAPIProvider extends APIProvider {
|
|
|
43
81
|
}
|
|
44
82
|
return url;
|
|
45
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a `Request` for an endpoint, rendering payload into the URL or body depending on the method.
|
|
86
|
+
* - `HEAD` and `GET` requests carry their payload as `?query` params; other methods carry it as the body.
|
|
87
|
+
* - Merges `options` over the provider's default options and attaches a timeout `AbortSignal` when `timeout` is set.
|
|
88
|
+
*
|
|
89
|
+
* @param endpoint The endpoint the request targets.
|
|
90
|
+
* @param payload The payload to embed into the `Request`.
|
|
91
|
+
* @param options Per-call `RequestOptions` merged over the provider's defaults.
|
|
92
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
93
|
+
* @returns The created `Request`.
|
|
94
|
+
* @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
|
|
95
|
+
* @throws {RequiredError} if this is a `HEAD` or `GET` request but `payload` is not a data object.
|
|
96
|
+
* @example provider.createRequest(getUser, { id: "abc" })
|
|
97
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/createRequest
|
|
98
|
+
*/
|
|
46
99
|
createRequest(endpoint, payload, options, caller = this.createRequest) {
|
|
47
100
|
// Render the path into the base URL.
|
|
48
101
|
const url = this.renderURL(endpoint, payload, caller);
|
|
@@ -67,10 +120,28 @@ export class ClientAPIProvider extends APIProvider {
|
|
|
67
120
|
url, payload, options, caller) {
|
|
68
121
|
return createRequest(method, url, payload, options, caller);
|
|
69
122
|
}
|
|
70
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Send the request over the network using the global `fetch()` API.
|
|
125
|
+
*
|
|
126
|
+
* @param request The `Request` to send.
|
|
127
|
+
* @returns A promise resolving to the `Response`.
|
|
128
|
+
* @example await provider.fetch(request)
|
|
129
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/fetch
|
|
130
|
+
*/
|
|
71
131
|
async fetch(request) {
|
|
72
132
|
return fetch(request);
|
|
73
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Parse a response body into a result, throwing `ResponseError` for non-2xx responses.
|
|
136
|
+
*
|
|
137
|
+
* @param _endpoint The endpoint the response was produced for.
|
|
138
|
+
* @param response The `Response` to parse.
|
|
139
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
140
|
+
* @returns A promise resolving to the parsed result.
|
|
141
|
+
* @throws {ResponseError} if the response status is non-2xx.
|
|
142
|
+
* @example await provider.parseResponse(getUser, response)
|
|
143
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ClientAPIProvider/ClientAPIProvider/parseResponse
|
|
144
|
+
*/
|
|
74
145
|
async parseResponse(_endpoint, response, caller = this.parseResponse) {
|
|
75
146
|
const { ok, status } = response;
|
|
76
147
|
const content = await parseResponseBody(response, caller);
|
|
@@ -2,9 +2,48 @@ import type { AnyCaller } from "../../util/function.js";
|
|
|
2
2
|
import type { RequestOptions } from "../../util/http.js";
|
|
3
3
|
import type { Endpoint } from "../endpoint/Endpoint.js";
|
|
4
4
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Provider that logs every request, response, and error to the console in detail to help diagnose issues in development.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const api = new DebugAPIProvider(source);
|
|
10
|
+
* await api.call(endpoint, payload); // logs request, response, and result
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider
|
|
12
|
+
*/
|
|
6
13
|
export declare class DebugAPIProvider<P, R> extends ThroughAPIProvider<P, R> {
|
|
14
|
+
/**
|
|
15
|
+
* Build a request via the source provider, logging the endpoint and payload (or any error).
|
|
16
|
+
*
|
|
17
|
+
* @param endpoint The endpoint to build a request for.
|
|
18
|
+
* @param payload The payload to send.
|
|
19
|
+
* @param options Optional request options.
|
|
20
|
+
* @param caller The calling function used for error stack traces.
|
|
21
|
+
* @returns The built request.
|
|
22
|
+
* @throws Rethrows any error thrown while building the request (after logging it).
|
|
23
|
+
* @example api.createRequest(endpoint, payload)
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider/createRequest
|
|
25
|
+
*/
|
|
7
26
|
createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch a request via the source provider, logging the full request and response (or any error).
|
|
29
|
+
*
|
|
30
|
+
* @param request The request to fetch.
|
|
31
|
+
* @returns Promise resolving to the response.
|
|
32
|
+
* @throws Rethrows any error thrown by the source provider (after logging it).
|
|
33
|
+
* @example await api.fetch(request)
|
|
34
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider/fetch
|
|
35
|
+
*/
|
|
8
36
|
fetch(request: Request): Promise<Response>;
|
|
37
|
+
/**
|
|
38
|
+
* Parse a response via the source provider, logging the parsed result (or any error).
|
|
39
|
+
*
|
|
40
|
+
* @param endpoint The endpoint the response came from.
|
|
41
|
+
* @param response The response to parse.
|
|
42
|
+
* @param caller The calling function used for error stack traces.
|
|
43
|
+
* @returns Promise resolving to the parsed result.
|
|
44
|
+
* @throws Rethrows any error thrown while parsing (after logging it).
|
|
45
|
+
* @example await api.parseResponse(endpoint, response)
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider/parseResponse
|
|
47
|
+
*/
|
|
9
48
|
parseResponse<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
10
49
|
}
|
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
import { ANSI_FAILURE, ANSI_LEFT, ANSI_RIGHT, ANSI_SUCCESS, ANSI_WAITING } from "../../util/ansi.js";
|
|
2
2
|
import { debugFullRequest, debugFullResponse, debugRequest } from "../../util/debug.js";
|
|
3
3
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Provider that logs every request, response, and error to the console in detail to help diagnose issues in development.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const api = new DebugAPIProvider(source);
|
|
9
|
+
* await api.call(endpoint, payload); // logs request, response, and result
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider
|
|
11
|
+
*/
|
|
5
12
|
export class DebugAPIProvider extends ThroughAPIProvider {
|
|
13
|
+
/**
|
|
14
|
+
* Build a request via the source provider, logging the endpoint and payload (or any error).
|
|
15
|
+
*
|
|
16
|
+
* @param endpoint The endpoint to build a request for.
|
|
17
|
+
* @param payload The payload to send.
|
|
18
|
+
* @param options Optional request options.
|
|
19
|
+
* @param caller The calling function used for error stack traces.
|
|
20
|
+
* @returns The built request.
|
|
21
|
+
* @throws Rethrows any error thrown while building the request (after logging it).
|
|
22
|
+
* @example api.createRequest(endpoint, payload)
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider/createRequest
|
|
24
|
+
*/
|
|
6
25
|
createRequest(endpoint, payload, options, caller = this.createRequest) {
|
|
7
26
|
try {
|
|
8
27
|
const request = super.createRequest(endpoint, payload, options, caller);
|
|
@@ -14,6 +33,15 @@ export class DebugAPIProvider extends ThroughAPIProvider {
|
|
|
14
33
|
throw reason;
|
|
15
34
|
}
|
|
16
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Fetch a request via the source provider, logging the full request and response (or any error).
|
|
38
|
+
*
|
|
39
|
+
* @param request The request to fetch.
|
|
40
|
+
* @returns Promise resolving to the response.
|
|
41
|
+
* @throws Rethrows any error thrown by the source provider (after logging it).
|
|
42
|
+
* @example await api.fetch(request)
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider/fetch
|
|
44
|
+
*/
|
|
17
45
|
async fetch(request) {
|
|
18
46
|
try {
|
|
19
47
|
console.debug(`${ANSI_RIGHT} ${await debugFullRequest(request)}`);
|
|
@@ -26,6 +54,17 @@ export class DebugAPIProvider extends ThroughAPIProvider {
|
|
|
26
54
|
throw reason;
|
|
27
55
|
}
|
|
28
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse a response via the source provider, logging the parsed result (or any error).
|
|
59
|
+
*
|
|
60
|
+
* @param endpoint The endpoint the response came from.
|
|
61
|
+
* @param response The response to parse.
|
|
62
|
+
* @param caller The calling function used for error stack traces.
|
|
63
|
+
* @returns Promise resolving to the parsed result.
|
|
64
|
+
* @throws Rethrows any error thrown while parsing (after logging it).
|
|
65
|
+
* @example await api.parseResponse(endpoint, response)
|
|
66
|
+
* @see https://dhoulb.github.io/shelving/api/provider/DebugAPIProvider/DebugAPIProvider/parseResponse
|
|
67
|
+
*/
|
|
29
68
|
async parseResponse(endpoint, response, caller = this.parseResponse) {
|
|
30
69
|
try {
|
|
31
70
|
const result = await super.parseResponse(endpoint, response, caller);
|
|
@@ -3,14 +3,30 @@ import { type RequestBodyMethod, type RequestOptions } from "../../util/http.js"
|
|
|
3
3
|
import type { PossibleURL } from "../../util/url.js";
|
|
4
4
|
import type { Endpoint } from "../endpoint/Endpoint.js";
|
|
5
5
|
import { ClientAPIProvider } from "./ClientAPIProvider.js";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Client API provider that always sends request bodies as JSON and parses responses as JSON.
|
|
8
|
+
* - Forces JSON encoding regardless of the `Content-Type` the server returns.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const provider = new JSONAPIProvider({ url: "https://api.example.com" });
|
|
12
|
+
* const user = await provider.call(getUser, { id: "abc" });
|
|
13
|
+
*
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/api/provider/JSONAPIProvider/JSONAPIProvider
|
|
15
|
+
*/
|
|
7
16
|
export declare class JSONAPIProvider<P = unknown, R = unknown> extends ClientAPIProvider<P, R> {
|
|
8
17
|
protected _createBodyRequest(method: RequestBodyMethod, url: PossibleURL, payload: P, options: RequestOptions, caller: AnyCaller): Request;
|
|
9
18
|
/**
|
|
10
19
|
* Parse a JSON `Response` for an endpoint.
|
|
11
|
-
*
|
|
12
20
|
* - Non-2xx responses become `ResponseError`.
|
|
13
21
|
* - JSON is parsed even if the server omitted or mis-set the response content type.
|
|
22
|
+
*
|
|
23
|
+
* @param _endpoint The endpoint the response was produced for.
|
|
24
|
+
* @param response The `Response` to parse as JSON.
|
|
25
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
26
|
+
* @returns A promise resolving to the parsed JSON result.
|
|
27
|
+
* @throws {ResponseError} if the response status is non-2xx.
|
|
28
|
+
* @example await provider.parseResponse(getUser, response)
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/api/provider/JSONAPIProvider/JSONAPIProvider/parseResponse
|
|
14
30
|
*/
|
|
15
31
|
parseResponse<PP extends P, RR extends R>(_endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
16
32
|
}
|
|
@@ -2,16 +2,32 @@ import { ResponseError } from "../../error/ResponseError.js";
|
|
|
2
2
|
import { getMessage } from "../../util/error.js";
|
|
3
3
|
import { createJSONRequest, parseResponseJSON } from "../../util/http.js";
|
|
4
4
|
import { ClientAPIProvider } from "./ClientAPIProvider.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Client API provider that always sends request bodies as JSON and parses responses as JSON.
|
|
7
|
+
* - Forces JSON encoding regardless of the `Content-Type` the server returns.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const provider = new JSONAPIProvider({ url: "https://api.example.com" });
|
|
11
|
+
* const user = await provider.call(getUser, { id: "abc" });
|
|
12
|
+
*
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/api/provider/JSONAPIProvider/JSONAPIProvider
|
|
14
|
+
*/
|
|
6
15
|
export class JSONAPIProvider extends ClientAPIProvider {
|
|
7
16
|
_createBodyRequest(method, url, payload, options, caller) {
|
|
8
17
|
return createJSONRequest(method, url, payload, options, caller);
|
|
9
18
|
}
|
|
10
19
|
/**
|
|
11
20
|
* Parse a JSON `Response` for an endpoint.
|
|
12
|
-
*
|
|
13
21
|
* - Non-2xx responses become `ResponseError`.
|
|
14
22
|
* - JSON is parsed even if the server omitted or mis-set the response content type.
|
|
23
|
+
*
|
|
24
|
+
* @param _endpoint The endpoint the response was produced for.
|
|
25
|
+
* @param response The `Response` to parse as JSON.
|
|
26
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
27
|
+
* @returns A promise resolving to the parsed JSON result.
|
|
28
|
+
* @throws {ResponseError} if the response status is non-2xx.
|
|
29
|
+
* @example await provider.parseResponse(getUser, response)
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/api/provider/JSONAPIProvider/JSONAPIProvider/parseResponse
|
|
15
31
|
*/
|
|
16
32
|
async parseResponse(_endpoint, response, caller = this.parseResponse) {
|
|
17
33
|
const { ok, status } = response;
|
|
@@ -2,13 +2,27 @@ import type { Callback } from "../../util/function.js";
|
|
|
2
2
|
import type { APIProvider } from "./APIProvider.js";
|
|
3
3
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
4
4
|
/**
|
|
5
|
-
* Provider that logs fetches to the console to keep useful logs in production.
|
|
6
|
-
* - Defaults to
|
|
5
|
+
* Provider that logs fetches to the console to keep useful request/response logs in production.
|
|
6
|
+
* - Defaults to logging requests, responses, and errors via the `log` utilities; each can be overridden.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const api = new LoggingAPIProvider(source);
|
|
10
|
+
* await api.fetch(request); // logs request and response
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/api/provider/LoggingAPIProvider/LoggingAPIProvider
|
|
7
12
|
*/
|
|
8
13
|
export declare class LoggingAPIProvider<P, R> extends ThroughAPIProvider<P, R> {
|
|
9
14
|
protected _logRequest: Callback<[Request]>;
|
|
10
15
|
protected _logResponse: Callback<[Response, Request]>;
|
|
11
16
|
protected _logError: Callback<[reason: unknown, Request]>;
|
|
17
|
+
/**
|
|
18
|
+
* Create a logging provider wrapping a source provider.
|
|
19
|
+
*
|
|
20
|
+
* @param source The source provider whose fetches are logged.
|
|
21
|
+
* @param onRequest Called to log each outgoing request.
|
|
22
|
+
* @param onResponse Called to log each response.
|
|
23
|
+
* @param onError Called to log each error.
|
|
24
|
+
* @example new LoggingAPIProvider(source)
|
|
25
|
+
*/
|
|
12
26
|
constructor(source: APIProvider<P, R>,
|
|
13
27
|
/** Log requests. */
|
|
14
28
|
onRequest?: Callback<[Request]>,
|
|
@@ -16,5 +30,14 @@ export declare class LoggingAPIProvider<P, R> extends ThroughAPIProvider<P, R> {
|
|
|
16
30
|
onResponse?: Callback<[Response, Request]>,
|
|
17
31
|
/** Log errors for requests. */
|
|
18
32
|
onError?: Callback<[reason: unknown, Request]>);
|
|
33
|
+
/**
|
|
34
|
+
* Fetch a request through the source provider, logging the request, response, and any error.
|
|
35
|
+
*
|
|
36
|
+
* @param request The request to fetch.
|
|
37
|
+
* @returns Promise resolving to the response.
|
|
38
|
+
* @throws Rethrows any error thrown by the source provider (after logging it).
|
|
39
|
+
* @example await api.fetch(request)
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/api/provider/LoggingAPIProvider/LoggingAPIProvider/fetch
|
|
41
|
+
*/
|
|
19
42
|
fetch(request: Request): Promise<Response>;
|
|
20
43
|
}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import { logRequest, logRequestError, logRequestResponse } from "../../util/log.js";
|
|
2
2
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
3
3
|
/**
|
|
4
|
-
* Provider that logs fetches to the console to keep useful logs in production.
|
|
5
|
-
* - Defaults to
|
|
4
|
+
* Provider that logs fetches to the console to keep useful request/response logs in production.
|
|
5
|
+
* - Defaults to logging requests, responses, and errors via the `log` utilities; each can be overridden.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const api = new LoggingAPIProvider(source);
|
|
9
|
+
* await api.fetch(request); // logs request and response
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/api/provider/LoggingAPIProvider/LoggingAPIProvider
|
|
6
11
|
*/
|
|
7
12
|
export class LoggingAPIProvider extends ThroughAPIProvider {
|
|
8
13
|
_logRequest;
|
|
9
14
|
_logResponse;
|
|
10
15
|
_logError;
|
|
16
|
+
/**
|
|
17
|
+
* Create a logging provider wrapping a source provider.
|
|
18
|
+
*
|
|
19
|
+
* @param source The source provider whose fetches are logged.
|
|
20
|
+
* @param onRequest Called to log each outgoing request.
|
|
21
|
+
* @param onResponse Called to log each response.
|
|
22
|
+
* @param onError Called to log each error.
|
|
23
|
+
* @example new LoggingAPIProvider(source)
|
|
24
|
+
*/
|
|
11
25
|
constructor(source,
|
|
12
26
|
/** Log requests. */
|
|
13
27
|
onRequest = logRequest,
|
|
@@ -20,6 +34,15 @@ export class LoggingAPIProvider extends ThroughAPIProvider {
|
|
|
20
34
|
this._logResponse = onResponse;
|
|
21
35
|
this._logError = onError;
|
|
22
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Fetch a request through the source provider, logging the request, response, and any error.
|
|
39
|
+
*
|
|
40
|
+
* @param request The request to fetch.
|
|
41
|
+
* @returns Promise resolving to the response.
|
|
42
|
+
* @throws Rethrows any error thrown by the source provider (after logging it).
|
|
43
|
+
* @example await api.fetch(request)
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/api/provider/LoggingAPIProvider/LoggingAPIProvider/fetch
|
|
45
|
+
*/
|
|
23
46
|
async fetch(request) {
|
|
24
47
|
try {
|
|
25
48
|
this._logRequest(request);
|