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/filter.js
CHANGED
|
@@ -1,17 +1,45 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Filter an iterable set of items using a matcher.
|
|
3
|
+
*
|
|
4
|
+
* @param items Iterable of items to filter.
|
|
5
|
+
* @param match Matcher called with each item (plus any extra `args`); items it returns `true` for are kept.
|
|
6
|
+
* @param args Extra arguments passed to `match` after each item.
|
|
7
|
+
* @returns Iterable yielding only the items the matcher returned `true` for.
|
|
8
|
+
* @example Array.from(filterItems([1, 2, 3], n => n > 1)) // [2, 3]
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/util/filter/filterItems
|
|
10
|
+
*/
|
|
2
11
|
export function* filterItems(items, match, ...args) {
|
|
3
12
|
for (const item of items)
|
|
4
13
|
if (match(item, ...args))
|
|
5
14
|
yield item;
|
|
6
15
|
}
|
|
7
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Filter an array (immutably) using a matcher.
|
|
18
|
+
* - Returns the exact same array instance if no items were removed (for referential stability).
|
|
19
|
+
*
|
|
20
|
+
* @param input Array of items to filter.
|
|
21
|
+
* @param match Matcher called with each item (plus any extra `args`); items it returns `true` for are kept.
|
|
22
|
+
* @param args Extra arguments passed to `match` after each item.
|
|
23
|
+
* @returns A filtered array, or the same `input` instance if nothing was removed.
|
|
24
|
+
* @example filterArray([1, 2, 3], n => n > 1) // [2, 3]
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/util/filter/filterArray
|
|
26
|
+
*/
|
|
8
27
|
export function filterArray(input, match, ...args) {
|
|
9
28
|
if (!input.length)
|
|
10
29
|
return input;
|
|
11
30
|
const output = Array.from(filterItems(input, match, ...args));
|
|
12
31
|
return output.length === input.length ? input : output;
|
|
13
32
|
}
|
|
14
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Filter a sequence of values using a matcher.
|
|
35
|
+
*
|
|
36
|
+
* @param sequence Async iterable of items to filter.
|
|
37
|
+
* @param match Matcher called with each item (plus any extra `args`); items it returns `true` for are kept.
|
|
38
|
+
* @param args Extra arguments passed to `match` after each item.
|
|
39
|
+
* @returns Async iterable yielding only the items the matcher returned `true` for.
|
|
40
|
+
* @example for await (const n of filterSequence(stream, n => n > 1)) { ... }
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/util/filter/filterSequence
|
|
42
|
+
*/
|
|
15
43
|
export async function* filterSequence(sequence, match, ...args) {
|
|
16
44
|
for await (const item of sequence)
|
|
17
45
|
if (match(item, ...args))
|
package/util/focus.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Find the first focusable element inside an HTML element (including the element itself).
|
|
3
|
+
* - An element is focusable if it's an enabled link, button, input, select, or textarea, or has a non-negative `tabindex`.
|
|
4
|
+
*
|
|
5
|
+
* @param el The HTML element to search (it is tested first, then its descendants).
|
|
6
|
+
* @returns The first focusable `HTMLElement`, or `null` if none is found.
|
|
7
|
+
* @example getFirstFocusable(form) // the first enabled input inside the form
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/util/focus/getFirstFocusable
|
|
9
|
+
*/
|
|
2
10
|
export declare function getFirstFocusable(el: HTMLElement): HTMLElement | null;
|
package/util/focus.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/** Selector for elements that can take focus */
|
|
2
2
|
const FOCUSABLE = `a:link, button:enabled, input:enabled, select:enabled, textarea:enabled, [tabindex]:not([tabindex="-1"]):not(:disabled)`;
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Find the first focusable element inside an HTML element (including the element itself).
|
|
5
|
+
* - An element is focusable if it's an enabled link, button, input, select, or textarea, or has a non-negative `tabindex`.
|
|
6
|
+
*
|
|
7
|
+
* @param el The HTML element to search (it is tested first, then its descendants).
|
|
8
|
+
* @returns The first focusable `HTMLElement`, or `null` if none is found.
|
|
9
|
+
* @example getFirstFocusable(form) // the first enabled input inside the form
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/util/focus/getFirstFocusable
|
|
11
|
+
*/
|
|
4
12
|
export function getFirstFocusable(el) {
|
|
5
13
|
return el.matches(FOCUSABLE) ? el : el.querySelector(FOCUSABLE);
|
|
6
14
|
}
|
package/util/format.d.ts
CHANGED
|
@@ -4,38 +4,84 @@ import type { AnyCaller } from "./function.js";
|
|
|
4
4
|
import { type ImmutableObject } from "./object.js";
|
|
5
5
|
import { type PossibleURI } from "./uri.js";
|
|
6
6
|
import { type PossibleURL } from "./url.js";
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Options that are shared across all formatters.
|
|
9
|
+
*
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/util/format/FormatOptions
|
|
11
|
+
*/
|
|
8
12
|
export interface FormatOptions {
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Override the locale for formatting (defaults to detected locale).
|
|
15
|
+
*
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/util/format/FormatOptions/locale
|
|
17
|
+
*/
|
|
10
18
|
readonly locale?: Intl.Locale | undefined;
|
|
11
19
|
}
|
|
12
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Format a boolean as `"Yes"` or `"No"`.
|
|
22
|
+
*
|
|
23
|
+
* @param value Boolean value to format.
|
|
24
|
+
* @returns `"Yes"` if `value` is `true`, otherwise `"No"`.
|
|
25
|
+
* @example formatBoolean(true) // "Yes"
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatBoolean
|
|
27
|
+
*/
|
|
13
28
|
export declare function formatBoolean(value: boolean): string;
|
|
14
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Options we use for number formatting.
|
|
31
|
+
*
|
|
32
|
+
* @see https://dhoulb.github.io/shelving/util/format/NumberFormatOptions
|
|
33
|
+
*/
|
|
15
34
|
export interface NumberFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "unitDisplay" | "currency" | "currencyDisplay" | "currencySign"> {
|
|
16
35
|
}
|
|
17
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Format a number (based on the user's browser language settings).
|
|
38
|
+
*
|
|
39
|
+
* @param num Number to format.
|
|
40
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
41
|
+
* @returns Locale-formatted number string.
|
|
42
|
+
* @example formatNumber(1234.5) // "1,234.5"
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatNumber
|
|
44
|
+
*/
|
|
18
45
|
export declare function formatNumber(num: number, options?: NumberFormatOptions): string;
|
|
19
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Format a number range (based on the user's browser language settings).
|
|
48
|
+
*
|
|
49
|
+
* @param from Number at the start of the range.
|
|
50
|
+
* @param to Number at the end of the range.
|
|
51
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
52
|
+
* @returns Locale-formatted number range string.
|
|
53
|
+
* @example formatRange(1, 10) // "1–10"
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatRange
|
|
55
|
+
*/
|
|
20
56
|
export declare function formatRange(from: number, to: number, options?: NumberFormatOptions): string;
|
|
21
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Options for quantity formatting.
|
|
59
|
+
*
|
|
60
|
+
* @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions
|
|
61
|
+
*/
|
|
22
62
|
export interface UnitFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "currency" | "currencyDisplay" | "currencySign"> {
|
|
23
63
|
/**
|
|
24
64
|
* String for one of this thing, e.g. `product` or `item` or `sheep`
|
|
25
65
|
* - Used for `unitDisplay: "long"` formatting.
|
|
26
66
|
* - Defaults to unit reference, e.g. "minute"
|
|
67
|
+
*
|
|
68
|
+
* @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions/one
|
|
27
69
|
*/
|
|
28
70
|
readonly one?: string | undefined;
|
|
29
71
|
/**
|
|
30
72
|
* String for several of this thing, e.g. `products` or `items` or `sheep`
|
|
31
73
|
* - Used for `unitDisplay: "long"` formatting.
|
|
32
74
|
* - Defaults to `one + "s"`
|
|
75
|
+
*
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions/many
|
|
33
77
|
*/
|
|
34
78
|
readonly many?: string | undefined;
|
|
35
79
|
/**
|
|
36
80
|
* Abbreviation for this thing, e.g. `products` or `items` or `sheep` (defaults to `one` + "s").
|
|
37
81
|
* - Used for `unitDisplay: "narrow"` formatting.
|
|
38
82
|
* - Defaults to unit reference, e.g. "minute"
|
|
83
|
+
*
|
|
84
|
+
* @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions/abbr
|
|
39
85
|
*/
|
|
40
86
|
readonly abbr?: string | undefined;
|
|
41
87
|
}
|
|
@@ -46,14 +92,40 @@ export interface UnitFormatOptions extends FormatOptions, Omit<Intl.NumberFormat
|
|
|
46
92
|
* - Unfortunately the list of supported units changes in different browsers.
|
|
47
93
|
* - Ideally we want to format units using the built-in formatting so things like translation and internationalisation are covered.
|
|
48
94
|
* - But we want provide fallback formatting for unsupported units, and do something _good enough_ job in most cases.
|
|
95
|
+
*
|
|
96
|
+
* @param num Quantity to format.
|
|
97
|
+
* @param unit Unit reference to format the quantity as, e.g. `"minute"` or `"product"`.
|
|
98
|
+
* @param options Formatting options including custom `one`/`many`/`abbr` strings for unsupported units.
|
|
99
|
+
* @returns Formatted quantity string, e.g. `"5 minutes"` or `"5 products"`.
|
|
100
|
+
* @example formatUnit(5, "minute", { unitDisplay: "long" }) // "5 minutes"
|
|
101
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatUnit
|
|
49
102
|
*/
|
|
50
103
|
export declare function formatUnit(num: number, unit: string, options?: UnitFormatOptions): string;
|
|
51
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Options we use for currency formatting.
|
|
106
|
+
*
|
|
107
|
+
* @see https://dhoulb.github.io/shelving/util/format/CurrencyFormatOptions
|
|
108
|
+
*/
|
|
52
109
|
export interface CurrencyFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "unitDisplay" | "currency"> {
|
|
53
110
|
}
|
|
54
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* Format a currency amount (based on the user's browser language settings).
|
|
113
|
+
*
|
|
114
|
+
* @param amount Amount of money to format.
|
|
115
|
+
* @param currency ISO 4217 currency code, e.g. `"USD"` or `"GBP"`.
|
|
116
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
117
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatCurrency` itself).
|
|
118
|
+
* @returns Locale-formatted currency string.
|
|
119
|
+
* @throws {RequiredError} If `currency` is not a valid currency code.
|
|
120
|
+
* @example formatCurrency(1234.5, "USD") // "$1,234.50"
|
|
121
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatCurrency
|
|
122
|
+
*/
|
|
55
123
|
export declare function formatCurrency(amount: number, currency: string, options?: CurrencyFormatOptions, caller?: AnyCaller): string;
|
|
56
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* Options we use for percent formatting.
|
|
126
|
+
*
|
|
127
|
+
* @see https://dhoulb.github.io/shelving/util/format/PercentFormatOptions
|
|
128
|
+
*/
|
|
57
129
|
export interface PercentFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "unitDisplay" | "currency" | "currencyDisplay" | "currencySign"> {
|
|
58
130
|
}
|
|
59
131
|
/**
|
|
@@ -64,6 +136,10 @@ export interface PercentFormatOptions extends FormatOptions, Omit<Intl.NumberFor
|
|
|
64
136
|
*
|
|
65
137
|
* @param numerator Number representing the amount of progress (e.g. `50`).
|
|
66
138
|
* @param denumerator The number representing the whole amount (defaults to 100).
|
|
139
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
140
|
+
* @returns Locale-formatted percentage string.
|
|
141
|
+
* @example formatPercent(50) // "50%"
|
|
142
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatPercent
|
|
67
143
|
*/
|
|
68
144
|
export declare function formatPercent(numerator: number, denumerator?: number, options?: PercentFormatOptions): string;
|
|
69
145
|
/**
|
|
@@ -71,32 +147,104 @@ export declare function formatPercent(numerator: number, denumerator?: number, o
|
|
|
71
147
|
* - Use the custom `.toString()` function if it exists (don't use built in `Object.prototype.toString` because it's useless.
|
|
72
148
|
* - Use `.title` or `.name` or `.id` if they exist and are strings.
|
|
73
149
|
* - Use `Object` otherwise.
|
|
150
|
+
*
|
|
151
|
+
* @param obj Object to format.
|
|
152
|
+
* @returns Best-available string representation of `obj`, or `"Object"` as a fallback.
|
|
153
|
+
* @example formatObject({ name: "Dave" }) // "Dave"
|
|
154
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatObject
|
|
74
155
|
*/
|
|
75
156
|
export declare function formatObject(obj: ImmutableObject): string;
|
|
157
|
+
/**
|
|
158
|
+
* Options for formatting an array as a string with `formatArray()`.
|
|
159
|
+
*
|
|
160
|
+
* @see https://dhoulb.github.io/shelving/util/format/ArrayFormatOptions
|
|
161
|
+
*/
|
|
76
162
|
export interface ArrayFormatOptions extends FormatOptions, Intl.ListFormatOptions {
|
|
77
163
|
}
|
|
78
|
-
/**
|
|
164
|
+
/**
|
|
165
|
+
* Format an unknown array as a string.
|
|
166
|
+
*
|
|
167
|
+
* @param arr Array of values to format.
|
|
168
|
+
* @param options Formatting options passed through to `Intl.ListFormat`.
|
|
169
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatArray` itself).
|
|
170
|
+
* @returns Locale-formatted list string with each item converted via `formatValue()`.
|
|
171
|
+
* @example formatArray(["a", "b", "c"]) // "a, b, and c"
|
|
172
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatArray
|
|
173
|
+
*/
|
|
79
174
|
export declare function formatArray(arr: ImmutableArray<unknown>, options?: ArrayFormatOptions, caller?: AnyCaller): string;
|
|
80
|
-
/**
|
|
175
|
+
/**
|
|
176
|
+
* Options we use for date, time, and datetime formatting.
|
|
177
|
+
*
|
|
178
|
+
* @see https://dhoulb.github.io/shelving/util/format/DateFormatOptions
|
|
179
|
+
*/
|
|
81
180
|
export interface DateFormatOptions extends Intl.DateTimeFormatOptions {
|
|
82
|
-
/**
|
|
181
|
+
/**
|
|
182
|
+
* Override the locale for formatting (defaults to detected locale).
|
|
183
|
+
*
|
|
184
|
+
* @see https://dhoulb.github.io/shelving/util/format/DateFormatOptions/locale
|
|
185
|
+
*/
|
|
83
186
|
readonly locale?: Intl.Locale | undefined;
|
|
84
187
|
}
|
|
85
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* Format a date in the browser locale.
|
|
190
|
+
*
|
|
191
|
+
* @param date Date to format.
|
|
192
|
+
* @param options Formatting options passed through to `Date.toLocaleDateString`.
|
|
193
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatDate` itself).
|
|
194
|
+
* @returns Locale-formatted date string.
|
|
195
|
+
* @throws {RequiredError} If `date` cannot be converted to a valid date.
|
|
196
|
+
* @example formatDate("2025-01-01") // "1/1/2025"
|
|
197
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatDate
|
|
198
|
+
*/
|
|
86
199
|
export declare function formatDate(date: PossibleDate, options?: DateFormatOptions, caller?: AnyCaller): string;
|
|
87
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* Format a time in the browser locale (no seconds by default).
|
|
202
|
+
*
|
|
203
|
+
* @param time Time to format (defaults to now).
|
|
204
|
+
* @param options Formatting options passed through to `Date.toLocaleTimeString`.
|
|
205
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatTime` itself).
|
|
206
|
+
* @returns Locale-formatted time string.
|
|
207
|
+
* @throws {RequiredError} If `time` cannot be converted to a valid date.
|
|
208
|
+
* @example formatTime("2025-01-01T13:30") // "01:30 PM"
|
|
209
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatTime
|
|
210
|
+
*/
|
|
88
211
|
export declare function formatTime(time?: PossibleDate, options?: DateFormatOptions, caller?: AnyCaller): string;
|
|
89
|
-
/**
|
|
212
|
+
/**
|
|
213
|
+
* Format a datetime in the browser locale (no seconds by default).
|
|
214
|
+
*
|
|
215
|
+
* @param date Date to format.
|
|
216
|
+
* @param options Formatting options passed through to `Date.toLocaleString`.
|
|
217
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatDateTime` itself).
|
|
218
|
+
* @returns Locale-formatted datetime string.
|
|
219
|
+
* @throws {RequiredError} If `date` cannot be converted to a valid date.
|
|
220
|
+
* @example formatDateTime("2025-01-01T13:30") // "1/1/2025, 01:30 PM"
|
|
221
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatDateTime
|
|
222
|
+
*/
|
|
90
223
|
export declare function formatDateTime(date: PossibleDate, options?: DateFormatOptions, caller?: AnyCaller): string;
|
|
91
224
|
/**
|
|
92
|
-
* Format a URI as a user-friendly string
|
|
93
|
-
* e.g. `mailto:dave@shax.com` → `dave@shax.com`
|
|
94
|
-
* e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
225
|
+
* Format a URI as a user-friendly string.
|
|
226
|
+
* - e.g. `mailto:dave@shax.com` → `dave@shax.com`
|
|
227
|
+
* - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
228
|
+
*
|
|
229
|
+
* @param url URI to format.
|
|
230
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatURI` itself).
|
|
231
|
+
* @returns Friendly string showing the host and path with any trailing slash removed.
|
|
232
|
+
* @throws {RequiredError} If `url` cannot be converted to a valid URI.
|
|
233
|
+
* @example formatURI("http://shax.com/test?uid=129483") // "shax.com/test"
|
|
234
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatURI
|
|
95
235
|
*/
|
|
96
236
|
export declare function formatURI(url: PossibleURI, caller?: AnyCaller): string;
|
|
97
237
|
/**
|
|
98
|
-
* Format a
|
|
99
|
-
* e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
238
|
+
* Format a URL as a user-friendly string.
|
|
239
|
+
* - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
240
|
+
*
|
|
241
|
+
* @param url URL to format.
|
|
242
|
+
* @param base Base URL to resolve `url` against if it is relative.
|
|
243
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatURL` itself).
|
|
244
|
+
* @returns Friendly string showing the host and path with any trailing slash removed.
|
|
245
|
+
* @throws {RequiredError} If `url` cannot be converted to a valid URL.
|
|
246
|
+
* @example formatURL("http://shax.com/test?uid=129483") // "shax.com/test"
|
|
247
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatURL
|
|
100
248
|
*/
|
|
101
249
|
export declare function formatURL(url: PossibleURL, base?: PossibleURL, caller?: AnyCaller): string;
|
|
102
250
|
/**
|
|
@@ -111,7 +259,23 @@ export declare function formatURL(url: PossibleURL, base?: PossibleURL, caller?:
|
|
|
111
259
|
* 2. `object.title` if it exists.
|
|
112
260
|
* - Falsy values like `null` and `undefined` return `"None"`
|
|
113
261
|
* - Everything else returns `"Unknown"`
|
|
262
|
+
*
|
|
263
|
+
* @param value Unknown value to format.
|
|
264
|
+
* @param options Formatting options passed through to the underlying formatter.
|
|
265
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatValue` itself).
|
|
266
|
+
* @returns User-facing string representation of `value`.
|
|
267
|
+
* @example formatValue(1234) // "1,234"
|
|
268
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatValue
|
|
114
269
|
*/
|
|
115
270
|
export declare function formatValue(value: unknown, options?: FormatOptions, caller?: AnyCaller): string;
|
|
116
|
-
/**
|
|
271
|
+
/**
|
|
272
|
+
* Format a sequence of values.
|
|
273
|
+
*
|
|
274
|
+
* @param values Iterable of unknown values to format.
|
|
275
|
+
* @param options Formatting options passed through to `formatValue()` for each item.
|
|
276
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatValues` itself).
|
|
277
|
+
* @returns Iterable yielding the user-facing string for each value.
|
|
278
|
+
* @example [...formatValues([1234, true])] // ["1,234", "Yes"]
|
|
279
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatValues
|
|
280
|
+
*/
|
|
117
281
|
export declare function formatValues(values: Iterable<unknown>, options?: FormatOptions, caller?: AnyCaller): Iterable<string>;
|
package/util/format.js
CHANGED
|
@@ -5,15 +5,39 @@ import { getPercent } from "./number.js";
|
|
|
5
5
|
import { isObject } from "./object.js";
|
|
6
6
|
import { isURI, requireURI } from "./uri.js";
|
|
7
7
|
import { requireURL } from "./url.js";
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Format a boolean as `"Yes"` or `"No"`.
|
|
10
|
+
*
|
|
11
|
+
* @param value Boolean value to format.
|
|
12
|
+
* @returns `"Yes"` if `value` is `true`, otherwise `"No"`.
|
|
13
|
+
* @example formatBoolean(true) // "Yes"
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatBoolean
|
|
15
|
+
*/
|
|
9
16
|
export function formatBoolean(value) {
|
|
10
17
|
return value ? "Yes" : "No";
|
|
11
18
|
}
|
|
12
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Format a number (based on the user's browser language settings).
|
|
21
|
+
*
|
|
22
|
+
* @param num Number to format.
|
|
23
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
24
|
+
* @returns Locale-formatted number string.
|
|
25
|
+
* @example formatNumber(1234.5) // "1,234.5"
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatNumber
|
|
27
|
+
*/
|
|
13
28
|
export function formatNumber(num, options) {
|
|
14
29
|
return Intl.NumberFormat(options?.locale, options).format(num);
|
|
15
30
|
}
|
|
16
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Format a number range (based on the user's browser language settings).
|
|
33
|
+
*
|
|
34
|
+
* @param from Number at the start of the range.
|
|
35
|
+
* @param to Number at the end of the range.
|
|
36
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
37
|
+
* @returns Locale-formatted number range string.
|
|
38
|
+
* @example formatRange(1, 10) // "1–10"
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatRange
|
|
40
|
+
*/
|
|
17
41
|
export function formatRange(from, to, options) {
|
|
18
42
|
return Intl.NumberFormat(options?.locale, options).formatRange(from, to);
|
|
19
43
|
}
|
|
@@ -24,6 +48,13 @@ export function formatRange(from, to, options) {
|
|
|
24
48
|
* - Unfortunately the list of supported units changes in different browsers.
|
|
25
49
|
* - Ideally we want to format units using the built-in formatting so things like translation and internationalisation are covered.
|
|
26
50
|
* - But we want provide fallback formatting for unsupported units, and do something _good enough_ job in most cases.
|
|
51
|
+
*
|
|
52
|
+
* @param num Quantity to format.
|
|
53
|
+
* @param unit Unit reference to format the quantity as, e.g. `"minute"` or `"product"`.
|
|
54
|
+
* @param options Formatting options including custom `one`/`many`/`abbr` strings for unsupported units.
|
|
55
|
+
* @returns Formatted quantity string, e.g. `"5 minutes"` or `"5 products"`.
|
|
56
|
+
* @example formatUnit(5, "minute", { unitDisplay: "long" }) // "5 minutes"
|
|
57
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatUnit
|
|
27
58
|
*/
|
|
28
59
|
export function formatUnit(num, unit, options) {
|
|
29
60
|
// Check if the unit is supported by the browser.
|
|
@@ -36,7 +67,18 @@ export function formatUnit(num, unit, options) {
|
|
|
36
67
|
return `${str} ${str === "1" ? one : many}`;
|
|
37
68
|
return `${str}${unitDisplay === "narrow" ? "" : " "}${abbr}`; // "short" is the default.
|
|
38
69
|
}
|
|
39
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Format a currency amount (based on the user's browser language settings).
|
|
72
|
+
*
|
|
73
|
+
* @param amount Amount of money to format.
|
|
74
|
+
* @param currency ISO 4217 currency code, e.g. `"USD"` or `"GBP"`.
|
|
75
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
76
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatCurrency` itself).
|
|
77
|
+
* @returns Locale-formatted currency string.
|
|
78
|
+
* @throws {RequiredError} If `currency` is not a valid currency code.
|
|
79
|
+
* @example formatCurrency(1234.5, "USD") // "$1,234.50"
|
|
80
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatCurrency
|
|
81
|
+
*/
|
|
40
82
|
export function formatCurrency(amount, currency, options, caller = formatCurrency) {
|
|
41
83
|
return Intl.NumberFormat(options?.locale, {
|
|
42
84
|
style: "currency",
|
|
@@ -52,6 +94,10 @@ export function formatCurrency(amount, currency, options, caller = formatCurrenc
|
|
|
52
94
|
*
|
|
53
95
|
* @param numerator Number representing the amount of progress (e.g. `50`).
|
|
54
96
|
* @param denumerator The number representing the whole amount (defaults to 100).
|
|
97
|
+
* @param options Formatting options passed through to `Intl.NumberFormat`.
|
|
98
|
+
* @returns Locale-formatted percentage string.
|
|
99
|
+
* @example formatPercent(50) // "50%"
|
|
100
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatPercent
|
|
55
101
|
*/
|
|
56
102
|
export function formatPercent(numerator, denumerator, options) {
|
|
57
103
|
return Intl.NumberFormat(options?.locale, {
|
|
@@ -66,6 +112,11 @@ export function formatPercent(numerator, denumerator, options) {
|
|
|
66
112
|
* - Use the custom `.toString()` function if it exists (don't use built in `Object.prototype.toString` because it's useless.
|
|
67
113
|
* - Use `.title` or `.name` or `.id` if they exist and are strings.
|
|
68
114
|
* - Use `Object` otherwise.
|
|
115
|
+
*
|
|
116
|
+
* @param obj Object to format.
|
|
117
|
+
* @returns Best-available string representation of `obj`, or `"Object"` as a fallback.
|
|
118
|
+
* @example formatObject({ name: "Dave" }) // "Dave"
|
|
119
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatObject
|
|
69
120
|
*/
|
|
70
121
|
export function formatObject(obj) {
|
|
71
122
|
if (typeof obj.toString === "function" && obj.toString !== Object.prototype.toString)
|
|
@@ -81,15 +132,44 @@ export function formatObject(obj) {
|
|
|
81
132
|
return id;
|
|
82
133
|
return "Object";
|
|
83
134
|
}
|
|
84
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Format an unknown array as a string.
|
|
137
|
+
*
|
|
138
|
+
* @param arr Array of values to format.
|
|
139
|
+
* @param options Formatting options passed through to `Intl.ListFormat`.
|
|
140
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatArray` itself).
|
|
141
|
+
* @returns Locale-formatted list string with each item converted via `formatValue()`.
|
|
142
|
+
* @example formatArray(["a", "b", "c"]) // "a, b, and c"
|
|
143
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatArray
|
|
144
|
+
*/
|
|
85
145
|
export function formatArray(arr, options, caller = formatArray) {
|
|
86
146
|
return new Intl.ListFormat(undefined, { style: "long", type: "unit", ...options }).format(formatValues(arr, options, caller));
|
|
87
147
|
}
|
|
88
|
-
/**
|
|
148
|
+
/**
|
|
149
|
+
* Format a date in the browser locale.
|
|
150
|
+
*
|
|
151
|
+
* @param date Date to format.
|
|
152
|
+
* @param options Formatting options passed through to `Date.toLocaleDateString`.
|
|
153
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatDate` itself).
|
|
154
|
+
* @returns Locale-formatted date string.
|
|
155
|
+
* @throws {RequiredError} If `date` cannot be converted to a valid date.
|
|
156
|
+
* @example formatDate("2025-01-01") // "1/1/2025"
|
|
157
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatDate
|
|
158
|
+
*/
|
|
89
159
|
export function formatDate(date, options, caller = formatDate) {
|
|
90
160
|
return requireDate(date, caller).toLocaleDateString(options?.locale, options);
|
|
91
161
|
}
|
|
92
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* Format a time in the browser locale (no seconds by default).
|
|
164
|
+
*
|
|
165
|
+
* @param time Time to format (defaults to now).
|
|
166
|
+
* @param options Formatting options passed through to `Date.toLocaleTimeString`.
|
|
167
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatTime` itself).
|
|
168
|
+
* @returns Locale-formatted time string.
|
|
169
|
+
* @throws {RequiredError} If `time` cannot be converted to a valid date.
|
|
170
|
+
* @example formatTime("2025-01-01T13:30") // "01:30 PM"
|
|
171
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatTime
|
|
172
|
+
*/
|
|
93
173
|
export function formatTime(time, options, caller = formatTime) {
|
|
94
174
|
return requireDate(time, caller).toLocaleTimeString(options?.locale, {
|
|
95
175
|
hour: "2-digit",
|
|
@@ -98,7 +178,17 @@ export function formatTime(time, options, caller = formatTime) {
|
|
|
98
178
|
...options,
|
|
99
179
|
});
|
|
100
180
|
}
|
|
101
|
-
/**
|
|
181
|
+
/**
|
|
182
|
+
* Format a datetime in the browser locale (no seconds by default).
|
|
183
|
+
*
|
|
184
|
+
* @param date Date to format.
|
|
185
|
+
* @param options Formatting options passed through to `Date.toLocaleString`.
|
|
186
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatDateTime` itself).
|
|
187
|
+
* @returns Locale-formatted datetime string.
|
|
188
|
+
* @throws {RequiredError} If `date` cannot be converted to a valid date.
|
|
189
|
+
* @example formatDateTime("2025-01-01T13:30") // "1/1/2025, 01:30 PM"
|
|
190
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatDateTime
|
|
191
|
+
*/
|
|
102
192
|
export function formatDateTime(date, options, caller = formatDateTime) {
|
|
103
193
|
return requireDate(date, caller).toLocaleString(options?.locale, {
|
|
104
194
|
year: "numeric",
|
|
@@ -111,9 +201,16 @@ export function formatDateTime(date, options, caller = formatDateTime) {
|
|
|
111
201
|
});
|
|
112
202
|
}
|
|
113
203
|
/**
|
|
114
|
-
* Format a URI as a user-friendly string
|
|
115
|
-
* e.g. `mailto:dave@shax.com` → `dave@shax.com`
|
|
116
|
-
* e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
204
|
+
* Format a URI as a user-friendly string.
|
|
205
|
+
* - e.g. `mailto:dave@shax.com` → `dave@shax.com`
|
|
206
|
+
* - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
207
|
+
*
|
|
208
|
+
* @param url URI to format.
|
|
209
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatURI` itself).
|
|
210
|
+
* @returns Friendly string showing the host and path with any trailing slash removed.
|
|
211
|
+
* @throws {RequiredError} If `url` cannot be converted to a valid URI.
|
|
212
|
+
* @example formatURI("http://shax.com/test?uid=129483") // "shax.com/test"
|
|
213
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatURI
|
|
117
214
|
*/
|
|
118
215
|
export function formatURI(url, caller = formatURI) {
|
|
119
216
|
return _formatURI(requireURI(url, caller));
|
|
@@ -122,8 +219,16 @@ function _formatURI({ host, pathname }) {
|
|
|
122
219
|
return `${host}${pathname.endsWith("/") ? pathname.slice(0, -1) : pathname}`;
|
|
123
220
|
}
|
|
124
221
|
/**
|
|
125
|
-
* Format a
|
|
126
|
-
* e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
222
|
+
* Format a URL as a user-friendly string.
|
|
223
|
+
* - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
|
|
224
|
+
*
|
|
225
|
+
* @param url URL to format.
|
|
226
|
+
* @param base Base URL to resolve `url` against if it is relative.
|
|
227
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatURL` itself).
|
|
228
|
+
* @returns Friendly string showing the host and path with any trailing slash removed.
|
|
229
|
+
* @throws {RequiredError} If `url` cannot be converted to a valid URL.
|
|
230
|
+
* @example formatURL("http://shax.com/test?uid=129483") // "shax.com/test"
|
|
231
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatURL
|
|
127
232
|
*/
|
|
128
233
|
export function formatURL(url, base, caller = formatURL) {
|
|
129
234
|
return _formatURI(requireURL(url, base, caller));
|
|
@@ -140,6 +245,13 @@ export function formatURL(url, base, caller = formatURL) {
|
|
|
140
245
|
* 2. `object.title` if it exists.
|
|
141
246
|
* - Falsy values like `null` and `undefined` return `"None"`
|
|
142
247
|
* - Everything else returns `"Unknown"`
|
|
248
|
+
*
|
|
249
|
+
* @param value Unknown value to format.
|
|
250
|
+
* @param options Formatting options passed through to the underlying formatter.
|
|
251
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatValue` itself).
|
|
252
|
+
* @returns User-facing string representation of `value`.
|
|
253
|
+
* @example formatValue(1234) // "1,234"
|
|
254
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatValue
|
|
143
255
|
*/
|
|
144
256
|
export function formatValue(value, options, caller = formatValue) {
|
|
145
257
|
if (value === null || value === undefined)
|
|
@@ -164,7 +276,16 @@ export function formatValue(value, options, caller = formatValue) {
|
|
|
164
276
|
return formatURI(value, caller);
|
|
165
277
|
return "Unknown";
|
|
166
278
|
}
|
|
167
|
-
/**
|
|
279
|
+
/**
|
|
280
|
+
* Format a sequence of values.
|
|
281
|
+
*
|
|
282
|
+
* @param values Iterable of unknown values to format.
|
|
283
|
+
* @param options Formatting options passed through to `formatValue()` for each item.
|
|
284
|
+
* @param caller Function to attribute a thrown error to (defaults to `formatValues` itself).
|
|
285
|
+
* @returns Iterable yielding the user-facing string for each value.
|
|
286
|
+
* @example [...formatValues([1234, true])] // ["1,234", "Yes"]
|
|
287
|
+
* @see https://dhoulb.github.io/shelving/util/format/formatValues
|
|
288
|
+
*/
|
|
168
289
|
export function* formatValues(values, options, caller = formatValues) {
|
|
169
290
|
for (const v of values)
|
|
170
291
|
yield formatValue(v, options, caller);
|