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/URLSchema.js
CHANGED
|
@@ -5,13 +5,26 @@ import { getURL } from "../util/url.js";
|
|
|
5
5
|
import { NULLABLE } from "./NullableSchema.js";
|
|
6
6
|
import { StringSchema } from "./StringSchema.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
8
|
+
* Schema that defines a valid absolute or relative URL string.
|
|
9
|
+
*
|
|
10
|
+
* - Checks the URL scheme against a whitelist (always), and resolves relative URLs against `base` when set.
|
|
11
|
+
* - URLs are limited to 512 characters, but generally these won't be `data:` URIs so this is a reasonable limit.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const schema = new URLSchema({ base: "https://example.com" });
|
|
15
|
+
* schema.validate("/page") // "https://example.com/page"
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema
|
|
11
17
|
*/
|
|
12
18
|
export class URLSchema extends StringSchema {
|
|
19
|
+
/** Base URL that relative URLs are resolved against, or `undefined` when not set. */
|
|
13
20
|
base;
|
|
21
|
+
/** Whitelist of allowed URL schemes, e.g. `["https:", "http:"]`. */
|
|
14
22
|
schemes;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new `URLSchema`.
|
|
25
|
+
*
|
|
26
|
+
* @param options Options for the schema (`base`, `schemes`, plus inherited string options like `one`, `title`, `value`).
|
|
27
|
+
*/
|
|
15
28
|
constructor({ one = "URL", title = "URL", base, schemes = HTTP_SCHEMES, ...options }) {
|
|
16
29
|
super({
|
|
17
30
|
one,
|
|
@@ -25,7 +38,17 @@ export class URLSchema extends StringSchema {
|
|
|
25
38
|
this.base = getURL(base)?.href;
|
|
26
39
|
this.schemes = schemes;
|
|
27
40
|
}
|
|
28
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Validate an unknown input value and return a normalised absolute URL string.
|
|
43
|
+
*
|
|
44
|
+
* - Override to validate the URL and check the scheme and host against the whitelists.
|
|
45
|
+
*
|
|
46
|
+
* @param unsafeValue The unknown input value to validate.
|
|
47
|
+
* @returns The valid, fully-resolved URL string.
|
|
48
|
+
* @throws `string` error message if the value is empty, malformed, or uses a disallowed scheme.
|
|
49
|
+
* @example schema.validate("https://www.google.com") // "https://www.google.com/"
|
|
50
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema/validate
|
|
51
|
+
*/
|
|
29
52
|
validate(unsafeValue) {
|
|
30
53
|
const str = super.validate(unsafeValue);
|
|
31
54
|
const url = getURL(str, this.base);
|
|
@@ -35,15 +58,47 @@ export class URLSchema extends StringSchema {
|
|
|
35
58
|
throw `Invalid ${this.one} scheme`;
|
|
36
59
|
return url.href;
|
|
37
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Sanitize a string before validation by stripping all whitespace.
|
|
63
|
+
*
|
|
64
|
+
* - URLs never contain whitespace (a real space must be `%20`-encoded), so strip it entirely.
|
|
65
|
+
*
|
|
66
|
+
* @param str The raw string to sanitize.
|
|
67
|
+
* @returns The sanitized string with all whitespace removed.
|
|
68
|
+
* @example schema.sanitize(" https://a.com ") // "https://a.com"
|
|
69
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema/sanitize
|
|
70
|
+
*/
|
|
38
71
|
sanitize(str) {
|
|
39
72
|
// URLs never contain whitespace (a real space must be `%20`-encoded), so strip it entirely.
|
|
40
73
|
return sanitizeWord(str);
|
|
41
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Format a validated URL string for display.
|
|
77
|
+
*
|
|
78
|
+
* @param value The valid URL string to format.
|
|
79
|
+
* @returns The URL formatted as a human-readable string.
|
|
80
|
+
* @example schema.format("https://www.google.com/") // "www.google.com"
|
|
81
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URLSchema/format
|
|
82
|
+
*/
|
|
42
83
|
format(value) {
|
|
43
84
|
return formatURL(value, this.base, this.format);
|
|
44
85
|
}
|
|
45
86
|
}
|
|
46
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Valid URL string, e.g. `https://www.google.com`.
|
|
89
|
+
*
|
|
90
|
+
* *Factory for `URLSchema`.*
|
|
91
|
+
*
|
|
92
|
+
* @example URL_SCHEMA.validate("https://www.google.com") // "https://www.google.com/"
|
|
93
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/URL_SCHEMA
|
|
94
|
+
*/
|
|
47
95
|
export const URL_SCHEMA = new URLSchema({});
|
|
48
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Valid URL string, e.g. `https://www.google.com`, or `null`.
|
|
98
|
+
*
|
|
99
|
+
* *Factory for `NullableSchema`.*
|
|
100
|
+
*
|
|
101
|
+
* @example NULLABLE_URL_SCHEMA.validate(null) // null
|
|
102
|
+
* @see https://dhoulb.github.io/shelving/schema/URLSchema/NULLABLE_URL_SCHEMA
|
|
103
|
+
*/
|
|
49
104
|
export const NULLABLE_URL_SCHEMA = NULLABLE(URL_SCHEMA);
|
package/schema/UUIDSchema.d.ts
CHANGED
|
@@ -1,14 +1,47 @@
|
|
|
1
1
|
import { StringSchema, type StringSchemaOptions } from "./StringSchema.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Schema that defines a valid UUID string (versions 1-5). Defaults to any-version validation.
|
|
4
|
+
*
|
|
4
5
|
* - Input is trimmed and lowercased.
|
|
5
|
-
* - Falsy values are converted to empty string.
|
|
6
|
+
* - Falsy values are converted to an empty string.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const schema = new UUIDSchema({});
|
|
10
|
+
* schema.validate("F47AC10B-58CC-4372-A567-0E02B2C3D479") // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/UUIDSchema
|
|
6
12
|
*/
|
|
7
13
|
export declare class UUIDSchema extends StringSchema {
|
|
14
|
+
/**
|
|
15
|
+
* Create a new `UUIDSchema`.
|
|
16
|
+
*
|
|
17
|
+
* @param options Options for the schema (inherited string options like `one`, `title`, `value`).
|
|
18
|
+
*/
|
|
8
19
|
constructor({ one, title, ...rest }?: Omit<StringSchemaOptions, "input" | "min" | "max" | "match" | "rows">);
|
|
20
|
+
/**
|
|
21
|
+
* Sanitize a string before validation by normalising it into a canonical UUID.
|
|
22
|
+
*
|
|
23
|
+
* @param str The raw string to sanitize.
|
|
24
|
+
* @returns The sanitized UUID, or an empty string when the input is not a valid UUID.
|
|
25
|
+
* @example schema.sanitize("F47AC10B58CC4372A5670E02B2C3D479") // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/UUIDSchema/sanitize
|
|
27
|
+
*/
|
|
9
28
|
sanitize(str: string): string;
|
|
10
29
|
}
|
|
11
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Any valid UUID (versions 1-5).
|
|
32
|
+
*
|
|
33
|
+
* *Factory for `UUIDSchema`.*
|
|
34
|
+
*
|
|
35
|
+
* @example UUID.validate("F47AC10B-58CC-4372-A567-0E02B2C3D479") // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
36
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/UUID
|
|
37
|
+
*/
|
|
12
38
|
export declare const UUID: UUIDSchema;
|
|
13
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Any valid UUID (versions 1-5), or `null`.
|
|
41
|
+
*
|
|
42
|
+
* *Factory for `NullableSchema`.*
|
|
43
|
+
*
|
|
44
|
+
* @example NULLABLE_UUID.validate(null) // null
|
|
45
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/NULLABLE_UUID
|
|
46
|
+
*/
|
|
14
47
|
export declare const NULLABLE_UUID: import("./NullableSchema.js").NullableSchema<string>;
|
package/schema/UUIDSchema.js
CHANGED
|
@@ -2,11 +2,22 @@ import { getUUID } from "../util/uuid.js";
|
|
|
2
2
|
import { NULLABLE } from "./NullableSchema.js";
|
|
3
3
|
import { StringSchema } from "./StringSchema.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Schema that defines a valid UUID string (versions 1-5). Defaults to any-version validation.
|
|
6
|
+
*
|
|
6
7
|
* - Input is trimmed and lowercased.
|
|
7
|
-
* - Falsy values are converted to empty string.
|
|
8
|
+
* - Falsy values are converted to an empty string.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const schema = new UUIDSchema({});
|
|
12
|
+
* schema.validate("F47AC10B-58CC-4372-A567-0E02B2C3D479") // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/UUIDSchema
|
|
8
14
|
*/
|
|
9
15
|
export class UUIDSchema extends StringSchema {
|
|
16
|
+
/**
|
|
17
|
+
* Create a new `UUIDSchema`.
|
|
18
|
+
*
|
|
19
|
+
* @param options Options for the schema (inherited string options like `one`, `title`, `value`).
|
|
20
|
+
*/
|
|
10
21
|
constructor({ one = "UUID", title = "UUID", ...rest } = {}) {
|
|
11
22
|
super({
|
|
12
23
|
one,
|
|
@@ -17,11 +28,33 @@ export class UUIDSchema extends StringSchema {
|
|
|
17
28
|
rows: 1,
|
|
18
29
|
});
|
|
19
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Sanitize a string before validation by normalising it into a canonical UUID.
|
|
33
|
+
*
|
|
34
|
+
* @param str The raw string to sanitize.
|
|
35
|
+
* @returns The sanitized UUID, or an empty string when the input is not a valid UUID.
|
|
36
|
+
* @example schema.sanitize("F47AC10B58CC4372A5670E02B2C3D479") // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/UUIDSchema/sanitize
|
|
38
|
+
*/
|
|
20
39
|
sanitize(str) {
|
|
21
40
|
return getUUID(str) || "";
|
|
22
41
|
}
|
|
23
42
|
}
|
|
24
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Any valid UUID (versions 1-5).
|
|
45
|
+
*
|
|
46
|
+
* *Factory for `UUIDSchema`.*
|
|
47
|
+
*
|
|
48
|
+
* @example UUID.validate("F47AC10B-58CC-4372-A567-0E02B2C3D479") // "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/UUID
|
|
50
|
+
*/
|
|
25
51
|
export const UUID = new UUIDSchema({ title: "ID" });
|
|
26
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Any valid UUID (versions 1-5), or `null`.
|
|
54
|
+
*
|
|
55
|
+
* *Factory for `NullableSchema`.*
|
|
56
|
+
*
|
|
57
|
+
* @example NULLABLE_UUID.validate(null) // null
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/schema/UUIDSchema/NULLABLE_UUID
|
|
59
|
+
*/
|
|
27
60
|
export const NULLABLE_UUID = NULLABLE(UUID);
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import type { Deferred } from "../util/async.js";
|
|
2
2
|
import type { Nullable } from "../util/null.js";
|
|
3
3
|
import { Sequence } from "./Sequence.js";
|
|
4
|
+
/**
|
|
5
|
+
* Result representing a rejection in a `DeferredSequence`, carrying the thrown `reason`.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredErrorResult
|
|
8
|
+
*/
|
|
4
9
|
export type DeferredErrorResult = {
|
|
5
10
|
readonly reason: unknown;
|
|
6
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Pending result of a `DeferredSequence` — either a standard `IteratorResult` or a `DeferredErrorResult` rejection.
|
|
14
|
+
*
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredResult
|
|
16
|
+
*/
|
|
7
17
|
export type DeferredResult<T, R> = IteratorResult<T, R | undefined> | DeferredErrorResult;
|
|
8
18
|
/**
|
|
9
19
|
* Deferred sequence of values that can be async iterated and new values can be published.
|
|
@@ -11,6 +21,14 @@ export type DeferredResult<T, R> = IteratorResult<T, R | undefined> | DeferredEr
|
|
|
11
21
|
* - Implements `Promise` so the next result can be awaited.
|
|
12
22
|
* - Implements `AsyncIterable` so values can be iterated over using `for await...of`
|
|
13
23
|
* - Call `resolve(value)` to publish the next value, `reject(reason?)` to publish an error, or `done(value?)` to signal completion.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const seq = new DeferredSequence<number>();
|
|
27
|
+
* (async () => { for await (const n of seq) console.log(n); })();
|
|
28
|
+
* seq.resolve(1);
|
|
29
|
+
* seq.resolve(2);
|
|
30
|
+
* seq.done();
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence
|
|
14
32
|
*/
|
|
15
33
|
export declare class DeferredSequence<T = void, R = void, N = void> extends Sequence<T, R, N> implements Deferred<T>, Promise<T> {
|
|
16
34
|
/** Lazy deferred that stores iterator values. */
|
|
@@ -19,30 +37,58 @@ export declare class DeferredSequence<T = void, R = void, N = void> extends Sequ
|
|
|
19
37
|
private _promiseDeferred;
|
|
20
38
|
/** Next iterator result to reject the deferred to (on next microtask). */
|
|
21
39
|
private _next;
|
|
22
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Next promise to be resolved/rejected with the upcoming value.
|
|
42
|
+
*
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/promise
|
|
44
|
+
*/
|
|
23
45
|
get promise(): Promise<T>;
|
|
24
46
|
/**
|
|
25
47
|
* Resolve the current deferred in the sequence with a value.
|
|
26
48
|
* - Sends a `{ value: X }` to any iterators.
|
|
49
|
+
*
|
|
50
|
+
* @param value Value to publish to iterators and awaiting promises.
|
|
51
|
+
* @example seq.resolve(123);
|
|
52
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/resolve
|
|
27
53
|
*/
|
|
28
54
|
resolve(value: T): void;
|
|
29
55
|
/**
|
|
30
|
-
* Reject the current deferred in the sequence.
|
|
56
|
+
* Reject the current deferred in the sequence with an error.
|
|
57
|
+
* - Sends a `{ reason: X }` to any iterators, causing `for await` loops to throw.
|
|
58
|
+
*
|
|
59
|
+
* @param reason Error or other thrown value to publish to iterators and awaiting promises.
|
|
60
|
+
* @example seq.reject(new Error("Stop"));
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/reject
|
|
31
62
|
*/
|
|
32
63
|
reject(reason: unknown): void;
|
|
33
64
|
/**
|
|
34
65
|
* Signal that the sequence is done, causing any active `for await` loops to exit cleanly.
|
|
35
66
|
* - Sends a `{ done: true, value: R }` to any iterators.
|
|
67
|
+
*
|
|
68
|
+
* @param value Optional final return value for the sequence.
|
|
69
|
+
* @example seq.done();
|
|
70
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/done
|
|
36
71
|
*/
|
|
37
72
|
done(value?: R | undefined): void;
|
|
38
73
|
/**
|
|
39
74
|
* Cancel the current resolution or rejection.
|
|
40
75
|
* - Iterators will contain to wait for a next value.
|
|
76
|
+
*
|
|
77
|
+
* @example seq.cancel();
|
|
78
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/cancel
|
|
41
79
|
*/
|
|
42
80
|
cancel(): void;
|
|
43
81
|
/** Fulfill the current deferred by resolving or rejecting both the iterator deferred and the promise deferred. */
|
|
44
82
|
private _fulfill;
|
|
45
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Resolve the current deferred from a sequence of values.
|
|
85
|
+
* - Iterates `sequence`, republishing each value through this deferred sequence and yielding it on.
|
|
86
|
+
*
|
|
87
|
+
* @param sequence Source async iterable to forward values from.
|
|
88
|
+
* @returns An async iterator yielding each forwarded value.
|
|
89
|
+
* @example for await (const v of seq.through(source)) console.log(v);
|
|
90
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/through
|
|
91
|
+
*/
|
|
46
92
|
through(sequence: AsyncIterable<T>): AsyncIterator<T>;
|
|
47
93
|
next(_next?: N | undefined): Promise<IteratorResult<T, R | undefined>>;
|
|
48
94
|
then<X = T, Y = never>(onNext?: Nullable<(v: T) => X | PromiseLike<X>>, onError?: Nullable<(r: unknown) => Y | PromiseLike<Y>>): Promise<X | Y>;
|
|
@@ -7,6 +7,14 @@ import { Sequence } from "./Sequence.js";
|
|
|
7
7
|
* - Implements `Promise` so the next result can be awaited.
|
|
8
8
|
* - Implements `AsyncIterable` so values can be iterated over using `for await...of`
|
|
9
9
|
* - Call `resolve(value)` to publish the next value, `reject(reason?)` to publish an error, or `done(value?)` to signal completion.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const seq = new DeferredSequence<number>();
|
|
13
|
+
* (async () => { for await (const n of seq) console.log(n); })();
|
|
14
|
+
* seq.resolve(1);
|
|
15
|
+
* seq.resolve(2);
|
|
16
|
+
* seq.done();
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence
|
|
10
18
|
*/
|
|
11
19
|
export class DeferredSequence extends Sequence {
|
|
12
20
|
/** Lazy deferred that stores iterator values. */
|
|
@@ -15,7 +23,11 @@ export class DeferredSequence extends Sequence {
|
|
|
15
23
|
_promiseDeferred;
|
|
16
24
|
/** Next iterator result to reject the deferred to (on next microtask). */
|
|
17
25
|
_next;
|
|
18
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Next promise to be resolved/rejected with the upcoming value.
|
|
28
|
+
*
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/promise
|
|
30
|
+
*/
|
|
19
31
|
get promise() {
|
|
20
32
|
this._promiseDeferred ||= createDeferred();
|
|
21
33
|
return this._promiseDeferred.promise;
|
|
@@ -23,13 +35,22 @@ export class DeferredSequence extends Sequence {
|
|
|
23
35
|
/**
|
|
24
36
|
* Resolve the current deferred in the sequence with a value.
|
|
25
37
|
* - Sends a `{ value: X }` to any iterators.
|
|
38
|
+
*
|
|
39
|
+
* @param value Value to publish to iterators and awaiting promises.
|
|
40
|
+
* @example seq.resolve(123);
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/resolve
|
|
26
42
|
*/
|
|
27
43
|
resolve(value) {
|
|
28
44
|
this._next = { value };
|
|
29
45
|
queueMicrotask(() => this._fulfill());
|
|
30
46
|
}
|
|
31
47
|
/**
|
|
32
|
-
* Reject the current deferred in the sequence.
|
|
48
|
+
* Reject the current deferred in the sequence with an error.
|
|
49
|
+
* - Sends a `{ reason: X }` to any iterators, causing `for await` loops to throw.
|
|
50
|
+
*
|
|
51
|
+
* @param reason Error or other thrown value to publish to iterators and awaiting promises.
|
|
52
|
+
* @example seq.reject(new Error("Stop"));
|
|
53
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/reject
|
|
33
54
|
*/
|
|
34
55
|
reject(reason) {
|
|
35
56
|
this._next = { reason };
|
|
@@ -38,6 +59,10 @@ export class DeferredSequence extends Sequence {
|
|
|
38
59
|
/**
|
|
39
60
|
* Signal that the sequence is done, causing any active `for await` loops to exit cleanly.
|
|
40
61
|
* - Sends a `{ done: true, value: R }` to any iterators.
|
|
62
|
+
*
|
|
63
|
+
* @param value Optional final return value for the sequence.
|
|
64
|
+
* @example seq.done();
|
|
65
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/done
|
|
41
66
|
*/
|
|
42
67
|
done(value) {
|
|
43
68
|
this._next = { done: true, value };
|
|
@@ -46,6 +71,9 @@ export class DeferredSequence extends Sequence {
|
|
|
46
71
|
/**
|
|
47
72
|
* Cancel the current resolution or rejection.
|
|
48
73
|
* - Iterators will contain to wait for a next value.
|
|
74
|
+
*
|
|
75
|
+
* @example seq.cancel();
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/cancel
|
|
49
77
|
*/
|
|
50
78
|
cancel() {
|
|
51
79
|
this._next = undefined;
|
|
@@ -70,7 +98,15 @@ export class DeferredSequence extends Sequence {
|
|
|
70
98
|
}
|
|
71
99
|
}
|
|
72
100
|
}
|
|
73
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Resolve the current deferred from a sequence of values.
|
|
103
|
+
* - Iterates `sequence`, republishing each value through this deferred sequence and yielding it on.
|
|
104
|
+
*
|
|
105
|
+
* @param sequence Source async iterable to forward values from.
|
|
106
|
+
* @returns An async iterator yielding each forwarded value.
|
|
107
|
+
* @example for await (const v of seq.through(source)) console.log(v);
|
|
108
|
+
* @see https://dhoulb.github.io/shelving/sequence/DeferredSequence/DeferredSequence/through
|
|
109
|
+
*/
|
|
74
110
|
async *through(sequence) {
|
|
75
111
|
for await (const item of sequence) {
|
|
76
112
|
this.resolve(item);
|
|
@@ -8,25 +8,79 @@ import { ThroughSequence } from "./ThroughSequence.js";
|
|
|
8
8
|
* for await (const next of capture) console.log("YIELDED", next);
|
|
9
9
|
* console.log("FIRST", watch.first);
|
|
10
10
|
* console.log("RETURNED", watch.returned);
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence
|
|
11
12
|
*/
|
|
12
13
|
export declare class InspectSequence<T, R, N> extends ThroughSequence<T, R, N> {
|
|
13
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* The number of values yielded by the source sequence so far.
|
|
16
|
+
*
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/count
|
|
18
|
+
*/
|
|
14
19
|
get count(): number;
|
|
15
20
|
private _count;
|
|
16
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Whether the source sequence has finished iterating (i.e. it has returned).
|
|
23
|
+
*
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/done
|
|
25
|
+
*/
|
|
17
26
|
get done(): boolean;
|
|
18
27
|
private _done;
|
|
19
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* The first value yielded by the source sequence.
|
|
30
|
+
*
|
|
31
|
+
* - Throws if the iteration yielded no values yet, i.e. `this.count === 0`.
|
|
32
|
+
*
|
|
33
|
+
* @throws {UnexpectedError} If iteration has not yielded any value yet.
|
|
34
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/first
|
|
35
|
+
*/
|
|
20
36
|
get first(): T;
|
|
21
37
|
private _first;
|
|
22
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* The last value yielded by the source sequence.
|
|
40
|
+
*
|
|
41
|
+
* - Throws if the iteration yielded no values yet, i.e. `this.count === 0`.
|
|
42
|
+
*
|
|
43
|
+
* @throws {UnexpectedError} If iteration has not yielded any value yet.
|
|
44
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/last
|
|
45
|
+
*/
|
|
23
46
|
get last(): T;
|
|
24
47
|
private _last;
|
|
25
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* The value returned by the source sequence when it finished.
|
|
50
|
+
*
|
|
51
|
+
* - Throws if the iteration is not done yet, i.e. `this.done === false`.
|
|
52
|
+
*
|
|
53
|
+
* @throws {UnexpectedError} If iteration is not done yet.
|
|
54
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/returned
|
|
55
|
+
*/
|
|
26
56
|
get returned(): R | undefined;
|
|
27
57
|
private _returned;
|
|
58
|
+
/**
|
|
59
|
+
* Advance the source sequence by one step, recording the yielded or returned value.
|
|
60
|
+
*
|
|
61
|
+
* @param value Optional value passed into the source sequence's `next()`.
|
|
62
|
+
* @returns Promise resolving to the next `IteratorResult` from the source sequence.
|
|
63
|
+
* @example const { value, done } = await watch.next()
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/next
|
|
65
|
+
*/
|
|
28
66
|
next(value?: N | undefined): Promise<IteratorResult<T, R | undefined>>;
|
|
67
|
+
/**
|
|
68
|
+
* Finish the source sequence early, recording the returned value.
|
|
69
|
+
*
|
|
70
|
+
* @param value Optional value to return from the source sequence.
|
|
71
|
+
* @returns Promise resolving to the final `IteratorResult` from the source sequence.
|
|
72
|
+
* @example await watch.return()
|
|
73
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/return
|
|
74
|
+
*/
|
|
29
75
|
return(value?: R | undefined | PromiseLike<R | undefined>): Promise<IteratorResult<T, R | undefined>>;
|
|
76
|
+
/**
|
|
77
|
+
* Throw an error into the source sequence, recording the resulting value.
|
|
78
|
+
*
|
|
79
|
+
* @param reason The reason to throw into the source sequence.
|
|
80
|
+
* @returns Promise resolving to the `IteratorResult` produced after throwing.
|
|
81
|
+
* @example await watch.throw(new Error("stop"))
|
|
82
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/throw
|
|
83
|
+
*/
|
|
30
84
|
throw(reason?: unknown): Promise<IteratorResult<T, R | undefined>>;
|
|
31
85
|
/** Capture a result. */
|
|
32
86
|
private _inspect;
|
|
@@ -12,19 +12,35 @@ const _NOVALUE = Symbol("shelving/InspectSequence.NOVALUE");
|
|
|
12
12
|
* for await (const next of capture) console.log("YIELDED", next);
|
|
13
13
|
* console.log("FIRST", watch.first);
|
|
14
14
|
* console.log("RETURNED", watch.returned);
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence
|
|
15
16
|
*/
|
|
16
17
|
export class InspectSequence extends ThroughSequence {
|
|
17
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* The number of values yielded by the source sequence so far.
|
|
20
|
+
*
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/count
|
|
22
|
+
*/
|
|
18
23
|
get count() {
|
|
19
24
|
return this._count;
|
|
20
25
|
}
|
|
21
26
|
_count = 0;
|
|
22
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Whether the source sequence has finished iterating (i.e. it has returned).
|
|
29
|
+
*
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/done
|
|
31
|
+
*/
|
|
23
32
|
get done() {
|
|
24
33
|
return this._done;
|
|
25
34
|
}
|
|
26
35
|
_done = false;
|
|
27
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* The first value yielded by the source sequence.
|
|
38
|
+
*
|
|
39
|
+
* - Throws if the iteration yielded no values yet, i.e. `this.count === 0`.
|
|
40
|
+
*
|
|
41
|
+
* @throws {UnexpectedError} If iteration has not yielded any value yet.
|
|
42
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/first
|
|
43
|
+
*/
|
|
28
44
|
get first() {
|
|
29
45
|
if (this._first === _NOVALUE)
|
|
30
46
|
throw new UnexpectedError("Iteration not started", {
|
|
@@ -34,7 +50,14 @@ export class InspectSequence extends ThroughSequence {
|
|
|
34
50
|
return this._first;
|
|
35
51
|
}
|
|
36
52
|
_first = _NOVALUE;
|
|
37
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* The last value yielded by the source sequence.
|
|
55
|
+
*
|
|
56
|
+
* - Throws if the iteration yielded no values yet, i.e. `this.count === 0`.
|
|
57
|
+
*
|
|
58
|
+
* @throws {UnexpectedError} If iteration has not yielded any value yet.
|
|
59
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/last
|
|
60
|
+
*/
|
|
38
61
|
get last() {
|
|
39
62
|
if (this._last === _NOVALUE)
|
|
40
63
|
throw new UnexpectedError("Iteration not started", {
|
|
@@ -44,7 +67,14 @@ export class InspectSequence extends ThroughSequence {
|
|
|
44
67
|
return this._last;
|
|
45
68
|
}
|
|
46
69
|
_last = _NOVALUE;
|
|
47
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* The value returned by the source sequence when it finished.
|
|
72
|
+
*
|
|
73
|
+
* - Throws if the iteration is not done yet, i.e. `this.done === false`.
|
|
74
|
+
*
|
|
75
|
+
* @throws {UnexpectedError} If iteration is not done yet.
|
|
76
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/returned
|
|
77
|
+
*/
|
|
48
78
|
get returned() {
|
|
49
79
|
if (this._returned === _NOVALUE)
|
|
50
80
|
throw new UnexpectedError("Iteration not done", {
|
|
@@ -55,12 +85,36 @@ export class InspectSequence extends ThroughSequence {
|
|
|
55
85
|
}
|
|
56
86
|
_returned = _NOVALUE;
|
|
57
87
|
// Override to watch returned values.
|
|
88
|
+
/**
|
|
89
|
+
* Advance the source sequence by one step, recording the yielded or returned value.
|
|
90
|
+
*
|
|
91
|
+
* @param value Optional value passed into the source sequence's `next()`.
|
|
92
|
+
* @returns Promise resolving to the next `IteratorResult` from the source sequence.
|
|
93
|
+
* @example const { value, done } = await watch.next()
|
|
94
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/next
|
|
95
|
+
*/
|
|
58
96
|
async next(value) {
|
|
59
97
|
return this._inspect(await super.next(value));
|
|
60
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Finish the source sequence early, recording the returned value.
|
|
101
|
+
*
|
|
102
|
+
* @param value Optional value to return from the source sequence.
|
|
103
|
+
* @returns Promise resolving to the final `IteratorResult` from the source sequence.
|
|
104
|
+
* @example await watch.return()
|
|
105
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/return
|
|
106
|
+
*/
|
|
61
107
|
async return(value) {
|
|
62
108
|
return this._inspect(await super.return(value));
|
|
63
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Throw an error into the source sequence, recording the resulting value.
|
|
112
|
+
*
|
|
113
|
+
* @param reason The reason to throw into the source sequence.
|
|
114
|
+
* @returns Promise resolving to the `IteratorResult` produced after throwing.
|
|
115
|
+
* @example await watch.throw(new Error("stop"))
|
|
116
|
+
* @see https://dhoulb.github.io/shelving/sequence/InspectSequence/InspectSequence/throw
|
|
117
|
+
*/
|
|
64
118
|
async throw(reason) {
|
|
65
119
|
return this._inspect(await super.throw(reason));
|
|
66
120
|
}
|
|
@@ -1,11 +1,31 @@
|
|
|
1
1
|
import { type StartCallback } from "../util/start.js";
|
|
2
2
|
import { ThroughSequence } from "./ThroughSequence.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Sequence of values that calls a `StartCallback` when it has iterators that are iterating, and calls the corresponding `StopCallback` when all iterators have finished.
|
|
5
|
+
* - The `start` callback runs lazily on the first active iterator and the returned stop callback runs when the last iterator finishes.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const seq = new LazySequence(source, () => {
|
|
9
|
+
* const timer = setInterval(tick, 1000);
|
|
10
|
+
* return () => clearInterval(timer); // Stop callback.
|
|
11
|
+
* });
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/sequence/LazySequence/LazySequence
|
|
13
|
+
*/
|
|
4
14
|
export declare class LazySequence<T = void, R = void, N = void> extends ThroughSequence<T, R, N> implements AsyncDisposable {
|
|
5
15
|
private _iterators;
|
|
6
16
|
private _starter;
|
|
7
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Number of iterators currently registered as iterating.
|
|
19
|
+
*
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/sequence/LazySequence/LazySequence/iterators
|
|
21
|
+
*/
|
|
8
22
|
get iterators(): number;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new `LazySequence`.
|
|
25
|
+
*
|
|
26
|
+
* @param source Async iterator to pull values from.
|
|
27
|
+
* @param start Callback run when the first iterator starts; its returned stop callback runs when the last iterator finishes.
|
|
28
|
+
*/
|
|
9
29
|
constructor(source: AsyncIterator<T, R, N>, start: StartCallback);
|
|
10
30
|
[Symbol.asyncIterator](): LazyIterator<T, R, N>;
|
|
11
31
|
[Symbol.asyncDispose](): Promise<void>;
|
|
@@ -13,12 +33,20 @@ export declare class LazySequence<T = void, R = void, N = void> extends ThroughS
|
|
|
13
33
|
* An iterator started iterating.
|
|
14
34
|
* - Add this iterator to the register.
|
|
15
35
|
* - Start the starter if this is the first iterator.
|
|
36
|
+
*
|
|
37
|
+
* @param iterator The iterator that has started iterating.
|
|
38
|
+
* @example sequence.start(iterator);
|
|
39
|
+
* @see https://dhoulb.github.io/shelving/sequence/LazySequence/LazySequence/start
|
|
16
40
|
*/
|
|
17
41
|
start(iterator: LazyIterator<T, R, N>): void;
|
|
18
42
|
/**
|
|
19
43
|
* An iterator stopped iterating.
|
|
20
44
|
* - Add this iterator to the register
|
|
21
45
|
* - Stop the starter if this is the last iterator.
|
|
46
|
+
*
|
|
47
|
+
* @param iterator The iterator that has stopped iterating.
|
|
48
|
+
* @example sequence.stop(iterator);
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/sequence/LazySequence/LazySequence/stop
|
|
22
50
|
*/
|
|
23
51
|
stop(iterator: LazyIterator<T, R, N>): void;
|
|
24
52
|
}
|