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/string.js
CHANGED
|
@@ -2,16 +2,38 @@ import { RequiredError } from "../error/RequiredError.js";
|
|
|
2
2
|
import { ValueError } from "../error/ValueError.js";
|
|
3
3
|
import { requireArray } from "./array.js";
|
|
4
4
|
import { isBetween } from "./number.js";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Is an unknown value a string?
|
|
7
|
+
*
|
|
8
|
+
* @param value The value to check.
|
|
9
|
+
* @returns `true` if `value` is a `string`, otherwise `false`.
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/util/string/isString
|
|
11
|
+
*/
|
|
6
12
|
export function isString(value) {
|
|
7
13
|
return typeof value === "string";
|
|
8
14
|
}
|
|
9
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Assert that a value is a string.
|
|
17
|
+
*
|
|
18
|
+
* @param value The value to assert on.
|
|
19
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertString`).
|
|
20
|
+
* @throws {RequiredError} If `value` is not a string.
|
|
21
|
+
* @example assertString("a"); // Passes.
|
|
22
|
+
* @see https://dhoulb.github.io/shelving/util/string/assertString
|
|
23
|
+
*/
|
|
10
24
|
export function assertString(value, caller = assertString) {
|
|
11
25
|
if (!isString(value))
|
|
12
26
|
throw new RequiredError(`Must be string`, { received: value, caller });
|
|
13
27
|
}
|
|
14
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Convert an unknown value to a string, or return `undefined` if conversion fails.
|
|
30
|
+
* - Coerces numbers, booleans, and `Date` values, and joins arrays with `,` commas; returns `undefined` for anything else.
|
|
31
|
+
*
|
|
32
|
+
* @param value The value to convert.
|
|
33
|
+
* @returns The string representation of `value`, or `undefined` if it cannot be converted.
|
|
34
|
+
* @example getString(123) // "123"
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/util/string/getString
|
|
36
|
+
*/
|
|
15
37
|
export function getString(value) {
|
|
16
38
|
if (typeof value === "string")
|
|
17
39
|
return value;
|
|
@@ -25,43 +47,101 @@ export function getString(value) {
|
|
|
25
47
|
return value.map(getString).join(",");
|
|
26
48
|
return undefined;
|
|
27
49
|
}
|
|
28
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Convert a possible string to a string, or throw `RequiredError` if conversion fails.
|
|
52
|
+
*
|
|
53
|
+
* @param value The value to convert.
|
|
54
|
+
* @param caller Function to attribute a thrown error to (defaults to `requireString`).
|
|
55
|
+
* @returns The string representation of `value`.
|
|
56
|
+
* @throws {RequiredError} If `value` cannot be converted to a string.
|
|
57
|
+
* @example requireString(123) // "123"
|
|
58
|
+
* @see https://dhoulb.github.io/shelving/util/string/requireString
|
|
59
|
+
*/
|
|
29
60
|
export function requireString(value, caller = requireString) {
|
|
30
61
|
const str = getString(value);
|
|
31
62
|
assertString(str, caller);
|
|
32
63
|
return str;
|
|
33
64
|
}
|
|
34
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* Is a value a string with a length between `min` and `max`?
|
|
67
|
+
*
|
|
68
|
+
* @param value The value to check.
|
|
69
|
+
* @param min The minimum allowed length (defaults to `0`).
|
|
70
|
+
* @param max The maximum allowed length (defaults to `Infinity`).
|
|
71
|
+
* @returns `true` if `value` is a string within the length bounds, otherwise `false`.
|
|
72
|
+
* @see https://dhoulb.github.io/shelving/util/string/isStringLength
|
|
73
|
+
*/
|
|
35
74
|
export function isStringLength(value, min = 0, max = Number.POSITIVE_INFINITY) {
|
|
36
75
|
return typeof value === "string" && value.length >= min && value.length <= max;
|
|
37
76
|
}
|
|
38
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* Assert that a value is a string with a length between `min` and `max`.
|
|
79
|
+
*
|
|
80
|
+
* @param value The value to assert on.
|
|
81
|
+
* @param min The minimum allowed length.
|
|
82
|
+
* @param max The maximum allowed length.
|
|
83
|
+
* @param caller Function to attribute a thrown error to (defaults to `assertString`).
|
|
84
|
+
* @throws {RequiredError} If `value` is not a string within the length bounds.
|
|
85
|
+
* @example assertStringLength("abc", 1, 5); // Passes.
|
|
86
|
+
* @see https://dhoulb.github.io/shelving/util/string/assertStringLength
|
|
87
|
+
*/
|
|
39
88
|
export function assertStringLength(value, min, max, caller = assertString) {
|
|
40
89
|
if (!isStringLength(value, min, max))
|
|
41
90
|
throw new RequiredError(`Must be string with ${min ?? 0} to ${max ?? "∞"} characters`, { received: value, caller });
|
|
42
91
|
}
|
|
43
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* Convert a possible string to a string with min/max length, or throw `RequiredError` if conversion fails.
|
|
94
|
+
*
|
|
95
|
+
* @param value The value to convert.
|
|
96
|
+
* @param min The minimum allowed length.
|
|
97
|
+
* @param max The maximum allowed length.
|
|
98
|
+
* @param caller Function to attribute a thrown error to (defaults to `requireString`).
|
|
99
|
+
* @returns The string representation of `value`.
|
|
100
|
+
* @throws {RequiredError} If `value` cannot be converted to a string within the length bounds.
|
|
101
|
+
* @example requireStringLength("abc", 1, 5) // "abc"
|
|
102
|
+
* @see https://dhoulb.github.io/shelving/util/string/requireStringLength
|
|
103
|
+
*/
|
|
44
104
|
export function requireStringLength(value, min, max, caller = requireString) {
|
|
45
105
|
const str = getString(value);
|
|
46
106
|
assertStringLength(str, min, max, caller);
|
|
47
107
|
return str;
|
|
48
108
|
}
|
|
49
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Does a string have a length between `min` and `max`?
|
|
111
|
+
*
|
|
112
|
+
* @param str The string to measure.
|
|
113
|
+
* @param min The minimum allowed length (defaults to `0`).
|
|
114
|
+
* @param max The maximum allowed length (defaults to `Infinity`).
|
|
115
|
+
* @returns `true` if `str` is within the length bounds, otherwise `false`.
|
|
116
|
+
* @see https://dhoulb.github.io/shelving/util/string/isStringBetween
|
|
117
|
+
*/
|
|
50
118
|
export function isStringBetween(str, min = 0, max = Number.POSITIVE_INFINITY) {
|
|
51
119
|
return str.length >= min && str.length <= max;
|
|
52
120
|
}
|
|
53
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Concatenate an iterable set of strings together.
|
|
123
|
+
*
|
|
124
|
+
* @param strs The iterable of strings to join (must not be a bare `string`).
|
|
125
|
+
* @param joiner The separator to insert between strings (defaults to `""`).
|
|
126
|
+
* @returns The joined string.
|
|
127
|
+
* @throws {RequiredError} If `strs` is not a valid array of strings.
|
|
128
|
+
* @example joinStrings(["a", "b"], "-") // "a-b"
|
|
129
|
+
* @see https://dhoulb.github.io/shelving/util/string/joinStrings
|
|
130
|
+
*/
|
|
54
131
|
export function joinStrings(strs, joiner = "") {
|
|
55
132
|
return requireArray(strs, undefined, undefined, joinStrings).join(joiner);
|
|
56
133
|
}
|
|
57
134
|
/**
|
|
58
135
|
* Sanitize a single line of text.
|
|
59
136
|
* - Used when you're sanitising a single-line input, e.g. a title for something.
|
|
60
|
-
* - Remove
|
|
61
|
-
* - Normalise runs of whitespace to one ` ` space
|
|
137
|
+
* - Remove all control characters.
|
|
138
|
+
* - Normalise runs of whitespace to one ` ` space.
|
|
62
139
|
* - Trim whitespace from the start and end of the string.
|
|
63
140
|
*
|
|
64
|
-
* @
|
|
141
|
+
* @param str The string to sanitize.
|
|
142
|
+
* @returns The sanitized single-line string.
|
|
143
|
+
* @example sanitizeText("\x00Nice! ") // "Nice!"
|
|
144
|
+
* @see https://dhoulb.github.io/shelving/util/string/sanitizeText
|
|
65
145
|
*/
|
|
66
146
|
export function sanitizeText(str) {
|
|
67
147
|
return str
|
|
@@ -75,7 +155,10 @@ export function sanitizeText(str) {
|
|
|
75
155
|
* - Remove all control characters (like `sanitizeText()`).
|
|
76
156
|
* - Strip all whitespace entirely (rather than collapsing runs to a single space like `sanitizeText()`).
|
|
77
157
|
*
|
|
158
|
+
* @param str The string to sanitize.
|
|
159
|
+
* @returns The sanitized single-word string.
|
|
78
160
|
* @example sanitizeWord("\x00 a b c "); // Returns `"abc"`
|
|
161
|
+
* @see https://dhoulb.github.io/shelving/util/string/sanitizeWord
|
|
79
162
|
*/
|
|
80
163
|
export function sanitizeWord(str) {
|
|
81
164
|
return str
|
|
@@ -91,6 +174,11 @@ export function sanitizeWord(str) {
|
|
|
91
174
|
* - Normalise indentation to tabs (four or more spaces are a tab, three or fewer spaces are removed).
|
|
92
175
|
* - Allow spaces at the start of each line (for indentation) but trim the end of each line.
|
|
93
176
|
* - Trim excess newlines at the start and end of the string and runs of more than two newlines in a row.
|
|
177
|
+
*
|
|
178
|
+
* @param str The string to sanitize.
|
|
179
|
+
* @returns The sanitized multi-line string.
|
|
180
|
+
* @example sanitizeMultilineText("\x00Line one\n\n\n\nLine two ") // "Line one\n\nLine two"
|
|
181
|
+
* @see https://dhoulb.github.io/shelving/util/string/sanitizeMultilineText
|
|
94
182
|
*/
|
|
95
183
|
export function sanitizeMultilineText(str) {
|
|
96
184
|
return str
|
|
@@ -109,7 +197,10 @@ export function sanitizeMultilineText(str) {
|
|
|
109
197
|
* - Normalizes the string by
|
|
110
198
|
* - Useful when you're running a query against a string entered by a user.
|
|
111
199
|
*
|
|
200
|
+
* @param str The string to simplify.
|
|
201
|
+
* @returns The simplified, lowercased string containing only numbers, letters, and single spaces.
|
|
112
202
|
* @example simplifyString("Däve-is\nREALLY éxcitable—apparęntly!!! 😂"); // Returns "dave is really excitable apparently"
|
|
203
|
+
* @see https://dhoulb.github.io/shelving/util/string/simplifyString
|
|
113
204
|
*
|
|
114
205
|
* @todo Convert confusables (e.g. `ℵ` alef symbol or `℮` estimate symbol) to their letterlike equivalent (e.g. `N` and `e`).
|
|
115
206
|
*/
|
|
@@ -121,22 +212,54 @@ export function simplifyString(str) {
|
|
|
121
212
|
.trim()
|
|
122
213
|
.toLowerCase();
|
|
123
214
|
}
|
|
124
|
-
/**
|
|
215
|
+
/**
|
|
216
|
+
* Convert a string to a `kebab-case` URL slug, or return `undefined` if conversion resulted in an empty ref.
|
|
217
|
+
*
|
|
218
|
+
* @param str The string to convert.
|
|
219
|
+
* @returns The `kebab-case` slug, or `undefined` if conversion resulted in an empty string.
|
|
220
|
+
* @example getSlug("Hello World!") // "hello-world"
|
|
221
|
+
* @see https://dhoulb.github.io/shelving/util/string/getSlug
|
|
222
|
+
*/
|
|
125
223
|
export function getSlug(str) {
|
|
126
224
|
return simplifyString(str).replaceAll(" ", "-") || undefined;
|
|
127
225
|
}
|
|
128
|
-
/**
|
|
226
|
+
/**
|
|
227
|
+
* Convert a string to a `kebab-case` URL slug, or throw `RequiredError` if conversion resulted in an empty ref.
|
|
228
|
+
*
|
|
229
|
+
* @param str The string to convert.
|
|
230
|
+
* @param caller Function to attribute a thrown error to (defaults to `requireSlug` itself).
|
|
231
|
+
* @returns The `kebab-case` slug.
|
|
232
|
+
* @throws {RequiredError} If conversion resulted in an empty string.
|
|
233
|
+
* @example requireSlug("Hello World!") // "hello-world"
|
|
234
|
+
* @see https://dhoulb.github.io/shelving/util/string/requireSlug
|
|
235
|
+
*/
|
|
129
236
|
export function requireSlug(str, caller = requireSlug) {
|
|
130
237
|
const slug = getSlug(str);
|
|
131
238
|
if (!slug)
|
|
132
239
|
throw new RequiredError("Invalid slug", { received: str, caller });
|
|
133
240
|
return slug;
|
|
134
241
|
}
|
|
135
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* Convert a string to a unique ref e.g. `abc123`, or return `undefined` if conversion resulted in an empty string.
|
|
244
|
+
*
|
|
245
|
+
* @param str The string to convert.
|
|
246
|
+
* @returns The ref, or `undefined` if conversion resulted in an empty string.
|
|
247
|
+
* @example getRef("Hello World!") // "helloworld"
|
|
248
|
+
* @see https://dhoulb.github.io/shelving/util/string/getRef
|
|
249
|
+
*/
|
|
136
250
|
export function getRef(str) {
|
|
137
251
|
return simplifyString(str).replaceAll(" ", "") || undefined;
|
|
138
252
|
}
|
|
139
|
-
/**
|
|
253
|
+
/**
|
|
254
|
+
* Convert a string to a unique ref e.g. `abc123`, or throw `RequiredError` if conversion resulted in an empty string.
|
|
255
|
+
*
|
|
256
|
+
* @param str The string to convert.
|
|
257
|
+
* @param caller Function to attribute a thrown error to (defaults to `requireRef` itself).
|
|
258
|
+
* @returns The ref.
|
|
259
|
+
* @throws {RequiredError} If conversion resulted in an empty string.
|
|
260
|
+
* @example requireRef("Hello World!") // "helloworld"
|
|
261
|
+
* @see https://dhoulb.github.io/shelving/util/string/requireRef
|
|
262
|
+
*/
|
|
140
263
|
export function requireRef(str, caller = requireRef) {
|
|
141
264
|
const ref = getRef(str);
|
|
142
265
|
if (!ref)
|
|
@@ -149,6 +272,11 @@ export function requireRef(str, caller = requireRef) {
|
|
|
149
272
|
* - Performs no processing on the words, so control chars, punctuation, symbols, and case are all preserved.
|
|
150
273
|
*
|
|
151
274
|
* Note: this splits words based on spaces, so won't work well with logographic writing systems e.g. kanji.
|
|
275
|
+
*
|
|
276
|
+
* @param str The string to extract words from.
|
|
277
|
+
* @returns Array of the separate words and quoted phrases found in `str`.
|
|
278
|
+
* @example getWords(`a "b c" d`) // ["a", "b c", "d"]
|
|
279
|
+
* @see https://dhoulb.github.io/shelving/util/string/getWords
|
|
152
280
|
*/
|
|
153
281
|
export function getWords(str) {
|
|
154
282
|
return Array.from(_getWords(str));
|
|
@@ -161,16 +289,35 @@ function* _getWords(str) {
|
|
|
161
289
|
}
|
|
162
290
|
}
|
|
163
291
|
const WORD = /([^\s"]+)|"([^"]*)"|'([^']*)'/g; // Runs of characters without spaces, or "quoted phrases"
|
|
164
|
-
/**
|
|
292
|
+
/**
|
|
293
|
+
* Get the (trimmed) first full line of a string.
|
|
294
|
+
*
|
|
295
|
+
* @param str The string to read the first line from.
|
|
296
|
+
* @returns The trimmed first line of `str` (everything before the first `\n` newline).
|
|
297
|
+
* @example getFirstLine("first\nsecond") // "first"
|
|
298
|
+
* @see https://dhoulb.github.io/shelving/util/string/getFirstLine
|
|
299
|
+
*/
|
|
165
300
|
export function getFirstLine(str) {
|
|
166
301
|
const i = str.indexOf("\n");
|
|
167
302
|
return (i >= 0 ? str.substr(0, i) : str).trim();
|
|
168
303
|
}
|
|
169
|
-
/**
|
|
304
|
+
/**
|
|
305
|
+
* Is the first character of a string an uppercase letter?
|
|
306
|
+
*
|
|
307
|
+
* @param str The string whose first character is tested.
|
|
308
|
+
* @returns `true` if the first character of `str` is an uppercase A–Z letter, otherwise `false`.
|
|
309
|
+
* @see https://dhoulb.github.io/shelving/util/string/isUppercaseLetter
|
|
310
|
+
*/
|
|
170
311
|
export function isUppercaseLetter(str) {
|
|
171
312
|
return isBetween(str.charCodeAt(0), 65, 90);
|
|
172
313
|
}
|
|
173
|
-
/**
|
|
314
|
+
/**
|
|
315
|
+
* Is the first character of a string a lowercase letter?
|
|
316
|
+
*
|
|
317
|
+
* @param str The string whose first character is tested.
|
|
318
|
+
* @returns `true` if the first character of `str` is a lowercase a–z letter, otherwise `false`.
|
|
319
|
+
* @see https://dhoulb.github.io/shelving/util/string/isLowercaseLetter
|
|
320
|
+
*/
|
|
174
321
|
export function isLowercaseLetter(str) {
|
|
175
322
|
return isBetween(str.charCodeAt(0), 97, 122);
|
|
176
323
|
}
|
|
@@ -178,6 +325,13 @@ export function isLowercaseLetter(str) {
|
|
|
178
325
|
* Limit a string to a given length.
|
|
179
326
|
* - Stops at the last space inside `maxLength`
|
|
180
327
|
* - Appends an `…` ellipses after the string (but only if a limit is applied).
|
|
328
|
+
*
|
|
329
|
+
* @param str The string to limit.
|
|
330
|
+
* @param maxLength The maximum length of the returned string (before `append` is added).
|
|
331
|
+
* @param append The string to append when a limit is applied (defaults to `"…"`).
|
|
332
|
+
* @returns `str` unchanged if it's shorter than `maxLength`, otherwise truncated with `append` added.
|
|
333
|
+
* @example limitString("the quick brown fox", 9) // "the quick…"
|
|
334
|
+
* @see https://dhoulb.github.io/shelving/util/string/limitString
|
|
181
335
|
*/
|
|
182
336
|
export function limitString(str, maxLength, append = "…") {
|
|
183
337
|
if (str.length < maxLength)
|
|
@@ -196,11 +350,24 @@ export function splitString(str, separator, min = 1, max = Number.POSITIVE_INFIN
|
|
|
196
350
|
});
|
|
197
351
|
return segments;
|
|
198
352
|
}
|
|
199
|
-
/**
|
|
353
|
+
/**
|
|
354
|
+
* Trim a string (as a function, so it can be used in mapping).
|
|
355
|
+
*
|
|
356
|
+
* @param str The string to trim.
|
|
357
|
+
* @returns `str` with whitespace trimmed from both ends.
|
|
358
|
+
* @example [" a ", " b "].map(trimString) // ["a", "b"]
|
|
359
|
+
* @see https://dhoulb.github.io/shelving/util/string/trimString
|
|
360
|
+
*/
|
|
200
361
|
export function trimString(str) {
|
|
201
362
|
return str.trim();
|
|
202
363
|
}
|
|
203
|
-
/**
|
|
364
|
+
/**
|
|
365
|
+
* Does a string have length?
|
|
366
|
+
*
|
|
367
|
+
* @param str The string to test.
|
|
368
|
+
* @returns `true` if `str` has a length greater than zero, otherwise `false`.
|
|
369
|
+
* @see https://dhoulb.github.io/shelving/util/string/isNonEmptyString
|
|
370
|
+
*/
|
|
204
371
|
export function isNonEmptyString(str) {
|
|
205
372
|
return str.length > 0;
|
|
206
373
|
}
|
package/util/template.d.ts
CHANGED
|
@@ -9,18 +9,30 @@ import { type NotString, type PossibleString } from "./string.js";
|
|
|
9
9
|
* `PossibleString` — Single string used for every `{placeholder}`
|
|
10
10
|
* `ImmutableArray<string>` — Array of strings (or functions that return strings) used for `*` numbered placeholders e.g. `["John"]`
|
|
11
11
|
* `ImmutableDictionary<PossibleString>` — Object containing named strings used for named placeholders, e.g. `{ val1: "Ellie", val2: 123 }`
|
|
12
|
-
* `(placeholder: string) => string` — Function that returns the right string for a named `{placeholder}`.
|
|
12
|
+
* `(placeholder: string) => string` — Function that returns the right string for a named `{placeholder}`.
|
|
13
|
+
*
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/util/template/TemplateValues
|
|
13
15
|
*/
|
|
14
16
|
export type TemplateValues = PossibleString | ImmutableArray<unknown> | ImmutableDictionary<unknown> | ((placeholder: string) => string);
|
|
15
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* The output of matching a template is a dictionary in `{ myPlaceholder: "value" }` format.
|
|
19
|
+
*
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/util/template/TemplateMatches
|
|
21
|
+
*/
|
|
16
22
|
export type TemplateMatches = ImmutableDictionary<string>;
|
|
17
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* List of `{placeholders}` found in a template string.
|
|
25
|
+
*
|
|
26
|
+
* @see https://dhoulb.github.io/shelving/util/template/TemplatePlaceholders
|
|
27
|
+
*/
|
|
18
28
|
export type TemplatePlaceholders = ImmutableArray<string>;
|
|
19
29
|
/**
|
|
20
30
|
* Get list of placeholders named in a template string.
|
|
21
31
|
*
|
|
22
32
|
* @param template The template including template placeholders, e.g. `:name-${country}/{city}`
|
|
23
33
|
* @returns Array of clean string names of found placeholders, e.g. `["name", "country", "city"]`
|
|
34
|
+
* @example getPlaceholders(":name-${country}/{city}") // ["name", "country", "city"]
|
|
35
|
+
* @see https://dhoulb.github.io/shelving/util/template/getPlaceholders
|
|
24
36
|
*/
|
|
25
37
|
export declare function getPlaceholders(template: string): TemplatePlaceholders;
|
|
26
38
|
/**
|
|
@@ -30,31 +42,68 @@ export declare function getPlaceholders(template: string): TemplatePlaceholders;
|
|
|
30
42
|
*
|
|
31
43
|
* @param template The template string, e.g. `:name-${country}/{city}`.
|
|
32
44
|
* @param target The string containing values, e.g. `Dave-UK/Manchester`.
|
|
33
|
-
*
|
|
34
|
-
* @
|
|
45
|
+
* @param caller Function to attribute a thrown error to (defaults to `matchTemplate` itself).
|
|
46
|
+
* @returns An object containing values (e.g. `{ name: "Dave", country: "UK", city: "Manchester" }`), or `undefined` if no match.
|
|
47
|
+
* @throws {ValueError} If two template placeholders are not separated by at least one character.
|
|
48
|
+
* @example matchTemplate(":name-${country}/{city}", "Dave-UK/Manchester") // { name: "Dave", country: "UK", city: "Manchester" }
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchTemplate
|
|
35
50
|
*/
|
|
36
51
|
export declare function matchTemplate(template: string, target: string, caller?: AnyCaller): TemplateMatches | undefined;
|
|
37
52
|
/**
|
|
38
53
|
* Match a path-shaped template against a target path.
|
|
39
54
|
* - Like `matchTemplate`, but with `/` segment semantics: non-catchall placeholders cannot span path segments; catchall placeholders can.
|
|
40
55
|
* - A trailing catchall (e.g. `/files/{...path}`) also matches when the trailing separator is absent (e.g. `/files`), with the catchall value as `""`.
|
|
56
|
+
*
|
|
57
|
+
* @param template The path-shaped template string, e.g. `/users/{name}`.
|
|
58
|
+
* @param target The path containing values, e.g. `/users/Dave`.
|
|
59
|
+
* @param caller Function to attribute a thrown error to (defaults to `matchPathTemplate` itself).
|
|
60
|
+
* @returns An object containing values (e.g. `{ name: "Dave" }`), or `undefined` if no match.
|
|
61
|
+
* @throws {ValueError} If two template placeholders are not separated by at least one character.
|
|
62
|
+
* @example matchPathTemplate("/users/{name}", "/users/Dave") // { name: "Dave" }
|
|
63
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchPathTemplate
|
|
41
64
|
*/
|
|
42
65
|
export declare function matchPathTemplate(template: AbsolutePath, target: AbsolutePath, caller?: AnyCaller): TemplateMatches | undefined;
|
|
43
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Match multiple templates against a target string and return the first match (no separator semantics).
|
|
68
|
+
*
|
|
69
|
+
* @param templates Iterable of template strings to try in order, e.g. `[":name-:age", ":name"]`.
|
|
70
|
+
* @param target The string containing values, e.g. `Dave-40`.
|
|
71
|
+
* @returns An object of values for the first matching template, or `undefined` if none match.
|
|
72
|
+
* @example matchTemplates([":name-:age", ":name"], "Dave-40") // { name: "Dave", age: "40" }
|
|
73
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchTemplates
|
|
74
|
+
*/
|
|
44
75
|
export declare function matchTemplates(templates: Iterable<string> & NotString, target: string): TemplateMatches | undefined;
|
|
45
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Match multiple path-shaped templates against a target path and return the first match.
|
|
78
|
+
*
|
|
79
|
+
* @param templates Iterable of path-shaped template strings to try in order, e.g. `["/users/{name}", "/users"]`.
|
|
80
|
+
* @param target The path containing values, e.g. `/users/Dave`.
|
|
81
|
+
* @returns An object of values for the first matching template, or `undefined` if none match.
|
|
82
|
+
* @example matchPathTemplates(["/users/{name}", "/users"], "/users/Dave") // { name: "Dave" }
|
|
83
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchPathTemplates
|
|
84
|
+
*/
|
|
46
85
|
export declare function matchPathTemplates(templates: Iterable<AbsolutePath> & NotString, target: AbsolutePath): TemplateMatches | undefined;
|
|
47
86
|
/**
|
|
48
87
|
* Turn ":year-:month" and `{ year: "2016"... }` etc into "2016-06..." etc.
|
|
49
88
|
*
|
|
50
89
|
* @param template The template including template placeholders, e.g. `:name-${country}/{city}`
|
|
51
90
|
* @param values An object containing values, e.g. `{ name: "Dave", country: "UK", city: "Manchester" }` (functions are called, everything else converted to string), or a function or string to use for all placeholders.
|
|
52
|
-
* @
|
|
53
|
-
*
|
|
91
|
+
* @param caller Function to attribute a thrown error to (defaults to `renderTemplate` itself).
|
|
92
|
+
* @returns The rendered string, e.g. `Dave-UK/Manchester`
|
|
54
93
|
* @throws {RequiredError} If a placeholder in the template string is not specified in values.
|
|
94
|
+
* @example renderTemplate(":name-${country}/{city}", { name: "Dave", country: "UK", city: "Manchester" }) // "Dave-UK/Manchester"
|
|
95
|
+
* @see https://dhoulb.github.io/shelving/util/template/renderTemplate
|
|
55
96
|
*/
|
|
56
97
|
export declare function renderTemplate(template: string, values: TemplateValues, caller?: AnyCaller): string;
|
|
57
98
|
/**
|
|
58
99
|
* Render a path-shaped template. Behaviourally identical to `renderTemplate` — substitution doesn't need separator awareness — but provided as a sibling to `matchPathTemplate` so callers can pair them.
|
|
100
|
+
*
|
|
101
|
+
* @param template The path-shaped template including placeholders, e.g. `/users/{name}`.
|
|
102
|
+
* @param values An object containing values (functions are called, everything else converted to string), or a function or string to use for all placeholders.
|
|
103
|
+
* @param caller Function to attribute a thrown error to (defaults to `renderPathTemplate` itself).
|
|
104
|
+
* @returns The rendered path, e.g. `/users/Dave`.
|
|
105
|
+
* @throws {RequiredError} If a placeholder in the template string is not specified in values.
|
|
106
|
+
* @example renderPathTemplate("/users/{name}", { name: "Dave" }) // "/users/Dave"
|
|
107
|
+
* @see https://dhoulb.github.io/shelving/util/template/renderPathTemplate
|
|
59
108
|
*/
|
|
60
109
|
export declare function renderPathTemplate(template: AbsolutePath, values: TemplateValues, caller?: AnyCaller): AbsolutePath;
|
package/util/template.js
CHANGED
|
@@ -60,6 +60,8 @@ function _splitTemplateCached(template, caller) {
|
|
|
60
60
|
*
|
|
61
61
|
* @param template The template including template placeholders, e.g. `:name-${country}/{city}`
|
|
62
62
|
* @returns Array of clean string names of found placeholders, e.g. `["name", "country", "city"]`
|
|
63
|
+
* @example getPlaceholders(":name-${country}/{city}") // ["name", "country", "city"]
|
|
64
|
+
* @see https://dhoulb.github.io/shelving/util/template/getPlaceholders
|
|
63
65
|
*/
|
|
64
66
|
export function getPlaceholders(template) {
|
|
65
67
|
return _splitTemplateCached(template, getPlaceholders).map(_getPlaceholder);
|
|
@@ -74,8 +76,11 @@ function _getPlaceholder({ name }) {
|
|
|
74
76
|
*
|
|
75
77
|
* @param template The template string, e.g. `:name-${country}/{city}`.
|
|
76
78
|
* @param target The string containing values, e.g. `Dave-UK/Manchester`.
|
|
77
|
-
*
|
|
78
|
-
* @
|
|
79
|
+
* @param caller Function to attribute a thrown error to (defaults to `matchTemplate` itself).
|
|
80
|
+
* @returns An object containing values (e.g. `{ name: "Dave", country: "UK", city: "Manchester" }`), or `undefined` if no match.
|
|
81
|
+
* @throws {ValueError} If two template placeholders are not separated by at least one character.
|
|
82
|
+
* @example matchTemplate(":name-${country}/{city}", "Dave-UK/Manchester") // { name: "Dave", country: "UK", city: "Manchester" }
|
|
83
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchTemplate
|
|
79
84
|
*/
|
|
80
85
|
export function matchTemplate(template, target, caller = matchTemplate) {
|
|
81
86
|
return _matchTemplate(template, target, "", caller);
|
|
@@ -84,6 +89,14 @@ export function matchTemplate(template, target, caller = matchTemplate) {
|
|
|
84
89
|
* Match a path-shaped template against a target path.
|
|
85
90
|
* - Like `matchTemplate`, but with `/` segment semantics: non-catchall placeholders cannot span path segments; catchall placeholders can.
|
|
86
91
|
* - A trailing catchall (e.g. `/files/{...path}`) also matches when the trailing separator is absent (e.g. `/files`), with the catchall value as `""`.
|
|
92
|
+
*
|
|
93
|
+
* @param template The path-shaped template string, e.g. `/users/{name}`.
|
|
94
|
+
* @param target The path containing values, e.g. `/users/Dave`.
|
|
95
|
+
* @param caller Function to attribute a thrown error to (defaults to `matchPathTemplate` itself).
|
|
96
|
+
* @returns An object containing values (e.g. `{ name: "Dave" }`), or `undefined` if no match.
|
|
97
|
+
* @throws {ValueError} If two template placeholders are not separated by at least one character.
|
|
98
|
+
* @example matchPathTemplate("/users/{name}", "/users/Dave") // { name: "Dave" }
|
|
99
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchPathTemplate
|
|
87
100
|
*/
|
|
88
101
|
export function matchPathTemplate(template, target, caller = matchPathTemplate) {
|
|
89
102
|
return _matchTemplate(template, target, "/", caller);
|
|
@@ -128,7 +141,15 @@ function _matchTemplate(template, target, separator, caller) {
|
|
|
128
141
|
return undefined; // Target doesn't match template because last chunk post didn't reach the end.
|
|
129
142
|
return values;
|
|
130
143
|
}
|
|
131
|
-
/**
|
|
144
|
+
/**
|
|
145
|
+
* Match multiple templates against a target string and return the first match (no separator semantics).
|
|
146
|
+
*
|
|
147
|
+
* @param templates Iterable of template strings to try in order, e.g. `[":name-:age", ":name"]`.
|
|
148
|
+
* @param target The string containing values, e.g. `Dave-40`.
|
|
149
|
+
* @returns An object of values for the first matching template, or `undefined` if none match.
|
|
150
|
+
* @example matchTemplates([":name-:age", ":name"], "Dave-40") // { name: "Dave", age: "40" }
|
|
151
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchTemplates
|
|
152
|
+
*/
|
|
132
153
|
export function matchTemplates(templates, target) {
|
|
133
154
|
for (const template of templates) {
|
|
134
155
|
const values = matchTemplate(template, target);
|
|
@@ -136,7 +157,15 @@ export function matchTemplates(templates, target) {
|
|
|
136
157
|
return values;
|
|
137
158
|
}
|
|
138
159
|
}
|
|
139
|
-
/**
|
|
160
|
+
/**
|
|
161
|
+
* Match multiple path-shaped templates against a target path and return the first match.
|
|
162
|
+
*
|
|
163
|
+
* @param templates Iterable of path-shaped template strings to try in order, e.g. `["/users/{name}", "/users"]`.
|
|
164
|
+
* @param target The path containing values, e.g. `/users/Dave`.
|
|
165
|
+
* @returns An object of values for the first matching template, or `undefined` if none match.
|
|
166
|
+
* @example matchPathTemplates(["/users/{name}", "/users"], "/users/Dave") // { name: "Dave" }
|
|
167
|
+
* @see https://dhoulb.github.io/shelving/util/template/matchPathTemplates
|
|
168
|
+
*/
|
|
140
169
|
export function matchPathTemplates(templates, target) {
|
|
141
170
|
for (const template of templates) {
|
|
142
171
|
const values = matchPathTemplate(template, target);
|
|
@@ -149,9 +178,11 @@ export function matchPathTemplates(templates, target) {
|
|
|
149
178
|
*
|
|
150
179
|
* @param template The template including template placeholders, e.g. `:name-${country}/{city}`
|
|
151
180
|
* @param values An object containing values, e.g. `{ name: "Dave", country: "UK", city: "Manchester" }` (functions are called, everything else converted to string), or a function or string to use for all placeholders.
|
|
152
|
-
* @
|
|
153
|
-
*
|
|
181
|
+
* @param caller Function to attribute a thrown error to (defaults to `renderTemplate` itself).
|
|
182
|
+
* @returns The rendered string, e.g. `Dave-UK/Manchester`
|
|
154
183
|
* @throws {RequiredError} If a placeholder in the template string is not specified in values.
|
|
184
|
+
* @example renderTemplate(":name-${country}/{city}", { name: "Dave", country: "UK", city: "Manchester" }) // "Dave-UK/Manchester"
|
|
185
|
+
* @see https://dhoulb.github.io/shelving/util/template/renderTemplate
|
|
155
186
|
*/
|
|
156
187
|
export function renderTemplate(template, values, caller = renderTemplate) {
|
|
157
188
|
const chunks = _splitTemplateCached(template, caller);
|
|
@@ -189,6 +220,14 @@ export function renderTemplate(template, values, caller = renderTemplate) {
|
|
|
189
220
|
}
|
|
190
221
|
/**
|
|
191
222
|
* Render a path-shaped template. Behaviourally identical to `renderTemplate` — substitution doesn't need separator awareness — but provided as a sibling to `matchPathTemplate` so callers can pair them.
|
|
223
|
+
*
|
|
224
|
+
* @param template The path-shaped template including placeholders, e.g. `/users/{name}`.
|
|
225
|
+
* @param values An object containing values (functions are called, everything else converted to string), or a function or string to use for all placeholders.
|
|
226
|
+
* @param caller Function to attribute a thrown error to (defaults to `renderPathTemplate` itself).
|
|
227
|
+
* @returns The rendered path, e.g. `/users/Dave`.
|
|
228
|
+
* @throws {RequiredError} If a placeholder in the template string is not specified in values.
|
|
229
|
+
* @example renderPathTemplate("/users/{name}", { name: "Dave" }) // "/users/Dave"
|
|
230
|
+
* @see https://dhoulb.github.io/shelving/util/template/renderPathTemplate
|
|
192
231
|
*/
|
|
193
232
|
export function renderPathTemplate(template, values, caller = renderPathTemplate) {
|
|
194
233
|
return renderTemplate(template, values, caller);
|
package/util/timeout.d.ts
CHANGED
|
@@ -1,27 +1,51 @@
|
|
|
1
1
|
import type { Callback } from "./function.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Stateful wrapper around `setTimeout()` that manages a single pending timeout at a time.
|
|
4
|
+
* - Keeps track of the reference returned from `setTimeout()`.
|
|
5
|
+
* - Clears any existing timeout when a new timeout is set.
|
|
6
|
+
* - Allows a default callback and a default delay to be set that are applied to all new timeouts that don't specify their own.
|
|
4
7
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @param ms The default delay for any created timeouts (in ms).
|
|
8
|
+
* @example
|
|
9
|
+
* const timeout = new Timeout(() => console.log("fired"), 1000);
|
|
10
|
+
* timeout.set(); // Fires the callback after 1000ms.
|
|
11
|
+
* timeout.clear(); // Cancels it before it fires.
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/util/timeout/Timeout
|
|
11
13
|
*/
|
|
12
14
|
export declare class Timeout {
|
|
13
15
|
private _callback;
|
|
14
16
|
private _ms;
|
|
15
17
|
private _timeout;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new `Timeout`.
|
|
20
|
+
*
|
|
21
|
+
* @param callback The default callback to run when a timeout fires (used by `set()` when no callback is passed).
|
|
22
|
+
* @param ms The default delay for any created timeouts (in ms).
|
|
23
|
+
* @example new Timeout(() => console.log("fired"), 1000)
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/util/timeout/Timeout
|
|
25
|
+
*/
|
|
16
26
|
constructor(callback?: Callback | undefined, ms?: number);
|
|
17
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Whether a timeout is currently pending.
|
|
29
|
+
*
|
|
30
|
+
* @see https://dhoulb.github.io/shelving/util/timeout/Timeout/exists
|
|
31
|
+
*/
|
|
18
32
|
get exists(): boolean;
|
|
19
33
|
/**
|
|
20
34
|
* Cancel any existing timeout and set a new one.
|
|
21
|
-
*
|
|
22
|
-
* @param
|
|
35
|
+
*
|
|
36
|
+
* @param callback The callback to run when this timeout fires (defaults to the callback passed to the constructor).
|
|
37
|
+
* @param ms The delay for this timeout (in ms, defaults to the delay passed to the constructor).
|
|
38
|
+
* @returns Nothing.
|
|
39
|
+
* @example timeout.set(() => console.log("fired"), 500);
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/util/timeout/Timeout/set
|
|
23
41
|
*/
|
|
24
42
|
set(callback?: Callback | undefined, ms?: number): void;
|
|
25
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Cancel any existing timeout.
|
|
45
|
+
*
|
|
46
|
+
* @returns Nothing.
|
|
47
|
+
* @example timeout.clear();
|
|
48
|
+
* @see https://dhoulb.github.io/shelving/util/timeout/Timeout/clear
|
|
49
|
+
*/
|
|
26
50
|
clear(): void;
|
|
27
51
|
}
|