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/markup/MarkupParser.js
CHANGED
|
@@ -1,40 +1,65 @@
|
|
|
1
1
|
import { getLink } from "../util/link.js";
|
|
2
2
|
import { HTTP_SCHEMES } from "../util/uri.js";
|
|
3
3
|
import { MARKUP_RULES } from "./rule/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Parses a Markdownish markup string and renders it as a React node using a tiered, masking rule engine.
|
|
6
|
+
* - The syntax isn't hardcoded — it's defined entirely by the `rules` supplied (defaults to `MARKUP_RULES`).
|
|
7
|
+
* - Rules are grouped into priority tiers and resolved highest tier first; a claimed region is masked so lower-priority rules can't match into or across it.
|
|
8
|
+
* - Rules own the recursion into their own children by calling `parse()` again, optionally with a different context.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const node = new MarkupParser().parse("This is a *bold* string.");
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser
|
|
13
|
+
*/
|
|
4
14
|
export class MarkupParser {
|
|
5
15
|
/**
|
|
6
16
|
* The list of parsing rules this parser applies.
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/rules
|
|
7
18
|
*/
|
|
8
19
|
rules;
|
|
9
20
|
/**
|
|
10
21
|
* Calculated list of priorities to iterate over (extracted from the rules), e.g. [10, 0, -10]
|
|
22
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/priorities
|
|
11
23
|
*/
|
|
12
24
|
priorities;
|
|
13
25
|
/**
|
|
14
26
|
* Set the `rel=""` property used for any links (e.g. `rel="nofollow ugc"`).
|
|
15
27
|
* @example "nofollow ugc"
|
|
28
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/rel
|
|
16
29
|
*/
|
|
17
30
|
rel;
|
|
18
31
|
/**
|
|
19
32
|
* Current page URL — used as the base for resolving relative refs (`./foo`, `#x`, bare segments) in link hrefs.
|
|
20
33
|
* @default Falls back to `root` if not set.
|
|
34
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/url
|
|
21
35
|
*/
|
|
22
36
|
url;
|
|
23
37
|
/**
|
|
24
38
|
* Site root URL — used as the base for resolving site-absolute path hrefs (`/foo`), honoring its subfolder.
|
|
25
39
|
* @default Falls back to `url` if not set.
|
|
40
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/root
|
|
26
41
|
*/
|
|
27
42
|
root;
|
|
28
43
|
/**
|
|
29
44
|
* Valid URI schemes/protocols for URLs and URIs.
|
|
30
45
|
* @example ["http:", "https:"]
|
|
31
46
|
* @default ["http:", "https:"]
|
|
47
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/schemes
|
|
32
48
|
*/
|
|
33
49
|
schemes;
|
|
34
50
|
/**
|
|
35
51
|
* Default context to use if one isn't set. Defaults to `"block"`
|
|
52
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/context
|
|
36
53
|
*/
|
|
37
54
|
context;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new `MarkupParser` from a set of options.
|
|
57
|
+
*
|
|
58
|
+
* @param options Options configuring the rules, link resolution, and default context (all optional).
|
|
59
|
+
* @returns A `MarkupParser` instance.
|
|
60
|
+
* @example new MarkupParser({ rel: "nofollow ugc" })
|
|
61
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser
|
|
62
|
+
*/
|
|
38
63
|
constructor({ rules = MARKUP_RULES, rel, url, root, schemes = HTTP_SCHEMES, context = "block" } = {}) {
|
|
39
64
|
this.rules = rules;
|
|
40
65
|
this.priorities = _getPriorities(rules);
|
|
@@ -45,30 +70,40 @@ export class MarkupParser {
|
|
|
45
70
|
this.context = context;
|
|
46
71
|
}
|
|
47
72
|
/**
|
|
48
|
-
* Parse a text string as Markdownish markup syntax and render it as
|
|
73
|
+
* Parse a text string as Markdownish markup syntax and render it as a React node.
|
|
49
74
|
* - Syntax is not defined by this code, but by the rules supplied to it.
|
|
50
75
|
*
|
|
51
|
-
* @param input The string content possibly containing markup syntax, e.g. "This is a *bold* string.
|
|
52
|
-
* @param parser A markup parser instance.
|
|
76
|
+
* @param input The string content possibly containing markup syntax, e.g. `"This is a *bold* string."`.
|
|
53
77
|
* @param context The context to render in (defaults to `"block"`).
|
|
54
|
-
*
|
|
55
78
|
* @returns A React node — an element, a string, `null`, or an array of zero or more of those.
|
|
79
|
+
* @example new MarkupParser().parse("This is a *bold* string.")
|
|
80
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/parse
|
|
56
81
|
*/
|
|
57
82
|
parse(input, context = "block") {
|
|
58
83
|
const nodes = _parseNodes(input, this, context);
|
|
59
84
|
return !nodes.length ? null : nodes.length === 1 ? nodes[0] : nodes;
|
|
60
85
|
}
|
|
61
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* Yield the rules active in `context` that sit in the given priority tier.
|
|
88
|
+
*
|
|
89
|
+
* @param context The render context to filter rules by (e.g. `"block"`, `"inline"`).
|
|
90
|
+
* @param priority The priority tier to filter rules by.
|
|
91
|
+
* @returns An iterable of the matching `MarkupRule` instances.
|
|
92
|
+
* @example for (const rule of parser.getRules("block", 0)) { ... }
|
|
93
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/getRules
|
|
94
|
+
*/
|
|
62
95
|
*getRules(context, priority) {
|
|
63
96
|
for (const r of this.rules)
|
|
64
97
|
if (r.priority === priority && r.contexts.includes(context))
|
|
65
98
|
yield r;
|
|
66
99
|
}
|
|
67
100
|
/**
|
|
68
|
-
*
|
|
101
|
+
* Resolve a link href against this parser's `url` and `root`, returning it only if its scheme is allowed.
|
|
69
102
|
*
|
|
70
|
-
* @
|
|
71
|
-
* @returns `
|
|
103
|
+
* @param href The raw link reference to resolve (relative or absolute), or a nullish value.
|
|
104
|
+
* @returns An `ImmutableURI` if the link parses and its scheme is in `schemes`, otherwise `undefined`.
|
|
105
|
+
* @example parser.getLink("/about") // ImmutableURI | undefined
|
|
106
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/getLink
|
|
72
107
|
*/
|
|
73
108
|
getLink(href) {
|
|
74
109
|
const link = getLink(href, this.url, this.root);
|
|
@@ -250,5 +285,11 @@ function _mask(text, start, end) {
|
|
|
250
285
|
blanked += text[i] === "\n" ? "\n" : _MASK_CHAR;
|
|
251
286
|
return `${text.slice(0, start)}${blanked}${text.slice(end)}`;
|
|
252
287
|
}
|
|
253
|
-
/**
|
|
288
|
+
/**
|
|
289
|
+
* Shared `MarkupParser` instance configured with the default markup rules and behaviour.
|
|
290
|
+
* - Use this singleton when no custom rules, link resolution, or default context are needed.
|
|
291
|
+
*
|
|
292
|
+
* @example MARKUP_PARSER.parse("This is a *bold* string.")
|
|
293
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupParser/MARKUP_PARSER
|
|
294
|
+
*/
|
|
254
295
|
export const MARKUP_PARSER = new MarkupParser();
|
package/markup/MarkupRule.d.ts
CHANGED
|
@@ -2,7 +2,19 @@ import type { ReactElement } from "react";
|
|
|
2
2
|
import type { EmptyDictionary } from "../util/dictionary.js";
|
|
3
3
|
import type { NamedRegExp, NamedRegExpData } from "../util/regexp.js";
|
|
4
4
|
import type { MarkupParser } from "./MarkupParser.js";
|
|
5
|
+
/**
|
|
6
|
+
* One or more named contexts a markup rule renders in (e.g. `["block"]`, `["inline", "list", "link"]`).
|
|
7
|
+
*
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupRule/MarkupContexts
|
|
9
|
+
*/
|
|
5
10
|
export type MarkupContexts = [string, ...string[]];
|
|
11
|
+
/**
|
|
12
|
+
* A single markup rule: a regular expression that matches a span of input plus a renderer that turns the match into an element.
|
|
13
|
+
* - Rules are grouped into priority tiers and resolved highest tier first by `MarkupParser`.
|
|
14
|
+
* - A rule renders only in the contexts it lists, letting the same syntax behave differently in block vs inline vs list context.
|
|
15
|
+
*
|
|
16
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupRule/MarkupRule
|
|
17
|
+
*/
|
|
6
18
|
export interface MarkupRule {
|
|
7
19
|
/** Regular expression used for matching the rule. */
|
|
8
20
|
regexp: RegExp;
|
|
@@ -13,7 +25,28 @@ export interface MarkupRule {
|
|
|
13
25
|
/** Priority for this rule (higher priority rules override lower priority rules). */
|
|
14
26
|
priority: number;
|
|
15
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* An immutable list of `MarkupRule` instances applied by a `MarkupParser`.
|
|
30
|
+
*
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupRule/MarkupRules
|
|
32
|
+
*/
|
|
16
33
|
export type MarkupRules = readonly MarkupRule[];
|
|
17
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Create a typed `MarkupRule` from a `NamedRegExp`, a renderer, its contexts, and an optional priority.
|
|
36
|
+
*
|
|
37
|
+
* *Factory for `MarkupRule`.*
|
|
38
|
+
*
|
|
39
|
+
* - The overload taking a `NamedRegExp<T>` infers the named capture groups handed to `render`.
|
|
40
|
+
* - Higher `priority` rules are resolved (and masked) before lower-priority ones.
|
|
41
|
+
*
|
|
42
|
+
* @param regexp Regular expression used to match the rule (a `NamedRegExp` to type the render data).
|
|
43
|
+
* @param render Renderer turning a `key`, the matched `data`, and the active `parser` into a `ReactElement`.
|
|
44
|
+
* @param contexts One or more contexts this rule renders in (e.g. `["block"]`).
|
|
45
|
+
* @param priority Tier priority — higher rules override lower ones (defaults to `0`).
|
|
46
|
+
* @returns A `MarkupRule` ready to add to a `MarkupRules` list.
|
|
47
|
+
* @example
|
|
48
|
+
* const HR_RULE = createMarkupRule(/^---$/m, key => <hr key={key} />, ["block"]);
|
|
49
|
+
* @see https://dhoulb.github.io/shelving/markup/MarkupRule/createMarkupRule
|
|
50
|
+
*/
|
|
18
51
|
export declare function createMarkupRule<T extends NamedRegExpData>(regexp: NamedRegExp<T>, render: (key: string, data: T, parser: MarkupParser) => ReactElement, contexts: MarkupContexts, priority?: number): MarkupRule;
|
|
19
52
|
export declare function createMarkupRule(regexp: RegExp, render: (key: string, data: EmptyDictionary, parser: MarkupParser) => ReactElement, contexts: MarkupContexts, priority?: number): MarkupRule;
|
package/markup/Parser.d.ts
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for a parser that converts an input of type `I` into an output of type `O`.
|
|
3
|
+
* - Subclasses implement `parse()` to define the actual transformation.
|
|
4
|
+
* - `MarkupParser` is the canonical implementation — it parses a markup string into a React node.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* class UppercaseParser extends Parser<string, string> {
|
|
8
|
+
* parse(input: string): string { return input.toUpperCase(); }
|
|
9
|
+
* }
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/markup/Parser/Parser
|
|
11
|
+
*/
|
|
1
12
|
export declare abstract class Parser<I, O> {
|
|
13
|
+
/**
|
|
14
|
+
* Parse an input value into an output value.
|
|
15
|
+
*
|
|
16
|
+
* @param input The input value to parse.
|
|
17
|
+
* @returns The parsed output value.
|
|
18
|
+
* @see https://dhoulb.github.io/shelving/markup/Parser/Parser/parse
|
|
19
|
+
*/
|
|
2
20
|
abstract parse(input: I): O;
|
|
3
21
|
}
|
package/markup/Parser.js
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for a parser that converts an input of type `I` into an output of type `O`.
|
|
3
|
+
* - Subclasses implement `parse()` to define the actual transformation.
|
|
4
|
+
* - `MarkupParser` is the canonical implementation — it parses a markup string into a React node.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* class UppercaseParser extends Parser<string, string> {
|
|
8
|
+
* parse(input: string): string { return input.toUpperCase(); }
|
|
9
|
+
* }
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/markup/Parser/Parser
|
|
11
|
+
*/
|
|
1
12
|
export class Parser {
|
|
2
13
|
}
|
|
@@ -3,5 +3,8 @@
|
|
|
3
3
|
* - `>` quote character followed by zero or more spaces.
|
|
4
4
|
* - No spaces can appear before the `>` quote character.
|
|
5
5
|
* - Quote block is only broken by `\n\n` two newline characters.
|
|
6
|
+
*
|
|
7
|
+
* @example new MarkupParser({ rules: [BLOCKQUOTE_RULE] }).parse("> Quoted text")
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/blockquote/BLOCKQUOTE_RULE
|
|
6
9
|
*/
|
|
7
10
|
export declare const BLOCKQUOTE_RULE: import("../MarkupRule.js").MarkupRule;
|
|
@@ -8,5 +8,8 @@ const INDENT = new RegExp(`^${PREFIX}`, "gm");
|
|
|
8
8
|
* - `>` quote character followed by zero or more spaces.
|
|
9
9
|
* - No spaces can appear before the `>` quote character.
|
|
10
10
|
* - Quote block is only broken by `\n\n` two newline characters.
|
|
11
|
+
*
|
|
12
|
+
* @example new MarkupParser({ rules: [BLOCKQUOTE_RULE] }).parse("> Quoted text")
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/blockquote/BLOCKQUOTE_RULE
|
|
11
14
|
*/
|
|
12
15
|
export const BLOCKQUOTE_RULE = createMarkupRule(createBlockRegExp(`(?<quote>${PREFIX}${BLOCK_CONTENT_REGEXP})`), (key, { quote }, parser) => _jsx("blockquote", { children: parser.parse(quote.replace(INDENT, ""), "block") }, key), ["block", "list"]);
|
package/markup/rule/code.d.ts
CHANGED
|
@@ -5,5 +5,8 @@
|
|
|
5
5
|
* - Closing characters must exactly match opening characters.
|
|
6
6
|
* - Works inside link text too, e.g. `` [`code`](url) ``.
|
|
7
7
|
* - Same as Markdown syntax.
|
|
8
|
+
*
|
|
9
|
+
* @example new MarkupParser({ rules: [CODE_RULE] }).parse("Some `inline code` here")
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/code/CODE_RULE
|
|
8
11
|
*/
|
|
9
12
|
export declare const CODE_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/code.js
CHANGED
|
@@ -9,6 +9,9 @@ import { BLOCK_CONTENT_REGEXP } from "../util/regexp.js";
|
|
|
9
9
|
* - Closing characters must exactly match opening characters.
|
|
10
10
|
* - Works inside link text too, e.g. `` [`code`](url) ``.
|
|
11
11
|
* - Same as Markdown syntax.
|
|
12
|
+
*
|
|
13
|
+
* @example new MarkupParser({ rules: [CODE_RULE] }).parse("Some `inline code` here")
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/code/CODE_RULE
|
|
12
15
|
*/
|
|
13
16
|
// Priority 10: code is a higher-precedence tier, resolved and masked before links/emphasis, so a
|
|
14
17
|
// code span that straddles a link delimiter wins and the link cannot form across it.
|
package/markup/rule/fenced.d.ts
CHANGED
|
@@ -6,5 +6,8 @@
|
|
|
6
6
|
* - Closing fence must be exactly the same as the opening fence, and can be made of three or more "```" backticks, or three or more `~~~` tildes.
|
|
7
7
|
* - If there's no closing fence the code block will run to the end of the current string.
|
|
8
8
|
* - Markdown-style four-space indent syntax is not supported (only fenced code since it's less confusing and more common).
|
|
9
|
+
*
|
|
10
|
+
* @example new MarkupParser({ rules: [FENCED_RULE] }).parse("```\ncode block\n```")
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/fenced/FENCED_RULE
|
|
9
12
|
*/
|
|
10
13
|
export declare const FENCED_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/fenced.js
CHANGED
|
@@ -10,6 +10,9 @@ const FENCE = "`{3,}|~{3,}";
|
|
|
10
10
|
* - Closing fence must be exactly the same as the opening fence, and can be made of three or more "```" backticks, or three or more `~~~` tildes.
|
|
11
11
|
* - If there's no closing fence the code block will run to the end of the current string.
|
|
12
12
|
* - Markdown-style four-space indent syntax is not supported (only fenced code since it's less confusing and more common).
|
|
13
|
+
*
|
|
14
|
+
* @example new MarkupParser({ rules: [FENCED_RULE] }).parse("```\ncode block\n```")
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/fenced/FENCED_RULE
|
|
13
16
|
*/
|
|
14
17
|
export const FENCED_RULE = createMarkupRule(createBlockRegExp(`(?<code>${BLOCK_CONTENT_REGEXP})`, `${BLOCK_START_REGEXP}(?<fence>${FENCE}) *(?<title>${LINE_CONTENT_REGEXP})\n`, // Starts with the fence
|
|
15
18
|
`(?:${LINE_SPACE_REGEXP}*\n\\k<fence>(?:\\s*\\n)?|$)`), (key, { title, code }) => {
|
package/markup/rule/heading.d.ts
CHANGED
|
@@ -3,5 +3,8 @@
|
|
|
3
3
|
* - `#` 1-6 hashes, then one or more spaces, then the title.
|
|
4
4
|
* - `#` must be the first character on the line.
|
|
5
5
|
* - Markdown's underline syntax is not supported (for simplification).
|
|
6
|
+
*
|
|
7
|
+
* @example new MarkupParser({ rules: [HEADING_RULE] }).parse("# Title")
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/heading/HEADING_RULE
|
|
6
9
|
*/
|
|
7
10
|
export declare const HEADING_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/heading.js
CHANGED
|
@@ -6,6 +6,9 @@ import { createLineRegExp, LINE_CONTENT_REGEXP, LINE_SPACE_REGEXP } from "../uti
|
|
|
6
6
|
* - `#` 1-6 hashes, then one or more spaces, then the title.
|
|
7
7
|
* - `#` must be the first character on the line.
|
|
8
8
|
* - Markdown's underline syntax is not supported (for simplification).
|
|
9
|
+
*
|
|
10
|
+
* @example new MarkupParser({ rules: [HEADING_RULE] }).parse("# Title")
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/heading/HEADING_RULE
|
|
9
12
|
*/
|
|
10
13
|
export const HEADING_RULE = createMarkupRule(createLineRegExp(`(?<prefix>#{1,6})(?:${LINE_SPACE_REGEXP}+(?<heading>${LINE_CONTENT_REGEXP}))?`), (key, { prefix, heading = "" }, parser) => {
|
|
11
14
|
// The hash count picks the heading level; cast the dynamic tag to the known `h1`–`h6` set.
|
package/markup/rule/index.d.ts
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import type { MarkupRules } from "../MarkupRule.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Default markup rules that render in a block context — fenced code, headings, separators, lists, blockquotes, tables, and paragraphs.
|
|
4
|
+
*
|
|
5
|
+
* @example new MarkupParser({ rules: MARKUP_RULES_BLOCK })
|
|
6
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/MARKUP_RULES_BLOCK
|
|
7
|
+
*/
|
|
3
8
|
export declare const MARKUP_RULES_BLOCK: MarkupRules;
|
|
4
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Default markup rules that render in an inline context — inline code, links, autolinks, emphasis, and hard linebreaks.
|
|
11
|
+
*
|
|
12
|
+
* @example new MarkupParser({ rules: MARKUP_RULES_INLINE })
|
|
13
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/MARKUP_RULES_INLINE
|
|
14
|
+
*/
|
|
5
15
|
export declare const MARKUP_RULES_INLINE: MarkupRules;
|
|
6
16
|
/**
|
|
7
|
-
* Default markup rules
|
|
17
|
+
* Default markup rules — the combined block and inline rules `MarkupParser` uses when none are supplied.
|
|
8
18
|
*
|
|
9
19
|
* These rules define a syntax similar to Markdown but with improvements:
|
|
10
20
|
* 1. Syntax is more intuitive (e.g. `*strong*` always uses `*` asterisk and `_em_` always uses `_` underscore, and URLs are always autolinked).
|
|
11
21
|
* 2. More compatible with textboxes that wrap lines by default (e.g. single `\n` linebreaks don't need the trailing double space to, they're always treated as `<br />`).
|
|
12
22
|
* 3. Don't support fussy fragile syntax that lets users make mistakes (e.g. literal HTML tags or `&` character entities).
|
|
23
|
+
*
|
|
24
|
+
* @example new MarkupParser({ rules: MARKUP_RULES }).parse("This is a *bold* string.")
|
|
25
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/MARKUP_RULES
|
|
13
26
|
*/
|
|
14
27
|
export declare const MARKUP_RULES: MarkupRules;
|
|
15
28
|
export * from "./blockquote.js";
|
package/markup/rule/index.js
CHANGED
|
@@ -10,7 +10,12 @@ import { PARAGRAPH_RULE } from "./paragraph.js";
|
|
|
10
10
|
import { SEPARATOR_RULE } from "./separator.js";
|
|
11
11
|
import { TABLE_RULE } from "./table.js";
|
|
12
12
|
import { UNORDERED_RULE } from "./unordered.js";
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Default markup rules that render in a block context — fenced code, headings, separators, lists, blockquotes, tables, and paragraphs.
|
|
15
|
+
*
|
|
16
|
+
* @example new MarkupParser({ rules: MARKUP_RULES_BLOCK })
|
|
17
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/MARKUP_RULES_BLOCK
|
|
18
|
+
*/
|
|
14
19
|
export const MARKUP_RULES_BLOCK = [
|
|
15
20
|
FENCED_RULE,
|
|
16
21
|
HEADING_RULE,
|
|
@@ -21,7 +26,12 @@ export const MARKUP_RULES_BLOCK = [
|
|
|
21
26
|
TABLE_RULE,
|
|
22
27
|
PARAGRAPH_RULE,
|
|
23
28
|
];
|
|
24
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Default markup rules that render in an inline context — inline code, links, autolinks, emphasis, and hard linebreaks.
|
|
31
|
+
*
|
|
32
|
+
* @example new MarkupParser({ rules: MARKUP_RULES_INLINE })
|
|
33
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/MARKUP_RULES_INLINE
|
|
34
|
+
*/
|
|
25
35
|
export const MARKUP_RULES_INLINE = [
|
|
26
36
|
CODE_RULE, //
|
|
27
37
|
LINK_RULE,
|
|
@@ -30,12 +40,15 @@ export const MARKUP_RULES_INLINE = [
|
|
|
30
40
|
LINEBREAK_RULE,
|
|
31
41
|
];
|
|
32
42
|
/**
|
|
33
|
-
* Default markup rules
|
|
43
|
+
* Default markup rules — the combined block and inline rules `MarkupParser` uses when none are supplied.
|
|
34
44
|
*
|
|
35
45
|
* These rules define a syntax similar to Markdown but with improvements:
|
|
36
46
|
* 1. Syntax is more intuitive (e.g. `*strong*` always uses `*` asterisk and `_em_` always uses `_` underscore, and URLs are always autolinked).
|
|
37
47
|
* 2. More compatible with textboxes that wrap lines by default (e.g. single `\n` linebreaks don't need the trailing double space to, they're always treated as `<br />`).
|
|
38
48
|
* 3. Don't support fussy fragile syntax that lets users make mistakes (e.g. literal HTML tags or `&` character entities).
|
|
49
|
+
*
|
|
50
|
+
* @example new MarkupParser({ rules: MARKUP_RULES }).parse("This is a *bold* string.")
|
|
51
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/MARKUP_RULES
|
|
39
52
|
*/
|
|
40
53
|
export const MARKUP_RULES = [
|
|
41
54
|
...MARKUP_RULES_BLOCK, //
|
package/markup/rule/inline.d.ts
CHANGED
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
* - Inline strong text wrapped in one or more `*` asterisks.
|
|
4
4
|
* - Inline emphasis text wrapped in one or more `_` underscores.
|
|
5
5
|
* - Inline inserted text wrapped in one or more `+` pluses.
|
|
6
|
-
* - Inline deleted text wrapped in one or more
|
|
6
|
+
* - Inline deleted text wrapped in one or more `~` tildes.
|
|
7
7
|
* - Inline highlighted text wrapped in one or more `=` equals or `:` colons.
|
|
8
8
|
* - Whitespace cannot be the first or last character of the element (e.g. `* abc *` will not work).
|
|
9
9
|
* - Closing chars must match opening characters.
|
|
10
10
|
* - Cannot occur in the middle of a word (e.g. `this*that*this` will not work).
|
|
11
11
|
* - Closing characters must exactly match opening characters.
|
|
12
12
|
* - Different to Markdown: strong is always surrounded by `*asterisks*` and emphasis is always surrounded by `_underscores_` (strong isn't 'double emphasis').
|
|
13
|
+
*
|
|
14
|
+
* @example new MarkupParser({ rules: [INLINE_RULE] }).parse("This is *bold* and _italic_")
|
|
15
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/inline/INLINE_RULE
|
|
13
16
|
*/
|
|
14
17
|
export declare const INLINE_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/inline.js
CHANGED
|
@@ -2,19 +2,22 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { createMarkupRule } from "../MarkupRule.js";
|
|
3
3
|
import { createWordRegExp } from "../util/regexp.js";
|
|
4
4
|
/** Map characters, e.g. `*`, to their coresponding HTML tag, e.g. `strong` */
|
|
5
|
-
const INLINE_CHARS = { "
|
|
5
|
+
const INLINE_CHARS = { "~": "del", "+": "ins", "*": "strong", _: "em", "=": "mark" };
|
|
6
6
|
/**
|
|
7
7
|
* Inline strong, emphasis, insert, delete, highlight.
|
|
8
8
|
* - Inline strong text wrapped in one or more `*` asterisks.
|
|
9
9
|
* - Inline emphasis text wrapped in one or more `_` underscores.
|
|
10
10
|
* - Inline inserted text wrapped in one or more `+` pluses.
|
|
11
|
-
* - Inline deleted text wrapped in one or more
|
|
11
|
+
* - Inline deleted text wrapped in one or more `~` tildes.
|
|
12
12
|
* - Inline highlighted text wrapped in one or more `=` equals or `:` colons.
|
|
13
13
|
* - Whitespace cannot be the first or last character of the element (e.g. `* abc *` will not work).
|
|
14
14
|
* - Closing chars must match opening characters.
|
|
15
15
|
* - Cannot occur in the middle of a word (e.g. `this*that*this` will not work).
|
|
16
16
|
* - Closing characters must exactly match opening characters.
|
|
17
17
|
* - Different to Markdown: strong is always surrounded by `*asterisks*` and emphasis is always surrounded by `_underscores_` (strong isn't 'double emphasis').
|
|
18
|
+
*
|
|
19
|
+
* @example new MarkupParser({ rules: [INLINE_RULE] }).parse("This is *bold* and _italic_")
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/inline/INLINE_RULE
|
|
18
21
|
*/
|
|
19
22
|
export const INLINE_RULE = createMarkupRule(createWordRegExp(`(?<wrap>(?<char>[${Object.keys(INLINE_CHARS).join("")}])+)(?<text>(?!\\k<char>)\\S(?:[\\s\\S]*?(?!\\k<char>)\\S)?)\\k<wrap>`), (key, { char, text }, parser) => {
|
|
20
23
|
const Inline = INLINE_CHARS[char];
|
|
@@ -7,5 +7,8 @@
|
|
|
7
7
|
* - We just directly convert any `\n` linebreak into a `<br />` tag (lines without two spaces are not joined together).
|
|
8
8
|
* - This is more intuitive (a linebreak becomes a linebreak is isn't silently ignored).
|
|
9
9
|
* - This works better with textareas that wrap text (since manually breaking up long lines is no longer necessary).
|
|
10
|
+
*
|
|
11
|
+
* @example new MarkupParser({ rules: [LINEBREAK_RULE] }).parse("Line one\nLine two")
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/linebreak/LINEBREAK_RULE
|
|
10
13
|
*/
|
|
11
14
|
export declare const LINEBREAK_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/linebreak.js
CHANGED
|
@@ -9,6 +9,9 @@ import { createMarkupRule } from "../MarkupRule.js";
|
|
|
9
9
|
* - We just directly convert any `\n` linebreak into a `<br />` tag (lines without two spaces are not joined together).
|
|
10
10
|
* - This is more intuitive (a linebreak becomes a linebreak is isn't silently ignored).
|
|
11
11
|
* - This works better with textareas that wrap text (since manually breaking up long lines is no longer necessary).
|
|
12
|
+
*
|
|
13
|
+
* @example new MarkupParser({ rules: [LINEBREAK_RULE] }).parse("Line one\nLine two")
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/linebreak/LINEBREAK_RULE
|
|
12
15
|
*/
|
|
13
16
|
export const LINEBREAK_RULE = createMarkupRule(/[^\n\S]*\n[^\n\S]*/, //
|
|
14
17
|
//
|
package/markup/rule/link.d.ts
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* - Does not need space before/after the link.
|
|
6
6
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
7
7
|
* - For security only schemes that appear in `MarkupOptions.schemes` will match (defaults to `http:` and `https:`).
|
|
8
|
+
*
|
|
9
|
+
* @example new MarkupParser({ rules: [LINK_RULE] }).parse("[Google Maps](http://google.com/maps)")
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/link/LINK_RULE
|
|
8
11
|
*/
|
|
9
12
|
export declare const LINK_RULE: import("../MarkupRule.js").MarkupRule;
|
|
10
13
|
/**
|
|
@@ -13,5 +16,8 @@ export declare const LINK_RULE: import("../MarkupRule.js").MarkupRule;
|
|
|
13
16
|
* - If no title is specified a cleaned up version of the URL will be used, e.g. `google.com/maps`
|
|
14
17
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
15
18
|
* - For security only schemes that appear in `MarkupOptions.schemes` will match (defaults to `http:` and `https:`).
|
|
19
|
+
*
|
|
20
|
+
* @example new MarkupParser({ rules: [AUTOLINK_RULE] }).parse("http://google.com/maps (Google Maps)")
|
|
21
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/link/AUTOLINK_RULE
|
|
16
22
|
*/
|
|
17
23
|
export declare const AUTOLINK_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/link.js
CHANGED
|
@@ -14,6 +14,9 @@ function _renderLink(key, { title, href }, parser) {
|
|
|
14
14
|
* - Does not need space before/after the link.
|
|
15
15
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
16
16
|
* - For security only schemes that appear in `MarkupOptions.schemes` will match (defaults to `http:` and `https:`).
|
|
17
|
+
*
|
|
18
|
+
* @example new MarkupParser({ rules: [LINK_RULE] }).parse("[Google Maps](http://google.com/maps)")
|
|
19
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/link/LINK_RULE
|
|
17
20
|
*/
|
|
18
21
|
export const LINK_RULE = createMarkupRule(getRegExp(/\[(?<title>[^\]\n]*?)\]\((?<href>[^)\n]*?)\)/), //
|
|
19
22
|
_renderLink, ["inline", "list"]);
|
|
@@ -23,6 +26,9 @@ _renderLink, ["inline", "list"]);
|
|
|
23
26
|
* - If no title is specified a cleaned up version of the URL will be used, e.g. `google.com/maps`
|
|
24
27
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
25
28
|
* - For security only schemes that appear in `MarkupOptions.schemes` will match (defaults to `http:` and `https:`).
|
|
29
|
+
*
|
|
30
|
+
* @example new MarkupParser({ rules: [AUTOLINK_RULE] }).parse("http://google.com/maps (Google Maps)")
|
|
31
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/link/AUTOLINK_RULE
|
|
26
32
|
*/
|
|
27
33
|
export const AUTOLINK_RULE = createMarkupRule(getRegExp(/(?<href>[a-z]{3,}?:\S+)(?: +(?:\((?<title>[^)\n]*?)\)))?/), //
|
|
28
34
|
_renderLink, ["inline", "list"]);
|
package/markup/rule/ordered.d.ts
CHANGED
|
@@ -6,5 +6,8 @@
|
|
|
6
6
|
* - List block runs until a blank line that is not followed by another item or an indented continuation line.
|
|
7
7
|
* - A list with blank lines between its items (or before a continuation paragraph) is "loose": its items are wrapped in `<p>` tags.
|
|
8
8
|
* - Sparse lists are not supported.
|
|
9
|
+
*
|
|
10
|
+
* @example new MarkupParser({ rules: [ORDERED_RULE] }).parse("1. First\n2. Second")
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/ordered/ORDERED_RULE
|
|
9
12
|
*/
|
|
10
13
|
export declare const ORDERED_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/ordered.js
CHANGED
|
@@ -19,6 +19,9 @@ const _LOOSE = new RegExp(`\\n${LINE_SPACE_REGEXP}*\\n`);
|
|
|
19
19
|
* - List block runs until a blank line that is not followed by another item or an indented continuation line.
|
|
20
20
|
* - A list with blank lines between its items (or before a continuation paragraph) is "loose": its items are wrapped in `<p>` tags.
|
|
21
21
|
* - Sparse lists are not supported.
|
|
22
|
+
*
|
|
23
|
+
* @example new MarkupParser({ rules: [ORDERED_RULE] }).parse("1. First\n2. Second")
|
|
24
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/ordered/ORDERED_RULE
|
|
22
25
|
*/
|
|
23
26
|
export const ORDERED_RULE = createMarkupRule(createBlockRegExp(`(?<list>${_NUMBER}(?:${LINE_SPACE_REGEXP}+${BLOCK_CONTENT_REGEXP})?)`, BLOCK_START_REGEXP, _END), (key, { list }, parser) => _jsx("ol", { children: Array.from(_getOrderedItems(list, parser)) }, key), ["block", "list"]);
|
|
24
27
|
/** Parse a markdown list into a set of items elements. */
|
|
@@ -3,5 +3,8 @@
|
|
|
3
3
|
* - Captures almost anything in a block context.
|
|
4
4
|
* - Any run of non-whitespace.
|
|
5
5
|
* - Leading and trailing whitespace is trimmed.
|
|
6
|
+
*
|
|
7
|
+
* @example new MarkupParser({ rules: [PARAGRAPH_RULE] }).parse("Some plain text")
|
|
8
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/paragraph/PARAGRAPH_RULE
|
|
6
9
|
*/
|
|
7
10
|
export declare const PARAGRAPH_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/paragraph.js
CHANGED
|
@@ -6,5 +6,8 @@ import { BLOCK_SPACE_REGEXP, BLOCK_START_REGEXP, createBlockRegExp } from "../ut
|
|
|
6
6
|
* - Captures almost anything in a block context.
|
|
7
7
|
* - Any run of non-whitespace.
|
|
8
8
|
* - Leading and trailing whitespace is trimmed.
|
|
9
|
+
*
|
|
10
|
+
* @example new MarkupParser({ rules: [PARAGRAPH_RULE] }).parse("Some plain text")
|
|
11
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/paragraph/PARAGRAPH_RULE
|
|
9
12
|
*/
|
|
10
13
|
export const PARAGRAPH_RULE = createMarkupRule(createBlockRegExp("(?<paragraph>(?:(?=\\S)[\\s\\S]*?\\S))", `${BLOCK_START_REGEXP}${BLOCK_SPACE_REGEXP}*`), (key, { paragraph }, parser) => _jsx("p", { children: parser.parse(paragraph, "inline") }, key), ["block"], -10);
|
|
@@ -4,5 +4,8 @@
|
|
|
4
4
|
* - Character must be repeated three (or more) times.
|
|
5
5
|
* - Character must be the same every time (can't mix)
|
|
6
6
|
* - Might have infinite number of spaces between the characters.
|
|
7
|
+
*
|
|
8
|
+
* @example new MarkupParser({ rules: [SEPARATOR_RULE] }).parse("---")
|
|
9
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/separator/SEPARATOR_RULE
|
|
7
10
|
*/
|
|
8
11
|
export declare const SEPARATOR_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/separator.js
CHANGED
|
@@ -7,6 +7,9 @@ import { createLineRegExp } from "../util/regexp.js";
|
|
|
7
7
|
* - Character must be repeated three (or more) times.
|
|
8
8
|
* - Character must be the same every time (can't mix)
|
|
9
9
|
* - Might have infinite number of spaces between the characters.
|
|
10
|
+
*
|
|
11
|
+
* @example new MarkupParser({ rules: [SEPARATOR_RULE] }).parse("---")
|
|
12
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/separator/SEPARATOR_RULE
|
|
10
13
|
*/
|
|
11
14
|
export const SEPARATOR_RULE = createMarkupRule(createLineRegExp("([-*•+_=])(?: *\\1){2,}"), //
|
|
12
15
|
//
|
package/markup/rule/table.d.ts
CHANGED
|
@@ -5,5 +5,8 @@
|
|
|
5
5
|
* - Extra `|---|` delimiter rows split the table into sections: the first section becomes `<thead>`, the last becomes `<tfoot>` (only when there are three or more sections), and every section in between becomes its own `<tbody>`.
|
|
6
6
|
* - Column count and per-column alignment (`:--` left, `--:` right, `:-:` centered) come from the first delimiter row; ragged rows are padded or truncated to that count.
|
|
7
7
|
* - Cell content is rendered as inline markup; write `\|` for a literal pipe inside a cell.
|
|
8
|
+
*
|
|
9
|
+
* @example new MarkupParser({ rules: [TABLE_RULE] }).parse("| A | B |\n|---|---|\n| 1 | 2 |")
|
|
10
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/table/TABLE_RULE
|
|
8
11
|
*/
|
|
9
12
|
export declare const TABLE_RULE: import("../MarkupRule.js").MarkupRule;
|
package/markup/rule/table.js
CHANGED
|
@@ -15,6 +15,9 @@ const _SPLIT = /(?<!\\)\|/; // Splits a row into cells on unescaped pipes.
|
|
|
15
15
|
* - Extra `|---|` delimiter rows split the table into sections: the first section becomes `<thead>`, the last becomes `<tfoot>` (only when there are three or more sections), and every section in between becomes its own `<tbody>`.
|
|
16
16
|
* - Column count and per-column alignment (`:--` left, `--:` right, `:-:` centered) come from the first delimiter row; ragged rows are padded or truncated to that count.
|
|
17
17
|
* - Cell content is rendered as inline markup; write `\|` for a literal pipe inside a cell.
|
|
18
|
+
*
|
|
19
|
+
* @example new MarkupParser({ rules: [TABLE_RULE] }).parse("| A | B |\n|---|---|\n| 1 | 2 |")
|
|
20
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/table/TABLE_RULE
|
|
18
21
|
*/
|
|
19
22
|
export const TABLE_RULE = createMarkupRule(createBlockRegExp(`(?<table>${_ROW}\\n${_DELIMITER_SOURCE}(?:\\n${_ROW})*)`), (key, { table }, parser) => {
|
|
20
23
|
const lines = table.split("\n");
|
|
@@ -9,6 +9,9 @@ import type { MarkupParser } from "../MarkupParser.js";
|
|
|
9
9
|
* - A list with blank lines between its items (or before a continuation paragraph) is "loose": its items are wrapped in `<p>` tags.
|
|
10
10
|
* - An item starting with `[ ]` or `[x]` (case-insensitive) is a todo item: a checkbox `<input>` plus the content wrapped in a `<label>` so clicking it toggles the checkbox.
|
|
11
11
|
* - Sparse lists are not supported.
|
|
12
|
+
*
|
|
13
|
+
* @example new MarkupParser({ rules: [UNORDERED_RULE] }).parse("- First\n- Second")
|
|
14
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/unordered/UNORDERED_RULE
|
|
12
15
|
*/
|
|
13
16
|
export declare const UNORDERED_RULE: import("../MarkupRule.js").MarkupRule;
|
|
14
17
|
/** Parse a markdown list into a set of items elements. */
|
package/markup/rule/unordered.js
CHANGED
|
@@ -23,6 +23,9 @@ const _LOOSE = new RegExp(`\\n${LINE_SPACE_REGEXP}*\\n`);
|
|
|
23
23
|
* - A list with blank lines between its items (or before a continuation paragraph) is "loose": its items are wrapped in `<p>` tags.
|
|
24
24
|
* - An item starting with `[ ]` or `[x]` (case-insensitive) is a todo item: a checkbox `<input>` plus the content wrapped in a `<label>` so clicking it toggles the checkbox.
|
|
25
25
|
* - Sparse lists are not supported.
|
|
26
|
+
*
|
|
27
|
+
* @example new MarkupParser({ rules: [UNORDERED_RULE] }).parse("- First\n- Second")
|
|
28
|
+
* @see https://dhoulb.github.io/shelving/markup/rule/unordered/UNORDERED_RULE
|
|
26
29
|
*/
|
|
27
30
|
export const UNORDERED_RULE = createMarkupRule(createBlockRegExp(`(?<list>${_BULLET}(?:${LINE_SPACE_REGEXP}+${BLOCK_CONTENT_REGEXP})?)`, BLOCK_START_REGEXP, _END), (key, { list }, parser) => _jsx("ul", { children: Array.from(_getItems(list, parser)) }, key), ["block", "list"]);
|
|
28
31
|
/** Parse a markdown list into a set of items elements. */
|