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/schema/ArraySchema.js
CHANGED
|
@@ -3,10 +3,10 @@ import { formatArray } from "../util/format.js";
|
|
|
3
3
|
import { validateArray } from "../util/validate.js";
|
|
4
4
|
import { Schema } from "./Schema.js";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Schema that validates an array and ensures every item matches a specified item schema.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* - A string input is split into items using `separator`.
|
|
9
|
+
* - Items are optionally deduplicated (`unique`), then the count is checked against `min` and `max`.
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* const schema = new ArraySchema({ min: 1, max: 2, default: [10,11,12], required: true });
|
|
@@ -21,6 +21,8 @@ import { Schema } from "./Schema.js";
|
|
|
21
21
|
* const schema = new ArraySchema({ schema: Array });
|
|
22
22
|
* schema.validate(["a", "a"], schema); // Returns ["a", "a"]
|
|
23
23
|
* schema.validate(["a", null], schema); // Throws Invalids({ "1": Invalid('Must be a string') });
|
|
24
|
+
*
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/schema/ArraySchema/ArraySchema
|
|
24
26
|
*/
|
|
25
27
|
export class ArraySchema extends Schema {
|
|
26
28
|
items;
|
|
@@ -28,6 +30,11 @@ export class ArraySchema extends Schema {
|
|
|
28
30
|
min;
|
|
29
31
|
max;
|
|
30
32
|
separator;
|
|
33
|
+
/**
|
|
34
|
+
* Create a new `ArraySchema`.
|
|
35
|
+
*
|
|
36
|
+
* @param options Options for the schema, including the `items` schema, `min`/`max` counts, `unique`, and `separator`.
|
|
37
|
+
*/
|
|
31
38
|
constructor({ items, one = items.one, many = items.many, title = "Items", placeholder = `No ${many}`, unique = false, min = 0, max = Number.POSITIVE_INFINITY, separator = ",", value = [], ...options }) {
|
|
32
39
|
super({ one, many, title, placeholder, value, ...options });
|
|
33
40
|
this.items = items;
|
|
@@ -36,6 +43,15 @@ export class ArraySchema extends Schema {
|
|
|
36
43
|
this.max = max;
|
|
37
44
|
this.separator = separator;
|
|
38
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate an unknown value as an array whose items all match the `items` schema.
|
|
48
|
+
*
|
|
49
|
+
* @param unsafeValue The unknown input value to validate; a string is split using `separator` (defaults to this schema's `value`).
|
|
50
|
+
* @returns The valid array with each item validated by the `items` schema.
|
|
51
|
+
* @throws `string` `"Must be array"` if not an array, `"Required"` or `` `Minimum ${min} ${many}` `` if too few items, or `` `Maximum ${max} ${many}` `` if too many.
|
|
52
|
+
* @example schema.validate([1, 2, 3]) // [1, 2, 3]
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/schema/ArraySchema/ArraySchema/validate
|
|
54
|
+
*/
|
|
39
55
|
validate(unsafeValue = this.value) {
|
|
40
56
|
const unsafeArray = typeof unsafeValue === "string" ? unsafeValue.split(this.separator).filter(Boolean) : unsafeValue;
|
|
41
57
|
if (!isArray(unsafeArray))
|
|
@@ -48,9 +64,28 @@ export class ArraySchema extends Schema {
|
|
|
48
64
|
throw `Maximum ${this.max} ${this.many}`;
|
|
49
65
|
return uniqueArray;
|
|
50
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Format a validated array as a string for display.
|
|
69
|
+
*
|
|
70
|
+
* @param arr The valid array to format.
|
|
71
|
+
* @returns The array's items formatted as a human-readable string.
|
|
72
|
+
* @example schema.format([1, 2, 3]) // "1, 2, 3"
|
|
73
|
+
* @see https://dhoulb.github.io/shelving/schema/ArraySchema/ArraySchema/format
|
|
74
|
+
*/
|
|
51
75
|
format(arr) {
|
|
52
76
|
return formatArray(arr.map(v => this.items.format(v)), undefined, this.format);
|
|
53
77
|
}
|
|
54
78
|
}
|
|
55
|
-
/**
|
|
56
|
-
|
|
79
|
+
/**
|
|
80
|
+
* Create a schema for a valid array with specified items.
|
|
81
|
+
*
|
|
82
|
+
* *Factory for `ArraySchema`.*
|
|
83
|
+
*
|
|
84
|
+
* @param items Schema every item in the array must conform to.
|
|
85
|
+
* @returns An `ArraySchema` validating arrays of the given item type.
|
|
86
|
+
* @example ARRAY(NUMBER) // ArraySchema<number>
|
|
87
|
+
* @see https://dhoulb.github.io/shelving/schema/ArraySchema/ARRAY
|
|
88
|
+
*/
|
|
89
|
+
export function ARRAY(items) {
|
|
90
|
+
return new ArraySchema({ items });
|
|
91
|
+
}
|
|
@@ -1,17 +1,73 @@
|
|
|
1
1
|
import type { SchemaOptions } from "./Schema.js";
|
|
2
2
|
import { Schema } from "./Schema.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Allowed options for `BooleanSchema`.
|
|
5
|
+
*
|
|
6
|
+
* - `value` — default boolean value used when the input is `undefined`.
|
|
7
|
+
* - `required` — when `true`, a falsy result is rejected as invalid.
|
|
8
|
+
*
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchemaOptions
|
|
10
|
+
*/
|
|
4
11
|
export interface BooleanSchemaOptions extends SchemaOptions {
|
|
5
12
|
readonly value?: boolean | undefined;
|
|
6
13
|
readonly required?: boolean | undefined;
|
|
7
14
|
}
|
|
8
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Schema that defines a valid boolean.
|
|
17
|
+
*
|
|
18
|
+
* - Strings are coerced: known negative strings (`""`, `"false"`, `"0"`, `"no"`, `"n"`, `"off"`) become `false`, everything else becomes `true`.
|
|
19
|
+
* - All other values are coerced with standard truthiness.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const schema = new BooleanSchema({ required: true });
|
|
23
|
+
* schema.validate("yes"); // Returns true
|
|
24
|
+
* schema.validate(""); // Throws "Required"
|
|
25
|
+
*
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema
|
|
27
|
+
*/
|
|
9
28
|
export declare class BooleanSchema extends Schema<boolean> {
|
|
10
29
|
readonly value: boolean;
|
|
11
30
|
readonly required: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new `BooleanSchema`.
|
|
33
|
+
*
|
|
34
|
+
* @param options Options for the schema.
|
|
35
|
+
* @param options.value Default boolean value used when the input is `undefined` (defaults to `false`).
|
|
36
|
+
* @param options.required When `true`, a falsy result is rejected as invalid (defaults to `false`).
|
|
37
|
+
*/
|
|
12
38
|
constructor({ value, required, ...options }: BooleanSchemaOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Validate an unknown value and coerce it to a boolean.
|
|
41
|
+
*
|
|
42
|
+
* @param unsafeValue Value to validate (defaults to this schema's `value`).
|
|
43
|
+
* @returns The coerced boolean value.
|
|
44
|
+
* @throws `string` `"Required"` if `required` is `true` and the coerced value is `false`.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* BOOLEAN.validate("yes"); // Returns true
|
|
48
|
+
*
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/validate
|
|
50
|
+
*/
|
|
13
51
|
validate(unsafeValue?: unknown): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Format a boolean value as a human-readable string for display.
|
|
54
|
+
*
|
|
55
|
+
* @param value Boolean value to format.
|
|
56
|
+
* @returns The formatted string, e.g. `"Yes"` or `"No"`.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* BOOLEAN.format(true); // Returns "Yes"
|
|
60
|
+
*
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/format
|
|
62
|
+
*/
|
|
14
63
|
format(value: boolean): string;
|
|
15
64
|
}
|
|
16
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Valid boolean.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* BOOLEAN.validate("yes"); // Returns true
|
|
70
|
+
*
|
|
71
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BOOLEAN
|
|
72
|
+
*/
|
|
17
73
|
export declare const BOOLEAN: BooleanSchema;
|
package/schema/BooleanSchema.js
CHANGED
|
@@ -1,21 +1,70 @@
|
|
|
1
1
|
import { formatBoolean } from "../util/format.js";
|
|
2
2
|
import { Schema } from "./Schema.js";
|
|
3
3
|
const NEGATIVE = ["", "false", "0", "no", "n", "off"];
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Schema that defines a valid boolean.
|
|
6
|
+
*
|
|
7
|
+
* - Strings are coerced: known negative strings (`""`, `"false"`, `"0"`, `"no"`, `"n"`, `"off"`) become `false`, everything else becomes `true`.
|
|
8
|
+
* - All other values are coerced with standard truthiness.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const schema = new BooleanSchema({ required: true });
|
|
12
|
+
* schema.validate("yes"); // Returns true
|
|
13
|
+
* schema.validate(""); // Throws "Required"
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema
|
|
16
|
+
*/
|
|
5
17
|
export class BooleanSchema extends Schema {
|
|
18
|
+
/**
|
|
19
|
+
* Create a new `BooleanSchema`.
|
|
20
|
+
*
|
|
21
|
+
* @param options Options for the schema.
|
|
22
|
+
* @param options.value Default boolean value used when the input is `undefined` (defaults to `false`).
|
|
23
|
+
* @param options.required When `true`, a falsy result is rejected as invalid (defaults to `false`).
|
|
24
|
+
*/
|
|
6
25
|
constructor({ value = false, required = false, ...options }) {
|
|
7
26
|
super({ value, ...options });
|
|
8
27
|
this.required = required;
|
|
9
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate an unknown value and coerce it to a boolean.
|
|
31
|
+
*
|
|
32
|
+
* @param unsafeValue Value to validate (defaults to this schema's `value`).
|
|
33
|
+
* @returns The coerced boolean value.
|
|
34
|
+
* @throws `string` `"Required"` if `required` is `true` and the coerced value is `false`.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* BOOLEAN.validate("yes"); // Returns true
|
|
38
|
+
*
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/validate
|
|
40
|
+
*/
|
|
10
41
|
validate(unsafeValue = this.value) {
|
|
11
42
|
const value = typeof unsafeValue === "string" ? !NEGATIVE.includes(unsafeValue.toLowerCase().trim()) : !!unsafeValue;
|
|
12
43
|
if (this.required && !value)
|
|
13
44
|
throw "Required";
|
|
14
45
|
return value;
|
|
15
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Format a boolean value as a human-readable string for display.
|
|
49
|
+
*
|
|
50
|
+
* @param value Boolean value to format.
|
|
51
|
+
* @returns The formatted string, e.g. `"Yes"` or `"No"`.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* BOOLEAN.format(true); // Returns "Yes"
|
|
55
|
+
*
|
|
56
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/format
|
|
57
|
+
*/
|
|
16
58
|
format(value) {
|
|
17
59
|
return formatBoolean(value);
|
|
18
60
|
}
|
|
19
61
|
}
|
|
20
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Valid boolean.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* BOOLEAN.validate("yes"); // Returns true
|
|
67
|
+
*
|
|
68
|
+
* @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BOOLEAN
|
|
69
|
+
*/
|
|
21
70
|
export const BOOLEAN = new BooleanSchema({});
|
package/schema/ChoiceSchema.d.ts
CHANGED
|
@@ -2,31 +2,85 @@ import { type ImmutableArray } from "../util/array.js";
|
|
|
2
2
|
import type { SchemaOptions } from "./Schema.js";
|
|
3
3
|
import { Schema } from "./Schema.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Dictionary of allowed options for a `ChoiceSchema` in `{ key: title }` format.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceOptions
|
|
7
8
|
*/
|
|
8
9
|
export type ChoiceOptions<K extends string> = {
|
|
9
10
|
readonly [KK in K]: string;
|
|
10
11
|
};
|
|
11
12
|
/**
|
|
12
|
-
* Things that can be converted to a
|
|
13
|
-
*
|
|
13
|
+
* Things that can be converted to a `ChoiceOptions` dictionary.
|
|
14
|
+
*
|
|
15
|
+
* - Dictionary of string options in `{ key: title }` format.
|
|
16
|
+
* - Array of string options in `[key]` format (`key` is used as the `title` too).
|
|
17
|
+
*
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/PossibleChoiceOptions
|
|
14
19
|
*/
|
|
15
20
|
export type PossibleChoiceOptions<K extends string> = ImmutableArray<K> | ChoiceOptions<K>;
|
|
16
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Options for `ChoiceSchema`.
|
|
23
|
+
*
|
|
24
|
+
* - `options` — the allowed choices, as a `{ key: title }` dictionary or an array of keys.
|
|
25
|
+
* - `value` — default option used when the input is `undefined`.
|
|
26
|
+
*
|
|
27
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchemaOptions
|
|
28
|
+
*/
|
|
17
29
|
export interface ChoiceSchemaOptions<O extends string, I = never> extends Omit<SchemaOptions, "value"> {
|
|
18
30
|
/** Specify correct options using a dictionary of entries. */
|
|
19
31
|
readonly options: PossibleChoiceOptions<O>;
|
|
20
32
|
/** Default option for the value. */
|
|
21
33
|
readonly value?: O | I;
|
|
22
34
|
}
|
|
23
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Schema that validates a value against a fixed set of allowed string choices.
|
|
37
|
+
*
|
|
38
|
+
* - The input must be one of the keys in `options`, otherwise it is rejected.
|
|
39
|
+
* - Each choice has a human-readable title used by `format()`.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const schema = new ChoiceSchema({ options: { yes: "Yes", no: "No" } });
|
|
43
|
+
* schema.validate("yes"); // "yes"
|
|
44
|
+
*
|
|
45
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema
|
|
46
|
+
*/
|
|
24
47
|
export declare class ChoiceSchema<O extends string, I = never> extends Schema<O> {
|
|
25
48
|
readonly value: O | I | undefined;
|
|
26
49
|
readonly options: ChoiceOptions<O>;
|
|
50
|
+
/**
|
|
51
|
+
* Create a new `ChoiceSchema`.
|
|
52
|
+
*
|
|
53
|
+
* @param options Options for the schema, including the allowed `options` and an optional default `value`.
|
|
54
|
+
*/
|
|
27
55
|
constructor({ one, title, placeholder, options, value, ...rest }: ChoiceSchemaOptions<O, I>);
|
|
56
|
+
/**
|
|
57
|
+
* Validate an unknown value as one of the allowed choices.
|
|
58
|
+
*
|
|
59
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
60
|
+
* @returns The valid choice key.
|
|
61
|
+
* @throws `string` `"Required"` if the value is empty or missing, or `` `Unknown ${one}` `` if it is not one of the allowed choices.
|
|
62
|
+
* @example schema.validate("yes") // "yes"
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/validate
|
|
64
|
+
*/
|
|
28
65
|
validate(unsafeValue?: unknown): O;
|
|
66
|
+
/**
|
|
67
|
+
* Format a validated choice as its human-readable title.
|
|
68
|
+
*
|
|
69
|
+
* @param value The valid choice key to format.
|
|
70
|
+
* @returns The choice's title from `options`.
|
|
71
|
+
* @example schema.format("yes") // "Yes"
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/format
|
|
73
|
+
*/
|
|
29
74
|
format(value: O): string;
|
|
30
75
|
}
|
|
31
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Create a schema for a valid choice from an allowed set of values.
|
|
78
|
+
*
|
|
79
|
+
* *Factory for `ChoiceSchema`.*
|
|
80
|
+
*
|
|
81
|
+
* @param options The allowed choices, as a `{ key: title }` dictionary or an array of keys.
|
|
82
|
+
* @returns A `ChoiceSchema` validating the given choices.
|
|
83
|
+
* @example CHOICE({ yes: "Yes", no: "No" }) // ChoiceSchema<"yes" | "no">
|
|
84
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/CHOICE
|
|
85
|
+
*/
|
|
32
86
|
export declare function CHOICE<K extends string>(options: PossibleChoiceOptions<K>): ChoiceSchema<K>;
|
package/schema/ChoiceSchema.js
CHANGED
|
@@ -8,23 +8,65 @@ function _getChoiceOptions(options) {
|
|
|
8
8
|
function _getChoiceOption(k) {
|
|
9
9
|
return [k, k];
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Schema that validates a value against a fixed set of allowed string choices.
|
|
13
|
+
*
|
|
14
|
+
* - The input must be one of the keys in `options`, otherwise it is rejected.
|
|
15
|
+
* - Each choice has a human-readable title used by `format()`.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const schema = new ChoiceSchema({ options: { yes: "Yes", no: "No" } });
|
|
19
|
+
* schema.validate("yes"); // "yes"
|
|
20
|
+
*
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema
|
|
22
|
+
*/
|
|
12
23
|
export class ChoiceSchema extends Schema {
|
|
13
24
|
options;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new `ChoiceSchema`.
|
|
27
|
+
*
|
|
28
|
+
* @param options Options for the schema, including the allowed `options` and an optional default `value`.
|
|
29
|
+
*/
|
|
14
30
|
constructor({ one = "choice", title = "Choice", placeholder = `No ${one}`, options, value, ...rest }) {
|
|
15
31
|
super({ one, title, value, placeholder, ...rest });
|
|
16
32
|
this.options = _getChoiceOptions(options);
|
|
17
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate an unknown value as one of the allowed choices.
|
|
36
|
+
*
|
|
37
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
38
|
+
* @returns The valid choice key.
|
|
39
|
+
* @throws `string` `"Required"` if the value is empty or missing, or `` `Unknown ${one}` `` if it is not one of the allowed choices.
|
|
40
|
+
* @example schema.validate("yes") // "yes"
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/validate
|
|
42
|
+
*/
|
|
18
43
|
validate(unsafeValue = this.value) {
|
|
19
44
|
if (typeof unsafeValue === "string" && isProp(this.options, unsafeValue))
|
|
20
45
|
return unsafeValue;
|
|
21
46
|
throw unsafeValue ? `Unknown ${this.one}` : "Required";
|
|
22
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Format a validated choice as its human-readable title.
|
|
50
|
+
*
|
|
51
|
+
* @param value The valid choice key to format.
|
|
52
|
+
* @returns The choice's title from `options`.
|
|
53
|
+
* @example schema.format("yes") // "Yes"
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/format
|
|
55
|
+
*/
|
|
23
56
|
format(value) {
|
|
24
57
|
return this.options[value];
|
|
25
58
|
}
|
|
26
59
|
}
|
|
27
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Create a schema for a valid choice from an allowed set of values.
|
|
62
|
+
*
|
|
63
|
+
* *Factory for `ChoiceSchema`.*
|
|
64
|
+
*
|
|
65
|
+
* @param options The allowed choices, as a `{ key: title }` dictionary or an array of keys.
|
|
66
|
+
* @returns A `ChoiceSchema` validating the given choices.
|
|
67
|
+
* @example CHOICE({ yes: "Yes", no: "No" }) // ChoiceSchema<"yes" | "no">
|
|
68
|
+
* @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/CHOICE
|
|
69
|
+
*/
|
|
28
70
|
export function CHOICE(options) {
|
|
29
71
|
return new ChoiceSchema({ options });
|
|
30
72
|
}
|
package/schema/ColorSchema.d.ts
CHANGED
|
@@ -1,21 +1,54 @@
|
|
|
1
1
|
import { StringSchema, type StringSchemaOptions } from "./StringSchema.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Options for a `ColorSchema`.
|
|
4
|
+
*
|
|
5
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchemaOptions
|
|
6
|
+
*/
|
|
3
7
|
export interface ColorSchemaOptions extends Omit<StringSchemaOptions, "type" | "min" | "max" | "match" | "rows"> {
|
|
4
8
|
}
|
|
5
9
|
/**
|
|
6
|
-
*
|
|
10
|
+
* Schema that defines a valid color hex string, e.g. `#00CCFF`
|
|
7
11
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `null` is also a valid value if this field is not required.
|
|
12
|
+
* - Coerces the value to a six-digit uppercase `#RRGGBB` hex string.
|
|
13
|
+
* - Rejects anything that isn't a valid hex color (use `NULLABLE_COLOR` to also allow `null`).
|
|
11
14
|
*
|
|
12
|
-
*
|
|
15
|
+
* @example COLOR.validate("00ccff"); // Returns "#00CCFF"
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema
|
|
13
17
|
*/
|
|
14
18
|
export declare class ColorSchema extends StringSchema {
|
|
19
|
+
/**
|
|
20
|
+
* Create a new `ColorSchema`.
|
|
21
|
+
*
|
|
22
|
+
* @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for hex colors).
|
|
23
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"color"`).
|
|
24
|
+
* @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Color"`).
|
|
25
|
+
* @param options.value Default hex value used when the input is `undefined` (defaults to `"#000000"`).
|
|
26
|
+
*/
|
|
15
27
|
constructor({ one, title, value, ...options }: ColorSchemaOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Sanitize the string into a `#RRGGBB` hex color.
|
|
30
|
+
*
|
|
31
|
+
* - Uppercases the input and strips every non-hex character.
|
|
32
|
+
* - Prefixes the first six hex digits with `#`, or returns `""` when there are none.
|
|
33
|
+
*
|
|
34
|
+
* @param insaneString String to sanitize.
|
|
35
|
+
* @returns The sanitized hex color, or `""` if no hex digits are present.
|
|
36
|
+
* @example COLOR.sanitize("00ccff"); // Returns "#00CCFF"
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema/sanitize
|
|
38
|
+
*/
|
|
16
39
|
sanitize(insaneString: string): string;
|
|
17
40
|
}
|
|
18
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Valid color hex string, e.g. `#00CCFF` (required because empty string is invalid).
|
|
43
|
+
*
|
|
44
|
+
* @example COLOR.validate("#00CCFF"); // Returns "#00CCFF"
|
|
45
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/COLOR
|
|
46
|
+
*/
|
|
19
47
|
export declare const COLOR: ColorSchema;
|
|
20
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Valid color hex string, e.g. `#00CCFF`, or `null`
|
|
50
|
+
*
|
|
51
|
+
* @example NULLABLE_COLOR.validate(null); // Returns null
|
|
52
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/NULLABLE_COLOR
|
|
53
|
+
*/
|
|
21
54
|
export declare const NULLABLE_COLOR: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/ColorSchema.js
CHANGED
|
@@ -3,15 +3,23 @@ import { StringSchema } from "./StringSchema.js";
|
|
|
3
3
|
const COLOR_REGEXP = /^#[0-9A-F]{6}$/;
|
|
4
4
|
const NOT_HEX_REGEXP = /[^0-9A-F]/g;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Schema that defines a valid color hex string, e.g. `#00CCFF`
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `null` is also a valid value if this field is not required.
|
|
8
|
+
* - Coerces the value to a six-digit uppercase `#RRGGBB` hex string.
|
|
9
|
+
* - Rejects anything that isn't a valid hex color (use `NULLABLE_COLOR` to also allow `null`).
|
|
11
10
|
*
|
|
12
|
-
*
|
|
11
|
+
* @example COLOR.validate("00ccff"); // Returns "#00CCFF"
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema
|
|
13
13
|
*/
|
|
14
14
|
export class ColorSchema extends StringSchema {
|
|
15
|
+
/**
|
|
16
|
+
* Create a new `ColorSchema`.
|
|
17
|
+
*
|
|
18
|
+
* @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for hex colors).
|
|
19
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"color"`).
|
|
20
|
+
* @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Color"`).
|
|
21
|
+
* @param options.value Default hex value used when the input is `undefined` (defaults to `"#000000"`).
|
|
22
|
+
*/
|
|
15
23
|
constructor({ one = "color", title = "Color", value = "#000000", ...options }) {
|
|
16
24
|
super({
|
|
17
25
|
one,
|
|
@@ -25,12 +33,33 @@ export class ColorSchema extends StringSchema {
|
|
|
25
33
|
match: COLOR_REGEXP,
|
|
26
34
|
});
|
|
27
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Sanitize the string into a `#RRGGBB` hex color.
|
|
38
|
+
*
|
|
39
|
+
* - Uppercases the input and strips every non-hex character.
|
|
40
|
+
* - Prefixes the first six hex digits with `#`, or returns `""` when there are none.
|
|
41
|
+
*
|
|
42
|
+
* @param insaneString String to sanitize.
|
|
43
|
+
* @returns The sanitized hex color, or `""` if no hex digits are present.
|
|
44
|
+
* @example COLOR.sanitize("00ccff"); // Returns "#00CCFF"
|
|
45
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema/sanitize
|
|
46
|
+
*/
|
|
28
47
|
sanitize(insaneString) {
|
|
29
48
|
const saneString = insaneString.toUpperCase().replace(NOT_HEX_REGEXP, "");
|
|
30
49
|
return saneString ? `#${saneString.slice(0, 6)}` : "";
|
|
31
50
|
}
|
|
32
51
|
}
|
|
33
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Valid color hex string, e.g. `#00CCFF` (required because empty string is invalid).
|
|
54
|
+
*
|
|
55
|
+
* @example COLOR.validate("#00CCFF"); // Returns "#00CCFF"
|
|
56
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/COLOR
|
|
57
|
+
*/
|
|
34
58
|
export const COLOR = new ColorSchema({});
|
|
35
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Valid color hex string, e.g. `#00CCFF`, or `null`
|
|
61
|
+
*
|
|
62
|
+
* @example NULLABLE_COLOR.validate(null); // Returns null
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/schema/ColorSchema/NULLABLE_COLOR
|
|
64
|
+
*/
|
|
36
65
|
export const NULLABLE_COLOR = NULLABLE(COLOR);
|
|
@@ -1,17 +1,57 @@
|
|
|
1
1
|
import { type Country, type PossibleCountry } from "../util/geo.js";
|
|
2
2
|
import { ChoiceSchema } from "./ChoiceSchema.js";
|
|
3
3
|
import type { SchemaOptions } from "./Schema.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Options for `CountrySchema`.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchemaOptions
|
|
8
|
+
*/
|
|
5
9
|
export interface CountrySchemaOptions extends SchemaOptions {
|
|
6
10
|
/** Country value, or `"detect"` to resolve from browser language. */
|
|
7
11
|
readonly value?: PossibleCountry;
|
|
8
12
|
}
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Schema that defines a valid ISO 3166 country code, e.g. `GB`.
|
|
15
|
+
*
|
|
16
|
+
* - The input is coerced with `getCountry`, then checked against the known set of `COUNTRIES`.
|
|
17
|
+
* - A `value` of `"detect"` resolves the default country from the browser language.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const schema = new CountrySchema({});
|
|
21
|
+
* schema.validate("GB"); // "GB"
|
|
22
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
|
|
23
|
+
*/
|
|
10
24
|
export declare class CountrySchema extends ChoiceSchema<Country, PossibleCountry> {
|
|
25
|
+
/**
|
|
26
|
+
* Create a new `CountrySchema`.
|
|
27
|
+
*
|
|
28
|
+
* @param options Options for the schema (`value`, plus base `SchemaOptions`).
|
|
29
|
+
* @example new CountrySchema({ value: "GB" })
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
|
|
31
|
+
*/
|
|
11
32
|
constructor({ one, title, value, ...options }?: CountrySchemaOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Validate an unknown input value and return a valid country code.
|
|
35
|
+
*
|
|
36
|
+
* @param unsafeValue The value to validate (defaults to this schema's `value`).
|
|
37
|
+
* @returns The validated ISO 3166 country code.
|
|
38
|
+
* @throws `string` `"Required"` if the value is empty, or `` `Unknown ${one}` `` if it is not a known country.
|
|
39
|
+
* @example schema.validate("GB") // "GB"
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema/validate
|
|
41
|
+
*/
|
|
12
42
|
validate(unsafeValue?: unknown): Country;
|
|
13
43
|
}
|
|
14
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Valid country code, e.g. `GB` (required because falsy values are invalid).
|
|
46
|
+
*
|
|
47
|
+
* @example COUNTRY.validate("GB") // "GB"
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/COUNTRY
|
|
49
|
+
*/
|
|
15
50
|
export declare const COUNTRY: CountrySchema;
|
|
16
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Valid country code, e.g. `GB`, or `null`.
|
|
53
|
+
*
|
|
54
|
+
* @example NULLABLE_COUNTRY.validate(null) // null
|
|
55
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/NULLABLE_COUNTRY
|
|
56
|
+
*/
|
|
17
57
|
export declare const NULLABLE_COUNTRY: import("./NullableSchema.js").NullableSchema<"AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AN" | "AO" | "AQ" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CV" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "ST" | "SV" | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WF" | "WS" | "YE" | "YT" | "ZA" | "ZM" | "ZW">;
|
package/schema/CountrySchema.js
CHANGED
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
import { COUNTRIES, getCountry } from "../util/geo.js";
|
|
2
2
|
import { ChoiceSchema } from "./ChoiceSchema.js";
|
|
3
3
|
import { NULLABLE } from "./NullableSchema.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Schema that defines a valid ISO 3166 country code, e.g. `GB`.
|
|
6
|
+
*
|
|
7
|
+
* - The input is coerced with `getCountry`, then checked against the known set of `COUNTRIES`.
|
|
8
|
+
* - A `value` of `"detect"` resolves the default country from the browser language.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const schema = new CountrySchema({});
|
|
12
|
+
* schema.validate("GB"); // "GB"
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
|
|
14
|
+
*/
|
|
5
15
|
export class CountrySchema extends ChoiceSchema {
|
|
16
|
+
/**
|
|
17
|
+
* Create a new `CountrySchema`.
|
|
18
|
+
*
|
|
19
|
+
* @param options Options for the schema (`value`, plus base `SchemaOptions`).
|
|
20
|
+
* @example new CountrySchema({ value: "GB" })
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
|
|
22
|
+
*/
|
|
6
23
|
constructor({ one = "country", title = "Country", value = "detect", ...options } = {}) {
|
|
7
24
|
super({ one, title, options: COUNTRIES, value, ...options });
|
|
8
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Validate an unknown input value and return a valid country code.
|
|
28
|
+
*
|
|
29
|
+
* @param unsafeValue The value to validate (defaults to this schema's `value`).
|
|
30
|
+
* @returns The validated ISO 3166 country code.
|
|
31
|
+
* @throws `string` `"Required"` if the value is empty, or `` `Unknown ${one}` `` if it is not a known country.
|
|
32
|
+
* @example schema.validate("GB") // "GB"
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema/validate
|
|
34
|
+
*/
|
|
9
35
|
validate(unsafeValue = this.value) {
|
|
10
36
|
const country = getCountry(unsafeValue);
|
|
11
37
|
if (country)
|
|
@@ -13,7 +39,17 @@ export class CountrySchema extends ChoiceSchema {
|
|
|
13
39
|
throw unsafeValue === "detect" ? "Required" : `Unknown ${this.one}`;
|
|
14
40
|
}
|
|
15
41
|
}
|
|
16
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Valid country code, e.g. `GB` (required because falsy values are invalid).
|
|
44
|
+
*
|
|
45
|
+
* @example COUNTRY.validate("GB") // "GB"
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/COUNTRY
|
|
47
|
+
*/
|
|
17
48
|
export const COUNTRY = new CountrySchema({});
|
|
18
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Valid country code, e.g. `GB`, or `null`.
|
|
51
|
+
*
|
|
52
|
+
* @example NULLABLE_COUNTRY.validate(null) // null
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/schema/CountrySchema/NULLABLE_COUNTRY
|
|
54
|
+
*/
|
|
19
55
|
export const NULLABLE_COUNTRY = NULLABLE(COUNTRY);
|