@lionrapid/core 0.1.0
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/README.md +106 -0
- package/dist/base/event-emitter.d.ts +91 -0
- package/dist/base/event-emitter.d.ts.map +1 -0
- package/dist/base/event-emitter.js +330 -0
- package/dist/base/event-emitter.js.map +1 -0
- package/dist/base/index.d.ts +5 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +5 -0
- package/dist/base/index.js.map +1 -0
- package/dist/browser/auto-init.d.ts +57 -0
- package/dist/browser/auto-init.d.ts.map +1 -0
- package/dist/browser/auto-init.js +304 -0
- package/dist/browser/auto-init.js.map +1 -0
- package/dist/browser/auto-translator.d.ts +98 -0
- package/dist/browser/auto-translator.d.ts.map +1 -0
- package/dist/browser/auto-translator.js +218 -0
- package/dist/browser/auto-translator.js.map +1 -0
- package/dist/browser/block-extractor.d.ts +26 -0
- package/dist/browser/block-extractor.d.ts.map +1 -0
- package/dist/browser/block-extractor.js +143 -0
- package/dist/browser/block-extractor.js.map +1 -0
- package/dist/browser/dom-observer.d.ts +42 -0
- package/dist/browser/dom-observer.d.ts.map +1 -0
- package/dist/browser/dom-observer.js +109 -0
- package/dist/browser/dom-observer.js.map +1 -0
- package/dist/browser/editor/editor-api.d.ts +67 -0
- package/dist/browser/editor/editor-api.d.ts.map +1 -0
- package/dist/browser/editor/editor-api.js +233 -0
- package/dist/browser/editor/editor-api.js.map +1 -0
- package/dist/browser/editor/editor-init.d.ts +11 -0
- package/dist/browser/editor/editor-init.d.ts.map +1 -0
- package/dist/browser/editor/editor-init.js +181 -0
- package/dist/browser/editor/editor-init.js.map +1 -0
- package/dist/browser/editor/editor-styles.d.ts +6 -0
- package/dist/browser/editor/editor-styles.d.ts.map +1 -0
- package/dist/browser/editor/editor-styles.js +419 -0
- package/dist/browser/editor/editor-styles.js.map +1 -0
- package/dist/browser/editor/inspector.d.ts +22 -0
- package/dist/browser/editor/inspector.d.ts.map +1 -0
- package/dist/browser/editor/inspector.js +125 -0
- package/dist/browser/editor/inspector.js.map +1 -0
- package/dist/browser/editor/key-resolver.d.ts +19 -0
- package/dist/browser/editor/key-resolver.d.ts.map +1 -0
- package/dist/browser/editor/key-resolver.js +49 -0
- package/dist/browser/editor/key-resolver.js.map +1 -0
- package/dist/browser/editor/live-preview.d.ts +10 -0
- package/dist/browser/editor/live-preview.d.ts.map +1 -0
- package/dist/browser/editor/live-preview.js +57 -0
- package/dist/browser/editor/live-preview.js.map +1 -0
- package/dist/browser/editor/sidebar.d.ts +50 -0
- package/dist/browser/editor/sidebar.d.ts.map +1 -0
- package/dist/browser/editor/sidebar.js +353 -0
- package/dist/browser/editor/sidebar.js.map +1 -0
- package/dist/browser/editor/toolbar.d.ts +29 -0
- package/dist/browser/editor/toolbar.d.ts.map +1 -0
- package/dist/browser/editor/toolbar.js +131 -0
- package/dist/browser/editor/toolbar.js.map +1 -0
- package/dist/browser/exclude-filter.d.ts +21 -0
- package/dist/browser/exclude-filter.d.ts.map +1 -0
- package/dist/browser/exclude-filter.js +51 -0
- package/dist/browser/exclude-filter.js.map +1 -0
- package/dist/browser/index.d.ts +32 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +28 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/language-switcher.d.ts +70 -0
- package/dist/browser/language-switcher.d.ts.map +1 -0
- package/dist/browser/language-switcher.js +339 -0
- package/dist/browser/language-switcher.js.map +1 -0
- package/dist/browser/lionrapid.auto.dev.js +5757 -0
- package/dist/browser/lionrapid.auto.dev.js.map +7 -0
- package/dist/browser/lionrapid.auto.js +5757 -0
- package/dist/browser/lionrapid.auto.js.map +7 -0
- package/dist/browser/lionrapid.auto.min.js +80 -0
- package/dist/browser/lionrapid.auto.min.js.map +7 -0
- package/dist/browser/lionrapid.editor.js +1869 -0
- package/dist/browser/lionrapid.editor.js.map +7 -0
- package/dist/browser/lionrapid.editor.min.js +415 -0
- package/dist/browser/lionrapid.editor.min.js.map +7 -0
- package/dist/browser/lionrapid.esm.js +4786 -0
- package/dist/browser/lionrapid.esm.js.map +7 -0
- package/dist/browser/lionrapid.esm.min.js +3 -0
- package/dist/browser/lionrapid.esm.min.js.map +7 -0
- package/dist/browser/lionrapid.iife.dev.js +4809 -0
- package/dist/browser/lionrapid.iife.dev.js.map +7 -0
- package/dist/browser/lionrapid.iife.js +4809 -0
- package/dist/browser/lionrapid.iife.js.map +7 -0
- package/dist/browser/lionrapid.iife.min.js +3 -0
- package/dist/browser/lionrapid.iife.min.js.map +7 -0
- package/dist/browser/lionrapid.umd.js +4822 -0
- package/dist/browser/lionrapid.umd.js.map +7 -0
- package/dist/browser/lionrapid.umd.min.js +18 -0
- package/dist/browser/lionrapid.umd.min.js.map +7 -0
- package/dist/browser/markup-parser.d.ts +13 -0
- package/dist/browser/markup-parser.d.ts.map +1 -0
- package/dist/browser/markup-parser.js +56 -0
- package/dist/browser/markup-parser.js.map +1 -0
- package/dist/browser/md5.d.ts +16 -0
- package/dist/browser/md5.d.ts.map +1 -0
- package/dist/browser/md5.js +145 -0
- package/dist/browser/md5.js.map +1 -0
- package/dist/browser/storage/cache-storage-repository.d.ts +44 -0
- package/dist/browser/storage/cache-storage-repository.d.ts.map +1 -0
- package/dist/browser/storage/cache-storage-repository.js +186 -0
- package/dist/browser/storage/cache-storage-repository.js.map +1 -0
- package/dist/browser/storage/localstorage-repository.d.ts +51 -0
- package/dist/browser/storage/localstorage-repository.d.ts.map +1 -0
- package/dist/browser/storage/localstorage-repository.js +270 -0
- package/dist/browser/storage/localstorage-repository.js.map +1 -0
- package/dist/builder.d.ts +24 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +169 -0
- package/dist/builder.js.map +1 -0
- package/dist/cache/CacheManager.d.ts +132 -0
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +277 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/lionrapid.config.d.ts +12 -0
- package/dist/config/lionrapid.config.d.ts.map +1 -0
- package/dist/config/lionrapid.config.js +2 -0
- package/dist/config/lionrapid.config.js.map +1 -0
- package/dist/config/logger.config.d.ts +19 -0
- package/dist/config/logger.config.d.ts.map +1 -0
- package/dist/config/logger.config.js +9 -0
- package/dist/config/logger.config.js.map +1 -0
- package/dist/config/repository.config.d.ts +87 -0
- package/dist/config/repository.config.d.ts.map +1 -0
- package/dist/config/repository.config.js +5 -0
- package/dist/config/repository.config.js.map +1 -0
- package/dist/content/index.d.ts +20 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +13 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/parser/IParser.d.ts +33 -0
- package/dist/content/parser/IParser.d.ts.map +1 -0
- package/dist/content/parser/IParser.js +6 -0
- package/dist/content/parser/IParser.js.map +1 -0
- package/dist/content/parser/MarkupParser.d.ts +67 -0
- package/dist/content/parser/MarkupParser.d.ts.map +1 -0
- package/dist/content/parser/MarkupParser.js +231 -0
- package/dist/content/parser/MarkupParser.js.map +1 -0
- package/dist/content/serializer/HTMLSerializer.d.ts +61 -0
- package/dist/content/serializer/HTMLSerializer.d.ts.map +1 -0
- package/dist/content/serializer/HTMLSerializer.js +100 -0
- package/dist/content/serializer/HTMLSerializer.js.map +1 -0
- package/dist/content/serializer/ISerializer.d.ts +33 -0
- package/dist/content/serializer/ISerializer.d.ts.map +1 -0
- package/dist/content/serializer/ISerializer.js +6 -0
- package/dist/content/serializer/ISerializer.js.map +1 -0
- package/dist/content/style-mapper/DefaultStyleMapper.d.ts +59 -0
- package/dist/content/style-mapper/DefaultStyleMapper.d.ts.map +1 -0
- package/dist/content/style-mapper/DefaultStyleMapper.js +128 -0
- package/dist/content/style-mapper/DefaultStyleMapper.js.map +1 -0
- package/dist/content/style-mapper/IStyleMapper.d.ts +50 -0
- package/dist/content/style-mapper/IStyleMapper.d.ts.map +1 -0
- package/dist/content/style-mapper/IStyleMapper.js +6 -0
- package/dist/content/style-mapper/IStyleMapper.js.map +1 -0
- package/dist/content/types.d.ts +39 -0
- package/dist/content/types.d.ts.map +1 -0
- package/dist/content/types.js +6 -0
- package/dist/content/types.js.map +1 -0
- package/dist/content/validator/ContentValidator.d.ts +57 -0
- package/dist/content/validator/ContentValidator.d.ts.map +1 -0
- package/dist/content/validator/ContentValidator.js +215 -0
- package/dist/content/validator/ContentValidator.js.map +1 -0
- package/dist/content/validator/IValidator.d.ts +82 -0
- package/dist/content/validator/IValidator.d.ts.map +1 -0
- package/dist/content/validator/IValidator.js +6 -0
- package/dist/content/validator/IValidator.js.map +1 -0
- package/dist/errors/translation-errors.d.ts +55 -0
- package/dist/errors/translation-errors.d.ts.map +1 -0
- package/dist/errors/translation-errors.js +85 -0
- package/dist/errors/translation-errors.js.map +1 -0
- package/dist/handlers/async-storage-handler.d.ts +77 -0
- package/dist/handlers/async-storage-handler.d.ts.map +1 -0
- package/dist/handlers/async-storage-handler.js +239 -0
- package/dist/handlers/async-storage-handler.js.map +1 -0
- package/dist/handlers/handler-chain.d.ts +79 -0
- package/dist/handlers/handler-chain.d.ts.map +1 -0
- package/dist/handlers/handler-chain.js +366 -0
- package/dist/handlers/handler-chain.js.map +1 -0
- package/dist/handlers/index.d.ts +7 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +7 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/network-handler.d.ts +90 -0
- package/dist/handlers/network-handler.d.ts.map +1 -0
- package/dist/handlers/network-handler.js +283 -0
- package/dist/handlers/network-handler.js.map +1 -0
- package/dist/handlers/sync-storage-handler.d.ts +88 -0
- package/dist/handlers/sync-storage-handler.d.ts.map +1 -0
- package/dist/handlers/sync-storage-handler.js +270 -0
- package/dist/handlers/sync-storage-handler.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/emitter.interface.d.ts +33 -0
- package/dist/interfaces/emitter.interface.d.ts.map +1 -0
- package/dist/interfaces/emitter.interface.js +2 -0
- package/dist/interfaces/emitter.interface.js.map +1 -0
- package/dist/interfaces/handler.interface.d.ts +50 -0
- package/dist/interfaces/handler.interface.d.ts.map +1 -0
- package/dist/interfaces/handler.interface.js +5 -0
- package/dist/interfaces/handler.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +8 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +8 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/plugin.interface.d.ts +49 -0
- package/dist/interfaces/plugin.interface.d.ts.map +1 -0
- package/dist/interfaces/plugin.interface.js +6 -0
- package/dist/interfaces/plugin.interface.js.map +1 -0
- package/dist/interfaces/repository.interface.d.ts +56 -0
- package/dist/interfaces/repository.interface.d.ts.map +1 -0
- package/dist/interfaces/repository.interface.js +2 -0
- package/dist/interfaces/repository.interface.js.map +1 -0
- package/dist/lionRapid.d.ts +225 -0
- package/dist/lionRapid.d.ts.map +1 -0
- package/dist/lionRapid.js +596 -0
- package/dist/lionRapid.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +3 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/memory-repository.d.ts +30 -0
- package/dist/repositories/memory-repository.d.ts.map +1 -0
- package/dist/repositories/memory-repository.js +100 -0
- package/dist/repositories/memory-repository.js.map +1 -0
- package/dist/repositories/network-repository.d.ts +138 -0
- package/dist/repositories/network-repository.d.ts.map +1 -0
- package/dist/repositories/network-repository.js +516 -0
- package/dist/repositories/network-repository.js.map +1 -0
- package/dist/sync/missing-translation-queue.d.ts +64 -0
- package/dist/sync/missing-translation-queue.d.ts.map +1 -0
- package/dist/sync/missing-translation-queue.js +184 -0
- package/dist/sync/missing-translation-queue.js.map +1 -0
- package/dist/types/cache.types.d.ts +62 -0
- package/dist/types/cache.types.d.ts.map +1 -0
- package/dist/types/cache.types.js +6 -0
- package/dist/types/cache.types.js.map +1 -0
- package/dist/types/event-payloads.types.d.ts +46 -0
- package/dist/types/event-payloads.types.d.ts.map +1 -0
- package/dist/types/event-payloads.types.js +6 -0
- package/dist/types/event-payloads.types.js.map +1 -0
- package/dist/types/generated.types.d.ts +31 -0
- package/dist/types/generated.types.d.ts.map +1 -0
- package/dist/types/generated.types.js +6 -0
- package/dist/types/generated.types.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lionRapid.types.d.ts +169 -0
- package/dist/types/lionRapid.types.d.ts.map +1 -0
- package/dist/types/lionRapid.types.js +8 -0
- package/dist/types/lionRapid.types.js.map +1 -0
- package/dist/types/parameters.types.d.ts +36 -0
- package/dist/types/parameters.types.d.ts.map +1 -0
- package/dist/types/parameters.types.js +6 -0
- package/dist/types/parameters.types.js.map +1 -0
- package/dist/types/translation-data.types.d.ts +54 -0
- package/dist/types/translation-data.types.d.ts.map +1 -0
- package/dist/types/translation-data.types.js +6 -0
- package/dist/types/translation-data.types.js.map +1 -0
- package/dist/types/translation.types.d.ts +94 -0
- package/dist/types/translation.types.d.ts.map +1 -0
- package/dist/types/translation.types.js +5 -0
- package/dist/types/translation.types.js.map +1 -0
- package/dist/utils/context-utils.d.ts +23 -0
- package/dist/utils/context-utils.d.ts.map +1 -0
- package/dist/utils/context-utils.js +36 -0
- package/dist/utils/context-utils.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +229 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +345 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/namespace-utils.d.ts +30 -0
- package/dist/utils/namespace-utils.d.ts.map +1 -0
- package/dist/utils/namespace-utils.js +56 -0
- package/dist/utils/namespace-utils.js.map +1 -0
- package/dist/utils/translation-flow.d.ts +18 -0
- package/dist/utils/translation-flow.d.ts.map +1 -0
- package/dist/utils/translation-flow.js +74 -0
- package/dist/utils/translation-flow.js.map +1 -0
- package/dist/utils/translation-value-utils.d.ts +57 -0
- package/dist/utils/translation-value-utils.d.ts.map +1 -0
- package/dist/utils/translation-value-utils.js +194 -0
- package/dist/utils/translation-value-utils.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markup parser for converting HTML strings to ContentUnit
|
|
3
|
+
* @module content/parser/MarkupParser
|
|
4
|
+
*/
|
|
5
|
+
import type { IParser } from './IParser.js';
|
|
6
|
+
import type { ContentUnit } from '../types.js';
|
|
7
|
+
import type { IStyleMapper } from '../style-mapper/IStyleMapper.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration options for MarkupParser
|
|
10
|
+
*/
|
|
11
|
+
export interface MarkupParserOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Custom style mapper for element ↔ style conversion
|
|
14
|
+
* Defaults to DefaultStyleMapper
|
|
15
|
+
*/
|
|
16
|
+
styleMapper?: IStyleMapper;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parser that converts HTML markup strings to ContentUnit format
|
|
20
|
+
*
|
|
21
|
+
* Transforms inline HTML elements into indexed tags with style mapping:
|
|
22
|
+
* - `<b>bold</b>` → text: `<1>bold</1>`, styles: `{"1": ["bold"]}`
|
|
23
|
+
* - `<a href="/url">link</a>` → styles: `{"1": ["hyperlink:/url"]}`
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const parser = new MarkupParser();
|
|
28
|
+
*
|
|
29
|
+
* const unit = parser.parse('Read our <b>Terms</b>.');
|
|
30
|
+
* // → { text: "Read our <1>Terms</1>.", styles: {"1": ["bold"]} }
|
|
31
|
+
*
|
|
32
|
+
* const nested = parser.parse('<b>bold <i>and italic</i></b>');
|
|
33
|
+
* // → { text: "<1>bold <2>and italic</2></1>", styles: {"1": ["bold"], "2": ["italic"]} }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class MarkupParser implements IParser<string> {
|
|
37
|
+
private readonly styleMapper;
|
|
38
|
+
constructor(options?: MarkupParserOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Parse HTML string into ContentUnit
|
|
41
|
+
*
|
|
42
|
+
* Handles two input formats:
|
|
43
|
+
* 1. HTML tags: `<b>text</b>` → converts to indexed `<1>text</1>` with styles
|
|
44
|
+
* 2. Already indexed: `<1>text</1>` → passes through as-is (from server)
|
|
45
|
+
*
|
|
46
|
+
* @param input - HTML string with inline elements or already indexed
|
|
47
|
+
* @returns ContentUnit with indexed tags and styles
|
|
48
|
+
*/
|
|
49
|
+
parse(input: string): ContentUnit;
|
|
50
|
+
/**
|
|
51
|
+
* Match an HTML tag at the given position
|
|
52
|
+
*/
|
|
53
|
+
private matchTag;
|
|
54
|
+
/**
|
|
55
|
+
* Parse HTML attributes string into key-value pairs
|
|
56
|
+
*/
|
|
57
|
+
private parseAttributes;
|
|
58
|
+
/**
|
|
59
|
+
* Find matching opening tag in the stack
|
|
60
|
+
*/
|
|
61
|
+
private findMatchingOpenTag;
|
|
62
|
+
/**
|
|
63
|
+
* Find the closing tag index for a given opening tag
|
|
64
|
+
*/
|
|
65
|
+
private findClosingTagIndex;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=MarkupParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkupParser.d.ts","sourceRoot":"","sources":["../../../src/content/parser/MarkupParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAaD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,YAAa,YAAW,OAAO,CAAC,MAAM,CAAC;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;gBAE/B,OAAO,GAAE,mBAAwB;IAI7C;;;;;;;;;OASG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAuIjC;;OAEG;IACH,OAAO,CAAC,QAAQ;IA0ChB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA6B5B"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markup parser for converting HTML strings to ContentUnit
|
|
3
|
+
* @module content/parser/MarkupParser
|
|
4
|
+
*/
|
|
5
|
+
import { DefaultStyleMapper } from '../style-mapper/DefaultStyleMapper.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parser that converts HTML markup strings to ContentUnit format
|
|
8
|
+
*
|
|
9
|
+
* Transforms inline HTML elements into indexed tags with style mapping:
|
|
10
|
+
* - `<b>bold</b>` → text: `<1>bold</1>`, styles: `{"1": ["bold"]}`
|
|
11
|
+
* - `<a href="/url">link</a>` → styles: `{"1": ["hyperlink:/url"]}`
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const parser = new MarkupParser();
|
|
16
|
+
*
|
|
17
|
+
* const unit = parser.parse('Read our <b>Terms</b>.');
|
|
18
|
+
* // → { text: "Read our <1>Terms</1>.", styles: {"1": ["bold"]} }
|
|
19
|
+
*
|
|
20
|
+
* const nested = parser.parse('<b>bold <i>and italic</i></b>');
|
|
21
|
+
* // → { text: "<1>bold <2>and italic</2></1>", styles: {"1": ["bold"], "2": ["italic"]} }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class MarkupParser {
|
|
25
|
+
styleMapper;
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
this.styleMapper = options.styleMapper ?? new DefaultStyleMapper();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse HTML string into ContentUnit
|
|
31
|
+
*
|
|
32
|
+
* Handles two input formats:
|
|
33
|
+
* 1. HTML tags: `<b>text</b>` → converts to indexed `<1>text</1>` with styles
|
|
34
|
+
* 2. Already indexed: `<1>text</1>` → passes through as-is (from server)
|
|
35
|
+
*
|
|
36
|
+
* @param input - HTML string with inline elements or already indexed
|
|
37
|
+
* @returns ContentUnit with indexed tags and styles
|
|
38
|
+
*/
|
|
39
|
+
parse(input) {
|
|
40
|
+
// Check if input already uses indexed tags (from server)
|
|
41
|
+
// Pattern: <1>, </1>, <2>, </2>, etc.
|
|
42
|
+
const hasIndexedTags = /<\/?[0-9]+>/.test(input);
|
|
43
|
+
if (hasIndexedTags) {
|
|
44
|
+
// Input already has indexed tags - pass through without style mapping
|
|
45
|
+
// The styles will come from component children in Trans, not from server
|
|
46
|
+
return {
|
|
47
|
+
text: input,
|
|
48
|
+
styles: {}, // Empty - styles determined by children
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const styles = {};
|
|
52
|
+
let tagIndex = 0;
|
|
53
|
+
// Stack to track open tags and their indices
|
|
54
|
+
const tagStack = [];
|
|
55
|
+
// Result text being built
|
|
56
|
+
let result = '';
|
|
57
|
+
let pos = 0;
|
|
58
|
+
while (pos < input.length) {
|
|
59
|
+
// Look for opening tag
|
|
60
|
+
const tagMatch = this.matchTag(input, pos);
|
|
61
|
+
if (!tagMatch) {
|
|
62
|
+
// No more tags, append rest of string
|
|
63
|
+
result += input.slice(pos);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
// Append text before tag
|
|
67
|
+
result += input.slice(pos, tagMatch.startIndex);
|
|
68
|
+
if (tagMatch.isClosing) {
|
|
69
|
+
// Closing tag - find matching opening tag
|
|
70
|
+
const matchingOpen = this.findMatchingOpenTag(tagStack, tagMatch.tag.toLowerCase());
|
|
71
|
+
if (matchingOpen !== null) {
|
|
72
|
+
result += `</${matchingOpen}>`;
|
|
73
|
+
// Remove from stack
|
|
74
|
+
const stackIndex = tagStack.findIndex((t) => t.index === matchingOpen);
|
|
75
|
+
if (stackIndex !== -1) {
|
|
76
|
+
tagStack.splice(stackIndex, 1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Unmatched closing tag - keep as-is (will be validated later)
|
|
81
|
+
result += input.slice(tagMatch.startIndex, tagMatch.endIndex);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else if (tagMatch.isSelfClosing) {
|
|
85
|
+
// Self-closing tag - assign index but no content
|
|
86
|
+
tagIndex++;
|
|
87
|
+
const styleList = this.styleMapper.mapElementToStyles(tagMatch.tag, tagMatch.attrs);
|
|
88
|
+
if (styleList.length > 0) {
|
|
89
|
+
styles[String(tagIndex)] = styleList;
|
|
90
|
+
result += `<${tagIndex}/>`;
|
|
91
|
+
}
|
|
92
|
+
// If no styles mapped, skip the tag entirely
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Opening tag
|
|
96
|
+
const styleList = this.styleMapper.mapElementToStyles(tagMatch.tag, tagMatch.attrs);
|
|
97
|
+
if (styleList.length > 0) {
|
|
98
|
+
tagIndex++;
|
|
99
|
+
styles[String(tagIndex)] = styleList;
|
|
100
|
+
result += `<${tagIndex}>`;
|
|
101
|
+
tagStack.push({ tag: tagMatch.tag.toLowerCase(), index: tagIndex });
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Unknown element - don't index it, just process content
|
|
105
|
+
// We need to find the closing tag and process content
|
|
106
|
+
const closingIndex = this.findClosingTagIndex(input, tagMatch.endIndex, tagMatch.tag);
|
|
107
|
+
if (closingIndex !== -1) {
|
|
108
|
+
// Recursively parse content
|
|
109
|
+
const innerContent = input.slice(tagMatch.endIndex, closingIndex);
|
|
110
|
+
const innerUnit = this.parse(innerContent);
|
|
111
|
+
// Merge inner styles (adjusting indices based on current tagIndex)
|
|
112
|
+
const baseIndex = tagIndex;
|
|
113
|
+
for (const [key, value] of Object.entries(innerUnit.styles)) {
|
|
114
|
+
const adjustedKey = String(baseIndex + parseInt(key, 10));
|
|
115
|
+
styles[adjustedKey] = value;
|
|
116
|
+
}
|
|
117
|
+
// Adjust result and indices
|
|
118
|
+
result += innerUnit.text.replace(/<(\/?)\d+>/g, (match, slash) => {
|
|
119
|
+
const num = parseInt(match.replace(/[</>]/g, ''), 10);
|
|
120
|
+
return `<${slash}${baseIndex + num}>`;
|
|
121
|
+
});
|
|
122
|
+
// Move position past closing tag
|
|
123
|
+
const closingMatch = this.matchTag(input, closingIndex);
|
|
124
|
+
pos = closingMatch ? closingMatch.endIndex : closingIndex;
|
|
125
|
+
// Adjust tagIndex to account for inner tags
|
|
126
|
+
const maxInnerIndex = Object.keys(innerUnit.styles).length > 0
|
|
127
|
+
? Math.max(...Object.keys(innerUnit.styles).map(Number))
|
|
128
|
+
: 0;
|
|
129
|
+
tagIndex = baseIndex + maxInnerIndex;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
pos = tagMatch.endIndex;
|
|
135
|
+
}
|
|
136
|
+
// Handle unclosed tags (add closing tags in reverse order)
|
|
137
|
+
while (tagStack.length > 0) {
|
|
138
|
+
const unclosed = tagStack.pop();
|
|
139
|
+
result += `</${unclosed.index}>`;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
text: result,
|
|
143
|
+
styles,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Match an HTML tag at the given position
|
|
148
|
+
*/
|
|
149
|
+
matchTag(input, startPos) {
|
|
150
|
+
// Find next '<' from startPos
|
|
151
|
+
const tagStart = input.indexOf('<', startPos);
|
|
152
|
+
if (tagStart === -1)
|
|
153
|
+
return null;
|
|
154
|
+
// Match tag pattern: <tagname attrs> or </tagname> or <tagname/>
|
|
155
|
+
const tagPattern = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)((?:\s+[a-zA-Z][a-zA-Z0-9-]*(?:=(?:"[^"]*"|'[^']*'|[^\s>]*))?)*)\s*(\/?)>/;
|
|
156
|
+
const remaining = input.slice(tagStart);
|
|
157
|
+
const match = remaining.match(tagPattern);
|
|
158
|
+
if (!match) {
|
|
159
|
+
// Not a valid tag, skip this '<' and try again
|
|
160
|
+
if (tagStart + 1 < input.length) {
|
|
161
|
+
return this.matchTag(input, tagStart + 1);
|
|
162
|
+
}
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const [fullMatch, closingSlash, tagName, attrsString, selfClosingSlash] = match;
|
|
166
|
+
return {
|
|
167
|
+
tag: tagName,
|
|
168
|
+
attrs: this.parseAttributes(attrsString),
|
|
169
|
+
isClosing: closingSlash === '/',
|
|
170
|
+
isSelfClosing: selfClosingSlash === '/',
|
|
171
|
+
startIndex: tagStart,
|
|
172
|
+
endIndex: tagStart + fullMatch.length,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Parse HTML attributes string into key-value pairs
|
|
177
|
+
*/
|
|
178
|
+
parseAttributes(attrsString) {
|
|
179
|
+
const attrs = {};
|
|
180
|
+
if (!attrsString.trim())
|
|
181
|
+
return attrs;
|
|
182
|
+
// Match attribute patterns: name="value" or name='value' or name=value or name
|
|
183
|
+
const attrPattern = /([a-zA-Z][a-zA-Z0-9-]*)(?:=(?:"([^"]*)"|'([^']*)'|([^\s>]*)))?/g;
|
|
184
|
+
let match;
|
|
185
|
+
while ((match = attrPattern.exec(attrsString)) !== null) {
|
|
186
|
+
const [, name, doubleQuoted, singleQuoted, unquoted] = match;
|
|
187
|
+
const value = doubleQuoted ?? singleQuoted ?? unquoted ?? '';
|
|
188
|
+
attrs[name.toLowerCase()] = value;
|
|
189
|
+
}
|
|
190
|
+
return attrs;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Find matching opening tag in the stack
|
|
194
|
+
*/
|
|
195
|
+
findMatchingOpenTag(stack, tagName) {
|
|
196
|
+
// Search from end of stack (most recent)
|
|
197
|
+
for (let i = stack.length - 1; i >= 0; i--) {
|
|
198
|
+
if (stack[i].tag === tagName) {
|
|
199
|
+
return stack[i].index;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Find the closing tag index for a given opening tag
|
|
206
|
+
*/
|
|
207
|
+
findClosingTagIndex(input, startPos, tagName) {
|
|
208
|
+
const lowerTag = tagName.toLowerCase();
|
|
209
|
+
let depth = 1;
|
|
210
|
+
let pos = startPos;
|
|
211
|
+
while (pos < input.length && depth > 0) {
|
|
212
|
+
const tagMatch = this.matchTag(input, pos);
|
|
213
|
+
if (!tagMatch)
|
|
214
|
+
break;
|
|
215
|
+
if (tagMatch.tag.toLowerCase() === lowerTag) {
|
|
216
|
+
if (tagMatch.isClosing) {
|
|
217
|
+
depth--;
|
|
218
|
+
if (depth === 0) {
|
|
219
|
+
return tagMatch.startIndex;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else if (!tagMatch.isSelfClosing) {
|
|
223
|
+
depth++;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
pos = tagMatch.endIndex;
|
|
227
|
+
}
|
|
228
|
+
return -1;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=MarkupParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkupParser.js","sourceRoot":"","sources":["../../../src/content/parser/MarkupParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML serializer for converting ContentUnit to HTML strings
|
|
3
|
+
* @module content/serializer/HTMLSerializer
|
|
4
|
+
*/
|
|
5
|
+
import type { ISerializer } from './ISerializer.js';
|
|
6
|
+
import type { ContentUnit } from '../types.js';
|
|
7
|
+
import type { IStyleMapper } from '../style-mapper/IStyleMapper.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration options for HTMLSerializer
|
|
10
|
+
*/
|
|
11
|
+
export interface HTMLSerializerOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Custom style mapper for styles → element conversion
|
|
14
|
+
* Defaults to DefaultStyleMapper
|
|
15
|
+
*/
|
|
16
|
+
styleMapper?: IStyleMapper;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Serializer that converts ContentUnit format back to HTML strings
|
|
20
|
+
*
|
|
21
|
+
* Transforms indexed tags and style mappings into HTML:
|
|
22
|
+
* - `<1>bold</1>` with styles `{"1": ["bold"]}` → `<b>bold</b>`
|
|
23
|
+
* - `<1>link</1>` with styles `{"1": ["hyperlink:/url"]}` → `<a href="/url">link</a>`
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const serializer = new HTMLSerializer();
|
|
28
|
+
*
|
|
29
|
+
* const html = serializer.serialize({
|
|
30
|
+
* text: 'Read our <1>Terms</1>.',
|
|
31
|
+
* styles: { '1': ['bold'] }
|
|
32
|
+
* });
|
|
33
|
+
* // → "Read our <b>Terms</b>."
|
|
34
|
+
*
|
|
35
|
+
* const link = serializer.serialize({
|
|
36
|
+
* text: 'Click <1>here</1>.',
|
|
37
|
+
* styles: { '1': ['hyperlink:/url'] }
|
|
38
|
+
* });
|
|
39
|
+
* // → "Click <a href=\"/url\">here</a>."
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class HTMLSerializer implements ISerializer<string> {
|
|
43
|
+
private readonly styleMapper;
|
|
44
|
+
constructor(options?: HTMLSerializerOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Serialize ContentUnit to HTML string
|
|
47
|
+
*
|
|
48
|
+
* @param unit - ContentUnit with indexed tags and styles
|
|
49
|
+
* @returns HTML string with semantic elements
|
|
50
|
+
*/
|
|
51
|
+
serialize(unit: ContentUnit): string;
|
|
52
|
+
/**
|
|
53
|
+
* Format attributes object into HTML attribute string
|
|
54
|
+
*/
|
|
55
|
+
private formatAttributes;
|
|
56
|
+
/**
|
|
57
|
+
* Escape special characters in attribute values
|
|
58
|
+
*/
|
|
59
|
+
private escapeAttributeValue;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=HTMLSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTMLSerializer.d.ts","sourceRoot":"","sources":["../../../src/content/serializer/HTMLSerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,cAAe,YAAW,WAAW,CAAC,MAAM,CAAC;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;gBAE/B,OAAO,GAAE,qBAA0B;IAI/C;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IA2CpC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAO7B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML serializer for converting ContentUnit to HTML strings
|
|
3
|
+
* @module content/serializer/HTMLSerializer
|
|
4
|
+
*/
|
|
5
|
+
import { DefaultStyleMapper } from '../style-mapper/DefaultStyleMapper.js';
|
|
6
|
+
/**
|
|
7
|
+
* Serializer that converts ContentUnit format back to HTML strings
|
|
8
|
+
*
|
|
9
|
+
* Transforms indexed tags and style mappings into HTML:
|
|
10
|
+
* - `<1>bold</1>` with styles `{"1": ["bold"]}` → `<b>bold</b>`
|
|
11
|
+
* - `<1>link</1>` with styles `{"1": ["hyperlink:/url"]}` → `<a href="/url">link</a>`
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const serializer = new HTMLSerializer();
|
|
16
|
+
*
|
|
17
|
+
* const html = serializer.serialize({
|
|
18
|
+
* text: 'Read our <1>Terms</1>.',
|
|
19
|
+
* styles: { '1': ['bold'] }
|
|
20
|
+
* });
|
|
21
|
+
* // → "Read our <b>Terms</b>."
|
|
22
|
+
*
|
|
23
|
+
* const link = serializer.serialize({
|
|
24
|
+
* text: 'Click <1>here</1>.',
|
|
25
|
+
* styles: { '1': ['hyperlink:/url'] }
|
|
26
|
+
* });
|
|
27
|
+
* // → "Click <a href=\"/url\">here</a>."
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export class HTMLSerializer {
|
|
31
|
+
styleMapper;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
this.styleMapper = options.styleMapper ?? new DefaultStyleMapper();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Serialize ContentUnit to HTML string
|
|
37
|
+
*
|
|
38
|
+
* @param unit - ContentUnit with indexed tags and styles
|
|
39
|
+
* @returns HTML string with semantic elements
|
|
40
|
+
*/
|
|
41
|
+
serialize(unit) {
|
|
42
|
+
const { text, styles } = unit;
|
|
43
|
+
// Pattern to match indexed tags: <1>, </1>, <1/>
|
|
44
|
+
const tagPattern = /<(\/?)?(\d+)(\/)?>/g;
|
|
45
|
+
let result = '';
|
|
46
|
+
let lastIndex = 0;
|
|
47
|
+
let match;
|
|
48
|
+
while ((match = tagPattern.exec(text)) !== null) {
|
|
49
|
+
// Append text before the tag
|
|
50
|
+
result += text.slice(lastIndex, match.index);
|
|
51
|
+
const [fullMatch, closingSlash, indexStr, selfClosingSlash] = match;
|
|
52
|
+
const tagIndex = indexStr;
|
|
53
|
+
const styleList = styles[tagIndex] || [];
|
|
54
|
+
if (closingSlash) {
|
|
55
|
+
// Closing tag: </1>
|
|
56
|
+
const mapping = this.styleMapper.mapStylesToElement(styleList);
|
|
57
|
+
result += `</${mapping.element}>`;
|
|
58
|
+
}
|
|
59
|
+
else if (selfClosingSlash) {
|
|
60
|
+
// Self-closing tag: <1/>
|
|
61
|
+
const mapping = this.styleMapper.mapStylesToElement(styleList);
|
|
62
|
+
const attrs = this.formatAttributes(mapping.attrs);
|
|
63
|
+
result += `<${mapping.element}${attrs} />`;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Opening tag: <1>
|
|
67
|
+
const mapping = this.styleMapper.mapStylesToElement(styleList);
|
|
68
|
+
const attrs = this.formatAttributes(mapping.attrs);
|
|
69
|
+
result += `<${mapping.element}${attrs}>`;
|
|
70
|
+
}
|
|
71
|
+
lastIndex = match.index + fullMatch.length;
|
|
72
|
+
}
|
|
73
|
+
// Append remaining text
|
|
74
|
+
result += text.slice(lastIndex);
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Format attributes object into HTML attribute string
|
|
79
|
+
*/
|
|
80
|
+
formatAttributes(attrs) {
|
|
81
|
+
const entries = Object.entries(attrs);
|
|
82
|
+
if (entries.length === 0)
|
|
83
|
+
return '';
|
|
84
|
+
return (' ' +
|
|
85
|
+
entries
|
|
86
|
+
.map(([key, value]) => `${key}="${this.escapeAttributeValue(value)}"`)
|
|
87
|
+
.join(' '));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Escape special characters in attribute values
|
|
91
|
+
*/
|
|
92
|
+
escapeAttributeValue(value) {
|
|
93
|
+
return value
|
|
94
|
+
.replace(/&/g, '&')
|
|
95
|
+
.replace(/"/g, '"')
|
|
96
|
+
.replace(/</g, '<')
|
|
97
|
+
.replace(/>/g, '>');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=HTMLSerializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTMLSerializer.js","sourceRoot":"","sources":["../../../src/content/serializer/HTMLSerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAa3E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,cAAc;IACR,WAAW,CAAe;IAE3C,YAAY,UAAiC,EAAE;QAC7C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,kBAAkB,EAAE,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAiB;QACzB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAE9B,iDAAiD;QACjD,MAAM,UAAU,GAAG,qBAAqB,CAAC;QAEzC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChD,6BAA6B;YAC7B,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAE7C,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC;YACpE,MAAM,QAAQ,GAAG,QAAQ,CAAC;YAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEzC,IAAI,YAAY,EAAE,CAAC;gBACjB,oBAAoB;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC/D,MAAM,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,CAAC;YACpC,CAAC;iBAAM,IAAI,gBAAgB,EAAE,CAAC;gBAC5B,yBAAyB;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnD,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,GAAG,KAAK,KAAK,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,mBAAmB;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnD,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC;YAC3C,CAAC;YAED,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7C,CAAC;QAED,wBAAwB;QACxB,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEhC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAA6B;QACpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,OAAO,CACL,GAAG;YACH,OAAO;iBACJ,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC;iBACrE,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,KAAa;QACxC,OAAO,KAAK;aACT,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer interface for converting ContentUnit to platform-specific output
|
|
3
|
+
* @module content/serializer/ISerializer
|
|
4
|
+
*/
|
|
5
|
+
import type { ContentUnit } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generic serializer interface
|
|
8
|
+
*
|
|
9
|
+
* Implementations:
|
|
10
|
+
* - HTMLSerializer: ContentUnit → HTML string (core)
|
|
11
|
+
* - JSXSerializer: ContentUnit → ReactNode (react package)
|
|
12
|
+
*
|
|
13
|
+
* @typeParam TOutput - Platform-specific output type
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* class HTMLSerializer implements ISerializer<string> {
|
|
18
|
+
* serialize(unit: ContentUnit): string {
|
|
19
|
+
* // Convert indexed tags back to <b>, <a>, etc.
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export interface ISerializer<TOutput> {
|
|
25
|
+
/**
|
|
26
|
+
* Serialize ContentUnit to platform-specific output
|
|
27
|
+
*
|
|
28
|
+
* @param unit - The ContentUnit to serialize
|
|
29
|
+
* @returns Platform-specific output (HTML string, ReactNode, etc.)
|
|
30
|
+
*/
|
|
31
|
+
serialize(unit: ContentUnit): TOutput;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ISerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISerializer.d.ts","sourceRoot":"","sources":["../../../src/content/serializer/ISerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW,CAAC,OAAO;IAClC;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ISerializer.js","sourceRoot":"","sources":["../../../src/content/serializer/ISerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default style mapper for bidirectional HTML element ↔ style property mapping
|
|
3
|
+
* @module content/style-mapper/DefaultStyleMapper
|
|
4
|
+
*/
|
|
5
|
+
import type { IStyleMapper, ElementMapping } from './IStyleMapper.js';
|
|
6
|
+
/**
|
|
7
|
+
* Default implementation of style mapping
|
|
8
|
+
*
|
|
9
|
+
* Provides bidirectional conversion between HTML elements and style properties:
|
|
10
|
+
* - mapElementToStyles: `<b>` → `["bold"]`
|
|
11
|
+
* - mapStylesToElement: `["bold"]` → `<b>`
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const mapper = new DefaultStyleMapper();
|
|
16
|
+
*
|
|
17
|
+
* // Parsing: HTML → styles
|
|
18
|
+
* mapper.mapElementToStyles('a', { href: '/terms' });
|
|
19
|
+
* // → ["hyperlink:/terms"]
|
|
20
|
+
*
|
|
21
|
+
* // Serializing: styles → HTML
|
|
22
|
+
* mapper.mapStylesToElement(['bold', 'hyperlink:/terms']);
|
|
23
|
+
* // → { element: 'a', attrs: { href: '/terms' } }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class DefaultStyleMapper implements IStyleMapper {
|
|
27
|
+
/**
|
|
28
|
+
* Element → Style mapping
|
|
29
|
+
* Maps HTML element names to their style property
|
|
30
|
+
*/
|
|
31
|
+
private readonly elementToStyles;
|
|
32
|
+
/**
|
|
33
|
+
* Style → Element mapping (reverse)
|
|
34
|
+
* Uses simple, familiar elements for developer convenience
|
|
35
|
+
* Also accepts element names directly (strong, em, etc.)
|
|
36
|
+
*/
|
|
37
|
+
private readonly styleToElement;
|
|
38
|
+
/**
|
|
39
|
+
* Convert HTML element to style properties
|
|
40
|
+
*
|
|
41
|
+
* @param element - Tag name (e.g., "b", "a", "strong")
|
|
42
|
+
* @param attrs - Element attributes (e.g., { href: "/url" })
|
|
43
|
+
* @returns Array of style strings
|
|
44
|
+
*/
|
|
45
|
+
mapElementToStyles(element: string, attrs: Record<string, string>): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Convert style properties to HTML element
|
|
48
|
+
*
|
|
49
|
+
* Priority order:
|
|
50
|
+
* 1. Hyperlink (becomes wrapper element with href)
|
|
51
|
+
* 2. First recognized style property
|
|
52
|
+
* 3. Fallback to span
|
|
53
|
+
*
|
|
54
|
+
* @param styles - Array of style strings
|
|
55
|
+
* @returns Element info for serialization
|
|
56
|
+
*/
|
|
57
|
+
mapStylesToElement(styles: string[]): ElementMapping;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=DefaultStyleMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultStyleMapper.d.ts","sourceRoot":"","sources":["../../../src/content/style-mapper/DefaultStyleMapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAa9B;IAEF;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAsB7B;IAEF;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;IAkB5E;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc;CAyBrD"}
|