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/StringSchema.js
CHANGED
|
@@ -4,17 +4,16 @@ import { Schema } from "./Schema.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Schema that defines a valid string.
|
|
6
6
|
*
|
|
7
|
+
* - Numbers are coerced to strings; all other non-string values are rejected.
|
|
8
|
+
* - The value is sanitized (and optionally case-folded), then checked against `match`, `min`, and `max`.
|
|
9
|
+
*
|
|
7
10
|
* @example
|
|
8
|
-
* const schema = new StringSchema({
|
|
9
|
-
* schema.validate(
|
|
10
|
-
* schema.validate(
|
|
11
|
-
* schema.validate(
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* schema.validate('---'); // Throws 'Incorrect)
|
|
15
|
-
* schema.validate(true); // Throws 'Must be)
|
|
16
|
-
* schema.validate(''); // Throws Required
|
|
17
|
-
* schema.validate('j'); // Throws 'Minimum 3 chaacters'
|
|
11
|
+
* const schema = new StringSchema({ min: 2, max: 6, match: /^[a-z0-9]+$/ });
|
|
12
|
+
* schema.validate("def"); // Returns "def"
|
|
13
|
+
* schema.validate(1234); // Returns "1234" (numbers are coerced)
|
|
14
|
+
* schema.validate("j"); // Throws "Minimum 2 characters"
|
|
15
|
+
*
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/StringSchema
|
|
18
17
|
*/
|
|
19
18
|
export class StringSchema extends Schema {
|
|
20
19
|
input;
|
|
@@ -23,6 +22,19 @@ export class StringSchema extends Schema {
|
|
|
23
22
|
rows;
|
|
24
23
|
match;
|
|
25
24
|
case;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new `StringSchema`.
|
|
27
|
+
*
|
|
28
|
+
* @param options Options for the schema.
|
|
29
|
+
* @param options.one Singular noun describing one value, used in error messages (defaults to `"string"`).
|
|
30
|
+
* @param options.min Minimum allowed character length (defaults to `0`).
|
|
31
|
+
* @param options.max Maximum allowed character length (defaults to `Number.POSITIVE_INFINITY`).
|
|
32
|
+
* @param options.value Default string value used when the input is `undefined` (defaults to `""`).
|
|
33
|
+
* @param options.rows Number of rows; more than one enables multiline sanitization (defaults to `1`).
|
|
34
|
+
* @param options.match Regular expression the sanitized string must match.
|
|
35
|
+
* @param options.case Force the result to `"upper"` or `"lower"` case.
|
|
36
|
+
* @param options.input HTML `<input />` `type=""` hint for downstream UIs (defaults to `"text"`).
|
|
37
|
+
*/
|
|
26
38
|
constructor({ one = "string", min = 0, max = Number.POSITIVE_INFINITY, value = "", rows = 1, match, case: _case, input = "text", ...options }) {
|
|
27
39
|
super({ one, value, ...options });
|
|
28
40
|
this.min = min;
|
|
@@ -32,6 +44,18 @@ export class StringSchema extends Schema {
|
|
|
32
44
|
this.case = _case;
|
|
33
45
|
this.input = input;
|
|
34
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Validate an unknown value and coerce it to a sanitized string.
|
|
49
|
+
*
|
|
50
|
+
* @param value Value to validate (defaults to this schema's `value`).
|
|
51
|
+
* @returns The sanitized string value.
|
|
52
|
+
* @throws `string` `"Required"` if the value is empty or missing, `` `Must be ${one}` `` if it is not a string or number, `` `Invalid ${one}` `` if it fails `match`, `` `Minimum ${min} characters` `` if too short, or `` `Maximum ${max} characters` `` if too long.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* STRING.validate(123); // Returns "123"
|
|
56
|
+
*
|
|
57
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/StringSchema/validate
|
|
58
|
+
*/
|
|
35
59
|
validate(value = this.value) {
|
|
36
60
|
const str = typeof value === "number" ? value.toString() : value;
|
|
37
61
|
if (typeof str !== "string")
|
|
@@ -45,7 +69,20 @@ export class StringSchema extends Schema {
|
|
|
45
69
|
throw `Maximum ${this.max} characters`;
|
|
46
70
|
return sane;
|
|
47
71
|
}
|
|
48
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Sanitize the string by removing unwanted characters.
|
|
74
|
+
*
|
|
75
|
+
* - Uses multiline sanitization when `rows` is greater than one, otherwise single-line sanitization.
|
|
76
|
+
* - Applies the configured `case` folding (`"upper"` or `"lower"`) if set.
|
|
77
|
+
*
|
|
78
|
+
* @param str String to sanitize.
|
|
79
|
+
* @returns The sanitized (and optionally case-folded) string.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* STRING.sanitize(" hello "); // Returns "hello"
|
|
83
|
+
*
|
|
84
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/StringSchema/sanitize
|
|
85
|
+
*/
|
|
49
86
|
sanitize(str) {
|
|
50
87
|
const sane = this.rows > 1 ? sanitizeMultilineText(str) : sanitizeText(str);
|
|
51
88
|
if (this.case === "upper")
|
|
@@ -54,19 +91,72 @@ export class StringSchema extends Schema {
|
|
|
54
91
|
return sane.toLowerCase();
|
|
55
92
|
return sane;
|
|
56
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Format a string value for display (returns the string unchanged).
|
|
96
|
+
*
|
|
97
|
+
* @param str String value to format.
|
|
98
|
+
* @returns The same string value.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* STRING.format("abc"); // Returns "abc"
|
|
102
|
+
*
|
|
103
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/StringSchema/format
|
|
104
|
+
*/
|
|
57
105
|
format(str) {
|
|
58
106
|
return str;
|
|
59
107
|
}
|
|
60
108
|
}
|
|
61
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Valid string, e.g. `Hello there!`
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* STRING.validate(123); // Returns "123"
|
|
114
|
+
*
|
|
115
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/STRING
|
|
116
|
+
*/
|
|
62
117
|
export const STRING = new StringSchema({});
|
|
63
|
-
/**
|
|
118
|
+
/**
|
|
119
|
+
* Valid string, `Hello there!`, with more than one character.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* REQUIRED_STRING.validate(""); // Throws "Required"
|
|
123
|
+
*
|
|
124
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/REQUIRED_STRING
|
|
125
|
+
*/
|
|
64
126
|
export const REQUIRED_STRING = new StringSchema({ min: 1 });
|
|
65
|
-
/**
|
|
127
|
+
/**
|
|
128
|
+
* Title string, e.g. `Title of something` (1–100 characters).
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* TITLE.validate("My Title"); // Returns "My Title"
|
|
132
|
+
*
|
|
133
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/TITLE
|
|
134
|
+
*/
|
|
66
135
|
export const TITLE = new StringSchema({ one: "title", title: "Title", min: 1, max: 100 });
|
|
67
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* Optional title string, e.g. `Title of something` or `null`.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* NULLABLE_TITLE.validate(null); // Returns null
|
|
141
|
+
*
|
|
142
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/NULLABLE_TITLE
|
|
143
|
+
*/
|
|
68
144
|
export const NULLABLE_TITLE = NULLABLE(TITLE);
|
|
69
|
-
/**
|
|
145
|
+
/**
|
|
146
|
+
* Name string, e.g. `Name of Something` (1–100 characters).
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* NAME.validate("Dave"); // Returns "Dave"
|
|
150
|
+
*
|
|
151
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/NAME
|
|
152
|
+
*/
|
|
70
153
|
export const NAME = new StringSchema({ one: "name", title: "Name", min: 1, max: 100 });
|
|
71
|
-
/**
|
|
154
|
+
/**
|
|
155
|
+
* Optional name string, e.g. `Name of Something` or `null`.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* NULLABLE_NAME.validate(null); // Returns null
|
|
159
|
+
*
|
|
160
|
+
* @see https://dhoulb.github.io/shelving/schema/StringSchema/NULLABLE_NAME
|
|
161
|
+
*/
|
|
72
162
|
export const NULLABLE_NAME = NULLABLE(NAME);
|
|
@@ -1,14 +1,47 @@
|
|
|
1
1
|
import type { Sourceable } from "../util/source.js";
|
|
2
2
|
import type { SchemaOptions } from "./Schema.js";
|
|
3
3
|
import { Schema } from "./Schema.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Allowed options for `ThroughSchema`.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchemaOptions
|
|
8
|
+
*/
|
|
5
9
|
export interface ThroughSchemaOptions<T> extends SchemaOptions {
|
|
6
10
|
source: Schema<T>;
|
|
7
11
|
}
|
|
8
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Schema that wraps and passes through to a source schema, used as a base for schemas that augment another schema's behaviour (e.g. `NullableSchema`, `OptionalSchema`, `RequiredSchema`).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* class WrapSchema<T> extends ThroughSchema<T> {} // Delegates `validate()` to `this.source`.
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchema
|
|
18
|
+
*/
|
|
9
19
|
export declare abstract class ThroughSchema<T> extends Schema<T> implements Sourceable<Schema<T>> {
|
|
20
|
+
/** The source schema this schema passes through to. */
|
|
10
21
|
readonly source: Schema<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new `ThroughSchema`.
|
|
24
|
+
*
|
|
25
|
+
* @param options Options for the schema, including the `source` schema to wrap.
|
|
26
|
+
*/
|
|
11
27
|
constructor({ source, ...options }: ThroughSchemaOptions<T>);
|
|
28
|
+
/**
|
|
29
|
+
* Validate an unknown input value by passing it through to the source schema.
|
|
30
|
+
*
|
|
31
|
+
* @param unsafeValue The unknown input value to validate.
|
|
32
|
+
* @returns The valid value of type `T`.
|
|
33
|
+
* @throws `string` error message if the value is invalid.
|
|
34
|
+
* @example schema.validate(input) // Delegates to source schema.
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchema/validate
|
|
36
|
+
*/
|
|
12
37
|
validate(unsafeValue: unknown): T;
|
|
38
|
+
/**
|
|
39
|
+
* Format a valid value by passing it through to the source schema.
|
|
40
|
+
*
|
|
41
|
+
* @param value The valid value to format.
|
|
42
|
+
* @returns The value formatted as a human-readable string.
|
|
43
|
+
* @example schema.format(value) // Delegates to source schema.
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchema/format
|
|
45
|
+
*/
|
|
13
46
|
format(value: T): string;
|
|
14
47
|
}
|
package/schema/ThroughSchema.js
CHANGED
|
@@ -1,14 +1,43 @@
|
|
|
1
1
|
import { Schema } from "./Schema.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Schema that wraps and passes through to a source schema, used as a base for schemas that augment another schema's behaviour (e.g. `NullableSchema`, `OptionalSchema`, `RequiredSchema`).
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* class WrapSchema<T> extends ThroughSchema<T> {} // Delegates `validate()` to `this.source`.
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchema
|
|
8
|
+
*/
|
|
3
9
|
export class ThroughSchema extends Schema {
|
|
10
|
+
/** The source schema this schema passes through to. */
|
|
4
11
|
source;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new `ThroughSchema`.
|
|
14
|
+
*
|
|
15
|
+
* @param options Options for the schema, including the `source` schema to wrap.
|
|
16
|
+
*/
|
|
5
17
|
constructor({ source, ...options }) {
|
|
6
18
|
super(source instanceof Schema ? { ...source, ...options } : options);
|
|
7
19
|
this.source = source;
|
|
8
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Validate an unknown input value by passing it through to the source schema.
|
|
23
|
+
*
|
|
24
|
+
* @param unsafeValue The unknown input value to validate.
|
|
25
|
+
* @returns The valid value of type `T`.
|
|
26
|
+
* @throws `string` error message if the value is invalid.
|
|
27
|
+
* @example schema.validate(input) // Delegates to source schema.
|
|
28
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchema/validate
|
|
29
|
+
*/
|
|
9
30
|
validate(unsafeValue) {
|
|
10
31
|
return this.source.validate(unsafeValue);
|
|
11
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Format a valid value by passing it through to the source schema.
|
|
35
|
+
*
|
|
36
|
+
* @param value The valid value to format.
|
|
37
|
+
* @returns The value formatted as a human-readable string.
|
|
38
|
+
* @example schema.format(value) // Delegates to source schema.
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/schema/ThroughSchema/ThroughSchema/format
|
|
40
|
+
*/
|
|
12
41
|
format(value) {
|
|
13
42
|
return this.source.format(value);
|
|
14
43
|
}
|
package/schema/TimeSchema.d.ts
CHANGED
|
@@ -1,11 +1,51 @@
|
|
|
1
1
|
import { DateSchema, type DateSchemaOptions } from "./DateSchema.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Schema that defines a valid abstract time in 24h `hh:mm:ss.fff` format, e.g. `23:59` or `24:00`.
|
|
4
|
+
*
|
|
5
|
+
* - Validates a time without a timezone, e.g. a daily alarm; use `DateSchema` for dates and `DateTimeSchema` for UTC datetimes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const schema = new TimeSchema({});
|
|
9
|
+
* schema.validate("23:59"); // "23:59:00.000"
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TimeSchema
|
|
11
|
+
*/
|
|
3
12
|
export declare class TimeSchema extends DateSchema {
|
|
13
|
+
/**
|
|
14
|
+
* Create a new `TimeSchema`.
|
|
15
|
+
*
|
|
16
|
+
* @param options Options for the schema (same as `DateSchemaOptions`).
|
|
17
|
+
*/
|
|
4
18
|
constructor({ one, title, input, ...options }: DateSchemaOptions);
|
|
19
|
+
/**
|
|
20
|
+
* Convert a `Date` object to a `hh:mm:ss.fff` time string.
|
|
21
|
+
*
|
|
22
|
+
* @param value The `Date` to convert.
|
|
23
|
+
* @returns The time portion as a `hh:mm:ss.fff` string.
|
|
24
|
+
* @example schema.stringify(new Date("2005-09-12T23:59:00Z")) // "23:59:00.000"
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TimeSchema/stringify
|
|
26
|
+
*/
|
|
5
27
|
stringify(value: Date): string;
|
|
28
|
+
/**
|
|
29
|
+
* Format a validated time string as a human-readable string for display.
|
|
30
|
+
*
|
|
31
|
+
* @param value The validated time string to format.
|
|
32
|
+
* @returns The time formatted for display.
|
|
33
|
+
* @example schema.format("23:59") // "23:59"
|
|
34
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TimeSchema/format
|
|
35
|
+
*/
|
|
6
36
|
format(value: string): string;
|
|
7
37
|
}
|
|
8
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Valid time, e.g. `23:59` (required because falsy values are invalid).
|
|
40
|
+
*
|
|
41
|
+
* @example TIME.validate("23:59") // "23:59:00.000"
|
|
42
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TIME
|
|
43
|
+
*/
|
|
9
44
|
export declare const TIME: TimeSchema;
|
|
10
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Valid time, e.g. `23:59`, or `null`.
|
|
47
|
+
*
|
|
48
|
+
* @example NULLABLE_TIME.validate(null) // null
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/NULLABLE_TIME
|
|
50
|
+
*/
|
|
11
51
|
export declare const NULLABLE_TIME: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/TimeSchema.js
CHANGED
|
@@ -2,19 +2,59 @@ import { requireTimeString } from "../util/date.js";
|
|
|
2
2
|
import { formatTime } from "../util/format.js";
|
|
3
3
|
import { DateSchema } from "./DateSchema.js";
|
|
4
4
|
import { NULLABLE } from "./NullableSchema.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Schema that defines a valid abstract time in 24h `hh:mm:ss.fff` format, e.g. `23:59` or `24:00`.
|
|
7
|
+
*
|
|
8
|
+
* - Validates a time without a timezone, e.g. a daily alarm; use `DateSchema` for dates and `DateTimeSchema` for UTC datetimes.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const schema = new TimeSchema({});
|
|
12
|
+
* schema.validate("23:59"); // "23:59:00.000"
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TimeSchema
|
|
14
|
+
*/
|
|
6
15
|
export class TimeSchema extends DateSchema {
|
|
16
|
+
/**
|
|
17
|
+
* Create a new `TimeSchema`.
|
|
18
|
+
*
|
|
19
|
+
* @param options Options for the schema (same as `DateSchemaOptions`).
|
|
20
|
+
*/
|
|
7
21
|
constructor({ one = "time", title = "Time", input = "time", ...options }) {
|
|
8
22
|
super({ one, title, input, ...options });
|
|
9
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert a `Date` object to a `hh:mm:ss.fff` time string.
|
|
26
|
+
*
|
|
27
|
+
* @param value The `Date` to convert.
|
|
28
|
+
* @returns The time portion as a `hh:mm:ss.fff` string.
|
|
29
|
+
* @example schema.stringify(new Date("2005-09-12T23:59:00Z")) // "23:59:00.000"
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TimeSchema/stringify
|
|
31
|
+
*/
|
|
10
32
|
stringify(value) {
|
|
11
33
|
return requireTimeString(value);
|
|
12
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Format a validated time string as a human-readable string for display.
|
|
37
|
+
*
|
|
38
|
+
* @param value The validated time string to format.
|
|
39
|
+
* @returns The time formatted for display.
|
|
40
|
+
* @example schema.format("23:59") // "23:59"
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TimeSchema/format
|
|
42
|
+
*/
|
|
13
43
|
format(value) {
|
|
14
44
|
return formatTime(value, undefined, this.format);
|
|
15
45
|
}
|
|
16
46
|
}
|
|
17
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Valid time, e.g. `23:59` (required because falsy values are invalid).
|
|
49
|
+
*
|
|
50
|
+
* @example TIME.validate("23:59") // "23:59:00.000"
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/TIME
|
|
52
|
+
*/
|
|
18
53
|
export const TIME = new TimeSchema({});
|
|
19
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Valid time, e.g. `23:59`, or `null`.
|
|
56
|
+
*
|
|
57
|
+
* @example NULLABLE_TIME.validate(null) // null
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/schema/TimeSchema/NULLABLE_TIME
|
|
59
|
+
*/
|
|
20
60
|
export const NULLABLE_TIME = NULLABLE(TIME);
|
package/schema/URISchema.d.ts
CHANGED
|
@@ -1,23 +1,84 @@
|
|
|
1
1
|
import { type URISchemes, type URIString } from "../util/uri.js";
|
|
2
2
|
import type { StringSchemaOptions } from "./StringSchema.js";
|
|
3
3
|
import { StringSchema } from "./StringSchema.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Options for `URISchema`.
|
|
6
|
+
*
|
|
7
|
+
* - `schemes` — whitelist of allowed URI schemes (defaults to HTTP/HTTPS).
|
|
8
|
+
*
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchemaOptions
|
|
10
|
+
*/
|
|
5
11
|
export interface URISchemaOptions extends Omit<StringSchemaOptions, "input" | "min" | "max" | "rows"> {
|
|
6
12
|
readonly schemes?: URISchemes | undefined;
|
|
7
13
|
}
|
|
8
14
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* -
|
|
15
|
+
* Schema that defines a valid absolute URI string.
|
|
16
|
+
*
|
|
17
|
+
* - Checks the URI scheme against a whitelist (always).
|
|
18
|
+
* - URIs are limited to 512 characters, but generally these won't be `data:` URIs so this is a reasonable limit.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const schema = new URISchema({});
|
|
22
|
+
* schema.validate("https://www.google.com") // "https://www.google.com/"
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema
|
|
12
24
|
*/
|
|
13
25
|
export declare class URISchema extends StringSchema {
|
|
26
|
+
/** Whitelist of allowed URI schemes, e.g. `["https:", "http:"]`. */
|
|
14
27
|
readonly schemes: URISchemes;
|
|
28
|
+
/**
|
|
29
|
+
* Create a new `URISchema`.
|
|
30
|
+
*
|
|
31
|
+
* @param options Options for the schema (`schemes`, plus inherited string options like `one`, `title`, `value`).
|
|
32
|
+
*/
|
|
15
33
|
constructor({ one, title, schemes, ...options }: URISchemaOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Validate an unknown input value and return a normalised absolute URI string.
|
|
36
|
+
*
|
|
37
|
+
* - Override to validate the URI and check the scheme against the whitelist.
|
|
38
|
+
*
|
|
39
|
+
* @param unsafeValue The unknown input value to validate.
|
|
40
|
+
* @returns The valid, normalised URI string.
|
|
41
|
+
* @throws `string` error message if the value is empty, malformed, or uses a disallowed scheme.
|
|
42
|
+
* @example schema.validate("https://www.google.com") // "https://www.google.com/"
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema/validate
|
|
44
|
+
*/
|
|
16
45
|
validate(unsafeValue: unknown): URIString;
|
|
46
|
+
/**
|
|
47
|
+
* Sanitize a string before validation by stripping all whitespace.
|
|
48
|
+
*
|
|
49
|
+
* - URIs never contain whitespace (a real space must be `%20`-encoded), so strip it entirely.
|
|
50
|
+
*
|
|
51
|
+
* @param str The raw string to sanitize.
|
|
52
|
+
* @returns The sanitized string with all whitespace removed.
|
|
53
|
+
* @example schema.sanitize(" https://a.com ") // "https://a.com"
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema/sanitize
|
|
55
|
+
*/
|
|
17
56
|
sanitize(str: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Format a validated URI string for display.
|
|
59
|
+
*
|
|
60
|
+
* @param value The valid URI string to format.
|
|
61
|
+
* @returns The URI formatted as a human-readable string.
|
|
62
|
+
* @example schema.format("https://www.google.com/") // "www.google.com"
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema/format
|
|
64
|
+
*/
|
|
18
65
|
format(value: string): string;
|
|
19
66
|
}
|
|
20
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Valid URI string, e.g. `https://www.google.com`.
|
|
69
|
+
*
|
|
70
|
+
* *Factory for `URISchema`.*
|
|
71
|
+
*
|
|
72
|
+
* @example URI_SCHEMA.validate("https://www.google.com") // "https://www.google.com/"
|
|
73
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URI_SCHEMA
|
|
74
|
+
*/
|
|
21
75
|
export declare const URI_SCHEMA: URISchema;
|
|
22
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Valid URI string, e.g. `https://www.google.com`, or `null`.
|
|
78
|
+
*
|
|
79
|
+
* *Factory for `NullableSchema`.*
|
|
80
|
+
*
|
|
81
|
+
* @example NULLABLE_URI_SCHEMA.validate(null) // null
|
|
82
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/NULLABLE_URI_SCHEMA
|
|
83
|
+
*/
|
|
23
84
|
export declare const NULLABLE_URI_SCHEMA: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/URISchema.js
CHANGED
|
@@ -4,12 +4,24 @@ import { getURI, HTTP_SCHEMES } from "../util/uri.js";
|
|
|
4
4
|
import { NULLABLE } from "./NullableSchema.js";
|
|
5
5
|
import { StringSchema } from "./StringSchema.js";
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
7
|
+
* Schema that defines a valid absolute URI string.
|
|
8
|
+
*
|
|
9
|
+
* - Checks the URI scheme against a whitelist (always).
|
|
10
|
+
* - URIs are limited to 512 characters, but generally these won't be `data:` URIs so this is a reasonable limit.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const schema = new URISchema({});
|
|
14
|
+
* schema.validate("https://www.google.com") // "https://www.google.com/"
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema
|
|
10
16
|
*/
|
|
11
17
|
export class URISchema extends StringSchema {
|
|
18
|
+
/** Whitelist of allowed URI schemes, e.g. `["https:", "http:"]`. */
|
|
12
19
|
schemes;
|
|
20
|
+
/**
|
|
21
|
+
* Create a new `URISchema`.
|
|
22
|
+
*
|
|
23
|
+
* @param options Options for the schema (`schemes`, plus inherited string options like `one`, `title`, `value`).
|
|
24
|
+
*/
|
|
13
25
|
constructor({ one = "URI", title = "URI", schemes = HTTP_SCHEMES, ...options }) {
|
|
14
26
|
super({
|
|
15
27
|
one,
|
|
@@ -22,7 +34,17 @@ export class URISchema extends StringSchema {
|
|
|
22
34
|
});
|
|
23
35
|
this.schemes = schemes;
|
|
24
36
|
}
|
|
25
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Validate an unknown input value and return a normalised absolute URI string.
|
|
39
|
+
*
|
|
40
|
+
* - Override to validate the URI and check the scheme against the whitelist.
|
|
41
|
+
*
|
|
42
|
+
* @param unsafeValue The unknown input value to validate.
|
|
43
|
+
* @returns The valid, normalised URI string.
|
|
44
|
+
* @throws `string` error message if the value is empty, malformed, or uses a disallowed scheme.
|
|
45
|
+
* @example schema.validate("https://www.google.com") // "https://www.google.com/"
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema/validate
|
|
47
|
+
*/
|
|
26
48
|
validate(unsafeValue) {
|
|
27
49
|
const str = super.validate(unsafeValue);
|
|
28
50
|
const uri = getURI(str);
|
|
@@ -32,15 +54,47 @@ export class URISchema extends StringSchema {
|
|
|
32
54
|
throw `Invalid ${this.one} scheme`;
|
|
33
55
|
return uri.href;
|
|
34
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Sanitize a string before validation by stripping all whitespace.
|
|
59
|
+
*
|
|
60
|
+
* - URIs never contain whitespace (a real space must be `%20`-encoded), so strip it entirely.
|
|
61
|
+
*
|
|
62
|
+
* @param str The raw string to sanitize.
|
|
63
|
+
* @returns The sanitized string with all whitespace removed.
|
|
64
|
+
* @example schema.sanitize(" https://a.com ") // "https://a.com"
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema/sanitize
|
|
66
|
+
*/
|
|
35
67
|
sanitize(str) {
|
|
36
68
|
// URIs never contain whitespace (a real space must be `%20`-encoded), so strip it entirely.
|
|
37
69
|
return sanitizeWord(str);
|
|
38
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Format a validated URI string for display.
|
|
73
|
+
*
|
|
74
|
+
* @param value The valid URI string to format.
|
|
75
|
+
* @returns The URI formatted as a human-readable string.
|
|
76
|
+
* @example schema.format("https://www.google.com/") // "www.google.com"
|
|
77
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URISchema/format
|
|
78
|
+
*/
|
|
39
79
|
format(value) {
|
|
40
80
|
return formatURI(value, this.format);
|
|
41
81
|
}
|
|
42
82
|
}
|
|
43
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Valid URI string, e.g. `https://www.google.com`.
|
|
85
|
+
*
|
|
86
|
+
* *Factory for `URISchema`.*
|
|
87
|
+
*
|
|
88
|
+
* @example URI_SCHEMA.validate("https://www.google.com") // "https://www.google.com/"
|
|
89
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/URI_SCHEMA
|
|
90
|
+
*/
|
|
44
91
|
export const URI_SCHEMA = new URISchema({});
|
|
45
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* Valid URI string, e.g. `https://www.google.com`, or `null`.
|
|
94
|
+
*
|
|
95
|
+
* *Factory for `NullableSchema`.*
|
|
96
|
+
*
|
|
97
|
+
* @example NULLABLE_URI_SCHEMA.validate(null) // null
|
|
98
|
+
* @see https://dhoulb.github.io/shelving/schema/URISchema/NULLABLE_URI_SCHEMA
|
|
99
|
+
*/
|
|
46
100
|
export const NULLABLE_URI_SCHEMA = NULLABLE(URI_SCHEMA);
|
package/schema/URLSchema.d.ts
CHANGED
|
@@ -2,25 +2,88 @@ import { type URISchemes } from "../util/uri.js";
|
|
|
2
2
|
import { type URLString } from "../util/url.js";
|
|
3
3
|
import type { StringSchemaOptions } from "./StringSchema.js";
|
|
4
4
|
import { StringSchema } from "./StringSchema.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Options for `URLSchema`.
|
|
7
|
+
*
|
|
8
|
+
* - `base` — base URL that relative URLs are resolved against.
|
|
9
|
+
* - `schemes` — whitelist of allowed URL schemes (defaults to HTTP/HTTPS).
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchemaOptions
|
|
12
|
+
*/
|
|
6
13
|
export interface URLSchemaOptions extends Omit<StringSchemaOptions, "input" | "min" | "max" | "rows"> {
|
|
7
14
|
readonly base?: URL | URLString | undefined;
|
|
8
15
|
readonly schemes?: URISchemes | undefined;
|
|
9
16
|
}
|
|
10
17
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
18
|
+
* Schema that defines a valid absolute or relative URL string.
|
|
19
|
+
*
|
|
20
|
+
* - Checks the URL scheme against a whitelist (always), and resolves relative URLs against `base` when set.
|
|
21
|
+
* - URLs are limited to 512 characters, but generally these won't be `data:` URIs so this is a reasonable limit.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const schema = new URLSchema({ base: "https://example.com" });
|
|
25
|
+
* schema.validate("/page") // "https://example.com/page"
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema
|
|
14
27
|
*/
|
|
15
28
|
export declare class URLSchema extends StringSchema {
|
|
29
|
+
/** Base URL that relative URLs are resolved against, or `undefined` when not set. */
|
|
16
30
|
readonly base: URLString | undefined;
|
|
31
|
+
/** Whitelist of allowed URL schemes, e.g. `["https:", "http:"]`. */
|
|
17
32
|
readonly schemes: URISchemes;
|
|
33
|
+
/**
|
|
34
|
+
* Create a new `URLSchema`.
|
|
35
|
+
*
|
|
36
|
+
* @param options Options for the schema (`base`, `schemes`, plus inherited string options like `one`, `title`, `value`).
|
|
37
|
+
*/
|
|
18
38
|
constructor({ one, title, base, schemes, ...options }: URLSchemaOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Validate an unknown input value and return a normalised absolute URL string.
|
|
41
|
+
*
|
|
42
|
+
* - Override to validate the URL and check the scheme and host against the whitelists.
|
|
43
|
+
*
|
|
44
|
+
* @param unsafeValue The unknown input value to validate.
|
|
45
|
+
* @returns The valid, fully-resolved URL string.
|
|
46
|
+
* @throws `string` error message if the value is empty, malformed, or uses a disallowed scheme.
|
|
47
|
+
* @example schema.validate("https://www.google.com") // "https://www.google.com/"
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema/validate
|
|
49
|
+
*/
|
|
19
50
|
validate(unsafeValue: unknown): URLString;
|
|
51
|
+
/**
|
|
52
|
+
* Sanitize a string before validation by stripping all whitespace.
|
|
53
|
+
*
|
|
54
|
+
* - URLs never contain whitespace (a real space must be `%20`-encoded), so strip it entirely.
|
|
55
|
+
*
|
|
56
|
+
* @param str The raw string to sanitize.
|
|
57
|
+
* @returns The sanitized string with all whitespace removed.
|
|
58
|
+
* @example schema.sanitize(" https://a.com ") // "https://a.com"
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema/sanitize
|
|
60
|
+
*/
|
|
20
61
|
sanitize(str: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Format a validated URL string for display.
|
|
64
|
+
*
|
|
65
|
+
* @param value The valid URL string to format.
|
|
66
|
+
* @returns The URL formatted as a human-readable string.
|
|
67
|
+
* @example schema.format("https://www.google.com/") // "www.google.com"
|
|
68
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema/format
|
|
69
|
+
*/
|
|
21
70
|
format(value: string): string;
|
|
22
71
|
}
|
|
23
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Valid URL string, e.g. `https://www.google.com`.
|
|
74
|
+
*
|
|
75
|
+
* *Factory for `URLSchema`.*
|
|
76
|
+
*
|
|
77
|
+
* @example URL_SCHEMA.validate("https://www.google.com") // "https://www.google.com/"
|
|
78
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URL_SCHEMA
|
|
79
|
+
*/
|
|
24
80
|
export declare const URL_SCHEMA: URLSchema;
|
|
25
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Valid URL string, e.g. `https://www.google.com`, or `null`.
|
|
83
|
+
*
|
|
84
|
+
* *Factory for `NullableSchema`.*
|
|
85
|
+
*
|
|
86
|
+
* @example NULLABLE_URL_SCHEMA.validate(null) // null
|
|
87
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/NULLABLE_URL_SCHEMA
|
|
88
|
+
*/
|
|
26
89
|
export declare const NULLABLE_URL_SCHEMA: import("./NullableSchema.js").NullableSchema<string>;
|