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/EmailSchema.js
CHANGED
|
@@ -3,7 +3,7 @@ import { NULLABLE } from "./NullableSchema.js";
|
|
|
3
3
|
import { StringSchema } from "./StringSchema.js";
|
|
4
4
|
const R_MATCH = /^[a-z0-9](?:[a-zA-Z0-9._+-]{0,62}[a-zA-Z0-9])?@(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.){1,3}(?:[a-z]{2,63}|xn--[a-z0-9-]{0,58}[a-z0-9])$/;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Schema that defines a valid email address.
|
|
7
7
|
*
|
|
8
8
|
* - Falsy values are converted to `""` empty string.
|
|
9
9
|
* - Total length must be 254 characters or fewer (in SMTP email is encoded with `<` and `>` to make 256 characters).
|
|
@@ -18,8 +18,18 @@ const R_MATCH = /^[a-z0-9](?:[a-zA-Z0-9._+-]{0,62}[a-zA-Z0-9])?@(?:[a-z0-9](?:[a
|
|
|
18
18
|
* - Limited to `[a-z0-9]` with mid-word hyphens only.
|
|
19
19
|
* - Up to 10 segments of up to 63 characters each, separated by `.`
|
|
20
20
|
* - TLD is a segment of 2-63 characters, possibly in `xn--` international format.
|
|
21
|
+
*
|
|
22
|
+
* @example EMAIL.validate("Test@Test.com"); // Returns "test@test.com"
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/EmailSchema
|
|
21
24
|
*/
|
|
22
25
|
export class EmailSchema extends StringSchema {
|
|
26
|
+
/**
|
|
27
|
+
* Create a new `EmailSchema`.
|
|
28
|
+
*
|
|
29
|
+
* @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for emails).
|
|
30
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"email address"`).
|
|
31
|
+
* @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Email"`).
|
|
32
|
+
*/
|
|
23
33
|
constructor({ one = "email address", title = "Email", ...options }) {
|
|
24
34
|
super({
|
|
25
35
|
one,
|
|
@@ -32,12 +42,33 @@ export class EmailSchema extends StringSchema {
|
|
|
32
42
|
match: R_MATCH,
|
|
33
43
|
});
|
|
34
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Sanitize the string into a valid email address.
|
|
47
|
+
*
|
|
48
|
+
* - Strips all whitespace (email addresses never contain whitespace).
|
|
49
|
+
* - Lowercases the result (RFC says addresses should be case-insensitive).
|
|
50
|
+
*
|
|
51
|
+
* @param str String to sanitize.
|
|
52
|
+
* @returns The sanitized, lowercased email address.
|
|
53
|
+
* @example EMAIL.sanitize(" Test@Test.com "); // Returns "test@test.com"
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/EmailSchema/sanitize
|
|
55
|
+
*/
|
|
35
56
|
sanitize(str) {
|
|
36
57
|
// Email addresses never contain whitespace, so strip it entirely, then lowercase (RFC says addresses should be case-insensitive).
|
|
37
58
|
return sanitizeWord(str).toLowerCase();
|
|
38
59
|
}
|
|
39
60
|
}
|
|
40
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Valid email, e.g. `test@test.com`
|
|
63
|
+
*
|
|
64
|
+
* @example EMAIL.validate("test@test.com"); // Returns "test@test.com"
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/EMAIL
|
|
66
|
+
*/
|
|
41
67
|
export const EMAIL = new EmailSchema({});
|
|
42
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Valid optional email, e.g. `test@test.com`, or `null`
|
|
70
|
+
*
|
|
71
|
+
* @example NULLABLE_EMAIL.validate(null); // Returns null
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/schema/EmailSchema/NULLABLE_EMAIL
|
|
73
|
+
*/
|
|
43
74
|
export const NULLABLE_EMAIL = NULLABLE(EMAIL);
|
package/schema/EntitySchema.d.ts
CHANGED
|
@@ -1,17 +1,58 @@
|
|
|
1
1
|
import { type ImmutableArray } from "../util/array.js";
|
|
2
2
|
import { type Entity } from "../util/entity.js";
|
|
3
3
|
import { StringSchema, type StringSchemaOptions } from "./StringSchema.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Options for `EntitySchema`.
|
|
6
|
+
*
|
|
7
|
+
* - `types` — restrict the allowed entity types; any other type is rejected.
|
|
8
|
+
*
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/EntitySchemaOptions
|
|
10
|
+
*/
|
|
5
11
|
export interface EntitySchemaOptions<T extends string> extends StringSchemaOptions {
|
|
6
12
|
readonly types?: ImmutableArray<T> | undefined;
|
|
7
13
|
}
|
|
8
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Schema that validates an `Entity` string combining a type and ID, e.g. `challenge:a1b2c3`.
|
|
16
|
+
*
|
|
17
|
+
* - The input must contain both a type and an ID separated by `:`, otherwise it is rejected.
|
|
18
|
+
* - When `types` is set, the entity's type must be one of the allowed types.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const schema = new EntitySchema({ types: ["challenge"] });
|
|
22
|
+
* schema.validate("challenge:a1b2c3"); // "challenge:a1b2c3"
|
|
23
|
+
*
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/EntitySchema
|
|
25
|
+
*/
|
|
9
26
|
export declare class EntitySchema<T extends string> extends StringSchema {
|
|
10
27
|
readonly types: ImmutableArray<T> | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Create a new `EntitySchema`.
|
|
30
|
+
*
|
|
31
|
+
* @param options Options for the schema, including an optional `types` allow-list.
|
|
32
|
+
*/
|
|
11
33
|
constructor({ one, title, types, ...options }: EntitySchemaOptions<T>);
|
|
34
|
+
/**
|
|
35
|
+
* Validate an unknown value as an `Entity` string with a valid type and ID.
|
|
36
|
+
*
|
|
37
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
38
|
+
* @returns The valid `Entity` string.
|
|
39
|
+
* @throws `string` `"Must be entity"` if the value lacks a type and ID, or `"Invalid entity type"` if its type is not in the allowed `types`. Also throws any `string` from the underlying `StringSchema`.
|
|
40
|
+
* @example schema.validate("challenge:a1b2c3") // "challenge:a1b2c3"
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/EntitySchema/validate
|
|
42
|
+
*/
|
|
12
43
|
validate(unsafeValue?: unknown): Entity<T>;
|
|
13
44
|
}
|
|
14
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Valid entity, e.g. `challenge:a1b2c3`
|
|
47
|
+
*
|
|
48
|
+
* @example ENTITY.validate("challenge:a1b2c3") // "challenge:a1b2c3"
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/ENTITY
|
|
50
|
+
*/
|
|
15
51
|
export declare const ENTITY: EntitySchema<string>;
|
|
16
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Valid optional entity, e.g. `challenge:a1b2c3`, or `null`
|
|
54
|
+
*
|
|
55
|
+
* @example NULLABLE_ENTITY.validate("") // null
|
|
56
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/NULLABLE_ENTITY
|
|
57
|
+
*/
|
|
17
58
|
export declare const NULLABLE_ENTITY: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/EntitySchema.js
CHANGED
|
@@ -2,13 +2,38 @@ import { isArrayItem } from "../util/array.js";
|
|
|
2
2
|
import { getEntity } from "../util/entity.js";
|
|
3
3
|
import { NULLABLE } from "./NullableSchema.js";
|
|
4
4
|
import { StringSchema } from "./StringSchema.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Schema that validates an `Entity` string combining a type and ID, e.g. `challenge:a1b2c3`.
|
|
7
|
+
*
|
|
8
|
+
* - The input must contain both a type and an ID separated by `:`, otherwise it is rejected.
|
|
9
|
+
* - When `types` is set, the entity's type must be one of the allowed types.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const schema = new EntitySchema({ types: ["challenge"] });
|
|
13
|
+
* schema.validate("challenge:a1b2c3"); // "challenge:a1b2c3"
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/EntitySchema
|
|
16
|
+
*/
|
|
6
17
|
export class EntitySchema extends StringSchema {
|
|
7
18
|
types;
|
|
19
|
+
/**
|
|
20
|
+
* Create a new `EntitySchema`.
|
|
21
|
+
*
|
|
22
|
+
* @param options Options for the schema, including an optional `types` allow-list.
|
|
23
|
+
*/
|
|
8
24
|
constructor({ one = "entity", title = "Entity", types, ...options }) {
|
|
9
25
|
super({ one, title, ...options });
|
|
10
26
|
this.types = types;
|
|
11
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate an unknown value as an `Entity` string with a valid type and ID.
|
|
30
|
+
*
|
|
31
|
+
* @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
|
|
32
|
+
* @returns The valid `Entity` string.
|
|
33
|
+
* @throws `string` `"Must be entity"` if the value lacks a type and ID, or `"Invalid entity type"` if its type is not in the allowed `types`. Also throws any `string` from the underlying `StringSchema`.
|
|
34
|
+
* @example schema.validate("challenge:a1b2c3") // "challenge:a1b2c3"
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/EntitySchema/validate
|
|
36
|
+
*/
|
|
12
37
|
validate(unsafeValue = this.value) {
|
|
13
38
|
const entity = super.validate(unsafeValue);
|
|
14
39
|
const [type] = getEntity(entity);
|
|
@@ -19,7 +44,17 @@ export class EntitySchema extends StringSchema {
|
|
|
19
44
|
return entity;
|
|
20
45
|
}
|
|
21
46
|
}
|
|
22
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Valid entity, e.g. `challenge:a1b2c3`
|
|
49
|
+
*
|
|
50
|
+
* @example ENTITY.validate("challenge:a1b2c3") // "challenge:a1b2c3"
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/ENTITY
|
|
52
|
+
*/
|
|
23
53
|
export const ENTITY = new EntitySchema({});
|
|
24
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Valid optional entity, e.g. `challenge:a1b2c3`, or `null`
|
|
56
|
+
*
|
|
57
|
+
* @example NULLABLE_ENTITY.validate("") // null
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/schema/EntitySchema/NULLABLE_ENTITY
|
|
59
|
+
*/
|
|
25
60
|
export const NULLABLE_ENTITY = NULLABLE(ENTITY);
|
package/schema/FileSchema.d.ts
CHANGED
|
@@ -1,16 +1,57 @@
|
|
|
1
1
|
import type { FileTypes } from "../util/file.js";
|
|
2
2
|
import { StringSchema, type StringSchemaOptions } from "./StringSchema.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Allowed options for `FileSchema`.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FileSchemaOptions
|
|
7
|
+
*/
|
|
4
8
|
export interface FileSchemaOptions extends StringSchemaOptions {
|
|
9
|
+
/** Set of allowed file extensions; when set, the file name's extension must be one of these. */
|
|
5
10
|
readonly types?: FileTypes | undefined;
|
|
6
11
|
}
|
|
7
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Schema that validates a file name matching one or more extensions.
|
|
14
|
+
*
|
|
15
|
+
* - Requires the file name to have an extension.
|
|
16
|
+
* - When `types` is set, the extension must be one of the allowed `FileTypes`.
|
|
17
|
+
*
|
|
18
|
+
* @example FILE.validate("photo.jpg"); // Returns "photo.jpg"
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FileSchema
|
|
20
|
+
*/
|
|
8
21
|
export declare class FileSchema extends StringSchema {
|
|
22
|
+
/** Set of allowed file extensions; when set, the file name's extension must be one of these. */
|
|
9
23
|
readonly types: FileTypes | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Create a new `FileSchema`.
|
|
26
|
+
*
|
|
27
|
+
* @param options Options for the schema (inherits all `StringSchema` options plus `types`).
|
|
28
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"file"`).
|
|
29
|
+
* @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"File"`).
|
|
30
|
+
* @param options.types Set of allowed file extensions; when set, the extension must be one of these.
|
|
31
|
+
*/
|
|
10
32
|
constructor({ one, title, types, ...options }: FileSchemaOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Validate an unknown value as a file name with a valid extension.
|
|
35
|
+
*
|
|
36
|
+
* @param unsafeValue Value to validate (defaults to this schema's `value`).
|
|
37
|
+
* @returns The validated file name.
|
|
38
|
+
* @throws `string` `` `Must have extension` `` if the file name has no extension, or `` `Invalid extension` `` if its extension isn't in `types`. Also throws the `string` messages from `StringSchema.validate()`.
|
|
39
|
+
* @example FILE.validate("photo.jpg"); // Returns "photo.jpg"
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FileSchema/validate
|
|
41
|
+
*/
|
|
11
42
|
validate(unsafeValue?: unknown): string;
|
|
12
43
|
}
|
|
13
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Valid file, e.g. `file.txt`
|
|
46
|
+
*
|
|
47
|
+
* @example FILE.validate("file.txt"); // Returns "file.txt"
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FILE
|
|
49
|
+
*/
|
|
14
50
|
export declare const FILE: FileSchema;
|
|
15
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Valid optional file, e.g. `file.txt`, or `null`
|
|
53
|
+
*
|
|
54
|
+
* @example NULLABLE_FILE.validate(null); // Returns null
|
|
55
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/NULLABLE_FILE
|
|
56
|
+
*/
|
|
16
57
|
export declare const NULLABLE_FILE: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/FileSchema.js
CHANGED
|
@@ -2,13 +2,39 @@ import { getFileExtension } from "../util/file.js";
|
|
|
2
2
|
import { isProp } from "../util/object.js";
|
|
3
3
|
import { NULLABLE } from "./NullableSchema.js";
|
|
4
4
|
import { StringSchema } from "./StringSchema.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Schema that validates a file name matching one or more extensions.
|
|
7
|
+
*
|
|
8
|
+
* - Requires the file name to have an extension.
|
|
9
|
+
* - When `types` is set, the extension must be one of the allowed `FileTypes`.
|
|
10
|
+
*
|
|
11
|
+
* @example FILE.validate("photo.jpg"); // Returns "photo.jpg"
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FileSchema
|
|
13
|
+
*/
|
|
6
14
|
export class FileSchema extends StringSchema {
|
|
15
|
+
/** Set of allowed file extensions; when set, the file name's extension must be one of these. */
|
|
7
16
|
types;
|
|
17
|
+
/**
|
|
18
|
+
* Create a new `FileSchema`.
|
|
19
|
+
*
|
|
20
|
+
* @param options Options for the schema (inherits all `StringSchema` options plus `types`).
|
|
21
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"file"`).
|
|
22
|
+
* @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"File"`).
|
|
23
|
+
* @param options.types Set of allowed file extensions; when set, the extension must be one of these.
|
|
24
|
+
*/
|
|
8
25
|
constructor({ one = "file", title = "File", types, ...options }) {
|
|
9
26
|
super({ one, title, ...options });
|
|
10
27
|
this.types = types;
|
|
11
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate an unknown value as a file name with a valid extension.
|
|
31
|
+
*
|
|
32
|
+
* @param unsafeValue Value to validate (defaults to this schema's `value`).
|
|
33
|
+
* @returns The validated file name.
|
|
34
|
+
* @throws `string` `` `Must have extension` `` if the file name has no extension, or `` `Invalid extension` `` if its extension isn't in `types`. Also throws the `string` messages from `StringSchema.validate()`.
|
|
35
|
+
* @example FILE.validate("photo.jpg"); // Returns "photo.jpg"
|
|
36
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FileSchema/validate
|
|
37
|
+
*/
|
|
12
38
|
validate(unsafeValue = this.value) {
|
|
13
39
|
const path = super.validate(unsafeValue);
|
|
14
40
|
const extension = getFileExtension(path);
|
|
@@ -19,7 +45,17 @@ export class FileSchema extends StringSchema {
|
|
|
19
45
|
return path;
|
|
20
46
|
}
|
|
21
47
|
}
|
|
22
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Valid file, e.g. `file.txt`
|
|
50
|
+
*
|
|
51
|
+
* @example FILE.validate("file.txt"); // Returns "file.txt"
|
|
52
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/FILE
|
|
53
|
+
*/
|
|
23
54
|
export const FILE = new FileSchema({});
|
|
24
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Valid optional file, e.g. `file.txt`, or `null`
|
|
57
|
+
*
|
|
58
|
+
* @example NULLABLE_FILE.validate(null); // Returns null
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/schema/FileSchema/NULLABLE_FILE
|
|
60
|
+
*/
|
|
25
61
|
export const NULLABLE_FILE = NULLABLE(FILE);
|
package/schema/KeySchema.d.ts
CHANGED
|
@@ -1,17 +1,46 @@
|
|
|
1
1
|
import { StringSchema, type StringSchemaOptions } from "./StringSchema.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Schema that validates a database key string, stripping any non-alphanumeric characters.
|
|
4
4
|
*
|
|
5
5
|
* - Characters that are not a-z, A-Z, 0-9 are removed.
|
|
6
6
|
* - Default minimum key length is 1 character.
|
|
7
7
|
* - Default maximum key length is 32 characters.
|
|
8
8
|
* - 32 characters is enough for UUIDs, as the 4 `-` hyphens are removed.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const schema = new KeySchema({});
|
|
12
|
+
* schema.validate("a1b2-c3d4"); // "a1b2c3d4"
|
|
13
|
+
*
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/KeySchema
|
|
9
15
|
*/
|
|
10
16
|
export declare class KeySchema extends StringSchema {
|
|
17
|
+
/**
|
|
18
|
+
* Create a new `KeySchema`.
|
|
19
|
+
*
|
|
20
|
+
* @param options Options for the schema (defaults `min` to `1` and `max` to `32`).
|
|
21
|
+
*/
|
|
11
22
|
constructor({ one, title, min, max, ...options }: StringSchemaOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize the string by removing all characters that are not a-z, A-Z, or 0-9.
|
|
25
|
+
*
|
|
26
|
+
* @param str String to sanitize.
|
|
27
|
+
* @returns The sanitized key with non-alphanumeric characters removed.
|
|
28
|
+
* @example schema.sanitize("a1b2-c3d4") // "a1b2c3d4"
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/KeySchema/sanitize
|
|
30
|
+
*/
|
|
12
31
|
sanitize(str: string): string;
|
|
13
32
|
}
|
|
14
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Valid database key.
|
|
35
|
+
*
|
|
36
|
+
* @example KEY.validate("a1b2c3") // "a1b2c3"
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/KEY
|
|
38
|
+
*/
|
|
15
39
|
export declare const KEY: KeySchema;
|
|
16
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Valid optional database key, or `null`.
|
|
42
|
+
*
|
|
43
|
+
* @example NULLABLE_KEY.validate("") // null
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/NULLABLE_KEY
|
|
45
|
+
*/
|
|
17
46
|
export declare const NULLABLE_KEY: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/KeySchema.js
CHANGED
|
@@ -2,22 +2,51 @@ import { NULLABLE } from "./NullableSchema.js";
|
|
|
2
2
|
import { StringSchema } from "./StringSchema.js";
|
|
3
3
|
const R_NOT_CHAR = /[^a-zA-Z0-9]/g;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Schema that validates a database key string, stripping any non-alphanumeric characters.
|
|
6
6
|
*
|
|
7
7
|
* - Characters that are not a-z, A-Z, 0-9 are removed.
|
|
8
8
|
* - Default minimum key length is 1 character.
|
|
9
9
|
* - Default maximum key length is 32 characters.
|
|
10
10
|
* - 32 characters is enough for UUIDs, as the 4 `-` hyphens are removed.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const schema = new KeySchema({});
|
|
14
|
+
* schema.validate("a1b2-c3d4"); // "a1b2c3d4"
|
|
15
|
+
*
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/KeySchema
|
|
11
17
|
*/
|
|
12
18
|
export class KeySchema extends StringSchema {
|
|
19
|
+
/**
|
|
20
|
+
* Create a new `KeySchema`.
|
|
21
|
+
*
|
|
22
|
+
* @param options Options for the schema (defaults `min` to `1` and `max` to `32`).
|
|
23
|
+
*/
|
|
13
24
|
constructor({ one = "key", title = "Key", min = 1, max = 32, ...options }) {
|
|
14
25
|
super({ one, title, min, max, ...options });
|
|
15
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Sanitize the string by removing all characters that are not a-z, A-Z, or 0-9.
|
|
29
|
+
*
|
|
30
|
+
* @param str String to sanitize.
|
|
31
|
+
* @returns The sanitized key with non-alphanumeric characters removed.
|
|
32
|
+
* @example schema.sanitize("a1b2-c3d4") // "a1b2c3d4"
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/KeySchema/sanitize
|
|
34
|
+
*/
|
|
16
35
|
sanitize(str) {
|
|
17
36
|
return str.replace(R_NOT_CHAR, "");
|
|
18
37
|
}
|
|
19
38
|
}
|
|
20
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Valid database key.
|
|
41
|
+
*
|
|
42
|
+
* @example KEY.validate("a1b2c3") // "a1b2c3"
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/KEY
|
|
44
|
+
*/
|
|
21
45
|
export const KEY = new KeySchema({ title: "ID" });
|
|
22
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Valid optional database key, or `null`.
|
|
48
|
+
*
|
|
49
|
+
* @example NULLABLE_KEY.validate("") // null
|
|
50
|
+
* @see https://dhoulb.github.io/shelving/schema/KeySchema/NULLABLE_KEY
|
|
51
|
+
*/
|
|
23
52
|
export const NULLABLE_KEY = NULLABLE(KEY);
|
|
@@ -1,16 +1,76 @@
|
|
|
1
1
|
import type { Schema } from "./Schema.js";
|
|
2
2
|
import { ThroughSchema, type ThroughSchemaOptions } from "./ThroughSchema.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Allowed options for `NullableSchema`.
|
|
5
|
+
*
|
|
6
|
+
* - `value` — default value used when the input is `undefined` (defaults to `null`).
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchemaOptions
|
|
9
|
+
*/
|
|
4
10
|
export interface NullableSchemaOptions<T> extends ThroughSchemaOptions<T | null> {
|
|
5
11
|
/** Default value (defaults to `null`). */
|
|
6
12
|
readonly value?: T | null;
|
|
7
13
|
}
|
|
8
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Schema that wraps a source schema and additionally allows `null`.
|
|
16
|
+
*
|
|
17
|
+
* - Empty-ish inputs (`null`, `undefined`, `""`, `NaN`) validate to `null` instead of being passed to the source schema.
|
|
18
|
+
* - Any other value is delegated to the source schema for validation.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const schema = new NullableSchema({ source: STRING });
|
|
22
|
+
* schema.validate(""); // Returns null
|
|
23
|
+
* schema.validate("abc"); // Returns "abc"
|
|
24
|
+
*
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchema
|
|
26
|
+
*/
|
|
9
27
|
export declare class NullableSchema<T> extends ThroughSchema<T | null> {
|
|
10
28
|
readonly value: T | null;
|
|
29
|
+
/**
|
|
30
|
+
* Create a new `NullableSchema`.
|
|
31
|
+
*
|
|
32
|
+
* @param options Options for the schema, including the `source` schema to wrap.
|
|
33
|
+
* @param options.value Default value used when the input is `undefined` (defaults to `null`).
|
|
34
|
+
*/
|
|
11
35
|
constructor({ value, ...options }: NullableSchemaOptions<T>);
|
|
36
|
+
/**
|
|
37
|
+
* Validate an unknown value, returning `null` for empty-ish input or delegating to the source schema.
|
|
38
|
+
*
|
|
39
|
+
* @param unsafeValue Value to validate (defaults to this schema's `value`).
|
|
40
|
+
* @returns The valid value of type `T`, or `null` for empty-ish input.
|
|
41
|
+
* @throws `string` error message if the source schema rejects the value.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* NULLABLE(STRING).validate(""); // Returns null
|
|
45
|
+
*
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchema/validate
|
|
47
|
+
*/
|
|
12
48
|
validate(unsafeValue?: unknown): T | null;
|
|
49
|
+
/**
|
|
50
|
+
* Format a nullable value as a human-readable string for display.
|
|
51
|
+
*
|
|
52
|
+
* @param value Value to format, or `null`.
|
|
53
|
+
* @returns The formatted string, or `` `No ${one}` `` when the value is `null`.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* NULLABLE(STRING).format(null); // Returns "No string"
|
|
57
|
+
*
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchema/format
|
|
59
|
+
*/
|
|
13
60
|
format(value: T | null): string;
|
|
14
61
|
}
|
|
15
|
-
/**
|
|
16
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Create a `NullableSchema` that wraps a source schema and also allows `null`.
|
|
64
|
+
*
|
|
65
|
+
* *Factory for `NullableSchema`.*
|
|
66
|
+
*
|
|
67
|
+
* @param source Source schema to wrap.
|
|
68
|
+
* @returns A `NullableSchema` wrapping `source`.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* const schema = NULLABLE(STRING);
|
|
72
|
+
* schema.validate(""); // Returns null
|
|
73
|
+
*
|
|
74
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NULLABLE
|
|
75
|
+
*/
|
|
76
|
+
export declare function NULLABLE<T>(source: Schema<T>): NullableSchema<T>;
|
package/schema/NullableSchema.js
CHANGED
|
@@ -1,17 +1,73 @@
|
|
|
1
1
|
import { ThroughSchema } from "./ThroughSchema.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Schema that wraps a source schema and additionally allows `null`.
|
|
4
|
+
*
|
|
5
|
+
* - Empty-ish inputs (`null`, `undefined`, `""`, `NaN`) validate to `null` instead of being passed to the source schema.
|
|
6
|
+
* - Any other value is delegated to the source schema for validation.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const schema = new NullableSchema({ source: STRING });
|
|
10
|
+
* schema.validate(""); // Returns null
|
|
11
|
+
* schema.validate("abc"); // Returns "abc"
|
|
12
|
+
*
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchema
|
|
14
|
+
*/
|
|
3
15
|
export class NullableSchema extends ThroughSchema {
|
|
16
|
+
/**
|
|
17
|
+
* Create a new `NullableSchema`.
|
|
18
|
+
*
|
|
19
|
+
* @param options Options for the schema, including the `source` schema to wrap.
|
|
20
|
+
* @param options.value Default value used when the input is `undefined` (defaults to `null`).
|
|
21
|
+
*/
|
|
4
22
|
constructor({ value = null, ...options }) {
|
|
5
23
|
super({ value, ...options });
|
|
6
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate an unknown value, returning `null` for empty-ish input or delegating to the source schema.
|
|
27
|
+
*
|
|
28
|
+
* @param unsafeValue Value to validate (defaults to this schema's `value`).
|
|
29
|
+
* @returns The valid value of type `T`, or `null` for empty-ish input.
|
|
30
|
+
* @throws `string` error message if the source schema rejects the value.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* NULLABLE(STRING).validate(""); // Returns null
|
|
34
|
+
*
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchema/validate
|
|
36
|
+
*/
|
|
7
37
|
validate(unsafeValue = this.value) {
|
|
8
38
|
if (unsafeValue === null || unsafeValue === undefined || unsafeValue === "" || Number.isNaN(unsafeValue))
|
|
9
39
|
return null;
|
|
10
40
|
return super.validate(unsafeValue);
|
|
11
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Format a nullable value as a human-readable string for display.
|
|
44
|
+
*
|
|
45
|
+
* @param value Value to format, or `null`.
|
|
46
|
+
* @returns The formatted string, or `` `No ${one}` `` when the value is `null`.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* NULLABLE(STRING).format(null); // Returns "No string"
|
|
50
|
+
*
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NullableSchema/format
|
|
52
|
+
*/
|
|
12
53
|
format(value) {
|
|
13
54
|
return value === null ? `No ${this.source.one}` : super.format(value);
|
|
14
55
|
}
|
|
15
56
|
}
|
|
16
|
-
/**
|
|
17
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Create a `NullableSchema` that wraps a source schema and also allows `null`.
|
|
59
|
+
*
|
|
60
|
+
* *Factory for `NullableSchema`.*
|
|
61
|
+
*
|
|
62
|
+
* @param source Source schema to wrap.
|
|
63
|
+
* @returns A `NullableSchema` wrapping `source`.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* const schema = NULLABLE(STRING);
|
|
67
|
+
* schema.validate(""); // Returns null
|
|
68
|
+
*
|
|
69
|
+
* @see https://dhoulb.github.io/shelving/schema/NullableSchema/NULLABLE
|
|
70
|
+
*/
|
|
71
|
+
export function NULLABLE(source) {
|
|
72
|
+
return new NullableSchema({ source });
|
|
73
|
+
}
|