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/DataSchema.js
CHANGED
|
@@ -6,28 +6,75 @@ import { validateData } from "../util/validate.js";
|
|
|
6
6
|
import { NULLABLE } from "./NullableSchema.js";
|
|
7
7
|
import { OPTIONAL } from "./OptionalSchema.js";
|
|
8
8
|
import { Schema } from "./Schema.js";
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Schema that validates a data object against a fixed set of named property schemas.
|
|
11
|
+
*
|
|
12
|
+
* - Each property is validated by its own schema in `props`.
|
|
13
|
+
* - Excess keys are stripped and `undefined` outputs removed (via `validateData()`).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* const schema = new DataSchema({ props: { name: STRING, age: NUMBER } });
|
|
17
|
+
* schema.validate({ name: "Dave", age: 40 }); // { name: "Dave", age: 40 }
|
|
18
|
+
*
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema
|
|
20
|
+
*/
|
|
10
21
|
export class DataSchema extends Schema {
|
|
11
22
|
props;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new `DataSchema`.
|
|
25
|
+
*
|
|
26
|
+
* @param options Options for the schema, including the `props` schemas and an optional partial `value`.
|
|
27
|
+
*/
|
|
12
28
|
constructor({ one = "item", title = "Item", props, value: partialValue, ...options }) {
|
|
13
29
|
// Build default value from props and partial value.
|
|
14
30
|
const value = { ...mapProps(props, _getSchemaValue), ...partialValue };
|
|
15
31
|
super({ one, title, value, ...options });
|
|
16
32
|
this.props = props;
|
|
17
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate an unknown value as a data object matching this schema's props.
|
|
36
|
+
*
|
|
37
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
38
|
+
* @returns The valid data object with each property validated by its schema.
|
|
39
|
+
* @throws `string` `"Must be object"` if the value is not a data object, or a `"key: message"` line per invalid property.
|
|
40
|
+
* @example schema.validate({ name: "Dave" }) // { name: "Dave" }
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/validate
|
|
42
|
+
*/
|
|
18
43
|
validate(unsafeValue = this.value) {
|
|
19
44
|
if (!isData(unsafeValue))
|
|
20
45
|
throw "Must be object";
|
|
21
46
|
return validateData(unsafeValue, this.props);
|
|
22
47
|
}
|
|
23
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Make a new `DataSchema` that only uses a defined subset of the current props.
|
|
50
|
+
*
|
|
51
|
+
* @param keys The property keys to keep.
|
|
52
|
+
* @returns A new `DataSchema` containing only the picked props.
|
|
53
|
+
* @example schema.pick("name", "age") // DataSchema<Pick<T, "name" | "age">>
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/pick
|
|
55
|
+
*/
|
|
24
56
|
pick(...keys) {
|
|
25
57
|
return new DataSchema({ ...this, props: pickProps(this.props, ...keys) });
|
|
26
58
|
}
|
|
27
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Make a new `DataSchema` that omits one or more of the current props.
|
|
61
|
+
*
|
|
62
|
+
* @param keys The property keys to remove.
|
|
63
|
+
* @returns A new `DataSchema` without the omitted props.
|
|
64
|
+
* @example schema.omit("age") // DataSchema<Omit<T, "age">>
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/omit
|
|
66
|
+
*/
|
|
28
67
|
omit(...keys) {
|
|
29
68
|
return new DataSchema({ ...this, props: omitProps(this.props, ...keys) });
|
|
30
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Format a validated data object as a string for display.
|
|
72
|
+
*
|
|
73
|
+
* @param value The valid data object to format.
|
|
74
|
+
* @returns The data object formatted as a human-readable string.
|
|
75
|
+
* @example schema.format({ name: "Dave" }) // "name: Dave"
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/format
|
|
77
|
+
*/
|
|
31
78
|
format(value) {
|
|
32
79
|
return formatObject(value);
|
|
33
80
|
}
|
|
@@ -35,10 +82,32 @@ export class DataSchema extends Schema {
|
|
|
35
82
|
function _getSchemaValue([, { value }]) {
|
|
36
83
|
return value;
|
|
37
84
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Create a `DataSchema` for a set of properties.
|
|
87
|
+
*
|
|
88
|
+
* *Factory for `DataSchema`.*
|
|
89
|
+
*
|
|
90
|
+
* @param props A named schema for each property of the data object.
|
|
91
|
+
* @returns A `DataSchema` validating data with the given props.
|
|
92
|
+
* @example DATA({ name: STRING, age: NUMBER }) // DataSchema<{ name: string; age: number }>
|
|
93
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/DATA
|
|
94
|
+
*/
|
|
95
|
+
export function DATA(props) {
|
|
96
|
+
return new DataSchema({ props });
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a schema for a valid data object with specified properties, or `null`.
|
|
100
|
+
*
|
|
101
|
+
* *Factory for `NullableSchema`.*
|
|
102
|
+
*
|
|
103
|
+
* @param props A named schema for each property of the data object.
|
|
104
|
+
* @returns A `NullableSchema` wrapping a `DataSchema` with the given props.
|
|
105
|
+
* @example NULLABLE_DATA({ name: STRING }) // NullableSchema<{ name: string }>
|
|
106
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/NULLABLE_DATA
|
|
107
|
+
*/
|
|
108
|
+
export function NULLABLE_DATA(props) {
|
|
109
|
+
return NULLABLE(new DataSchema({ props }));
|
|
110
|
+
}
|
|
42
111
|
export function PARTIAL(source) {
|
|
43
112
|
const props = source instanceof DataSchema ? source.props : source;
|
|
44
113
|
return new DataSchema({
|
|
@@ -48,7 +117,17 @@ export function PARTIAL(source) {
|
|
|
48
117
|
function _optionalProp([, v]) {
|
|
49
118
|
return OPTIONAL(v);
|
|
50
119
|
}
|
|
51
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Create a `DataSchema` that validates a data item, i.e. it has a string or number `.id` identifier property.
|
|
122
|
+
*
|
|
123
|
+
* *Factory for `DataSchema`.*
|
|
124
|
+
*
|
|
125
|
+
* @param id Schema for the item's `id` identifier property.
|
|
126
|
+
* @param schemas The props schemas or an existing `DataSchema` for the rest of the item.
|
|
127
|
+
* @returns A `DataSchema` validating an item with an `id` property plus the given props.
|
|
128
|
+
* @example ITEM(NUMBER, { name: STRING }) // DataSchema<{ id: number; name: string }>
|
|
129
|
+
* @see https://dhoulb.github.io/shelving/schema/DataSchema/ITEM
|
|
130
|
+
*/
|
|
52
131
|
export function ITEM(id, schemas) {
|
|
53
132
|
const props = schemas instanceof DataSchema ? schemas.props : schemas;
|
|
54
133
|
return new DataSchema({
|
package/schema/DateSchema.d.ts
CHANGED
|
@@ -2,9 +2,22 @@ import type { PossibleDate } from "../util/date.js";
|
|
|
2
2
|
import type { Nullish } from "../util/null.js";
|
|
3
3
|
import type { SchemaOptions } from "./Schema.js";
|
|
4
4
|
import { Schema } from "./Schema.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* `type=""` prop for HTML `<input />` tags that are relevant for dates.
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateInputType
|
|
9
|
+
*/
|
|
6
10
|
export type DateInputType = "time" | "date" | "datetime-local";
|
|
7
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Options for `DateSchema`.
|
|
13
|
+
*
|
|
14
|
+
* - `value` — default date used when the input is `undefined`.
|
|
15
|
+
* - `min`/`max` — earliest and latest allowed dates (`null` for no bound).
|
|
16
|
+
* - `input` — HTML `<input />` `type=""` hint for downstream UIs.
|
|
17
|
+
* - `step` — rounding step in milliseconds.
|
|
18
|
+
*
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchemaOptions
|
|
20
|
+
*/
|
|
8
21
|
export interface DateSchemaOptions extends SchemaOptions {
|
|
9
22
|
readonly value?: PossibleDate | undefined;
|
|
10
23
|
readonly min?: Nullish<PossibleDate>;
|
|
@@ -17,18 +30,74 @@ export interface DateSchemaOptions extends SchemaOptions {
|
|
|
17
30
|
*/
|
|
18
31
|
readonly step?: number | undefined;
|
|
19
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Schema that defines a valid date stored as a `YYYY-MM-DD` string, e.g. `2005-09-12`.
|
|
35
|
+
*
|
|
36
|
+
* - Validates an abstract date without a timezone; use `DateTimeSchema` for UTC datetimes and `TimeSchema` for times.
|
|
37
|
+
* - The input is coerced to a `Date`, optionally rounded to `step`, range-checked against `min`/`max`, then stringified.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* const schema = new DateSchema({ min: "2000-01-01" });
|
|
41
|
+
* schema.validate("2005-09-12"); // "2005-09-12"
|
|
42
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema
|
|
43
|
+
*/
|
|
20
44
|
export declare class DateSchema extends Schema<string> {
|
|
45
|
+
/** Default date used when `validate()` is called with an `undefined` value. */
|
|
21
46
|
readonly value: PossibleDate | undefined;
|
|
47
|
+
/** Earliest allowed date, or `undefined` for no minimum. */
|
|
22
48
|
readonly min: Date | undefined;
|
|
49
|
+
/** Latest allowed date, or `undefined` for no maximum. */
|
|
23
50
|
readonly max: Date | undefined;
|
|
51
|
+
/** HTML `<input />` `type=""` hint for downstream UIs. */
|
|
24
52
|
readonly input: DateInputType;
|
|
53
|
+
/** Rounding step in milliseconds, or `undefined` for no rounding. */
|
|
25
54
|
readonly step: number | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new `DateSchema`.
|
|
57
|
+
*
|
|
58
|
+
* @param options Options for the schema (`min`, `max`, `value`, `input`, `step`, plus base `SchemaOptions`).
|
|
59
|
+
*/
|
|
26
60
|
constructor({ one, min, max, value, input, step, ...options }: DateSchemaOptions);
|
|
61
|
+
/**
|
|
62
|
+
* Validate an unknown input value and return a valid date string.
|
|
63
|
+
*
|
|
64
|
+
* @param value The value to validate (defaults to this schema's `value`).
|
|
65
|
+
* @returns The validated date as a `YYYY-MM-DD` string.
|
|
66
|
+
* @throws `string` `"Required"` if the value is empty, `` `Invalid ${one} format` `` if it is not a date, or `` `Minimum…` `` / `` `Maximum…` `` if outside the allowed range.
|
|
67
|
+
* @example schema.validate("2005-09-12") // "2005-09-12"
|
|
68
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/validate
|
|
69
|
+
*/
|
|
27
70
|
validate(value?: unknown): string;
|
|
71
|
+
/**
|
|
72
|
+
* Convert a `Date` object to the string representation used by this schema.
|
|
73
|
+
*
|
|
74
|
+
* @param value The `Date` to convert.
|
|
75
|
+
* @returns The date as a `YYYY-MM-DD` string.
|
|
76
|
+
* @example schema.stringify(new Date("2005-09-12")) // "2005-09-12"
|
|
77
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/stringify
|
|
78
|
+
*/
|
|
28
79
|
stringify(value: Date): string;
|
|
80
|
+
/**
|
|
81
|
+
* Format a validated date string as a human-readable string for display.
|
|
82
|
+
*
|
|
83
|
+
* @param value The validated date string to format.
|
|
84
|
+
* @returns The date formatted for display.
|
|
85
|
+
* @example schema.format("2005-09-12") // "12 Sep 2005"
|
|
86
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/format
|
|
87
|
+
*/
|
|
29
88
|
format(value: string): string;
|
|
30
89
|
}
|
|
31
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Valid date, e.g. `2005-09-12` (required because falsy values are invalid).
|
|
92
|
+
*
|
|
93
|
+
* @example DATE.validate("2005-09-12") // "2005-09-12"
|
|
94
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DATE
|
|
95
|
+
*/
|
|
32
96
|
export declare const DATE: DateSchema;
|
|
33
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* Valid date, e.g. `2005-09-12`, or `null`.
|
|
99
|
+
*
|
|
100
|
+
* @example NULLABLE_DATE.validate(null) // null
|
|
101
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/NULLABLE_DATE
|
|
102
|
+
*/
|
|
34
103
|
export declare const NULLABLE_DATE: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/DateSchema.js
CHANGED
|
@@ -3,11 +3,31 @@ import { formatDate } from "../util/format.js";
|
|
|
3
3
|
import { roundStep } from "../util/number.js";
|
|
4
4
|
import { NULLABLE } from "./NullableSchema.js";
|
|
5
5
|
import { Schema } from "./Schema.js";
|
|
6
|
+
/**
|
|
7
|
+
* Schema that defines a valid date stored as a `YYYY-MM-DD` string, e.g. `2005-09-12`.
|
|
8
|
+
*
|
|
9
|
+
* - Validates an abstract date without a timezone; use `DateTimeSchema` for UTC datetimes and `TimeSchema` for times.
|
|
10
|
+
* - The input is coerced to a `Date`, optionally rounded to `step`, range-checked against `min`/`max`, then stringified.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const schema = new DateSchema({ min: "2000-01-01" });
|
|
14
|
+
* schema.validate("2005-09-12"); // "2005-09-12"
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema
|
|
16
|
+
*/
|
|
6
17
|
export class DateSchema extends Schema {
|
|
18
|
+
/** Earliest allowed date, or `undefined` for no minimum. */
|
|
7
19
|
min;
|
|
20
|
+
/** Latest allowed date, or `undefined` for no maximum. */
|
|
8
21
|
max;
|
|
22
|
+
/** HTML `<input />` `type=""` hint for downstream UIs. */
|
|
9
23
|
input;
|
|
24
|
+
/** Rounding step in milliseconds, or `undefined` for no rounding. */
|
|
10
25
|
step;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new `DateSchema`.
|
|
28
|
+
*
|
|
29
|
+
* @param options Options for the schema (`min`, `max`, `value`, `input`, `step`, plus base `SchemaOptions`).
|
|
30
|
+
*/
|
|
11
31
|
constructor({ one = "date", min, max, value, input = "date", step, ...options }) {
|
|
12
32
|
super({ one, title: "Date", value, ...options });
|
|
13
33
|
this.min = getDate(min);
|
|
@@ -15,6 +35,15 @@ export class DateSchema extends Schema {
|
|
|
15
35
|
this.input = input;
|
|
16
36
|
this.step = step;
|
|
17
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Validate an unknown input value and return a valid date string.
|
|
40
|
+
*
|
|
41
|
+
* @param value The value to validate (defaults to this schema's `value`).
|
|
42
|
+
* @returns The validated date as a `YYYY-MM-DD` string.
|
|
43
|
+
* @throws `string` `"Required"` if the value is empty, `` `Invalid ${one} format` `` if it is not a date, or `` `Minimum…` `` / `` `Maximum…` `` if outside the allowed range.
|
|
44
|
+
* @example schema.validate("2005-09-12") // "2005-09-12"
|
|
45
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/validate
|
|
46
|
+
*/
|
|
18
47
|
validate(value = this.value) {
|
|
19
48
|
const date = getDate(value);
|
|
20
49
|
if (!date)
|
|
@@ -26,14 +55,40 @@ export class DateSchema extends Schema {
|
|
|
26
55
|
throw `Maximum ${this.format(this.stringify(this.max))}`;
|
|
27
56
|
return this.stringify(stepped);
|
|
28
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Convert a `Date` object to the string representation used by this schema.
|
|
60
|
+
*
|
|
61
|
+
* @param value The `Date` to convert.
|
|
62
|
+
* @returns The date as a `YYYY-MM-DD` string.
|
|
63
|
+
* @example schema.stringify(new Date("2005-09-12")) // "2005-09-12"
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/stringify
|
|
65
|
+
*/
|
|
29
66
|
stringify(value) {
|
|
30
67
|
return requireDateString(value);
|
|
31
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Format a validated date string as a human-readable string for display.
|
|
71
|
+
*
|
|
72
|
+
* @param value The validated date string to format.
|
|
73
|
+
* @returns The date formatted for display.
|
|
74
|
+
* @example schema.format("2005-09-12") // "12 Sep 2005"
|
|
75
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/format
|
|
76
|
+
*/
|
|
32
77
|
format(value) {
|
|
33
78
|
return formatDate(value, undefined, this.format);
|
|
34
79
|
}
|
|
35
80
|
}
|
|
36
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Valid date, e.g. `2005-09-12` (required because falsy values are invalid).
|
|
83
|
+
*
|
|
84
|
+
* @example DATE.validate("2005-09-12") // "2005-09-12"
|
|
85
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/DATE
|
|
86
|
+
*/
|
|
37
87
|
export const DATE = new DateSchema({});
|
|
38
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Valid date, e.g. `2005-09-12`, or `null`.
|
|
90
|
+
*
|
|
91
|
+
* @example NULLABLE_DATE.validate(null) // null
|
|
92
|
+
* @see https://dhoulb.github.io/shelving/schema/DateSchema/NULLABLE_DATE
|
|
93
|
+
*/
|
|
39
94
|
export const NULLABLE_DATE = NULLABLE(DATE);
|
|
@@ -1,16 +1,53 @@
|
|
|
1
1
|
import { DateSchema, type DateSchemaOptions } from "./DateSchema.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Schema that defines a valid UTC datetime in ISO 8601 format, e.g. `2005-09-12T18:15:00.000Z`.
|
|
4
|
+
*
|
|
4
5
|
* - The date includes the `Z` suffix to indicate UTC time, this ensures consistent transfer of the date between client and server.
|
|
5
6
|
* - If you wish to define an _abstract_ date without a timezone, e.g. a birthday or anniversary, use `DateSchema` instead.
|
|
6
7
|
* - If you wish to define an _abstract_ time without a timezone, e.g. a daily alarm, use `TimeSchema` instead.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const schema = new DateTimeSchema({});
|
|
11
|
+
* schema.validate("2005-09-12T18:15:00Z"); // "2005-09-12T18:15:00.000Z"
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema
|
|
7
13
|
*/
|
|
8
14
|
export declare class DateTimeSchema extends DateSchema {
|
|
15
|
+
/**
|
|
16
|
+
* Create a new `DateTimeSchema`.
|
|
17
|
+
*
|
|
18
|
+
* @param options Options for the schema (same as `DateSchemaOptions`).
|
|
19
|
+
*/
|
|
9
20
|
constructor({ one, title, input, ...options }: DateSchemaOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Convert a `Date` object to an ISO 8601 UTC string.
|
|
23
|
+
*
|
|
24
|
+
* @param value The `Date` to convert.
|
|
25
|
+
* @returns The datetime as an ISO 8601 string with `Z` suffix.
|
|
26
|
+
* @example schema.stringify(new Date("2005-09-12T18:15:00Z")) // "2005-09-12T18:15:00.000Z"
|
|
27
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/stringify
|
|
28
|
+
*/
|
|
10
29
|
stringify(value: Date): string;
|
|
30
|
+
/**
|
|
31
|
+
* Format a validated datetime string as a human-readable string for display.
|
|
32
|
+
*
|
|
33
|
+
* @param value The validated datetime string to format.
|
|
34
|
+
* @returns The datetime formatted for display.
|
|
35
|
+
* @example schema.format("2005-09-12T18:15:00Z") // "12 Sep 2005, 18:15"
|
|
36
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/format
|
|
37
|
+
*/
|
|
11
38
|
format(value: string): string;
|
|
12
39
|
}
|
|
13
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Valid datetime, e.g. `2005-09-12T08:00:00Z` (required because falsy values are invalid).
|
|
42
|
+
*
|
|
43
|
+
* @example DATETIME.validate("2005-09-12T08:00:00Z") // "2005-09-12T08:00:00.000Z"
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DATETIME
|
|
45
|
+
*/
|
|
14
46
|
export declare const DATETIME: DateTimeSchema;
|
|
15
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Valid datetime, e.g. `2005-09-12T21:30:00Z`, or `null`.
|
|
49
|
+
*
|
|
50
|
+
* @example NULLABLE_DATETIME.validate(null) // null
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/NULLABLE_DATETIME
|
|
52
|
+
*/
|
|
16
53
|
export declare const NULLABLE_DATETIME: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/DateTimeSchema.js
CHANGED
|
@@ -2,23 +2,60 @@ import { formatDateTime } from "../util/format.js";
|
|
|
2
2
|
import { DateSchema } from "./DateSchema.js";
|
|
3
3
|
import { NULLABLE } from "./NullableSchema.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Schema that defines a valid UTC datetime in ISO 8601 format, e.g. `2005-09-12T18:15:00.000Z`.
|
|
6
|
+
*
|
|
6
7
|
* - The date includes the `Z` suffix to indicate UTC time, this ensures consistent transfer of the date between client and server.
|
|
7
8
|
* - If you wish to define an _abstract_ date without a timezone, e.g. a birthday or anniversary, use `DateSchema` instead.
|
|
8
9
|
* - If you wish to define an _abstract_ time without a timezone, e.g. a daily alarm, use `TimeSchema` instead.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const schema = new DateTimeSchema({});
|
|
13
|
+
* schema.validate("2005-09-12T18:15:00Z"); // "2005-09-12T18:15:00.000Z"
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema
|
|
9
15
|
*/
|
|
10
16
|
export class DateTimeSchema extends DateSchema {
|
|
17
|
+
/**
|
|
18
|
+
* Create a new `DateTimeSchema`.
|
|
19
|
+
*
|
|
20
|
+
* @param options Options for the schema (same as `DateSchemaOptions`).
|
|
21
|
+
*/
|
|
11
22
|
constructor({ one = "time", title = "Time", input = "datetime-local", ...options }) {
|
|
12
23
|
super({ one, title, input, ...options });
|
|
13
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert a `Date` object to an ISO 8601 UTC string.
|
|
27
|
+
*
|
|
28
|
+
* @param value The `Date` to convert.
|
|
29
|
+
* @returns The datetime as an ISO 8601 string with `Z` suffix.
|
|
30
|
+
* @example schema.stringify(new Date("2005-09-12T18:15:00Z")) // "2005-09-12T18:15:00.000Z"
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/stringify
|
|
32
|
+
*/
|
|
14
33
|
stringify(value) {
|
|
15
34
|
return value.toISOString();
|
|
16
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Format a validated datetime string as a human-readable string for display.
|
|
38
|
+
*
|
|
39
|
+
* @param value The validated datetime string to format.
|
|
40
|
+
* @returns The datetime formatted for display.
|
|
41
|
+
* @example schema.format("2005-09-12T18:15:00Z") // "12 Sep 2005, 18:15"
|
|
42
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/format
|
|
43
|
+
*/
|
|
17
44
|
format(value) {
|
|
18
45
|
return formatDateTime(value, undefined, this.format);
|
|
19
46
|
}
|
|
20
47
|
}
|
|
21
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Valid datetime, e.g. `2005-09-12T08:00:00Z` (required because falsy values are invalid).
|
|
50
|
+
*
|
|
51
|
+
* @example DATETIME.validate("2005-09-12T08:00:00Z") // "2005-09-12T08:00:00.000Z"
|
|
52
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DATETIME
|
|
53
|
+
*/
|
|
22
54
|
export const DATETIME = new DateTimeSchema({});
|
|
23
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Valid datetime, e.g. `2005-09-12T21:30:00Z`, or `null`.
|
|
57
|
+
*
|
|
58
|
+
* @example NULLABLE_DATETIME.validate(null) // null
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/NULLABLE_DATETIME
|
|
60
|
+
*/
|
|
24
61
|
export const NULLABLE_DATETIME = NULLABLE(DATETIME);
|
|
@@ -1,22 +1,72 @@
|
|
|
1
1
|
import type { ImmutableDictionary } from "../util/dictionary.js";
|
|
2
2
|
import type { SchemaOptions } from "./Schema.js";
|
|
3
3
|
import { Schema } from "./Schema.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Options for `DictionarySchema`.
|
|
6
|
+
*
|
|
7
|
+
* - `items` — schema every entry value in the dictionary must conform to.
|
|
8
|
+
* - `value` — default dictionary used when the input is `undefined`.
|
|
9
|
+
* - `min`/`max` — minimum and maximum number of entries.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchemaOptions
|
|
12
|
+
*/
|
|
5
13
|
export interface DictionarySchemaOptions<T> extends SchemaOptions {
|
|
6
14
|
readonly items: Schema<T>;
|
|
7
15
|
readonly value?: ImmutableDictionary | undefined;
|
|
8
16
|
readonly min?: number | undefined;
|
|
9
17
|
readonly max?: number | undefined;
|
|
10
18
|
}
|
|
11
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Schema that validates a dictionary object whose entries all share the same value schema and have string keys.
|
|
21
|
+
*
|
|
22
|
+
* - Every entry value is validated by the `items` schema.
|
|
23
|
+
* - Entry count is checked against `min` and `max`.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const schema = new DictionarySchema({ items: NUMBER });
|
|
27
|
+
* schema.validate({ a: 1, b: 2 }); // { a: 1, b: 2 }
|
|
28
|
+
*
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema
|
|
30
|
+
*/
|
|
12
31
|
export declare class DictionarySchema<T> extends Schema<ImmutableDictionary<T>> {
|
|
13
32
|
readonly value: ImmutableDictionary<T>;
|
|
14
33
|
readonly items: Schema<T>;
|
|
15
34
|
readonly min: number;
|
|
16
35
|
readonly max: number;
|
|
36
|
+
/**
|
|
37
|
+
* Create a new `DictionarySchema`.
|
|
38
|
+
*
|
|
39
|
+
* @param options Options for the schema, including the `items` schema and `min`/`max` entry counts.
|
|
40
|
+
*/
|
|
17
41
|
constructor({ items, one, many, placeholder, min, max, title, value, ...options }: DictionarySchemaOptions<T>);
|
|
42
|
+
/**
|
|
43
|
+
* Validate an unknown value as a dictionary whose entries all match the `items` schema.
|
|
44
|
+
*
|
|
45
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
46
|
+
* @returns The valid dictionary with each entry value validated by the `items` schema.
|
|
47
|
+
* @throws `string` `"Must be object"` if not a dictionary, `"Required"` or `` `Minimum ${min} ${many}` `` if too few entries, or `` `Maximum ${max} ${many}` `` if too many.
|
|
48
|
+
* @example schema.validate({ a: 1, b: 2 }) // { a: 1, b: 2 }
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/validate
|
|
50
|
+
*/
|
|
18
51
|
validate(unsafeValue?: unknown): ImmutableDictionary<T>;
|
|
52
|
+
/**
|
|
53
|
+
* Format a validated dictionary as a string for display.
|
|
54
|
+
*
|
|
55
|
+
* @param dict The valid dictionary to format.
|
|
56
|
+
* @returns The dictionary's values formatted as a human-readable string.
|
|
57
|
+
* @example schema.format({ a: 1, b: 2 }) // "1, 2"
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/format
|
|
59
|
+
*/
|
|
19
60
|
format(dict: ImmutableDictionary<T>): string;
|
|
20
61
|
}
|
|
21
|
-
/**
|
|
22
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Create a schema for a valid dictionary object with specified entry values.
|
|
64
|
+
*
|
|
65
|
+
* *Factory for `DictionarySchema`.*
|
|
66
|
+
*
|
|
67
|
+
* @param items Schema every entry value in the dictionary must conform to.
|
|
68
|
+
* @returns A `DictionarySchema` validating dictionaries of the given item type.
|
|
69
|
+
* @example DICTIONARY(NUMBER) // DictionarySchema<number>
|
|
70
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DICTIONARY
|
|
71
|
+
*/
|
|
72
|
+
export declare function DICTIONARY<T>(items: Schema<T>): DictionarySchema<T>;
|
|
@@ -2,17 +2,42 @@ import { isDictionary } from "../util/dictionary.js";
|
|
|
2
2
|
import { formatArray } from "../util/format.js";
|
|
3
3
|
import { validateDictionary } from "../util/validate.js";
|
|
4
4
|
import { Schema } from "./Schema.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Schema that validates a dictionary object whose entries all share the same value schema and have string keys.
|
|
7
|
+
*
|
|
8
|
+
* - Every entry value is validated by the `items` schema.
|
|
9
|
+
* - Entry count is checked against `min` and `max`.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const schema = new DictionarySchema({ items: NUMBER });
|
|
13
|
+
* schema.validate({ a: 1, b: 2 }); // { a: 1, b: 2 }
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema
|
|
16
|
+
*/
|
|
6
17
|
export class DictionarySchema extends Schema {
|
|
7
18
|
items;
|
|
8
19
|
min;
|
|
9
20
|
max;
|
|
21
|
+
/**
|
|
22
|
+
* Create a new `DictionarySchema`.
|
|
23
|
+
*
|
|
24
|
+
* @param options Options for the schema, including the `items` schema and `min`/`max` entry counts.
|
|
25
|
+
*/
|
|
10
26
|
constructor({ items, one = items.one, many = items.many, placeholder = `No ${many}`, min = 0, max = Number.POSITIVE_INFINITY, title = "Items", value = {}, ...options }) {
|
|
11
27
|
super({ one, many, title, placeholder, value, ...options });
|
|
12
28
|
this.items = items;
|
|
13
29
|
this.min = min;
|
|
14
30
|
this.max = max;
|
|
15
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate an unknown value as a dictionary whose entries all match the `items` schema.
|
|
34
|
+
*
|
|
35
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
36
|
+
* @returns The valid dictionary with each entry value validated by the `items` schema.
|
|
37
|
+
* @throws `string` `"Must be object"` if not a dictionary, `"Required"` or `` `Minimum ${min} ${many}` `` if too few entries, or `` `Maximum ${max} ${many}` `` if too many.
|
|
38
|
+
* @example schema.validate({ a: 1, b: 2 }) // { a: 1, b: 2 }
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/validate
|
|
40
|
+
*/
|
|
16
41
|
validate(unsafeValue = this.value) {
|
|
17
42
|
if (!isDictionary(unsafeValue))
|
|
18
43
|
throw "Must be object";
|
|
@@ -24,9 +49,28 @@ export class DictionarySchema extends Schema {
|
|
|
24
49
|
throw `Maximum ${this.max} ${this.many}`;
|
|
25
50
|
return validDictionary;
|
|
26
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Format a validated dictionary as a string for display.
|
|
54
|
+
*
|
|
55
|
+
* @param dict The valid dictionary to format.
|
|
56
|
+
* @returns The dictionary's values formatted as a human-readable string.
|
|
57
|
+
* @example schema.format({ a: 1, b: 2 }) // "1, 2"
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/format
|
|
59
|
+
*/
|
|
27
60
|
format(dict) {
|
|
28
61
|
return formatArray(Object.values(dict).map(v => this.items.format(v)), undefined, this.format);
|
|
29
62
|
}
|
|
30
63
|
}
|
|
31
|
-
/**
|
|
32
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Create a schema for a valid dictionary object with specified entry values.
|
|
66
|
+
*
|
|
67
|
+
* *Factory for `DictionarySchema`.*
|
|
68
|
+
*
|
|
69
|
+
* @param items Schema every entry value in the dictionary must conform to.
|
|
70
|
+
* @returns A `DictionarySchema` validating dictionaries of the given item type.
|
|
71
|
+
* @example DICTIONARY(NUMBER) // DictionarySchema<number>
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DICTIONARY
|
|
73
|
+
*/
|
|
74
|
+
export function DICTIONARY(items) {
|
|
75
|
+
return new DictionarySchema({ items });
|
|
76
|
+
}
|
package/schema/EmailSchema.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StringSchemaOptions } from "./StringSchema.js";
|
|
2
2
|
import { StringSchema } from "./StringSchema.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Schema that defines a valid email address.
|
|
5
5
|
*
|
|
6
6
|
* - Falsy values are converted to `""` empty string.
|
|
7
7
|
* - Total length must be 254 characters or fewer (in SMTP email is encoded with `<` and `>` to make 256 characters).
|
|
@@ -16,12 +16,43 @@ import { StringSchema } from "./StringSchema.js";
|
|
|
16
16
|
* - Limited to `[a-z0-9]` with mid-word hyphens only.
|
|
17
17
|
* - Up to 10 segments of up to 63 characters each, separated by `.`
|
|
18
18
|
* - TLD is a segment of 2-63 characters, possibly in `xn--` international format.
|
|
19
|
+
*
|
|
20
|
+
* @example EMAIL.validate("Test@Test.com"); // Returns "test@test.com"
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/EmailSchema
|
|
19
22
|
*/
|
|
20
23
|
export declare class EmailSchema extends StringSchema {
|
|
24
|
+
/**
|
|
25
|
+
* Create a new `EmailSchema`.
|
|
26
|
+
*
|
|
27
|
+
* @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for emails).
|
|
28
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"email address"`).
|
|
29
|
+
* @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Email"`).
|
|
30
|
+
*/
|
|
21
31
|
constructor({ one, title, ...options }: Omit<StringSchemaOptions, "type" | "min" | "max" | "match" | "rows">);
|
|
32
|
+
/**
|
|
33
|
+
* Sanitize the string into a valid email address.
|
|
34
|
+
*
|
|
35
|
+
* - Strips all whitespace (email addresses never contain whitespace).
|
|
36
|
+
* - Lowercases the result (RFC says addresses should be case-insensitive).
|
|
37
|
+
*
|
|
38
|
+
* @param str String to sanitize.
|
|
39
|
+
* @returns The sanitized, lowercased email address.
|
|
40
|
+
* @example EMAIL.sanitize(" Test@Test.com "); // Returns "test@test.com"
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/EmailSchema/sanitize
|
|
42
|
+
*/
|
|
22
43
|
sanitize(str: string): string;
|
|
23
44
|
}
|
|
24
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Valid email, e.g. `test@test.com`
|
|
47
|
+
*
|
|
48
|
+
* @example EMAIL.validate("test@test.com"); // Returns "test@test.com"
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/EMAIL
|
|
50
|
+
*/
|
|
25
51
|
export declare const EMAIL: EmailSchema;
|
|
26
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Valid optional email, e.g. `test@test.com`, or `null`
|
|
54
|
+
*
|
|
55
|
+
* @example NULLABLE_EMAIL.validate(null); // Returns null
|
|
56
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/NULLABLE_EMAIL
|
|
57
|
+
*/
|
|
27
58
|
export declare const NULLABLE_EMAIL: import("./NullableSchema.js").NullableSchema<string>;
|