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/util/sequence.d.ts
CHANGED
|
@@ -1,22 +1,65 @@
|
|
|
1
1
|
import { ABORT } from "./constants.js";
|
|
2
2
|
import type { ErrorCallback, ValueCallback } from "./function.js";
|
|
3
|
+
/**
|
|
4
|
+
* Result of an iterator that was aborted via an external signal rather than concluding itself.
|
|
5
|
+
* - `done` is the `ABORT` symbol, distinguishing it from an iterator's own `done: true` result.
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/IteratorAbortResult
|
|
8
|
+
*/
|
|
3
9
|
export interface IteratorAbortResult<R> {
|
|
10
|
+
/** Always the `ABORT` symbol, marking this result as an external abort rather than the iterator finishing. */
|
|
4
11
|
done: typeof ABORT;
|
|
12
|
+
/** The value the abort signal resolved with. */
|
|
5
13
|
value: R;
|
|
6
14
|
}
|
|
7
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Result of stepping an iterator that may either yield, finish itself, or be aborted externally.
|
|
17
|
+
* - Union of a normal `IteratorResult<T, R>` and an `IteratorAbortResult<R>`.
|
|
18
|
+
*
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/IteratorAbortableResult
|
|
20
|
+
*/
|
|
8
21
|
export type IteratorAbortableResult<T, R> = IteratorResult<T, R> | IteratorAbortResult<R>;
|
|
9
22
|
/**
|
|
10
23
|
* Is a value an async iterable object?
|
|
11
|
-
* - Any object with a `Symbol.
|
|
12
|
-
*
|
|
24
|
+
* - Any object with a `Symbol.asyncIterator` property is an async iterable.
|
|
25
|
+
*
|
|
26
|
+
* @param value The value to test.
|
|
27
|
+
* @returns `true` if `value` is an `AsyncIterable`, narrowing its type.
|
|
28
|
+
* @example isSequence((async function* () {})()) // true
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/isSequence
|
|
13
30
|
*/
|
|
14
31
|
export declare function isSequence(value: unknown): value is AsyncIterable<unknown>;
|
|
15
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Infinite sequence that relays a source sequence until one of the abort signals resolves.
|
|
34
|
+
* - Races each step of `source` against the supplied signal promises; when a signal wins, tells the source iterator to clean up and returns the signal's value.
|
|
35
|
+
*
|
|
36
|
+
* @param source The source sequence to relay values from.
|
|
37
|
+
* @param signals One or more promises that, when resolved, abort the relay and end the sequence.
|
|
38
|
+
* @returns The value the winning abort signal resolved with, or the source's own return value if it finishes first.
|
|
39
|
+
* @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
|
|
40
|
+
* @example for await (const item of repeatUntil(source, stopSignal)) doSomething(item);
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/repeatUntil
|
|
42
|
+
*/
|
|
16
43
|
export declare function repeatUntil<T = void, R = void, N = void>(source: AsyncIterable<T, R | undefined, N | undefined>, ...signals: [PromiseLike<R>, ...PromiseLike<R>[]]): AsyncGenerator<T, R | undefined, N | undefined>;
|
|
17
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Infinite sequence that yields every X milliseconds (yields a count of the number of iterations).
|
|
46
|
+
*
|
|
47
|
+
* @param ms The number of milliseconds to wait between each yield.
|
|
48
|
+
* @returns An infinite async generator yielding `1`, `2`, `3`… one per interval.
|
|
49
|
+
* @example for await (const count of repeatDelay(1000)) console.log(count); // 1, 2, 3… one per second
|
|
50
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/repeatDelay
|
|
51
|
+
*/
|
|
18
52
|
export declare function repeatDelay(ms: number): AsyncGenerator<number, void, void>;
|
|
19
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Dispatch items in a sequence to a (possibly async) callback.
|
|
55
|
+
* - Calls `callback` with each item as it arrives, then re-yields the item unchanged.
|
|
56
|
+
*
|
|
57
|
+
* @param sequence The source sequence to relay.
|
|
58
|
+
* @param callback Callback invoked with each yielded item.
|
|
59
|
+
* @returns An async generator that yields the same items as `sequence`.
|
|
60
|
+
* @example for await (const item of callSequence(source, console.log)) use(item);
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/callSequence
|
|
62
|
+
*/
|
|
20
63
|
export declare function callSequence<T>(sequence: AsyncIterable<T, void, void>, callback: ValueCallback<T>): AsyncGenerator<T, void, void>;
|
|
21
64
|
/**
|
|
22
65
|
* Iterate over a sequence until the returned `stop()` callback is called.
|
|
@@ -26,8 +69,23 @@ export declare function callSequence<T>(sequence: AsyncIterable<T, void, void>,
|
|
|
26
69
|
* - On the following iterator after throwing an error, a "generator" will return `done: true` (because they regard errors as concluding the iteration).
|
|
27
70
|
* - But the iterator protocol does not require this, so this continues to iterate until it's explicitly ended via the returned `stop()` callback.
|
|
28
71
|
*
|
|
29
|
-
* @
|
|
72
|
+
* @param sequence The source sequence to iterate over.
|
|
73
|
+
* @param onNext Called with each yielded value; its return value is fed back into the iterator as the next `next()` argument.
|
|
74
|
+
* @param onError Called with any error thrown during iteration (iteration continues regardless).
|
|
75
|
+
* @param onReturn Called with the final return value when the sequence ends or is stopped.
|
|
76
|
+
* @returns Callback function that can end the sequence run, optionally with a return value.
|
|
77
|
+
* @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
|
|
78
|
+
* @example const stop = runSequence(source, onNext, onError, onReturn); stop(); // ends the run
|
|
79
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/runSequence
|
|
30
80
|
*/
|
|
31
81
|
export declare function runSequence<T, R, N>(sequence: AsyncIterable<T, R | undefined, N | undefined>, onNext?: (value: T) => N | undefined, onError?: ErrorCallback, onReturn?: (value: R | undefined) => void): (value?: R | undefined) => void;
|
|
32
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* Merge several sequences (calls the sequences in series).
|
|
84
|
+
* - Yields all items from the first sequence, then all items from the second, and so on.
|
|
85
|
+
*
|
|
86
|
+
* @param sequences The sequences to merge, drained one after another in order.
|
|
87
|
+
* @returns An async iterable that yields every item from each sequence in turn.
|
|
88
|
+
* @example for await (const item of mergeSequences(a, b)) use(item); // all of `a`, then all of `b`
|
|
89
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/mergeSequences
|
|
90
|
+
*/
|
|
33
91
|
export declare function mergeSequences<T>(...sequences: AsyncIterable<T>[]): AsyncIterable<T>;
|
package/util/sequence.js
CHANGED
|
@@ -21,13 +21,27 @@ async function _iteratorReturn(iterator, initial, caller) {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Is a value an async iterable object?
|
|
24
|
-
* - Any object with a `Symbol.
|
|
25
|
-
*
|
|
24
|
+
* - Any object with a `Symbol.asyncIterator` property is an async iterable.
|
|
25
|
+
*
|
|
26
|
+
* @param value The value to test.
|
|
27
|
+
* @returns `true` if `value` is an `AsyncIterable`, narrowing its type.
|
|
28
|
+
* @example isSequence((async function* () {})()) // true
|
|
29
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/isSequence
|
|
26
30
|
*/
|
|
27
31
|
export function isSequence(value) {
|
|
28
32
|
return typeof value === "object" && !!value && Symbol.asyncIterator in value;
|
|
29
33
|
}
|
|
30
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Infinite sequence that relays a source sequence until one of the abort signals resolves.
|
|
36
|
+
* - Races each step of `source` against the supplied signal promises; when a signal wins, tells the source iterator to clean up and returns the signal's value.
|
|
37
|
+
*
|
|
38
|
+
* @param source The source sequence to relay values from.
|
|
39
|
+
* @param signals One or more promises that, when resolved, abort the relay and end the sequence.
|
|
40
|
+
* @returns The value the winning abort signal resolved with, or the source's own return value if it finishes first.
|
|
41
|
+
* @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
|
|
42
|
+
* @example for await (const item of repeatUntil(source, stopSignal)) doSomething(item);
|
|
43
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/repeatUntil
|
|
44
|
+
*/
|
|
31
45
|
export async function* repeatUntil(source, ...signals) {
|
|
32
46
|
const iterator = source[Symbol.asyncIterator]();
|
|
33
47
|
const aborts = signals.map(_awaitAbortResult);
|
|
@@ -56,7 +70,14 @@ export async function* repeatUntil(source, ...signals) {
|
|
|
56
70
|
}
|
|
57
71
|
}
|
|
58
72
|
}
|
|
59
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* Infinite sequence that yields every X milliseconds (yields a count of the number of iterations).
|
|
75
|
+
*
|
|
76
|
+
* @param ms The number of milliseconds to wait between each yield.
|
|
77
|
+
* @returns An infinite async generator yielding `1`, `2`, `3`… one per interval.
|
|
78
|
+
* @example for await (const count of repeatDelay(1000)) console.log(count); // 1, 2, 3… one per second
|
|
79
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/repeatDelay
|
|
80
|
+
*/
|
|
60
81
|
export async function* repeatDelay(ms) {
|
|
61
82
|
let count = 1;
|
|
62
83
|
while (true) {
|
|
@@ -64,7 +85,16 @@ export async function* repeatDelay(ms) {
|
|
|
64
85
|
yield count++;
|
|
65
86
|
}
|
|
66
87
|
}
|
|
67
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Dispatch items in a sequence to a (possibly async) callback.
|
|
90
|
+
* - Calls `callback` with each item as it arrives, then re-yields the item unchanged.
|
|
91
|
+
*
|
|
92
|
+
* @param sequence The source sequence to relay.
|
|
93
|
+
* @param callback Callback invoked with each yielded item.
|
|
94
|
+
* @returns An async generator that yields the same items as `sequence`.
|
|
95
|
+
* @example for await (const item of callSequence(source, console.log)) use(item);
|
|
96
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/callSequence
|
|
97
|
+
*/
|
|
68
98
|
export async function* callSequence(sequence, callback) {
|
|
69
99
|
for await (const item of sequence) {
|
|
70
100
|
callback(item);
|
|
@@ -79,7 +109,14 @@ export async function* callSequence(sequence, callback) {
|
|
|
79
109
|
* - On the following iterator after throwing an error, a "generator" will return `done: true` (because they regard errors as concluding the iteration).
|
|
80
110
|
* - But the iterator protocol does not require this, so this continues to iterate until it's explicitly ended via the returned `stop()` callback.
|
|
81
111
|
*
|
|
82
|
-
* @
|
|
112
|
+
* @param sequence The source sequence to iterate over.
|
|
113
|
+
* @param onNext Called with each yielded value; its return value is fed back into the iterator as the next `next()` argument.
|
|
114
|
+
* @param onError Called with any error thrown during iteration (iteration continues regardless).
|
|
115
|
+
* @param onReturn Called with the final return value when the sequence ends or is stopped.
|
|
116
|
+
* @returns Callback function that can end the sequence run, optionally with a return value.
|
|
117
|
+
* @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
|
|
118
|
+
* @example const stop = runSequence(source, onNext, onError, onReturn); stop(); // ends the run
|
|
119
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/runSequence
|
|
83
120
|
*/
|
|
84
121
|
export function runSequence(sequence, onNext, onError, onReturn) {
|
|
85
122
|
const { promise, resolve } = createDeferred();
|
|
@@ -109,7 +146,15 @@ async function _runSequenceIterator(iterator, stopped, onNext, onError, onReturn
|
|
|
109
146
|
}
|
|
110
147
|
}
|
|
111
148
|
}
|
|
112
|
-
/**
|
|
149
|
+
/**
|
|
150
|
+
* Merge several sequences (calls the sequences in series).
|
|
151
|
+
* - Yields all items from the first sequence, then all items from the second, and so on.
|
|
152
|
+
*
|
|
153
|
+
* @param sequences The sequences to merge, drained one after another in order.
|
|
154
|
+
* @returns An async iterable that yields every item from each sequence in turn.
|
|
155
|
+
* @example for await (const item of mergeSequences(a, b)) use(item); // all of `a`, then all of `b`
|
|
156
|
+
* @see https://dhoulb.github.io/shelving/util/sequence/mergeSequences
|
|
157
|
+
*/
|
|
113
158
|
export async function* mergeSequences(...sequences) {
|
|
114
159
|
for await (const sequence of sequences)
|
|
115
160
|
yield* sequence;
|
package/util/serialise.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Serialise any value to a stable, consistent string (a `JSON.stringify()` that never loses information).
|
|
3
3
|
* - Not optimised for performance. Optimised for consistency!
|
|
4
4
|
* - Allows returned values to be used for fingerprinting values of any type.
|
|
5
5
|
* - Non-JSON-friendly values (like `null`, explicit `undefined`, symbols, functions) are converted to `{ $type: "symbol" }` style constructions.
|
|
6
6
|
* - Objects with custom `toString()` properties assume that string is useful and return a value like `{ $type: "Date", value: "Wed Feb 24 2021 20:59:57 GMT+0000 (Greenwich Mean Time)" }`
|
|
7
7
|
* - Object properties are sorted (by key) before output so they're always consistent.
|
|
8
|
+
*
|
|
9
|
+
* @param value The value to serialise (any type is accepted).
|
|
10
|
+
* @returns A consistent string representation of `value`, suitable for fingerprinting or equality comparison.
|
|
11
|
+
* @throws {ValueError} If `value` cannot be serialised.
|
|
12
|
+
* @example serialise({ b: 2, a: 1 }) // `{"a":1,"b":2}`
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/util/serialise/serialise
|
|
8
14
|
*/
|
|
9
15
|
export declare function serialise(value: unknown): string;
|
package/util/serialise.js
CHANGED
|
@@ -3,12 +3,18 @@ import { isArray } from "./array.js";
|
|
|
3
3
|
import { getPrototype, isObject } from "./object.js";
|
|
4
4
|
const R_QUOTE = /"/g;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Serialise any value to a stable, consistent string (a `JSON.stringify()` that never loses information).
|
|
7
7
|
* - Not optimised for performance. Optimised for consistency!
|
|
8
8
|
* - Allows returned values to be used for fingerprinting values of any type.
|
|
9
9
|
* - Non-JSON-friendly values (like `null`, explicit `undefined`, symbols, functions) are converted to `{ $type: "symbol" }` style constructions.
|
|
10
10
|
* - Objects with custom `toString()` properties assume that string is useful and return a value like `{ $type: "Date", value: "Wed Feb 24 2021 20:59:57 GMT+0000 (Greenwich Mean Time)" }`
|
|
11
11
|
* - Object properties are sorted (by key) before output so they're always consistent.
|
|
12
|
+
*
|
|
13
|
+
* @param value The value to serialise (any type is accepted).
|
|
14
|
+
* @returns A consistent string representation of `value`, suitable for fingerprinting or equality comparison.
|
|
15
|
+
* @throws {ValueError} If `value` cannot be serialised.
|
|
16
|
+
* @example serialise({ b: 2, a: 1 }) // `{"a":1,"b":2}`
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/util/serialise/serialise
|
|
12
18
|
*/
|
|
13
19
|
export function serialise(value) {
|
|
14
20
|
if (value === true)
|
package/util/set.d.ts
CHANGED
|
@@ -1,27 +1,117 @@
|
|
|
1
1
|
import type { AnyCaller } from "./function.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* `Set` that cannot be changed.
|
|
4
|
+
*
|
|
5
|
+
* @see https://dhoulb.github.io/shelving/util/set/ImmutableSet
|
|
6
|
+
*/
|
|
3
7
|
export type ImmutableSet<T = unknown> = ReadonlySet<T>;
|
|
4
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* `Set` that can be changed.
|
|
10
|
+
*
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/util/set/MutableSet
|
|
12
|
+
*/
|
|
5
13
|
export type MutableSet<T = unknown> = Set<T>;
|
|
6
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Things that can be converted to sets.
|
|
16
|
+
*
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/util/set/PossibleSet
|
|
18
|
+
*/
|
|
7
19
|
export type PossibleSet<T> = ImmutableSet<T> | Iterable<T>;
|
|
8
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Get the type of the _items_ in a set.
|
|
22
|
+
*
|
|
23
|
+
* @see https://dhoulb.github.io/shelving/util/set/SetItem
|
|
24
|
+
*/
|
|
9
25
|
export type SetItem<X> = X extends ReadonlySet<infer Y> ? Y : never;
|
|
10
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Is an unknown value a set?
|
|
28
|
+
*
|
|
29
|
+
* @param value The value to check.
|
|
30
|
+
* @returns `true` if `value` is a `Set` instance, otherwise `false`.
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/util/set/isSet
|
|
32
|
+
*/
|
|
11
33
|
export declare function isSet(value: unknown): value is ImmutableSet;
|
|
12
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Assert that a value is a `Set` instance.
|
|
36
|
+
*
|
|
37
|
+
* @param value The value to assert on.
|
|
38
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertSet`).
|
|
39
|
+
* @throws {RequiredError} If `value` is not a `Set` instance.
|
|
40
|
+
* @example assertSet(new Set()); // Passes.
|
|
41
|
+
* @see https://dhoulb.github.io/shelving/util/set/assertSet
|
|
42
|
+
*/
|
|
13
43
|
export declare function assertSet(value: unknown, caller?: AnyCaller): asserts value is ImmutableSet;
|
|
14
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Convert a possible set to a `Set`.
|
|
46
|
+
* - Returns the input unchanged when it is already a `Set`; otherwise constructs a new `Set` from the iterable.
|
|
47
|
+
*
|
|
48
|
+
* @param value A `Set` or any iterable of items.
|
|
49
|
+
* @returns A `Set` containing the items of `value`.
|
|
50
|
+
* @example getSet(["a", "b"]) // Set { "a", "b" }
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/util/set/getSet
|
|
52
|
+
*/
|
|
15
53
|
export declare function getSet<T>(value: PossibleSet<T>): ImmutableSet;
|
|
16
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* Apply a limit to a set.
|
|
56
|
+
* - Returns the input unchanged when it already fits within `limit`.
|
|
57
|
+
*
|
|
58
|
+
* @param set The set to limit.
|
|
59
|
+
* @param limit The maximum number of items to keep.
|
|
60
|
+
* @returns A set containing at most `limit` items.
|
|
61
|
+
* @example limitSet(new Set([1, 2, 3]), 2) // Set { 1, 2 }
|
|
62
|
+
* @see https://dhoulb.github.io/shelving/util/set/limitSet
|
|
63
|
+
*/
|
|
17
64
|
export declare function limitSet<T>(set: ImmutableSet<T>, limit: number): ImmutableSet<T>;
|
|
18
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Is an unknown value an item in a set?
|
|
67
|
+
*
|
|
68
|
+
* @param set The set to look in.
|
|
69
|
+
* @param item The value to check for membership.
|
|
70
|
+
* @returns `true` if `item` exists in `set`, otherwise `false`.
|
|
71
|
+
* @see https://dhoulb.github.io/shelving/util/set/isSetItem
|
|
72
|
+
*/
|
|
19
73
|
export declare function isSetItem<T>(set: ImmutableSet<T>, item: unknown): item is T;
|
|
20
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* Assert that an unknown value is an item in a set.
|
|
76
|
+
*
|
|
77
|
+
* @param set The set to look in.
|
|
78
|
+
* @param item The value to assert membership of.
|
|
79
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertSetItem`).
|
|
80
|
+
* @throws {RequiredError} If `item` does not exist in `set`.
|
|
81
|
+
* @example assertSetItem(new Set(["a"]), "a"); // Passes.
|
|
82
|
+
* @see https://dhoulb.github.io/shelving/util/set/assertSetItem
|
|
83
|
+
*/
|
|
21
84
|
export declare function assertSetItem<T>(set: ImmutableSet<T>, item: unknown, caller?: AnyCaller): asserts item is T;
|
|
22
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Add an item to a set (by reference) and return the set item.
|
|
87
|
+
* - Mutates `set` in place.
|
|
88
|
+
*
|
|
89
|
+
* @param set The mutable set to add to.
|
|
90
|
+
* @param item The item to add.
|
|
91
|
+
* @returns The added `item`.
|
|
92
|
+
* @example addSetItem(set, "a") // "a"
|
|
93
|
+
* @see https://dhoulb.github.io/shelving/util/set/addSetItem
|
|
94
|
+
*/
|
|
23
95
|
export declare function addSetItem<T>(set: MutableSet<T>, item: T): T;
|
|
24
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Add multiple items to a set (by reference).
|
|
98
|
+
* - Mutates `set` in place.
|
|
99
|
+
*
|
|
100
|
+
* @param set The mutable set to add to.
|
|
101
|
+
* @param items The items to add.
|
|
102
|
+
* @returns Nothing.
|
|
103
|
+
* @example addSetItems(set, "a", "b");
|
|
104
|
+
* @see https://dhoulb.github.io/shelving/util/set/addSetItems
|
|
105
|
+
*/
|
|
25
106
|
export declare function addSetItems<T>(set: MutableSet<T>, ...items: T[]): void;
|
|
26
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Remove multiple items from a set (by reference).
|
|
109
|
+
* - Mutates `set` in place.
|
|
110
|
+
*
|
|
111
|
+
* @param set The mutable set to remove from.
|
|
112
|
+
* @param items The items to remove.
|
|
113
|
+
* @returns Nothing.
|
|
114
|
+
* @example deleteSetItems(set, "a", "b");
|
|
115
|
+
* @see https://dhoulb.github.io/shelving/util/set/deleteSetItems
|
|
116
|
+
*/
|
|
27
117
|
export declare function deleteSetItems<T>(set: MutableSet<T>, ...items: T[]): void;
|
package/util/set.js
CHANGED
|
@@ -1,42 +1,116 @@
|
|
|
1
1
|
import { RequiredError } from "../error/RequiredError.js";
|
|
2
2
|
import { limitItems } from "./iterate.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Is an unknown value a set?
|
|
5
|
+
*
|
|
6
|
+
* @param value The value to check.
|
|
7
|
+
* @returns `true` if `value` is a `Set` instance, otherwise `false`.
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/util/set/isSet
|
|
9
|
+
*/
|
|
4
10
|
export function isSet(value) {
|
|
5
11
|
return value instanceof Set;
|
|
6
12
|
}
|
|
7
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Assert that a value is a `Set` instance.
|
|
15
|
+
*
|
|
16
|
+
* @param value The value to assert on.
|
|
17
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertSet`).
|
|
18
|
+
* @throws {RequiredError} If `value` is not a `Set` instance.
|
|
19
|
+
* @example assertSet(new Set()); // Passes.
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/util/set/assertSet
|
|
21
|
+
*/
|
|
8
22
|
export function assertSet(value, caller = assertSet) {
|
|
9
23
|
if (!isSet(value))
|
|
10
24
|
throw new RequiredError("Must be set", { received: value, caller });
|
|
11
25
|
}
|
|
12
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Convert a possible set to a `Set`.
|
|
28
|
+
* - Returns the input unchanged when it is already a `Set`; otherwise constructs a new `Set` from the iterable.
|
|
29
|
+
*
|
|
30
|
+
* @param value A `Set` or any iterable of items.
|
|
31
|
+
* @returns A `Set` containing the items of `value`.
|
|
32
|
+
* @example getSet(["a", "b"]) // Set { "a", "b" }
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/util/set/getSet
|
|
34
|
+
*/
|
|
13
35
|
export function getSet(value) {
|
|
14
36
|
return isSet(value) ? value : new Set(value);
|
|
15
37
|
}
|
|
16
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Apply a limit to a set.
|
|
40
|
+
* - Returns the input unchanged when it already fits within `limit`.
|
|
41
|
+
*
|
|
42
|
+
* @param set The set to limit.
|
|
43
|
+
* @param limit The maximum number of items to keep.
|
|
44
|
+
* @returns A set containing at most `limit` items.
|
|
45
|
+
* @example limitSet(new Set([1, 2, 3]), 2) // Set { 1, 2 }
|
|
46
|
+
* @see https://dhoulb.github.io/shelving/util/set/limitSet
|
|
47
|
+
*/
|
|
17
48
|
export function limitSet(set, limit) {
|
|
18
49
|
return limit > set.size ? set : new Set(limitItems(set, limit));
|
|
19
50
|
}
|
|
20
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Is an unknown value an item in a set?
|
|
53
|
+
*
|
|
54
|
+
* @param set The set to look in.
|
|
55
|
+
* @param item The value to check for membership.
|
|
56
|
+
* @returns `true` if `item` exists in `set`, otherwise `false`.
|
|
57
|
+
* @see https://dhoulb.github.io/shelving/util/set/isSetItem
|
|
58
|
+
*/
|
|
21
59
|
export function isSetItem(set, item) {
|
|
22
60
|
return set.has(item);
|
|
23
61
|
}
|
|
24
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Assert that an unknown value is an item in a set.
|
|
64
|
+
*
|
|
65
|
+
* @param set The set to look in.
|
|
66
|
+
* @param item The value to assert membership of.
|
|
67
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertSetItem`).
|
|
68
|
+
* @throws {RequiredError} If `item` does not exist in `set`.
|
|
69
|
+
* @example assertSetItem(new Set(["a"]), "a"); // Passes.
|
|
70
|
+
* @see https://dhoulb.github.io/shelving/util/set/assertSetItem
|
|
71
|
+
*/
|
|
25
72
|
export function assertSetItem(set, item, caller = assertSetItem) {
|
|
26
73
|
if (!isSetItem(set, item))
|
|
27
74
|
throw new RequiredError("Item must exist in set", { item, set, caller });
|
|
28
75
|
}
|
|
29
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Add an item to a set (by reference) and return the set item.
|
|
78
|
+
* - Mutates `set` in place.
|
|
79
|
+
*
|
|
80
|
+
* @param set The mutable set to add to.
|
|
81
|
+
* @param item The item to add.
|
|
82
|
+
* @returns The added `item`.
|
|
83
|
+
* @example addSetItem(set, "a") // "a"
|
|
84
|
+
* @see https://dhoulb.github.io/shelving/util/set/addSetItem
|
|
85
|
+
*/
|
|
30
86
|
export function addSetItem(set, item) {
|
|
31
87
|
set.add(item);
|
|
32
88
|
return item;
|
|
33
89
|
}
|
|
34
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Add multiple items to a set (by reference).
|
|
92
|
+
* - Mutates `set` in place.
|
|
93
|
+
*
|
|
94
|
+
* @param set The mutable set to add to.
|
|
95
|
+
* @param items The items to add.
|
|
96
|
+
* @returns Nothing.
|
|
97
|
+
* @example addSetItems(set, "a", "b");
|
|
98
|
+
* @see https://dhoulb.github.io/shelving/util/set/addSetItems
|
|
99
|
+
*/
|
|
35
100
|
export function addSetItems(set, ...items) {
|
|
36
101
|
for (const item of items)
|
|
37
102
|
set.add(item);
|
|
38
103
|
}
|
|
39
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Remove multiple items from a set (by reference).
|
|
106
|
+
* - Mutates `set` in place.
|
|
107
|
+
*
|
|
108
|
+
* @param set The mutable set to remove from.
|
|
109
|
+
* @param items The items to remove.
|
|
110
|
+
* @returns Nothing.
|
|
111
|
+
* @example deleteSetItems(set, "a", "b");
|
|
112
|
+
* @see https://dhoulb.github.io/shelving/util/set/deleteSetItems
|
|
113
|
+
*/
|
|
40
114
|
export function deleteSetItems(set, ...items) {
|
|
41
115
|
for (const item of items)
|
|
42
116
|
set.delete(item);
|
package/util/sort.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { ImmutableArray } from "./array.js";
|
|
2
2
|
import type { Arguments } from "./function.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Function that can compare two values for sorting.
|
|
5
|
+
* - Returns a negative number if `left` sorts before `right`, positive if after, or `0` if equally ranked (like `Array.prototype.sort()`).
|
|
6
|
+
*
|
|
7
|
+
* @see https://dhoulb.github.io/shelving/util/sort/Compare
|
|
8
|
+
*/
|
|
4
9
|
export type Compare<T, A extends Arguments = []> = (left: T, right: T, ...args: A) => number;
|
|
5
10
|
/**
|
|
6
11
|
* Compare two unknown values in ascending order.
|
|
@@ -14,13 +19,33 @@ export type Compare<T, A extends Arguments = []> = (left: T, right: T, ...args:
|
|
|
14
19
|
* 6. Unsorted values (objects that can't be converted to number or string, symbols, NaN, etc)
|
|
15
20
|
* 7. `undefined`
|
|
16
21
|
*
|
|
17
|
-
* @param
|
|
18
|
-
* @param
|
|
19
|
-
*
|
|
20
|
-
* @
|
|
22
|
+
* @param left The first value to rank.
|
|
23
|
+
* @param right The second value to rank.
|
|
24
|
+
* @returns Number below zero if `left` is higher, number above zero if `right` is higher, or `0` if they're equally sorted.
|
|
25
|
+
* @example compareAscending(1, 2) // -1
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/util/sort/compareAscending
|
|
21
27
|
*/
|
|
22
28
|
export declare function compareAscending(left: unknown, right: unknown): number;
|
|
23
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Compare two unknown values in descending order.
|
|
31
|
+
* - The exact inverse of `compareAscending`.
|
|
32
|
+
*
|
|
33
|
+
* @param left The first value to rank.
|
|
34
|
+
* @param right The second value to rank.
|
|
35
|
+
* @returns Number below zero if `right` is higher, number above zero if `left` is higher, or `0` if they're equally sorted.
|
|
36
|
+
* @example compareDescending(1, 2) // 1
|
|
37
|
+
* @see https://dhoulb.github.io/shelving/util/sort/compareDescending
|
|
38
|
+
*/
|
|
24
39
|
export declare function compareDescending(left: unknown, right: unknown): number;
|
|
25
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Sort an iterable set of items using a ranker (defaults to sorting in ascending order).
|
|
42
|
+
* - When the input is already an array and the sort makes no change, the original array reference is returned unchanged.
|
|
43
|
+
*
|
|
44
|
+
* @param input The array or iterable of items to sort.
|
|
45
|
+
* @param compare A `Compare` function ranking two items (defaults to `compareAscending`).
|
|
46
|
+
* @param args Extra arguments forwarded to `compare` on each call.
|
|
47
|
+
* @returns A sorted array (the original reference if it was an already-sorted array).
|
|
48
|
+
* @example sortArray([3, 1, 2]) // [1, 2, 3]
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/util/sort/sortArray
|
|
50
|
+
*/
|
|
26
51
|
export declare function sortArray<T, A extends Arguments = []>(input: ImmutableArray<T> | Iterable<T>, compare?: Compare<T, A>, ...args: A): ImmutableArray<T>;
|
package/util/sort.js
CHANGED
|
@@ -11,10 +11,11 @@ import { isArray } from "./array.js";
|
|
|
11
11
|
* 6. Unsorted values (objects that can't be converted to number or string, symbols, NaN, etc)
|
|
12
12
|
* 7. `undefined`
|
|
13
13
|
*
|
|
14
|
-
* @param
|
|
15
|
-
* @param
|
|
16
|
-
*
|
|
17
|
-
* @
|
|
14
|
+
* @param left The first value to rank.
|
|
15
|
+
* @param right The second value to rank.
|
|
16
|
+
* @returns Number below zero if `left` is higher, number above zero if `right` is higher, or `0` if they're equally sorted.
|
|
17
|
+
* @example compareAscending(1, 2) // -1
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/util/sort/compareAscending
|
|
18
19
|
*/
|
|
19
20
|
export function compareAscending(left, right) {
|
|
20
21
|
// Exactly equal is easy.
|
|
@@ -68,7 +69,16 @@ export function compareAscending(left, right) {
|
|
|
68
69
|
// Otherwise a is higher.
|
|
69
70
|
return -1;
|
|
70
71
|
}
|
|
71
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Compare two unknown values in descending order.
|
|
74
|
+
* - The exact inverse of `compareAscending`.
|
|
75
|
+
*
|
|
76
|
+
* @param left The first value to rank.
|
|
77
|
+
* @param right The second value to rank.
|
|
78
|
+
* @returns Number below zero if `right` is higher, number above zero if `left` is higher, or `0` if they're equally sorted.
|
|
79
|
+
* @example compareDescending(1, 2) // 1
|
|
80
|
+
* @see https://dhoulb.github.io/shelving/util/sort/compareDescending
|
|
81
|
+
*/
|
|
72
82
|
export function compareDescending(left, right) {
|
|
73
83
|
return 0 - compareAscending(left, right);
|
|
74
84
|
}
|
|
@@ -120,7 +130,17 @@ function _quicksort(items, compare, args, leftPointer = 0, rightPointer = items.
|
|
|
120
130
|
// Changes were made.
|
|
121
131
|
return changed;
|
|
122
132
|
}
|
|
123
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* Sort an iterable set of items using a ranker (defaults to sorting in ascending order).
|
|
135
|
+
* - When the input is already an array and the sort makes no change, the original array reference is returned unchanged.
|
|
136
|
+
*
|
|
137
|
+
* @param input The array or iterable of items to sort.
|
|
138
|
+
* @param compare A `Compare` function ranking two items (defaults to `compareAscending`).
|
|
139
|
+
* @param args Extra arguments forwarded to `compare` on each call.
|
|
140
|
+
* @returns A sorted array (the original reference if it was an already-sorted array).
|
|
141
|
+
* @example sortArray([3, 1, 2]) // [1, 2, 3]
|
|
142
|
+
* @see https://dhoulb.github.io/shelving/util/sort/sortArray
|
|
143
|
+
*/
|
|
124
144
|
export function sortArray(input, compare = compareAscending, ...args) {
|
|
125
145
|
if (isArray(input)) {
|
|
126
146
|
if (input.length < 2)
|
package/util/source.d.ts
CHANGED
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import type { Class } from "./class.js";
|
|
2
2
|
import type { AnyCaller } from "./function.js";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Something that has a source of a specified type.
|
|
5
|
+
*
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/util/source/Sourceable
|
|
7
|
+
*/
|
|
4
8
|
export interface Sourceable<T> {
|
|
9
|
+
/** The wrapped source object this object delegates to. */
|
|
5
10
|
readonly source: T;
|
|
6
11
|
}
|
|
7
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Recurse through `Sourceable` objects and return the first one that is an instance of `type`, or `undefined` if no source object matches.
|
|
14
|
+
* - Follows the `source` property chain (e.g. layered providers) until a matching instance is found.
|
|
15
|
+
*
|
|
16
|
+
* @param type The class to search for an instance of.
|
|
17
|
+
* @param value The object to start searching from.
|
|
18
|
+
* @returns The first matching source instance, or `undefined` if none matches.
|
|
19
|
+
* @example getSource(CacheProvider, provider) // CacheProvider instance or undefined
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/util/source/getSource
|
|
21
|
+
*/
|
|
8
22
|
export declare function getSource<T>(type: Class<T>, value: unknown): T | undefined;
|
|
9
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Recurse through `Sourceable` objects and return the first one that is an instance of `type`, or throw `RequiredError` if no source object matches.
|
|
25
|
+
* - Like `getSource`, but throws instead of returning `undefined` when no match is found.
|
|
26
|
+
*
|
|
27
|
+
* @param type The class to search for an instance of.
|
|
28
|
+
* @param data The object to start searching from.
|
|
29
|
+
* @param caller Function to attribute a thrown error to (defaults to `requireSource`).
|
|
30
|
+
* @returns The first matching source instance.
|
|
31
|
+
* @throws {RequiredError} If no source object is an instance of `type`.
|
|
32
|
+
* @example requireSource(CacheProvider, provider) // CacheProvider instance
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/util/source/requireSource
|
|
34
|
+
*/
|
|
10
35
|
export declare function requireSource<T>(type: Class<T>, data: unknown, caller?: AnyCaller): T;
|