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
package/util/http.js
CHANGED
|
@@ -42,12 +42,16 @@ function _parseMessageBody(message, MessageError, caller) {
|
|
|
42
42
|
/**
|
|
43
43
|
* Parse the body content of an HTTP `Request` based on its content type, or throw `RequestError` if the content could not be parsed.
|
|
44
44
|
*
|
|
45
|
+
* @param request The `Request` whose body to parse.
|
|
46
|
+
* @param caller Identity of the calling function for error attribution.
|
|
45
47
|
* @returns undefined If the request method is `GET` or `HEAD` (these request methods have no body).
|
|
46
48
|
* @returns unknown If content type is `application/json` and has valid JSON (including `undefined` if the content is empty).
|
|
47
49
|
* @returns unknown If content type is `multipart/form-data` then convert it to a simple `Data` object.
|
|
48
50
|
* @returns string If content type is `text/plain` or anything else (including `""` empty string if it's empty).
|
|
49
51
|
*
|
|
50
|
-
* @throws RequestError
|
|
52
|
+
* @throws {RequestError} If the content is not `text/plain`, or `application/json` with valid JSON.
|
|
53
|
+
* @example const body = await parseRequestBody(request);
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/util/http/parseRequestBody
|
|
51
55
|
*/
|
|
52
56
|
export function parseRequestBody(request, caller = parseRequestBody) {
|
|
53
57
|
return _parseMessageBody(request, RequestError, caller);
|
|
@@ -55,7 +59,12 @@ export function parseRequestBody(request, caller = parseRequestBody) {
|
|
|
55
59
|
/**
|
|
56
60
|
* Parse JSON from an HTTP `Request`, or return `undefined` when the request has no body.
|
|
57
61
|
*
|
|
58
|
-
* @
|
|
62
|
+
* @param request The `Request` whose JSON body to parse.
|
|
63
|
+
* @param caller Identity of the calling function for error attribution.
|
|
64
|
+
* @returns The parsed JSON value, or `undefined` if the body is empty.
|
|
65
|
+
* @throws {RequestError} If the request body is not valid JSON.
|
|
66
|
+
* @example const data = await parseRequestJSON(request);
|
|
67
|
+
* @see https://dhoulb.github.io/shelving/util/http/parseRequestJSON
|
|
59
68
|
*/
|
|
60
69
|
export function parseRequestJSON(request, caller = parseRequestJSON) {
|
|
61
70
|
return _parseMessageJSON(request, RequestError, caller);
|
|
@@ -63,7 +72,12 @@ export function parseRequestJSON(request, caller = parseRequestJSON) {
|
|
|
63
72
|
/**
|
|
64
73
|
* Parse `FormData` from an HTTP `Request`, or return `undefined` when the request has no body.
|
|
65
74
|
*
|
|
66
|
-
* @
|
|
75
|
+
* @param request The `Request` whose form-data body to parse.
|
|
76
|
+
* @param caller Identity of the calling function for error attribution.
|
|
77
|
+
* @returns The parsed `FormData`.
|
|
78
|
+
* @throws {RequestError} If the request body is not valid multipart form-data.
|
|
79
|
+
* @example const form = await parseRequestFormData(request);
|
|
80
|
+
* @see https://dhoulb.github.io/shelving/util/http/parseRequestFormData
|
|
67
81
|
*/
|
|
68
82
|
export function parseRequestFormData(request, caller = parseRequestFormData) {
|
|
69
83
|
return _parseMessageFormData(request, RequestError, caller);
|
|
@@ -71,11 +85,15 @@ export function parseRequestFormData(request, caller = parseRequestFormData) {
|
|
|
71
85
|
/**
|
|
72
86
|
* Parse the body content of an HTTP `Response` based on its content type, or throw `ResponseError` if the content could not be parsed.
|
|
73
87
|
*
|
|
88
|
+
* @param response The `Response` whose body to parse.
|
|
89
|
+
* @param caller Identity of the calling function for error attribution.
|
|
74
90
|
* @returns unknown If content type is `application/json` and has valid JSON (including `undefined` if the content is empty).
|
|
75
91
|
* @returns unknown If content type is `multipart/form-data` then convert it to a simple `Data` object.
|
|
76
92
|
* @returns string If content type is `text/plain` or anything else (including `""` empty string if it's empty).
|
|
77
93
|
*
|
|
78
|
-
* @throws ResponseError
|
|
94
|
+
* @throws {ResponseError} If the content is not `text/plain` or `application/json` with valid JSON.
|
|
95
|
+
* @example const body = await parseResponseBody(response);
|
|
96
|
+
* @see https://dhoulb.github.io/shelving/util/http/parseResponseBody
|
|
79
97
|
*/
|
|
80
98
|
export function parseResponseBody(response, caller = parseResponseBody) {
|
|
81
99
|
return _parseMessageBody(response, ResponseError, caller);
|
|
@@ -83,7 +101,12 @@ export function parseResponseBody(response, caller = parseResponseBody) {
|
|
|
83
101
|
/**
|
|
84
102
|
* Parse JSON from an HTTP `Response`, or return `undefined` when the response has no body.
|
|
85
103
|
*
|
|
86
|
-
* @
|
|
104
|
+
* @param response The `Response` whose JSON body to parse.
|
|
105
|
+
* @param caller Identity of the calling function for error attribution.
|
|
106
|
+
* @returns The parsed JSON value, or `undefined` if the body is empty.
|
|
107
|
+
* @throws {ResponseError} If the response body is not valid JSON.
|
|
108
|
+
* @example const data = await parseResponseJSON(response);
|
|
109
|
+
* @see https://dhoulb.github.io/shelving/util/http/parseResponseJSON
|
|
87
110
|
*/
|
|
88
111
|
export function parseResponseJSON(response, caller = parseResponseJSON) {
|
|
89
112
|
return _parseMessageJSON(response, ResponseError, caller);
|
|
@@ -91,16 +114,26 @@ export function parseResponseJSON(response, caller = parseResponseJSON) {
|
|
|
91
114
|
/**
|
|
92
115
|
* Parse `FormData` from an HTTP `Response`, or return `undefined` when the response has no body.
|
|
93
116
|
*
|
|
94
|
-
* @
|
|
117
|
+
* @param response The `Response` whose form-data body to parse.
|
|
118
|
+
* @param caller Identity of the calling function for error attribution.
|
|
119
|
+
* @returns The parsed `FormData`.
|
|
120
|
+
* @throws {ResponseError} If the response body is not valid multipart form-data.
|
|
121
|
+
* @example const form = await parseResponseFormData(response);
|
|
122
|
+
* @see https://dhoulb.github.io/shelving/util/http/parseResponseFormData
|
|
95
123
|
*/
|
|
96
124
|
export function parseResponseFormData(response, caller = parseResponseFormData) {
|
|
97
125
|
return _parseMessageFormData(response, ResponseError, caller);
|
|
98
126
|
}
|
|
99
127
|
/**
|
|
100
128
|
* Get an HTTP `Response` for an unknown value.
|
|
129
|
+
* - A `Response` value is returned unchanged.
|
|
130
|
+
* - `undefined` becomes a `204 No Content` response.
|
|
131
|
+
* - Anything else becomes a `200` JSON response.
|
|
101
132
|
*
|
|
102
133
|
* @param value The value to convert to a `Response`.
|
|
103
134
|
* @returns A `Response` with a 2xx status, and response body as JSON (if it was set), or no body if `value` is `undefined`
|
|
135
|
+
* @example getResponse({ name: "abc" }) // 200 JSON Response
|
|
136
|
+
* @see https://dhoulb.github.io/shelving/util/http/getResponse
|
|
104
137
|
*/
|
|
105
138
|
export function getResponse(value) {
|
|
106
139
|
// If it's already a `Response`, return it directly.
|
|
@@ -123,7 +156,10 @@ export function getResponse(value) {
|
|
|
123
156
|
* - Anything else returns a 500 response.
|
|
124
157
|
*
|
|
125
158
|
* @param reason The error value to convert to a `Response`.
|
|
126
|
-
* @param debug If `true` include the error message in the response (for debugging), or `false` to return generic error codes (for security).
|
|
159
|
+
* @param debug If `true` include the error message in the response (for debugging), or `false` to return generic error codes (for security). Defaults to `false`.
|
|
160
|
+
* @returns A `Response` with a status code and (optionally) body derived from the error.
|
|
161
|
+
* @example getErrorResponse("Invalid input") // 422 Response
|
|
162
|
+
* @see https://dhoulb.github.io/shelving/util/http/getErrorResponse
|
|
127
163
|
*/
|
|
128
164
|
export function getErrorResponse(reason, debug = false) {
|
|
129
165
|
// If it's already a `Response`, return it directly.
|
|
@@ -147,11 +183,25 @@ export function getErrorResponse(reason, debug = false) {
|
|
|
147
183
|
const _REQUEST_HEAD_METHODS = ["HEAD", "GET"];
|
|
148
184
|
const _REQUEST_BODY_METHODS = ["POST", "PUT", "PATCH", "DELETE"];
|
|
149
185
|
const _REQUEST_METHODS = [..._REQUEST_HEAD_METHODS, ..._REQUEST_BODY_METHODS];
|
|
150
|
-
/**
|
|
186
|
+
/**
|
|
187
|
+
* Is a string a supported HTTP request method?
|
|
188
|
+
*
|
|
189
|
+
* @param method The method string to test.
|
|
190
|
+
* @returns `true` if `method` is a supported `RequestMethod`, narrowing its type.
|
|
191
|
+
* @example isRequestMethod("GET") // true
|
|
192
|
+
* @see https://dhoulb.github.io/shelving/util/http/isRequestMethod
|
|
193
|
+
*/
|
|
151
194
|
export function isRequestMethod(method) {
|
|
152
195
|
return _REQUEST_METHODS.includes(method);
|
|
153
196
|
}
|
|
154
|
-
/**
|
|
197
|
+
/**
|
|
198
|
+
* Is a string a supported HTTP request method that never sends a body?
|
|
199
|
+
*
|
|
200
|
+
* @param method The method string to test.
|
|
201
|
+
* @returns `true` if `method` is a supported `RequestHeadMethod`, narrowing its type.
|
|
202
|
+
* @example isRequestHeadMethod("GET") // true
|
|
203
|
+
* @see https://dhoulb.github.io/shelving/util/http/isRequestHeadMethod
|
|
204
|
+
*/
|
|
155
205
|
export function isRequestHeadMethod(method) {
|
|
156
206
|
return _REQUEST_HEAD_METHODS.includes(method);
|
|
157
207
|
}
|
|
@@ -160,6 +210,12 @@ export function isRequestHeadMethod(method) {
|
|
|
160
210
|
* - Scalar options from `b` override `a`.
|
|
161
211
|
* - Header dictionaries are merged so call-level headers override default headers by key.
|
|
162
212
|
* - Abort signals are merged, so either abort signal will cancel the request.
|
|
213
|
+
*
|
|
214
|
+
* @param a The provider-level (default) request options.
|
|
215
|
+
* @param b The call-level request options whose values override `a`.
|
|
216
|
+
* @returns A merged `RequestOptions` with combined headers and abort signals.
|
|
217
|
+
* @example mergeRequestOptions({ cache: "no-store" }, { mode: "cors" }) // { cache: "no-store", mode: "cors", ... }
|
|
218
|
+
* @see https://dhoulb.github.io/shelving/util/http/mergeRequestOptions
|
|
163
219
|
*/
|
|
164
220
|
export function mergeRequestOptions({ headers: aHeaders, signal: aSignal, ...a } = {}, { headers: bHeaders, signal: bSignal, ...b } = {}) {
|
|
165
221
|
const headers = { ...aHeaders, ...bHeaders };
|
|
@@ -174,9 +230,11 @@ export function mergeRequestOptions({ headers: aHeaders, signal: aSignal, ...a }
|
|
|
174
230
|
* @param url The target URL.
|
|
175
231
|
* @param params `?query` params to encode into the URL.
|
|
176
232
|
* @param options Additional request options.
|
|
233
|
+
* @param caller Function to attribute a thrown error to (defaults to `createHeadRequest`).
|
|
177
234
|
* @returns A `Request` with no body content.
|
|
178
235
|
*
|
|
179
236
|
* @example createHeadRequest("POST", "https://api.example.com/items", { name: "abc" })
|
|
237
|
+
* @see https://dhoulb.github.io/shelving/util/http/createHeadRequest
|
|
180
238
|
*/
|
|
181
239
|
export function createHeadRequest(method, url, params, options = {}, caller = createHeadRequest) {
|
|
182
240
|
return new Request(withURIParams(requireURL(url, undefined, caller), params), { ...options, method, body: null });
|
|
@@ -190,9 +248,11 @@ export function createHeadRequest(method, url, params, options = {}, caller = cr
|
|
|
190
248
|
* @param url The target URL.
|
|
191
249
|
* @param body The plain-text request body.
|
|
192
250
|
* @param options Additional request options.
|
|
251
|
+
* @param caller Function to attribute a thrown error to (defaults to `createTextRequest`).
|
|
193
252
|
* @returns A `Request` with `text/plain` content type.
|
|
194
253
|
*
|
|
195
254
|
* @example createTextRequest("POST", "https://api.example.com/items", "hello")
|
|
255
|
+
* @see https://dhoulb.github.io/shelving/util/http/createTextRequest
|
|
196
256
|
*/
|
|
197
257
|
export function createTextRequest(method, url, body, options = {}, caller = createTextRequest) {
|
|
198
258
|
return new Request(requireURL(url, undefined, caller), { ...mergeRequestOptions(_REQUEST_TEXT_OPTIONS, options), method, body });
|
|
@@ -207,9 +267,11 @@ const _REQUEST_TEXT_OPTIONS = { headers: { "Content-Type": "text/plain" } };
|
|
|
207
267
|
* @param url The target URL.
|
|
208
268
|
* @param body The value to JSON-encode.
|
|
209
269
|
* @param options Additional request options.
|
|
270
|
+
* @param caller Function to attribute a thrown error to (defaults to `createJSONRequest`).
|
|
210
271
|
* @returns A `Request` with `application/json` content type.
|
|
211
272
|
*
|
|
212
273
|
* @example createJSONRequest("POST", "https://api.example.com/items", { name: "abc" })
|
|
274
|
+
* @see https://dhoulb.github.io/shelving/util/http/createJSONRequest
|
|
213
275
|
*/
|
|
214
276
|
export function createJSONRequest(method, url, body, options = {}, caller = createJSONRequest) {
|
|
215
277
|
return new Request(requireURL(url, undefined, caller), {
|
|
@@ -227,9 +289,11 @@ const _REQUEST_JSON_OPTIONS = { headers: { "Content-Type": "application/json" }
|
|
|
227
289
|
* @param url The target URL.
|
|
228
290
|
* @param body The `FormData` payload.
|
|
229
291
|
* @param options Additional request options.
|
|
292
|
+
* @param caller Function to attribute a thrown error to (defaults to `createFormDataRequest`).
|
|
230
293
|
* @returns A `Request` with a multipart body.
|
|
231
294
|
*
|
|
232
295
|
* @example createFormDataRequest("POST", "https://api.example.com/upload", new FormData())
|
|
296
|
+
* @see https://dhoulb.github.io/shelving/util/http/createFormDataRequest
|
|
233
297
|
*/
|
|
234
298
|
export function createFormDataRequest(method, url, body, options = {}, caller = createFormDataRequest) {
|
|
235
299
|
return new Request(requireURL(url, undefined, caller), { ...options, method, body });
|
|
@@ -243,11 +307,13 @@ export function createFormDataRequest(method, url, body, options = {}, caller =
|
|
|
243
307
|
* @param url The target URL.
|
|
244
308
|
* @param data The data object to serialize as XML.
|
|
245
309
|
* @param options Additional request options.
|
|
310
|
+
* @param caller Function to attribute a thrown error to (defaults to `createXMLRequest`).
|
|
246
311
|
* @returns A `Request` with `application/xml` content type.
|
|
247
312
|
*
|
|
248
313
|
* @throws {RequiredError} If the XML data contains invalid element names or values.
|
|
249
314
|
*
|
|
250
315
|
* @example createXMLRequest("POST", "https://api.example.com/items", { item: { name: "abc" } })
|
|
316
|
+
* @see https://dhoulb.github.io/shelving/util/http/createXMLRequest
|
|
251
317
|
*/
|
|
252
318
|
export function createXMLRequest(method, url, data, options = {}, caller = createXMLRequest) {
|
|
253
319
|
return new Request(requireURL(url, undefined, caller), {
|
|
@@ -266,9 +332,17 @@ const _REQUEST_XML_OPTIONS = { headers: { "Content-Type": "application/xml; char
|
|
|
266
332
|
* - Expects a fully valid URL (any `{placeholders}` in the URL are not considered).
|
|
267
333
|
* - As per the HTTP spec, `GET` and `HEAD` requests cannot contain a body
|
|
268
334
|
*
|
|
269
|
-
* @
|
|
335
|
+
* @param method The HTTP method.
|
|
336
|
+
* @param url The target URL.
|
|
337
|
+
* @param payload The body payload, whose type selects the content type.
|
|
338
|
+
* @param options Additional request options.
|
|
339
|
+
* @param caller Function to attribute a thrown error to (defaults to `createRequest`).
|
|
340
|
+
* @returns A `Request` with a content type chosen to match `payload`.
|
|
270
341
|
*
|
|
271
342
|
* @throws {RequiredError} if this is a `HEAD` or `GET` request but `body` is not a data object.
|
|
343
|
+
*
|
|
344
|
+
* @example createRequest("POST", "https://api.example.com/items", { name: "abc" }) // JSON Request
|
|
345
|
+
* @see https://dhoulb.github.io/shelving/util/http/createRequest
|
|
272
346
|
*/
|
|
273
347
|
export function createRequest(method, url, payload, options = {}, caller = createRequest) {
|
|
274
348
|
url = requireURL(url, undefined, caller);
|
|
@@ -289,7 +363,16 @@ export function createRequest(method, url, payload, options = {}, caller = creat
|
|
|
289
363
|
// JSON is the default.
|
|
290
364
|
return createJSONRequest(method, url, payload, options, caller);
|
|
291
365
|
}
|
|
292
|
-
/**
|
|
366
|
+
/**
|
|
367
|
+
* Assert that the payload for a `HEAD` or `GET` method is a data object, `null`, or `undefined`.
|
|
368
|
+
*
|
|
369
|
+
* @param payload The payload to assert.
|
|
370
|
+
* @param method The HTTP method the payload is for (used in the error message).
|
|
371
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertRequestHeadPayload`).
|
|
372
|
+
* @throws {RequiredError} If `payload` is not a data object, `null`, or `undefined`.
|
|
373
|
+
* @example assertRequestHeadPayload({ q: "abc" }, "GET"); // passes
|
|
374
|
+
* @see https://dhoulb.github.io/shelving/util/http/assertRequestHeadPayload
|
|
375
|
+
*/
|
|
293
376
|
export function assertRequestHeadPayload(payload, method, caller = assertRequestHeadPayload) {
|
|
294
377
|
if (!isData(payload) && !isNullish(payload))
|
|
295
378
|
throw new RequiredError(`Payload for ${method} request must be data object, null, or undefined`, { received: payload, caller });
|
package/util/hydrate.d.ts
CHANGED
|
@@ -3,9 +3,15 @@ import type { ImmutableDictionary } from "./dictionary.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* A set of hydrations describes a set of string keys and the class constructor to be dehydrated and rehydrated.
|
|
5
5
|
* - We can't use `class.name` because we don't know that the name of the class will survive minification.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/util/hydrate/Hydrations
|
|
6
8
|
*/
|
|
7
9
|
export type Hydrations = ImmutableDictionary<Class<unknown>>;
|
|
8
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* A dehydrated object with a `$type` key.
|
|
12
|
+
*
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/util/hydrate/DehydratedObject
|
|
14
|
+
*/
|
|
9
15
|
export type DehydratedObject = {
|
|
10
16
|
readonly $type: string;
|
|
11
17
|
readonly $value: unknown;
|
|
@@ -16,6 +22,13 @@ export type DehydratedObject = {
|
|
|
16
22
|
* - By its nature hydration is an unsafe operation.
|
|
17
23
|
* - Deeply iterates into arrays and plain objects to hydrate their items and props too.
|
|
18
24
|
* - Note: the recursion in this function does not currently protect against infinite loops.
|
|
25
|
+
*
|
|
26
|
+
* @param value The dehydrated value to hydrate.
|
|
27
|
+
* @param hydrations The set of `$type` keys mapped to the class constructors used to rebuild instances.
|
|
28
|
+
* @returns The hydrated value, with matched objects rebuilt as their class instances.
|
|
29
|
+
* @throws ValueError If a dehydrated object's `$type` is not matched by any constructor in `hydrations`.
|
|
30
|
+
* @example hydrate({ $type: "Date", $value: 0 }, {}) // Date instance
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/util/hydrate/hydrate
|
|
19
32
|
*/
|
|
20
33
|
export declare function hydrate(value: unknown, hydrations: Hydrations): unknown;
|
|
21
34
|
/**
|
|
@@ -25,7 +38,11 @@ export declare function hydrate(value: unknown, hydrations: Hydrations): unknown
|
|
|
25
38
|
* - Deeply iterates into arrays and plain objects to dehydrate their items and props too.
|
|
26
39
|
* - Note: the recursion in this function does not currently protect against infinite loops.
|
|
27
40
|
*
|
|
41
|
+
* @param value The value to dehydrate.
|
|
42
|
+
* @param hydrations The set of `$type` keys mapped to the class constructors used to recognise instances.
|
|
28
43
|
* @returns The dehydrated version of the specified value.
|
|
29
|
-
* @throws
|
|
44
|
+
* @throws ValueError If the value is a class instance that cannot be dehydrated (i.e. is not matched by any constructor in `hydrations`).
|
|
45
|
+
* @example dehydrate(new Date(0), {}) // { $type: "Date", $value: 0 }
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/util/hydrate/dehydrate
|
|
30
47
|
*/
|
|
31
48
|
export declare function dehydrate(value: unknown, hydrations: Hydrations): unknown;
|
package/util/hydrate.js
CHANGED
|
@@ -16,6 +16,13 @@ function _isDehydrated(value) {
|
|
|
16
16
|
* - By its nature hydration is an unsafe operation.
|
|
17
17
|
* - Deeply iterates into arrays and plain objects to hydrate their items and props too.
|
|
18
18
|
* - Note: the recursion in this function does not currently protect against infinite loops.
|
|
19
|
+
*
|
|
20
|
+
* @param value The dehydrated value to hydrate.
|
|
21
|
+
* @param hydrations The set of `$type` keys mapped to the class constructors used to rebuild instances.
|
|
22
|
+
* @returns The hydrated value, with matched objects rebuilt as their class instances.
|
|
23
|
+
* @throws ValueError If a dehydrated object's `$type` is not matched by any constructor in `hydrations`.
|
|
24
|
+
* @example hydrate({ $type: "Date", $value: 0 }, {}) // Date instance
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/util/hydrate/hydrate
|
|
19
26
|
*/
|
|
20
27
|
export function hydrate(value, hydrations) {
|
|
21
28
|
if (isArray(value))
|
|
@@ -48,8 +55,12 @@ function _hydrateProp([, v], hydrations) {
|
|
|
48
55
|
* - Deeply iterates into arrays and plain objects to dehydrate their items and props too.
|
|
49
56
|
* - Note: the recursion in this function does not currently protect against infinite loops.
|
|
50
57
|
*
|
|
58
|
+
* @param value The value to dehydrate.
|
|
59
|
+
* @param hydrations The set of `$type` keys mapped to the class constructors used to recognise instances.
|
|
51
60
|
* @returns The dehydrated version of the specified value.
|
|
52
|
-
* @throws
|
|
61
|
+
* @throws ValueError If the value is a class instance that cannot be dehydrated (i.e. is not matched by any constructor in `hydrations`).
|
|
62
|
+
* @example dehydrate(new Date(0), {}) // { $type: "Date", $value: 0 }
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/util/hydrate/dehydrate
|
|
53
64
|
*/
|
|
54
65
|
export function dehydrate(value, hydrations) {
|
|
55
66
|
if (isObject(value)) {
|
package/util/item.d.ts
CHANGED
|
@@ -1,26 +1,85 @@
|
|
|
1
1
|
import type { ImmutableArray } from "./array.js";
|
|
2
2
|
import type { Data } from "./data.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Allowed types for the "id" property (identifier) for an item.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/util/item/Identifier
|
|
7
|
+
*/
|
|
4
8
|
export type Identifier = string | number;
|
|
5
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* An item object is a data object that includes an "id" identifier property that is either a string or number.
|
|
11
|
+
*
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/util/item/Item
|
|
13
|
+
*/
|
|
6
14
|
export type Item<I extends Identifier = Identifier, T extends Data = Data> = {
|
|
7
15
|
id: I;
|
|
8
16
|
} & T;
|
|
9
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Item object, or `undefined` to indicate the item doesn't exist.
|
|
19
|
+
*
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/util/item/OptionalItem
|
|
21
|
+
*/
|
|
10
22
|
export type OptionalItem<I extends Identifier = Identifier, T extends Data = Data> = Item<I, T> | undefined;
|
|
11
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* An async sequence of item objects.
|
|
25
|
+
*
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/util/item/ItemSequence
|
|
27
|
+
*/
|
|
12
28
|
export type ItemSequence<I extends Identifier = Identifier, T extends Data = Data> = AsyncIterable<Item<I, T>, void, void>;
|
|
13
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* An async sequence of optional item objects.
|
|
31
|
+
*
|
|
32
|
+
* @see https://dhoulb.github.io/shelving/util/item/OptionalItemSequence
|
|
33
|
+
*/
|
|
14
34
|
export type OptionalItemSequence<I extends Identifier = Identifier, T extends Data = Data> = AsyncIterable<OptionalItem<I, T>, void, void>;
|
|
15
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* An array of item objects.
|
|
37
|
+
*
|
|
38
|
+
* @see https://dhoulb.github.io/shelving/util/item/Items
|
|
39
|
+
*/
|
|
16
40
|
export type Items<I extends Identifier = Identifier, T extends Data = Data> = ImmutableArray<Item<I, T>>;
|
|
17
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* An async sequence of arrays of item objects.
|
|
43
|
+
*
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/util/item/ItemsSequence
|
|
45
|
+
*/
|
|
18
46
|
export type ItemsSequence<I extends Identifier = Identifier, T extends Data = Data> = AsyncIterable<Items<I, T>, void, void>;
|
|
19
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Get the identifier from an item object.
|
|
49
|
+
*
|
|
50
|
+
* @param item The item object to read the `id` from.
|
|
51
|
+
* @returns The item's `id` identifier.
|
|
52
|
+
* @example getIdentifier({ id: "abc", name: "Dave" }) // "abc"
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/util/item/getIdentifier
|
|
54
|
+
*/
|
|
20
55
|
export declare function getIdentifier<I extends Identifier, T extends Data>({ id }: Item<I, T>): I;
|
|
21
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Get the identifiers from an iterable set of item objects.
|
|
58
|
+
*
|
|
59
|
+
* @param entities The iterable of item objects to read identifiers from.
|
|
60
|
+
* @returns An iterable yielding the `id` of each item.
|
|
61
|
+
* @example Array.from(getIdentifiers([{ id: "a" }, { id: "b" }])) // ["a", "b"]
|
|
62
|
+
* @see https://dhoulb.github.io/shelving/util/item/getIdentifiers
|
|
63
|
+
*/
|
|
22
64
|
export declare function getIdentifiers<I extends Identifier, T extends Data>(entities: Iterable<Item<I, T>>): Iterable<I>;
|
|
23
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Does a data object have a given identifier (and is therefore an `Item`).
|
|
67
|
+
*
|
|
68
|
+
* @param item The data or item object to test.
|
|
69
|
+
* @param id The identifier to match against the object's `id` property.
|
|
70
|
+
* @returns `true` if `item.id` equals `id`, otherwise `false`.
|
|
71
|
+
* @example hasIdentifier({ id: "abc" }, "abc") // true
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/util/item/hasIdentifier
|
|
73
|
+
*/
|
|
24
74
|
export declare function hasIdentifier<I extends Identifier, T extends Data>(item: T | Item<I, T>, id: I): item is Item<I, T>;
|
|
25
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Merge an ID into a set of data to make an `Item`.
|
|
77
|
+
* - Returns the data unchanged if it already has the given `id`.
|
|
78
|
+
*
|
|
79
|
+
* @param id The identifier to set on the data.
|
|
80
|
+
* @param data The data or item object to attach the identifier to.
|
|
81
|
+
* @returns An item object with the given `id`.
|
|
82
|
+
* @example getItem("abc", { name: "Dave" }) // { name: "Dave", id: "abc" }
|
|
83
|
+
* @see https://dhoulb.github.io/shelving/util/item/getItem
|
|
84
|
+
*/
|
|
26
85
|
export declare function getItem<I extends Identifier, T extends Data>(id: I, data: T | Item<I, T>): Item<I, T>;
|
package/util/item.js
CHANGED
|
@@ -1,17 +1,48 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Get the identifier from an item object.
|
|
3
|
+
*
|
|
4
|
+
* @param item The item object to read the `id` from.
|
|
5
|
+
* @returns The item's `id` identifier.
|
|
6
|
+
* @example getIdentifier({ id: "abc", name: "Dave" }) // "abc"
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/util/item/getIdentifier
|
|
8
|
+
*/
|
|
2
9
|
export function getIdentifier({ id }) {
|
|
3
10
|
return id;
|
|
4
11
|
}
|
|
5
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Get the identifiers from an iterable set of item objects.
|
|
14
|
+
*
|
|
15
|
+
* @param entities The iterable of item objects to read identifiers from.
|
|
16
|
+
* @returns An iterable yielding the `id` of each item.
|
|
17
|
+
* @example Array.from(getIdentifiers([{ id: "a" }, { id: "b" }])) // ["a", "b"]
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/util/item/getIdentifiers
|
|
19
|
+
*/
|
|
6
20
|
export function* getIdentifiers(entities) {
|
|
7
21
|
for (const { id } of entities)
|
|
8
22
|
yield id;
|
|
9
23
|
}
|
|
10
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Does a data object have a given identifier (and is therefore an `Item`).
|
|
26
|
+
*
|
|
27
|
+
* @param item The data or item object to test.
|
|
28
|
+
* @param id The identifier to match against the object's `id` property.
|
|
29
|
+
* @returns `true` if `item.id` equals `id`, otherwise `false`.
|
|
30
|
+
* @example hasIdentifier({ id: "abc" }, "abc") // true
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/util/item/hasIdentifier
|
|
32
|
+
*/
|
|
11
33
|
export function hasIdentifier(item, id) {
|
|
12
34
|
return item.id === id;
|
|
13
35
|
}
|
|
14
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Merge an ID into a set of data to make an `Item`.
|
|
38
|
+
* - Returns the data unchanged if it already has the given `id`.
|
|
39
|
+
*
|
|
40
|
+
* @param id The identifier to set on the data.
|
|
41
|
+
* @param data The data or item object to attach the identifier to.
|
|
42
|
+
* @returns An item object with the given `id`.
|
|
43
|
+
* @example getItem("abc", { name: "Dave" }) // { name: "Dave", id: "abc" }
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/util/item/getItem
|
|
45
|
+
*/
|
|
15
46
|
export function getItem(id, data) {
|
|
16
47
|
return hasIdentifier(data, id) ? data : { ...data, id };
|
|
17
48
|
}
|
package/util/iterate.d.ts
CHANGED
|
@@ -1,39 +1,135 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Is an unknown value an iterable?
|
|
3
|
+
*
|
|
4
|
+
* @param value The value to test.
|
|
5
|
+
* @returns `true` if `value` is an object with a `Symbol.iterator` method, otherwise `false`.
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/isIterable
|
|
7
|
+
*/
|
|
8
|
+
export declare function isIterable(value: unknown): value is Iterable<unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* An iterable containing items or nested iterables of items.
|
|
11
|
+
*
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/DeepIterable
|
|
13
|
+
*/
|
|
4
14
|
export type DeepIterable<T> = T | Iterable<DeepIterable<T>>;
|
|
5
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Flatten one or more (possibly nested) iterables into a flat sequence of items.
|
|
17
|
+
*
|
|
18
|
+
* @param items The item or deeply-nested iterable of items to flatten.
|
|
19
|
+
* @returns An iterable yielding every leaf item in order.
|
|
20
|
+
* @example Array.from(flattenItems([1, [2, [3, 4]]])) // [1, 2, 3, 4]
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/flattenItems
|
|
22
|
+
*/
|
|
6
23
|
export declare function flattenItems<T>(items: DeepIterable<T>): Iterable<T>;
|
|
7
24
|
/**
|
|
8
25
|
* Does an iterable have one or more items.
|
|
9
|
-
* -
|
|
26
|
+
* - Stops as soon as the first item is found, so it never fully consumes the iterable.
|
|
27
|
+
*
|
|
28
|
+
* @param items The iterable to test.
|
|
29
|
+
* @returns `true` if the iterable yields at least one item, otherwise `false`.
|
|
30
|
+
* @example hasItems([1, 2, 3]) // true
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/hasItems
|
|
10
32
|
*/
|
|
11
33
|
export declare function hasItems(items: Iterable<unknown>): boolean;
|
|
12
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Count the number of items in an iterable.
|
|
36
|
+
* - Fully consumes the iterable to count its iterations.
|
|
37
|
+
*
|
|
38
|
+
* @param items The iterable to count.
|
|
39
|
+
* @returns The number of items yielded by the iterable.
|
|
40
|
+
* @example countItems([1, 2, 3]) // 3
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/countItems
|
|
42
|
+
*/
|
|
13
43
|
export declare function countItems(items: Iterable<unknown>): number;
|
|
14
44
|
/**
|
|
15
45
|
* Yield a range of numbers from `start` to `end`
|
|
16
46
|
* - Yields in descending order if `end` is lower than `start`
|
|
47
|
+
* - Both `start` and `end` are inclusive.
|
|
48
|
+
*
|
|
49
|
+
* @param start The first number to yield.
|
|
50
|
+
* @param end The last number to yield (inclusive).
|
|
51
|
+
* @returns An iterable yielding the numbers between `start` and `end`.
|
|
52
|
+
* @example Array.from(getRange(1, 4)) // [1, 2, 3, 4]
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/getRange
|
|
17
54
|
*/
|
|
18
55
|
export declare function getRange(start: number, end: number): Iterable<number>;
|
|
19
56
|
/**
|
|
20
57
|
* Apply a limit to an iterable set of items.
|
|
21
|
-
* -
|
|
58
|
+
* - Stops yielding once `limit` items have been produced.
|
|
59
|
+
*
|
|
60
|
+
* @param items The iterable to limit.
|
|
61
|
+
* @param limit The maximum number of items to yield.
|
|
62
|
+
* @returns An iterable yielding at most `limit` items.
|
|
63
|
+
* @example Array.from(limitItems([1, 2, 3, 4], 2)) // [1, 2]
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/limitItems
|
|
22
65
|
*/
|
|
23
66
|
export declare function limitItems<T>(items: Iterable<T>, limit: number): Iterable<T>;
|
|
24
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Pick items from an iterable set of items.
|
|
69
|
+
* - Only yields items that appear in the `pick` list.
|
|
70
|
+
*
|
|
71
|
+
* @param items The iterable to filter.
|
|
72
|
+
* @param pick The items to keep.
|
|
73
|
+
* @returns An iterable yielding only the items found in `pick`.
|
|
74
|
+
* @example Array.from(pickItems([1, 2, 3], 1, 3)) // [1, 3]
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/pickItems
|
|
76
|
+
*/
|
|
25
77
|
export declare function pickItems<T>(items: Iterable<T>, ...pick: T[]): Iterable<T>;
|
|
26
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Omit items from an iterable set of items.
|
|
80
|
+
* - Yields every item except those that appear in the `omit` list.
|
|
81
|
+
*
|
|
82
|
+
* @param items The iterable to filter.
|
|
83
|
+
* @param omit The items to remove.
|
|
84
|
+
* @returns An iterable yielding every item not found in `omit`.
|
|
85
|
+
* @example Array.from(omitItems([1, 2, 3], 2)) // [1, 3]
|
|
86
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/omitItems
|
|
87
|
+
*/
|
|
27
88
|
export declare function omitItems<T>(items: Iterable<T>, ...omit: T[]): Iterable<T>;
|
|
28
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Reduce an iterable set of items using a reducer function.
|
|
91
|
+
* - Calls `reducer` for each item, threading the accumulated value through.
|
|
92
|
+
*
|
|
93
|
+
* @param items The iterable to reduce.
|
|
94
|
+
* @param reducer Reducer called with the previous accumulated value and the current item, returning the next accumulated value.
|
|
95
|
+
* @param initial The initial accumulated value.
|
|
96
|
+
* @returns The final accumulated value, or `undefined` if the iterable is empty and no `initial` was given.
|
|
97
|
+
* @example reduceItems([1, 2, 3], (a, b) => a + b, 0) // 6
|
|
98
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/reduceItems
|
|
99
|
+
*/
|
|
29
100
|
export declare function reduceItems<T>(items: Iterable<T>, reducer: (previous: T, item: T) => T, initial: T): T;
|
|
30
101
|
export declare function reduceItems<T>(items: Iterable<T>, reducer: (previous: T | undefined, item: T) => T, initial?: T): T | undefined;
|
|
31
102
|
export declare function reduceItems<I, O>(items: Iterable<I>, reducer: (previous: O, item: I) => O, initial: O): O;
|
|
32
103
|
export declare function reduceItems<I, O>(items: Iterable<I>, reducer: (previous: O | undefined, item: I) => O, initial?: O): O | undefined;
|
|
33
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Yield chunks of a given size.
|
|
106
|
+
* - The final chunk may contain fewer than `size` items.
|
|
107
|
+
*
|
|
108
|
+
* @param items The iterable to split into chunks.
|
|
109
|
+
* @param size The maximum number of items per chunk.
|
|
110
|
+
* @returns An iterable yielding arrays of up to `size` items.
|
|
111
|
+
* @example Array.from(getChunks([1, 2, 3, 4, 5], 2)) // [[1, 2], [3, 4], [5]]
|
|
112
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/getChunks
|
|
113
|
+
*/
|
|
34
114
|
export declare function getChunks<T>(items: Iterable<T>, size: number): Iterable<readonly T[]>;
|
|
35
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Merge two or more iterables into a single iterable set.
|
|
117
|
+
* - Yields all items from each input in order.
|
|
118
|
+
*
|
|
119
|
+
* @param inputs Two or more iterables to merge.
|
|
120
|
+
* @returns An iterable yielding every item from each input in sequence.
|
|
121
|
+
* @example Array.from(mergeItems([1, 2], [3, 4])) // [1, 2, 3, 4]
|
|
122
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/mergeItems
|
|
123
|
+
*/
|
|
36
124
|
export declare function mergeItems<T>(...inputs: [Iterable<T>, Iterable<T>, ...Iterable<T>[]]): Iterable<T>;
|
|
37
|
-
/**
|
|
125
|
+
/**
|
|
126
|
+
* Interleave items with a separator, i.e. `[item1, separator, item2, separator, item3]`
|
|
127
|
+
*
|
|
128
|
+
* @param items The iterable to interleave.
|
|
129
|
+
* @param separator The value to insert between each pair of items.
|
|
130
|
+
* @returns An iterable yielding the items with `separator` between them.
|
|
131
|
+
* @example Array.from(interleaveItems([1, 2, 3], 0)) // [1, 0, 2, 0, 3]
|
|
132
|
+
* @see https://dhoulb.github.io/shelving/util/iterate/interleaveItems
|
|
133
|
+
*/
|
|
38
134
|
export declare function interleaveItems<T>(items: Iterable<T>, separator: T): Iterable<T>;
|
|
39
135
|
export declare function interleaveItems<A, B>(items: Iterable<A>, separator: B): Iterable<A | B>;
|