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,33 +3,104 @@ import type { RequestHandler, RequestOptions } from "../../util/http.js";
|
|
|
3
3
|
import type { AnyEndpoint, Endpoint } from "../endpoint/Endpoint.js";
|
|
4
4
|
import type { APIProvider } from "./APIProvider.js";
|
|
5
5
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
6
|
+
/**
|
|
7
|
+
* Record of a single mocked fetch, pairing the request with the response the handler returned.
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIFetchCall
|
|
9
|
+
*/
|
|
6
10
|
export type MockAPIFetchCall = {
|
|
7
11
|
readonly request: Request;
|
|
8
12
|
readonly response: Response;
|
|
9
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* Record of a single request build, capturing the endpoint, payload, options, and built request.
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIRequestCall
|
|
17
|
+
*/
|
|
10
18
|
export type MockAPIRequestCall = {
|
|
11
19
|
readonly endpoint: AnyEndpoint;
|
|
12
20
|
readonly payload: unknown;
|
|
13
21
|
readonly options: RequestOptions | undefined;
|
|
14
22
|
readonly request: Request;
|
|
15
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* Record of a single response parse, capturing the endpoint, response, and parsed result.
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIResponseCall
|
|
27
|
+
*/
|
|
16
28
|
export type MockAPIResponseCall = {
|
|
17
29
|
readonly endpoint: AnyEndpoint;
|
|
18
30
|
readonly response: Response;
|
|
19
31
|
readonly result: unknown;
|
|
20
32
|
};
|
|
21
33
|
/**
|
|
22
|
-
* Provider that
|
|
34
|
+
* Provider that records API calls and serves them from a handler without sending network requests.
|
|
23
35
|
* - Extends `ThroughAPIProvider` to delegate request building and response parsing to a source `APIProvider`.
|
|
24
36
|
* - The source provider's `fetch()` is never called — this provider intercepts all fetches and routes them through a `RequestHandler`.
|
|
37
|
+
* - Records `requestCalls`, `fetchCalls`, and `responseCalls` so tests can assert on what happened.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* const api = new MockAPIProvider();
|
|
41
|
+
* const result = await api.call(endpoint, payload);
|
|
42
|
+
* expect(api.fetchCalls).toHaveLength(1);
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider
|
|
25
44
|
*/
|
|
26
45
|
export declare class MockAPIProvider<P = unknown, R = unknown> extends ThroughAPIProvider<P, R> {
|
|
46
|
+
/**
|
|
47
|
+
* Records of every request built by this provider.
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/requestCalls
|
|
49
|
+
*/
|
|
27
50
|
readonly requestCalls: MockAPIRequestCall[];
|
|
51
|
+
/**
|
|
52
|
+
* Records of every fetch handled by this provider.
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/fetchCalls
|
|
54
|
+
*/
|
|
28
55
|
readonly fetchCalls: MockAPIFetchCall[];
|
|
56
|
+
/**
|
|
57
|
+
* Records of every response parsed by this provider.
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/responseCalls
|
|
59
|
+
*/
|
|
29
60
|
readonly responseCalls: MockAPIResponseCall[];
|
|
61
|
+
/**
|
|
62
|
+
* The request handler that serves fetches in place of the network.
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/handler
|
|
64
|
+
*/
|
|
30
65
|
readonly handler: RequestHandler;
|
|
66
|
+
/**
|
|
67
|
+
* Create a mock provider that serves fetches from a handler.
|
|
68
|
+
*
|
|
69
|
+
* @param handler The handler that produces a response for each request (defaults to echoing the request).
|
|
70
|
+
* @param source The source provider used to build requests and parse responses.
|
|
71
|
+
* @example new MockAPIProvider()
|
|
72
|
+
*/
|
|
31
73
|
constructor(handler?: RequestHandler, source?: APIProvider<P, R>);
|
|
74
|
+
/**
|
|
75
|
+
* Build a request via the source provider, recording the endpoint and payload in `requestCalls`.
|
|
76
|
+
*
|
|
77
|
+
* @param endpoint The endpoint to build a request for.
|
|
78
|
+
* @param payload The payload to send.
|
|
79
|
+
* @param options Optional request options.
|
|
80
|
+
* @param caller The calling function used for error stack traces.
|
|
81
|
+
* @returns The built request.
|
|
82
|
+
* @example api.createRequest(endpoint, payload)
|
|
83
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/createRequest
|
|
84
|
+
*/
|
|
32
85
|
createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
|
|
86
|
+
/**
|
|
87
|
+
* Parse a response via the source provider, recording the response and result in `responseCalls`.
|
|
88
|
+
*
|
|
89
|
+
* @param endpoint The endpoint the response came from.
|
|
90
|
+
* @param response The response to parse.
|
|
91
|
+
* @param caller The calling function used for error stack traces.
|
|
92
|
+
* @returns Promise resolving to the parsed result.
|
|
93
|
+
* @example await api.parseResponse(endpoint, response)
|
|
94
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/parseResponse
|
|
95
|
+
*/
|
|
33
96
|
parseResponse<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
97
|
+
/**
|
|
98
|
+
* Serve a request through the handler instead of the network, recording it in `fetchCalls`.
|
|
99
|
+
*
|
|
100
|
+
* @param request The request to handle.
|
|
101
|
+
* @returns Promise resolving to the handler's response.
|
|
102
|
+
* @example await api.fetch(request)
|
|
103
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/fetch
|
|
104
|
+
*/
|
|
34
105
|
fetch(request: Request): Promise<Response>;
|
|
35
106
|
}
|
|
@@ -6,32 +6,88 @@ async function _mockHandler(request) {
|
|
|
6
6
|
return new Response(`Mocked response to ${debugRequest(request)}`, { status: 200, statusText: "OK" });
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* Provider that
|
|
9
|
+
* Provider that records API calls and serves them from a handler without sending network requests.
|
|
10
10
|
* - Extends `ThroughAPIProvider` to delegate request building and response parsing to a source `APIProvider`.
|
|
11
11
|
* - The source provider's `fetch()` is never called — this provider intercepts all fetches and routes them through a `RequestHandler`.
|
|
12
|
+
* - Records `requestCalls`, `fetchCalls`, and `responseCalls` so tests can assert on what happened.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const api = new MockAPIProvider();
|
|
16
|
+
* const result = await api.call(endpoint, payload);
|
|
17
|
+
* expect(api.fetchCalls).toHaveLength(1);
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider
|
|
12
19
|
*/
|
|
13
20
|
export class MockAPIProvider extends ThroughAPIProvider {
|
|
21
|
+
/**
|
|
22
|
+
* Records of every request built by this provider.
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/requestCalls
|
|
24
|
+
*/
|
|
14
25
|
requestCalls = [];
|
|
26
|
+
/**
|
|
27
|
+
* Records of every fetch handled by this provider.
|
|
28
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/fetchCalls
|
|
29
|
+
*/
|
|
15
30
|
fetchCalls = [];
|
|
31
|
+
/**
|
|
32
|
+
* Records of every response parsed by this provider.
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/responseCalls
|
|
34
|
+
*/
|
|
16
35
|
responseCalls = [];
|
|
36
|
+
/**
|
|
37
|
+
* The request handler that serves fetches in place of the network.
|
|
38
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/handler
|
|
39
|
+
*/
|
|
17
40
|
handler;
|
|
41
|
+
/**
|
|
42
|
+
* Create a mock provider that serves fetches from a handler.
|
|
43
|
+
*
|
|
44
|
+
* @param handler The handler that produces a response for each request (defaults to echoing the request).
|
|
45
|
+
* @param source The source provider used to build requests and parse responses.
|
|
46
|
+
* @example new MockAPIProvider()
|
|
47
|
+
*/
|
|
18
48
|
constructor(handler = _mockHandler, source = new ClientAPIProvider({ url: "https://api.mock.com" })) {
|
|
19
49
|
super(source);
|
|
20
50
|
this.handler = handler;
|
|
21
51
|
}
|
|
22
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Build a request via the source provider, recording the endpoint and payload in `requestCalls`.
|
|
54
|
+
*
|
|
55
|
+
* @param endpoint The endpoint to build a request for.
|
|
56
|
+
* @param payload The payload to send.
|
|
57
|
+
* @param options Optional request options.
|
|
58
|
+
* @param caller The calling function used for error stack traces.
|
|
59
|
+
* @returns The built request.
|
|
60
|
+
* @example api.createRequest(endpoint, payload)
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/createRequest
|
|
62
|
+
*/
|
|
23
63
|
createRequest(endpoint, payload, options, caller = this.createRequest) {
|
|
24
64
|
const request = super.createRequest(endpoint, payload, options, caller);
|
|
25
65
|
this.requestCalls.push({ endpoint, payload, options, request });
|
|
26
66
|
return request;
|
|
27
67
|
}
|
|
28
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Parse a response via the source provider, recording the response and result in `responseCalls`.
|
|
70
|
+
*
|
|
71
|
+
* @param endpoint The endpoint the response came from.
|
|
72
|
+
* @param response The response to parse.
|
|
73
|
+
* @param caller The calling function used for error stack traces.
|
|
74
|
+
* @returns Promise resolving to the parsed result.
|
|
75
|
+
* @example await api.parseResponse(endpoint, response)
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/parseResponse
|
|
77
|
+
*/
|
|
29
78
|
async parseResponse(endpoint, response, caller = this.parseResponse) {
|
|
30
79
|
const result = await super.parseResponse(endpoint, response, caller);
|
|
31
80
|
this.responseCalls.push({ endpoint, response, result });
|
|
32
81
|
return result;
|
|
33
82
|
}
|
|
34
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Serve a request through the handler instead of the network, recording it in `fetchCalls`.
|
|
85
|
+
*
|
|
86
|
+
* @param request The request to handle.
|
|
87
|
+
* @returns Promise resolving to the handler's response.
|
|
88
|
+
* @example await api.fetch(request)
|
|
89
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockAPIProvider/MockAPIProvider/fetch
|
|
90
|
+
*/
|
|
35
91
|
async fetch(request) {
|
|
36
92
|
const response = await this.handler(request);
|
|
37
93
|
this.fetchCalls.push({ request, response });
|
|
@@ -11,7 +11,16 @@ import { MockAPIProvider } from "./MockAPIProvider.js";
|
|
|
11
11
|
* const api = new MockEnpdointAPIProvider(handlers); // Create a new mock provider.
|
|
12
12
|
* const result = await api.fetch(endpoint, 4); // Mock a call to the endpoint through the provider.
|
|
13
13
|
* expect(result).toBe(16);
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockEndpointAPIProvider/MockEndpointAPIProvider
|
|
14
15
|
*/
|
|
15
16
|
export declare class MockEndpointAPIProvider<P, R, C> extends MockAPIProvider<P, R> {
|
|
17
|
+
/**
|
|
18
|
+
* Create a mock provider that routes calls through an array of endpoint handlers instead of the network.
|
|
19
|
+
*
|
|
20
|
+
* @param handlers The endpoint handlers (from `Endpoint.handler()`) that serve matching requests.
|
|
21
|
+
* @param context The context value passed to each handler.
|
|
22
|
+
* @param source Optional source provider used to build requests and parse responses.
|
|
23
|
+
* @example new MockEndpointAPIProvider(handlers, context)
|
|
24
|
+
*/
|
|
16
25
|
constructor(handlers: EndpointHandlers<C>, context: C, source?: ClientAPIProvider<P, R>);
|
|
17
26
|
}
|
|
@@ -10,8 +10,17 @@ import { MockAPIProvider } from "./MockAPIProvider.js";
|
|
|
10
10
|
* const api = new MockEnpdointAPIProvider(handlers); // Create a new mock provider.
|
|
11
11
|
* const result = await api.fetch(endpoint, 4); // Mock a call to the endpoint through the provider.
|
|
12
12
|
* expect(result).toBe(16);
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/api/provider/MockEndpointAPIProvider/MockEndpointAPIProvider
|
|
13
14
|
*/
|
|
14
15
|
export class MockEndpointAPIProvider extends MockAPIProvider {
|
|
16
|
+
/**
|
|
17
|
+
* Create a mock provider that routes calls through an array of endpoint handlers instead of the network.
|
|
18
|
+
*
|
|
19
|
+
* @param handlers The endpoint handlers (from `Endpoint.handler()`) that serve matching requests.
|
|
20
|
+
* @param context The context value passed to each handler.
|
|
21
|
+
* @param source Optional source provider used to build requests and parse responses.
|
|
22
|
+
* @example new MockEndpointAPIProvider(handlers, context)
|
|
23
|
+
*/
|
|
15
24
|
constructor(handlers, context, source) {
|
|
16
25
|
super(request => handleEndpoints(this.url, handlers, request, context, this.call), source);
|
|
17
26
|
}
|
|
@@ -4,16 +4,82 @@ import type { Sourceable } from "../../util/source.js";
|
|
|
4
4
|
import type { Endpoint } from "../endpoint/Endpoint.js";
|
|
5
5
|
import { APIProvider } from "./APIProvider.js";
|
|
6
6
|
/**
|
|
7
|
-
* Provider wrapper that delegates API
|
|
7
|
+
* Provider wrapper that delegates every API operation to a wrapped `source` provider.
|
|
8
8
|
* - Extend this when you want to intercept only selected API operations, such as injecting auth headers or logging.
|
|
9
|
+
* - Implements `Sourceable` so wrapped providers are discoverable via `getSource()` / `requireSource()`.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* class AuthAPIProvider extends ThroughAPIProvider {
|
|
13
|
+
* override createRequest(endpoint, payload, options, caller) {
|
|
14
|
+
* return super.createRequest(endpoint, payload, { ...options, headers: { authorization: TOKEN } }, caller);
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider
|
|
9
19
|
*/
|
|
10
20
|
export declare class ThroughAPIProvider<P, R> extends APIProvider<P, R> implements Sourceable<APIProvider<P, R>> {
|
|
21
|
+
/**
|
|
22
|
+
* The base URL, delegated to the wrapped `source` provider.
|
|
23
|
+
*
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/url
|
|
25
|
+
*/
|
|
11
26
|
get url(): URL;
|
|
27
|
+
/**
|
|
28
|
+
* The wrapped source provider that operations delegate to.
|
|
29
|
+
*
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/source
|
|
31
|
+
*/
|
|
12
32
|
readonly source: APIProvider<P, R>;
|
|
33
|
+
/**
|
|
34
|
+
* Wrap a source `APIProvider`.
|
|
35
|
+
*
|
|
36
|
+
* @param source The provider that every operation delegates to.
|
|
37
|
+
* @example new ThroughAPIProvider(clientProvider)
|
|
38
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider
|
|
39
|
+
*/
|
|
13
40
|
constructor(source: APIProvider<P, R>);
|
|
41
|
+
/**
|
|
42
|
+
* Render the request URL by delegating to the source provider.
|
|
43
|
+
*
|
|
44
|
+
* @param endpoint The endpoint whose path is rendered into the base URL.
|
|
45
|
+
* @param payload The payload supplying `{placeholder}` and query-param values.
|
|
46
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
47
|
+
* @returns The fully resolved request `URL`.
|
|
48
|
+
* @example provider.renderURL(getUser, { id: "abc" })
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/renderURL
|
|
50
|
+
*/
|
|
14
51
|
renderURL<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, caller?: AnyCaller): URL;
|
|
52
|
+
/**
|
|
53
|
+
* Create the request by delegating to the source provider.
|
|
54
|
+
*
|
|
55
|
+
* @param endpoint The endpoint the request targets.
|
|
56
|
+
* @param payload The payload to embed into the `Request`.
|
|
57
|
+
* @param options The `RequestOptions` to use, merged over the provider's own options.
|
|
58
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
59
|
+
* @returns The created `Request`.
|
|
60
|
+
* @example provider.createRequest(getUser, { id: "abc" })
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/createRequest
|
|
62
|
+
*/
|
|
15
63
|
createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
|
|
64
|
+
/**
|
|
65
|
+
* Parse the response by delegating to the source provider.
|
|
66
|
+
*
|
|
67
|
+
* @param endpoint The endpoint the response was produced for.
|
|
68
|
+
* @param response The `Response` to parse.
|
|
69
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
70
|
+
* @returns A promise resolving to the parsed result.
|
|
71
|
+
* @example await provider.parseResponse(getUser, response)
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/parseResponse
|
|
73
|
+
*/
|
|
16
74
|
parseResponse<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
75
|
+
/**
|
|
76
|
+
* Send the request by delegating to the source provider.
|
|
77
|
+
*
|
|
78
|
+
* @param request The `Request` to send.
|
|
79
|
+
* @returns A promise resolving to the `Response`.
|
|
80
|
+
* @example await provider.fetch(request)
|
|
81
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/fetch
|
|
82
|
+
*/
|
|
17
83
|
fetch(request: Request): Promise<Response>;
|
|
18
84
|
[Symbol.asyncDispose](): Promise<void>;
|
|
19
85
|
}
|
|
@@ -1,27 +1,93 @@
|
|
|
1
1
|
import { awaitDispose } from "../../util/dispose.js";
|
|
2
2
|
import { APIProvider } from "./APIProvider.js";
|
|
3
3
|
/**
|
|
4
|
-
* Provider wrapper that delegates API
|
|
4
|
+
* Provider wrapper that delegates every API operation to a wrapped `source` provider.
|
|
5
5
|
* - Extend this when you want to intercept only selected API operations, such as injecting auth headers or logging.
|
|
6
|
+
* - Implements `Sourceable` so wrapped providers are discoverable via `getSource()` / `requireSource()`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* class AuthAPIProvider extends ThroughAPIProvider {
|
|
10
|
+
* override createRequest(endpoint, payload, options, caller) {
|
|
11
|
+
* return super.createRequest(endpoint, payload, { ...options, headers: { authorization: TOKEN } }, caller);
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider
|
|
6
16
|
*/
|
|
7
17
|
export class ThroughAPIProvider extends APIProvider {
|
|
18
|
+
/**
|
|
19
|
+
* The base URL, delegated to the wrapped `source` provider.
|
|
20
|
+
*
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/url
|
|
22
|
+
*/
|
|
8
23
|
get url() {
|
|
9
24
|
return this.source.url;
|
|
10
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* The wrapped source provider that operations delegate to.
|
|
28
|
+
*
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/source
|
|
30
|
+
*/
|
|
11
31
|
source;
|
|
32
|
+
/**
|
|
33
|
+
* Wrap a source `APIProvider`.
|
|
34
|
+
*
|
|
35
|
+
* @param source The provider that every operation delegates to.
|
|
36
|
+
* @example new ThroughAPIProvider(clientProvider)
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider
|
|
38
|
+
*/
|
|
12
39
|
constructor(source) {
|
|
13
40
|
super();
|
|
14
41
|
this.source = source;
|
|
15
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Render the request URL by delegating to the source provider.
|
|
45
|
+
*
|
|
46
|
+
* @param endpoint The endpoint whose path is rendered into the base URL.
|
|
47
|
+
* @param payload The payload supplying `{placeholder}` and query-param values.
|
|
48
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
49
|
+
* @returns The fully resolved request `URL`.
|
|
50
|
+
* @example provider.renderURL(getUser, { id: "abc" })
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/renderURL
|
|
52
|
+
*/
|
|
16
53
|
renderURL(endpoint, payload, caller = this.renderURL) {
|
|
17
54
|
return this.source.renderURL(endpoint, payload, caller);
|
|
18
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Create the request by delegating to the source provider.
|
|
58
|
+
*
|
|
59
|
+
* @param endpoint The endpoint the request targets.
|
|
60
|
+
* @param payload The payload to embed into the `Request`.
|
|
61
|
+
* @param options The `RequestOptions` to use, merged over the provider's own options.
|
|
62
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
63
|
+
* @returns The created `Request`.
|
|
64
|
+
* @example provider.createRequest(getUser, { id: "abc" })
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/createRequest
|
|
66
|
+
*/
|
|
19
67
|
createRequest(endpoint, payload, options, caller = this.createRequest) {
|
|
20
68
|
return this.source.createRequest(endpoint, payload, options, caller);
|
|
21
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Parse the response by delegating to the source provider.
|
|
72
|
+
*
|
|
73
|
+
* @param endpoint The endpoint the response was produced for.
|
|
74
|
+
* @param response The `Response` to parse.
|
|
75
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
76
|
+
* @returns A promise resolving to the parsed result.
|
|
77
|
+
* @example await provider.parseResponse(getUser, response)
|
|
78
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/parseResponse
|
|
79
|
+
*/
|
|
22
80
|
parseResponse(endpoint, response, caller = this.parseResponse) {
|
|
23
81
|
return this.source.parseResponse(endpoint, response, caller);
|
|
24
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Send the request by delegating to the source provider.
|
|
85
|
+
*
|
|
86
|
+
* @param request The `Request` to send.
|
|
87
|
+
* @returns A promise resolving to the `Response`.
|
|
88
|
+
* @example await provider.fetch(request)
|
|
89
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ThroughAPIProvider/ThroughAPIProvider/fetch
|
|
90
|
+
*/
|
|
25
91
|
fetch(request) {
|
|
26
92
|
return this.source.fetch(request);
|
|
27
93
|
}
|
|
@@ -2,8 +2,39 @@ 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 validates payloads and results against the endpoint's schemas, so a source of any type is made type-safe.
|
|
7
|
+
* - Payload validation errors bubble up as user-readable strings; result validation errors are wrapped in `ResponseError`.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const api = new ValidationAPIProvider(source);
|
|
11
|
+
* const result = await api.call(endpoint, payload); // validated payload and result
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ValidationAPIProvider/ValidationAPIProvider
|
|
13
|
+
*/
|
|
6
14
|
export declare class ValidationAPIProvider<P, R> extends ThroughAPIProvider<P, R> {
|
|
15
|
+
/**
|
|
16
|
+
* Build a request via the source provider after validating the payload against the endpoint's payload schema.
|
|
17
|
+
*
|
|
18
|
+
* @param endpoint The endpoint to build a request for.
|
|
19
|
+
* @param payload The payload to validate and send.
|
|
20
|
+
* @param options Optional request options.
|
|
21
|
+
* @param caller The calling function used for error stack traces.
|
|
22
|
+
* @returns The built request.
|
|
23
|
+
* @throws {string} A user-readable validation message if the payload is invalid.
|
|
24
|
+
* @example api.createRequest(endpoint, payload)
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ValidationAPIProvider/ValidationAPIProvider/createRequest
|
|
26
|
+
*/
|
|
7
27
|
createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
|
|
28
|
+
/**
|
|
29
|
+
* Parse a response via the source provider, then validate the result against the endpoint's result schema.
|
|
30
|
+
*
|
|
31
|
+
* @param endpoint The endpoint the response came from.
|
|
32
|
+
* @param response The response to parse and validate.
|
|
33
|
+
* @param caller The calling function used for error stack traces.
|
|
34
|
+
* @returns Promise resolving to the validated result.
|
|
35
|
+
* @throws {ResponseError} If the result fails validation (treated as a server/transport problem).
|
|
36
|
+
* @example await api.parseResponse(endpoint, response)
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ValidationAPIProvider/ValidationAPIProvider/parseResponse
|
|
38
|
+
*/
|
|
8
39
|
parseResponse<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
9
40
|
}
|
|
@@ -1,11 +1,42 @@
|
|
|
1
1
|
import { ResponseError } from "../../error/ResponseError.js";
|
|
2
2
|
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Provider that validates payloads and results against the endpoint's schemas, so a source of any type is made type-safe.
|
|
5
|
+
* - Payload validation errors bubble up as user-readable strings; result validation errors are wrapped in `ResponseError`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const api = new ValidationAPIProvider(source);
|
|
9
|
+
* const result = await api.call(endpoint, payload); // validated payload and result
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ValidationAPIProvider/ValidationAPIProvider
|
|
11
|
+
*/
|
|
4
12
|
export class ValidationAPIProvider extends ThroughAPIProvider {
|
|
13
|
+
/**
|
|
14
|
+
* Build a request via the source provider after validating the payload against the endpoint's payload schema.
|
|
15
|
+
*
|
|
16
|
+
* @param endpoint The endpoint to build a request for.
|
|
17
|
+
* @param payload The payload to validate and 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 {string} A user-readable validation message if the payload is invalid.
|
|
22
|
+
* @example api.createRequest(endpoint, payload)
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ValidationAPIProvider/ValidationAPIProvider/createRequest
|
|
24
|
+
*/
|
|
5
25
|
createRequest(endpoint, payload, options, caller = this.createRequest) {
|
|
6
26
|
// Validate payload — let thrown strings bubble up as user-readable messages for e.g. form handlers.
|
|
7
27
|
return super.createRequest(endpoint, endpoint.payload.validate(payload), options, caller);
|
|
8
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse a response via the source provider, then validate the result against the endpoint's result schema.
|
|
31
|
+
*
|
|
32
|
+
* @param endpoint The endpoint the response came from.
|
|
33
|
+
* @param response The response to parse and validate.
|
|
34
|
+
* @param caller The calling function used for error stack traces.
|
|
35
|
+
* @returns Promise resolving to the validated result.
|
|
36
|
+
* @throws {ResponseError} If the result fails validation (treated as a server/transport problem).
|
|
37
|
+
* @example await api.parseResponse(endpoint, response)
|
|
38
|
+
* @see https://dhoulb.github.io/shelving/api/provider/ValidationAPIProvider/ValidationAPIProvider/parseResponse
|
|
39
|
+
*/
|
|
9
40
|
async parseResponse(endpoint, response, caller = this.parseResponse) {
|
|
10
41
|
try {
|
|
11
42
|
// Validate result — wrap in ResponseError as this is a server/transport problem, not user error.
|
|
@@ -4,14 +4,30 @@ import { type RequestBodyMethod, type RequestOptions } from "../../util/http.js"
|
|
|
4
4
|
import type { PossibleURL } from "../../util/url.js";
|
|
5
5
|
import type { Endpoint } from "../endpoint/Endpoint.js";
|
|
6
6
|
import { ClientAPIProvider } from "./ClientAPIProvider.js";
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Client API provider that always sends request bodies as XML and parses responses as plain text.
|
|
9
|
+
* - Request payloads must be data objects (serialised to XML); results are returned as raw text strings.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const provider = new XMLAPIProvider({ url: "https://api.example.com" });
|
|
13
|
+
* const xml = await provider.call(getFeed, { id: "abc" });
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/api/provider/XMLAPIProvider/XMLAPIProvider
|
|
16
|
+
*/
|
|
8
17
|
export declare class XMLAPIProvider<P extends Data = Data, R extends string = string> extends ClientAPIProvider<P, R> {
|
|
9
18
|
protected _createBodyRequest(method: RequestBodyMethod, url: PossibleURL, payload: P, options: RequestOptions, caller: AnyCaller): Request;
|
|
10
19
|
/**
|
|
11
20
|
* Parse a text `Response` for an endpoint.
|
|
12
|
-
*
|
|
13
21
|
* - Non-2xx responses become `ResponseError`.
|
|
14
22
|
* - The response body is always returned as raw text.
|
|
23
|
+
*
|
|
24
|
+
* @param _endpoint The endpoint the response was produced for.
|
|
25
|
+
* @param response The `Response` whose body is read as text.
|
|
26
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
27
|
+
* @returns A promise resolving to the raw text result.
|
|
28
|
+
* @throws {ResponseError} if the response status is non-2xx.
|
|
29
|
+
* @example await provider.parseResponse(getFeed, response)
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/api/provider/XMLAPIProvider/XMLAPIProvider/parseResponse
|
|
15
31
|
*/
|
|
16
32
|
parseResponse<PP extends P, RR extends R>(_endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
|
|
17
33
|
}
|
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import { ResponseError } from "../../error/ResponseError.js";
|
|
2
2
|
import { createXMLRequest } from "../../util/http.js";
|
|
3
3
|
import { ClientAPIProvider } from "./ClientAPIProvider.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Client API provider that always sends request bodies as XML and parses responses as plain text.
|
|
6
|
+
* - Request payloads must be data objects (serialised to XML); results are returned as raw text strings.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const provider = new XMLAPIProvider({ url: "https://api.example.com" });
|
|
10
|
+
* const xml = await provider.call(getFeed, { id: "abc" });
|
|
11
|
+
*
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/api/provider/XMLAPIProvider/XMLAPIProvider
|
|
13
|
+
*/
|
|
5
14
|
export class XMLAPIProvider extends ClientAPIProvider {
|
|
6
15
|
_createBodyRequest(method, url, payload, options, caller) {
|
|
7
16
|
return createXMLRequest(method, url, payload, options, caller);
|
|
8
17
|
}
|
|
9
18
|
/**
|
|
10
19
|
* Parse a text `Response` for an endpoint.
|
|
11
|
-
*
|
|
12
20
|
* - Non-2xx responses become `ResponseError`.
|
|
13
21
|
* - The response body is always returned as raw text.
|
|
22
|
+
*
|
|
23
|
+
* @param _endpoint The endpoint the response was produced for.
|
|
24
|
+
* @param response The `Response` whose body is read as text.
|
|
25
|
+
* @param caller The function to attribute thrown errors to (defaults to this method).
|
|
26
|
+
* @returns A promise resolving to the raw text result.
|
|
27
|
+
* @throws {ResponseError} if the response status is non-2xx.
|
|
28
|
+
* @example await provider.parseResponse(getFeed, response)
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/api/provider/XMLAPIProvider/XMLAPIProvider/parseResponse
|
|
14
30
|
*/
|
|
15
31
|
async parseResponse(_endpoint, response, caller = this.parseResponse) {
|
|
16
32
|
const { ok, status } = response;
|
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
import { PayloadFetchStore } from "../../store/PayloadFetchStore.js";
|
|
2
2
|
import type { Endpoint } from "../endpoint/Endpoint.js";
|
|
3
3
|
import type { APIProvider } from "../provider/APIProvider.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Store that loads and tracks the result of calling a single API endpoint with a fixed payload, through an `APIProvider`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const store = new EndpointStore(endpoint, payload, provider);
|
|
9
|
+
* const result = await store; // R
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/api/store/EndpointStore/EndpointStore
|
|
11
|
+
*/
|
|
5
12
|
export declare class EndpointStore<P, R> extends PayloadFetchStore<P, R> {
|
|
13
|
+
/**
|
|
14
|
+
* The API provider this store calls the endpoint through.
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/api/store/EndpointStore/EndpointStore/provider
|
|
16
|
+
*/
|
|
6
17
|
readonly provider: APIProvider<P, R>;
|
|
18
|
+
/**
|
|
19
|
+
* The endpoint this store calls to fetch its result.
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/api/store/EndpointStore/EndpointStore/endpoint
|
|
21
|
+
*/
|
|
7
22
|
readonly endpoint: Endpoint<P, R>;
|
|
23
|
+
/**
|
|
24
|
+
* Create a store that tracks the result of an endpoint call.
|
|
25
|
+
*
|
|
26
|
+
* @param endpoint The endpoint to call.
|
|
27
|
+
* @param payload The payload to call the endpoint with.
|
|
28
|
+
* @param provider The API provider to call the endpoint through.
|
|
29
|
+
* @example new EndpointStore(endpoint, payload, provider)
|
|
30
|
+
*/
|
|
8
31
|
constructor(endpoint: Endpoint<P, R>, payload: P, provider: APIProvider<P, R>);
|
|
9
32
|
protected _fetch(signal: AbortSignal): Promise<R>;
|
|
10
33
|
}
|
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
import { PayloadFetchStore } from "../../store/PayloadFetchStore.js";
|
|
2
2
|
import { NONE } from "../../util/constants.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Store that loads and tracks the result of calling a single API endpoint with a fixed payload, through an `APIProvider`.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const store = new EndpointStore(endpoint, payload, provider);
|
|
8
|
+
* const result = await store; // R
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/api/store/EndpointStore/EndpointStore
|
|
10
|
+
*/
|
|
4
11
|
export class EndpointStore extends PayloadFetchStore {
|
|
12
|
+
/**
|
|
13
|
+
* The API provider this store calls the endpoint through.
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/api/store/EndpointStore/EndpointStore/provider
|
|
15
|
+
*/
|
|
5
16
|
provider;
|
|
17
|
+
/**
|
|
18
|
+
* The endpoint this store calls to fetch its result.
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/api/store/EndpointStore/EndpointStore/endpoint
|
|
20
|
+
*/
|
|
6
21
|
endpoint;
|
|
22
|
+
/**
|
|
23
|
+
* Create a store that tracks the result of an endpoint call.
|
|
24
|
+
*
|
|
25
|
+
* @param endpoint The endpoint to call.
|
|
26
|
+
* @param payload The payload to call the endpoint with.
|
|
27
|
+
* @param provider The API provider to call the endpoint through.
|
|
28
|
+
* @example new EndpointStore(endpoint, payload, provider)
|
|
29
|
+
*/
|
|
7
30
|
constructor(endpoint, payload, provider) {
|
|
8
31
|
super(payload, NONE);
|
|
9
32
|
this.endpoint = endpoint;
|