@knpkv/confluence-to-markdown 0.2.0 → 0.4.1
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/CHANGELOG.md +60 -0
- package/LICENSE +21 -0
- package/README.md +282 -14
- package/dist/ConfluenceAuth.d.ts +76 -0
- package/dist/ConfluenceAuth.d.ts.map +1 -0
- package/dist/ConfluenceAuth.js +356 -0
- package/dist/ConfluenceAuth.js.map +1 -0
- package/dist/ConfluenceClient.d.ts +26 -2
- package/dist/ConfluenceClient.d.ts.map +1 -1
- package/dist/ConfluenceClient.js +98 -92
- package/dist/ConfluenceClient.js.map +1 -1
- package/dist/ConfluenceConfig.d.ts +4 -24
- package/dist/ConfluenceConfig.d.ts.map +1 -1
- package/dist/ConfluenceConfig.js +45 -7
- package/dist/ConfluenceConfig.js.map +1 -1
- package/dist/ConfluenceError.d.ts +89 -6
- package/dist/ConfluenceError.d.ts.map +1 -1
- package/dist/ConfluenceError.js +88 -5
- package/dist/ConfluenceError.js.map +1 -1
- package/dist/GitError.d.ts +103 -0
- package/dist/GitError.d.ts.map +1 -0
- package/dist/GitError.js +85 -0
- package/dist/GitError.js.map +1 -0
- package/dist/GitService.d.ts +175 -0
- package/dist/GitService.d.ts.map +1 -0
- package/dist/GitService.js +431 -0
- package/dist/GitService.js.map +1 -0
- package/dist/LocalFileSystem.d.ts +29 -4
- package/dist/LocalFileSystem.d.ts.map +1 -1
- package/dist/LocalFileSystem.js +80 -6
- package/dist/LocalFileSystem.js.map +1 -1
- package/dist/MarkdownConverter.d.ts +49 -2
- package/dist/MarkdownConverter.d.ts.map +1 -1
- package/dist/MarkdownConverter.js +73 -111
- package/dist/MarkdownConverter.js.map +1 -1
- package/dist/SchemaConverterError.d.ts +108 -0
- package/dist/SchemaConverterError.d.ts.map +1 -0
- package/dist/SchemaConverterError.js +84 -0
- package/dist/SchemaConverterError.js.map +1 -0
- package/dist/Schemas.d.ts +225 -1
- package/dist/Schemas.d.ts.map +1 -1
- package/dist/Schemas.js +155 -6
- package/dist/Schemas.js.map +1 -1
- package/dist/SyncEngine.d.ts +30 -20
- package/dist/SyncEngine.d.ts.map +1 -1
- package/dist/SyncEngine.js +566 -117
- package/dist/SyncEngine.js.map +1 -1
- package/dist/ast/BlockNode.d.ts +468 -0
- package/dist/ast/BlockNode.d.ts.map +1 -0
- package/dist/ast/BlockNode.js +319 -0
- package/dist/ast/BlockNode.js.map +1 -0
- package/dist/ast/Document.d.ts +244 -0
- package/dist/ast/Document.d.ts.map +1 -0
- package/dist/ast/Document.js +69 -0
- package/dist/ast/Document.js.map +1 -0
- package/dist/ast/InlineNode.d.ts +477 -0
- package/dist/ast/InlineNode.d.ts.map +1 -0
- package/dist/ast/InlineNode.js +263 -0
- package/dist/ast/InlineNode.js.map +1 -0
- package/dist/ast/MacroNode.d.ts +267 -0
- package/dist/ast/MacroNode.d.ts.map +1 -0
- package/dist/ast/MacroNode.js +164 -0
- package/dist/ast/MacroNode.js.map +1 -0
- package/dist/ast/index.d.ts +10 -0
- package/dist/ast/index.d.ts.map +1 -0
- package/dist/ast/index.js +14 -0
- package/dist/ast/index.js.map +1 -0
- package/dist/bin.js +33 -149
- package/dist/bin.js.map +1 -1
- package/dist/commands/auth.d.ts +15 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +86 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/clone.d.ts +12 -0
- package/dist/commands/clone.d.ts.map +1 -0
- package/dist/commands/clone.js +93 -0
- package/dist/commands/clone.js.map +1 -0
- package/dist/commands/delete.d.ts +13 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +48 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/errorHandler.d.ts +14 -0
- package/dist/commands/errorHandler.d.ts.map +1 -0
- package/dist/commands/errorHandler.js +33 -0
- package/dist/commands/errorHandler.js.map +1 -0
- package/dist/commands/git.d.ts +22 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +72 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/layers.d.ts +31 -0
- package/dist/commands/layers.d.ts.map +1 -0
- package/dist/commands/layers.js +137 -0
- package/dist/commands/layers.js.map +1 -0
- package/dist/commands/new.d.ts +9 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +80 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pageTree.d.ts +18 -0
- package/dist/commands/pageTree.d.ts.map +1 -0
- package/dist/commands/pageTree.js +20 -0
- package/dist/commands/pageTree.js.map +1 -0
- package/dist/commands/shared.d.ts +15 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +27 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/sync.d.ts +15 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +101 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/NodeLayers.d.ts +7 -0
- package/dist/internal/NodeLayers.d.ts.map +1 -0
- package/dist/internal/NodeLayers.js +19 -0
- package/dist/internal/NodeLayers.js.map +1 -0
- package/dist/internal/frontmatter.d.ts +10 -0
- package/dist/internal/frontmatter.d.ts.map +1 -1
- package/dist/internal/frontmatter.js +16 -0
- package/dist/internal/frontmatter.js.map +1 -1
- package/dist/internal/gitCommands.d.ts +78 -0
- package/dist/internal/gitCommands.d.ts.map +1 -0
- package/dist/internal/gitCommands.js +156 -0
- package/dist/internal/gitCommands.js.map +1 -0
- package/dist/internal/hashUtils.d.ts +42 -1
- package/dist/internal/hashUtils.d.ts.map +1 -1
- package/dist/internal/hashUtils.js +38 -2
- package/dist/internal/hashUtils.js.map +1 -1
- package/dist/internal/oauthServer.d.ts +55 -0
- package/dist/internal/oauthServer.d.ts.map +1 -0
- package/dist/internal/oauthServer.js +110 -0
- package/dist/internal/oauthServer.js.map +1 -0
- package/dist/internal/pathUtils.d.ts +21 -4
- package/dist/internal/pathUtils.d.ts.map +1 -1
- package/dist/internal/pathUtils.js +24 -13
- package/dist/internal/pathUtils.js.map +1 -1
- package/dist/internal/tokenStorage.d.ts +75 -0
- package/dist/internal/tokenStorage.d.ts.map +1 -0
- package/dist/internal/tokenStorage.js +149 -0
- package/dist/internal/tokenStorage.js.map +1 -0
- package/dist/internal/userCache.d.ts +42 -0
- package/dist/internal/userCache.d.ts.map +1 -0
- package/dist/internal/userCache.js +51 -0
- package/dist/internal/userCache.js.map +1 -0
- package/dist/parsers/ConfluenceParser.d.ts +26 -0
- package/dist/parsers/ConfluenceParser.d.ts.map +1 -0
- package/dist/parsers/ConfluenceParser.js +792 -0
- package/dist/parsers/ConfluenceParser.js.map +1 -0
- package/dist/parsers/MarkdownParser.d.ts +26 -0
- package/dist/parsers/MarkdownParser.d.ts.map +1 -0
- package/dist/parsers/MarkdownParser.js +873 -0
- package/dist/parsers/MarkdownParser.js.map +1 -0
- package/dist/parsers/index.d.ts +8 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +8 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/schemas/ConfluenceSchema.d.ts +21 -0
- package/dist/schemas/ConfluenceSchema.d.ts.map +1 -0
- package/dist/schemas/ConfluenceSchema.js +38 -0
- package/dist/schemas/ConfluenceSchema.js.map +1 -0
- package/dist/schemas/ConversionSchema.d.ts +35 -0
- package/dist/schemas/ConversionSchema.d.ts.map +1 -0
- package/dist/schemas/ConversionSchema.js +208 -0
- package/dist/schemas/ConversionSchema.js.map +1 -0
- package/dist/schemas/MarkdownSchema.d.ts +21 -0
- package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
- package/dist/schemas/MarkdownSchema.js +38 -0
- package/dist/schemas/MarkdownSchema.js.map +1 -0
- package/dist/schemas/hast/HastFromHtml.d.ts +27 -0
- package/dist/schemas/hast/HastFromHtml.d.ts.map +1 -0
- package/dist/schemas/hast/HastFromHtml.js +107 -0
- package/dist/schemas/hast/HastFromHtml.js.map +1 -0
- package/dist/schemas/hast/HastSchema.d.ts +195 -0
- package/dist/schemas/hast/HastSchema.d.ts.map +1 -0
- package/dist/schemas/hast/HastSchema.js +183 -0
- package/dist/schemas/hast/HastSchema.js.map +1 -0
- package/dist/schemas/hast/index.d.ts +9 -0
- package/dist/schemas/hast/index.d.ts.map +1 -0
- package/dist/schemas/hast/index.js +3 -0
- package/dist/schemas/hast/index.js.map +1 -0
- package/dist/schemas/index.d.ts +14 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +16 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/mdast/MdastFromMarkdown.d.ts +30 -0
- package/dist/schemas/mdast/MdastFromMarkdown.d.ts.map +1 -0
- package/dist/schemas/mdast/MdastFromMarkdown.js +79 -0
- package/dist/schemas/mdast/MdastFromMarkdown.js.map +1 -0
- package/dist/schemas/mdast/MdastSchema.d.ts +385 -0
- package/dist/schemas/mdast/MdastSchema.d.ts.map +1 -0
- package/dist/schemas/mdast/MdastSchema.js +266 -0
- package/dist/schemas/mdast/MdastSchema.js.map +1 -0
- package/dist/schemas/mdast/index.d.ts +10 -0
- package/dist/schemas/mdast/index.d.ts.map +1 -0
- package/dist/schemas/mdast/index.js +4 -0
- package/dist/schemas/mdast/index.js.map +1 -0
- package/dist/schemas/mdast/mdastToString.d.ts +13 -0
- package/dist/schemas/mdast/mdastToString.d.ts.map +1 -0
- package/dist/schemas/mdast/mdastToString.js +85 -0
- package/dist/schemas/mdast/mdastToString.js.map +1 -0
- package/dist/schemas/nodes/block/BlockSchema.d.ts +43 -0
- package/dist/schemas/nodes/block/BlockSchema.d.ts.map +1 -0
- package/dist/schemas/nodes/block/BlockSchema.js +634 -0
- package/dist/schemas/nodes/block/BlockSchema.js.map +1 -0
- package/dist/schemas/nodes/block/index.d.ts +7 -0
- package/dist/schemas/nodes/block/index.d.ts.map +1 -0
- package/dist/schemas/nodes/block/index.js +7 -0
- package/dist/schemas/nodes/block/index.js.map +1 -0
- package/dist/schemas/nodes/index.d.ts +9 -0
- package/dist/schemas/nodes/index.d.ts.map +1 -0
- package/dist/schemas/nodes/index.js +12 -0
- package/dist/schemas/nodes/index.js.map +1 -0
- package/dist/schemas/nodes/inline/InlineSchema.d.ts +48 -0
- package/dist/schemas/nodes/inline/InlineSchema.d.ts.map +1 -0
- package/dist/schemas/nodes/inline/InlineSchema.js +436 -0
- package/dist/schemas/nodes/inline/InlineSchema.js.map +1 -0
- package/dist/schemas/nodes/inline/index.d.ts +7 -0
- package/dist/schemas/nodes/inline/index.d.ts.map +1 -0
- package/dist/schemas/nodes/inline/index.js +7 -0
- package/dist/schemas/nodes/inline/index.js.map +1 -0
- package/dist/schemas/nodes/macro/MacroSchema.d.ts +27 -0
- package/dist/schemas/nodes/macro/MacroSchema.d.ts.map +1 -0
- package/dist/schemas/nodes/macro/MacroSchema.js +162 -0
- package/dist/schemas/nodes/macro/MacroSchema.js.map +1 -0
- package/dist/schemas/nodes/macro/index.d.ts +7 -0
- package/dist/schemas/nodes/macro/index.d.ts.map +1 -0
- package/dist/schemas/nodes/macro/index.js +7 -0
- package/dist/schemas/nodes/macro/index.js.map +1 -0
- package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts +24 -0
- package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts.map +1 -0
- package/dist/schemas/preprocessing/ConfluencePreprocessor.js +351 -0
- package/dist/schemas/preprocessing/ConfluencePreprocessor.js.map +1 -0
- package/dist/schemas/preprocessing/index.d.ts +8 -0
- package/dist/schemas/preprocessing/index.d.ts.map +1 -0
- package/dist/schemas/preprocessing/index.js +2 -0
- package/dist/schemas/preprocessing/index.js.map +1 -0
- package/dist/serializers/ConfluenceSerializer.d.ts +30 -0
- package/dist/serializers/ConfluenceSerializer.d.ts.map +1 -0
- package/dist/serializers/ConfluenceSerializer.js +551 -0
- package/dist/serializers/ConfluenceSerializer.js.map +1 -0
- package/dist/serializers/MarkdownSerializer.d.ts +34 -0
- package/dist/serializers/MarkdownSerializer.d.ts.map +1 -0
- package/dist/serializers/MarkdownSerializer.js +355 -0
- package/dist/serializers/MarkdownSerializer.js.map +1 -0
- package/dist/serializers/index.d.ts +8 -0
- package/dist/serializers/index.d.ts.map +1 -0
- package/dist/serializers/index.js +8 -0
- package/dist/serializers/index.js.map +1 -0
- package/package.json +27 -16
- package/src/ConfluenceAuth.ts +571 -0
- package/src/ConfluenceClient.ts +188 -156
- package/src/ConfluenceConfig.ts +63 -7
- package/src/ConfluenceError.ts +110 -14
- package/src/GitError.ts +92 -0
- package/src/GitService.ts +859 -0
- package/src/LocalFileSystem.ts +179 -9
- package/src/MarkdownConverter.ts +126 -122
- package/src/SchemaConverterError.ts +108 -0
- package/src/Schemas.ts +223 -6
- package/src/SyncEngine.ts +745 -162
- package/src/ast/BlockNode.ts +425 -0
- package/src/ast/Document.ts +90 -0
- package/src/ast/InlineNode.ts +323 -0
- package/src/ast/MacroNode.ts +245 -0
- package/src/ast/index.ts +83 -0
- package/src/bin.ts +50 -249
- package/src/commands/auth.ts +117 -0
- package/src/commands/clone.ts +145 -0
- package/src/commands/delete.ts +57 -0
- package/src/commands/errorHandler.ts +32 -0
- package/src/commands/git.ts +114 -0
- package/src/commands/index.ts +10 -0
- package/src/commands/layers.ts +211 -0
- package/src/commands/new.ts +99 -0
- package/src/commands/pageTree.ts +40 -0
- package/src/commands/shared.ts +35 -0
- package/src/commands/sync.ts +129 -0
- package/src/index.ts +21 -1
- package/src/internal/NodeLayers.ts +21 -0
- package/src/internal/frontmatter.ts +21 -0
- package/src/internal/gitCommands.ts +229 -0
- package/src/internal/hashUtils.ts +65 -3
- package/src/internal/oauthServer.ts +199 -0
- package/src/internal/pathUtils.ts +34 -17
- package/src/internal/tokenStorage.ts +240 -0
- package/src/internal/userCache.ts +90 -0
- package/src/parsers/ConfluenceParser.ts +950 -0
- package/src/parsers/MarkdownParser.ts +1198 -0
- package/src/parsers/index.ts +8 -0
- package/src/schemas/ConfluenceSchema.ts +56 -0
- package/src/schemas/ConversionSchema.ts +318 -0
- package/src/schemas/MarkdownSchema.ts +56 -0
- package/src/schemas/hast/HastFromHtml.ts +153 -0
- package/src/schemas/hast/HastSchema.ts +274 -0
- package/src/schemas/hast/index.ts +35 -0
- package/src/schemas/index.ts +20 -0
- package/src/schemas/mdast/MdastFromMarkdown.ts +118 -0
- package/src/schemas/mdast/MdastSchema.ts +566 -0
- package/src/schemas/mdast/index.ts +59 -0
- package/src/schemas/mdast/mdastToString.ts +102 -0
- package/src/schemas/nodes/block/BlockSchema.ts +773 -0
- package/src/schemas/nodes/block/index.ts +13 -0
- package/src/schemas/nodes/index.ts +20 -0
- package/src/schemas/nodes/inline/InlineSchema.ts +523 -0
- package/src/schemas/nodes/inline/index.ts +14 -0
- package/src/schemas/nodes/macro/MacroSchema.ts +226 -0
- package/src/schemas/nodes/macro/index.ts +6 -0
- package/src/schemas/preprocessing/ConfluencePreprocessor.ts +446 -0
- package/src/schemas/preprocessing/index.ts +8 -0
- package/src/serializers/ConfluenceSerializer.ts +717 -0
- package/src/serializers/MarkdownSerializer.ts +493 -0
- package/src/serializers/index.ts +8 -0
- package/test/GitService.test.ts +209 -0
- package/test/MarkdownConverter.test.ts +37 -3
- package/test/Schemas.test.ts +97 -2
- package/test/ast/BlockNode.test.ts +265 -0
- package/test/ast/Document.test.ts +126 -0
- package/test/ast/InlineNode.test.ts +161 -0
- package/test/fixtures/integration-test.html.fixture +103 -0
- package/test/fixtures/integration-test.md.expected +257 -0
- package/test/integration.test.ts +269 -0
- package/test/oauthServer.test.ts +50 -0
- package/test/parsers/ConfluenceParser.test.ts +283 -0
- package/test/schemas/ConfluencePreprocessor.test.ts +180 -0
- package/test/schemas/ConversionSchema.test.ts +159 -0
- package/test/schemas/HastSchema.test.ts +138 -0
- package/test/schemas/MdastSchema.test.ts +145 -0
- package/test/schemas/nodes/block/BlockSchema.test.ts +173 -0
- package/test/schemas/nodes/inline/InlineSchema.test.ts +198 -0
- package/test/schemas/nodes/macro/MacroSchema.test.ts +142 -0
- package/test/tokenStorage.test.ts +99 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer for AST to Confluence storage format (HTML).
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import type { Document } from "../ast/Document.js";
|
|
8
|
+
import type { SerializeError } from "../SchemaConverterError.js";
|
|
9
|
+
/**
|
|
10
|
+
* Serialize Document AST to Confluence storage format HTML.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { serializeToConfluence } from "@knpkv/confluence-to-markdown/serializers/ConfluenceSerializer"
|
|
15
|
+
* import { makeDocument, Heading, Text } from "@knpkv/confluence-to-markdown/ast"
|
|
16
|
+
* import { Effect } from "effect"
|
|
17
|
+
*
|
|
18
|
+
* Effect.gen(function* () {
|
|
19
|
+
* const doc = makeDocument([
|
|
20
|
+
* new Heading({ level: 1, children: [new Text({ value: "Title" })] })
|
|
21
|
+
* ])
|
|
22
|
+
* const html = yield* serializeToConfluence(doc)
|
|
23
|
+
* console.log(html) // <h1>Title</h1>
|
|
24
|
+
* })
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @category Serializers
|
|
28
|
+
*/
|
|
29
|
+
export declare const serializeToConfluence: (doc: Document) => Effect.Effect<string, SerializeError>;
|
|
30
|
+
//# sourceMappingURL=ConfluenceSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfluenceSerializer.d.ts","sourceRoot":"","sources":["../../src/serializers/ConfluenceSerializer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAA;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,QAAQ,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAetF,CAAA"}
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer for AST to Confluence storage format (HTML).
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
/**
|
|
8
|
+
* Serialize Document AST to Confluence storage format HTML.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { serializeToConfluence } from "@knpkv/confluence-to-markdown/serializers/ConfluenceSerializer"
|
|
13
|
+
* import { makeDocument, Heading, Text } from "@knpkv/confluence-to-markdown/ast"
|
|
14
|
+
* import { Effect } from "effect"
|
|
15
|
+
*
|
|
16
|
+
* Effect.gen(function* () {
|
|
17
|
+
* const doc = makeDocument([
|
|
18
|
+
* new Heading({ level: 1, children: [new Text({ value: "Title" })] })
|
|
19
|
+
* ])
|
|
20
|
+
* const html = yield* serializeToConfluence(doc)
|
|
21
|
+
* console.log(html) // <h1>Title</h1>
|
|
22
|
+
* })
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @category Serializers
|
|
26
|
+
*/
|
|
27
|
+
export const serializeToConfluence = (doc) => Effect.gen(function* () {
|
|
28
|
+
// 1-to-1 roundtrip: if rawConfluence is available, return it as-is
|
|
29
|
+
if (doc.rawConfluence !== undefined) {
|
|
30
|
+
return doc.rawConfluence;
|
|
31
|
+
}
|
|
32
|
+
const parts = [];
|
|
33
|
+
for (const node of doc.children) {
|
|
34
|
+
const serialized = yield* serializeDocumentNode(node);
|
|
35
|
+
parts.push(serialized);
|
|
36
|
+
}
|
|
37
|
+
const raw = parts.join("\n");
|
|
38
|
+
// Post-process to reconstruct layouts from markers
|
|
39
|
+
return reconstructLayouts(raw);
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Reconstruct layouts from marker comments.
|
|
43
|
+
*
|
|
44
|
+
* Markers:
|
|
45
|
+
* - <!--cf:layout-start-->
|
|
46
|
+
* - <!--cf:section:index;type;breakoutMode;breakoutWidth;cellCount-->
|
|
47
|
+
* - <!--cf:cell:sectionIndex;cellIndex-->
|
|
48
|
+
* - <!--cf:section-end:index-->
|
|
49
|
+
* - <!--cf:layout-end-->
|
|
50
|
+
*/
|
|
51
|
+
const reconstructLayouts = (html) => {
|
|
52
|
+
// Check if there are any layout markers
|
|
53
|
+
if (!html.includes("<!--cf:layout-start-->")) {
|
|
54
|
+
return html;
|
|
55
|
+
}
|
|
56
|
+
let result = html;
|
|
57
|
+
// Process each layout block
|
|
58
|
+
const layoutRegex = /<!--cf:layout-start-->([\s\S]*?)<!--cf:layout-end-->/g;
|
|
59
|
+
result = result.replace(layoutRegex, (_, layoutContent) => {
|
|
60
|
+
// Parse sections from the content
|
|
61
|
+
const sections = [];
|
|
62
|
+
// Find all section markers
|
|
63
|
+
const sectionRegex = /<!--cf:section:(\d+);([^;]*);([^;]*);([^;]*);(\d+)-->/g;
|
|
64
|
+
let sectionMatch;
|
|
65
|
+
const sectionMeta = [];
|
|
66
|
+
while ((sectionMatch = sectionRegex.exec(layoutContent)) !== null) {
|
|
67
|
+
sectionMeta.push({
|
|
68
|
+
index: parseInt(sectionMatch[1] ?? "0"),
|
|
69
|
+
type: decodeURIComponent(sectionMatch[2] ?? "fixed-width"),
|
|
70
|
+
breakoutMode: decodeURIComponent(sectionMatch[3] ?? ""),
|
|
71
|
+
breakoutWidth: decodeURIComponent(sectionMatch[4] ?? ""),
|
|
72
|
+
cellCount: parseInt(sectionMatch[5] ?? "0")
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// For each section, extract cell content
|
|
76
|
+
for (const meta of sectionMeta) {
|
|
77
|
+
const cells = [];
|
|
78
|
+
for (let cellIndex = 0; cellIndex < meta.cellCount; cellIndex++) {
|
|
79
|
+
const cellStartMarker = `<!--cf:cell:${meta.index};${cellIndex}-->`;
|
|
80
|
+
const nextCellMarker = `<!--cf:cell:${meta.index};${cellIndex + 1}-->`;
|
|
81
|
+
const sectionEndMarker = `<!--cf:section-end:${meta.index}-->`;
|
|
82
|
+
const nextSectionMarker = `<!--cf:section:${meta.index + 1};`;
|
|
83
|
+
const cellStart = layoutContent.indexOf(cellStartMarker);
|
|
84
|
+
if (cellStart === -1)
|
|
85
|
+
continue;
|
|
86
|
+
const contentStart = cellStart + cellStartMarker.length;
|
|
87
|
+
// Find where this cell ends - either next cell, section end, or next section
|
|
88
|
+
let cellEnd = layoutContent.length;
|
|
89
|
+
const nextCell = layoutContent.indexOf(nextCellMarker, contentStart);
|
|
90
|
+
const secEnd = layoutContent.indexOf(sectionEndMarker, contentStart);
|
|
91
|
+
const nextSec = layoutContent.indexOf(nextSectionMarker, contentStart);
|
|
92
|
+
if (nextCell !== -1 && nextCell < cellEnd)
|
|
93
|
+
cellEnd = nextCell;
|
|
94
|
+
if (secEnd !== -1 && secEnd < cellEnd)
|
|
95
|
+
cellEnd = secEnd;
|
|
96
|
+
if (nextSec !== -1 && nextSec < cellEnd)
|
|
97
|
+
cellEnd = nextSec;
|
|
98
|
+
const cellContent = layoutContent.slice(contentStart, cellEnd).trim();
|
|
99
|
+
cells.push(cellContent);
|
|
100
|
+
}
|
|
101
|
+
sections.push({
|
|
102
|
+
type: meta.type,
|
|
103
|
+
breakoutMode: meta.breakoutMode,
|
|
104
|
+
breakoutWidth: meta.breakoutWidth,
|
|
105
|
+
cells
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Build the layout HTML
|
|
109
|
+
const sectionHtml = sections.map((section) => {
|
|
110
|
+
const typeAttr = ` ac:type="${escapeHtml(section.type)}"`;
|
|
111
|
+
const breakoutModeAttr = section.breakoutMode ? ` ac:breakout-mode="${escapeHtml(section.breakoutMode)}"` : "";
|
|
112
|
+
const breakoutWidthAttr = section.breakoutWidth ? ` ac:breakout-width="${escapeHtml(section.breakoutWidth)}"` : "";
|
|
113
|
+
const cellsHtml = section.cells.map((c) => `<ac:layout-cell>${c}</ac:layout-cell>`).join("");
|
|
114
|
+
return `<ac:layout-section${typeAttr}${breakoutModeAttr}${breakoutWidthAttr}>${cellsHtml}</ac:layout-section>`;
|
|
115
|
+
}).join("");
|
|
116
|
+
return `<ac:layout>${sectionHtml}</ac:layout>`;
|
|
117
|
+
});
|
|
118
|
+
return result;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Serialize a document node to Confluence HTML.
|
|
122
|
+
*/
|
|
123
|
+
const serializeDocumentNode = (node) => Effect.gen(function* () {
|
|
124
|
+
switch (node._tag) {
|
|
125
|
+
// Block nodes
|
|
126
|
+
case "Heading":
|
|
127
|
+
return yield* serializeHeading({ level: node.level, children: node.children });
|
|
128
|
+
case "Paragraph":
|
|
129
|
+
return yield* serializeParagraph({
|
|
130
|
+
children: node.children,
|
|
131
|
+
alignment: node.alignment,
|
|
132
|
+
indent: node.indent
|
|
133
|
+
});
|
|
134
|
+
case "CodeBlock":
|
|
135
|
+
return serializeCodeBlock({ code: node.code, language: node.language });
|
|
136
|
+
case "ThematicBreak":
|
|
137
|
+
return "<hr/>";
|
|
138
|
+
case "Image":
|
|
139
|
+
return serializeImage({
|
|
140
|
+
src: node.src,
|
|
141
|
+
attachment: node.attachment,
|
|
142
|
+
alt: node.alt,
|
|
143
|
+
title: node.title,
|
|
144
|
+
align: node.align,
|
|
145
|
+
width: node.width
|
|
146
|
+
});
|
|
147
|
+
case "Table":
|
|
148
|
+
return yield* serializeTable({ header: node.header, rows: node.rows });
|
|
149
|
+
case "List":
|
|
150
|
+
return yield* serializeList({
|
|
151
|
+
ordered: node.ordered,
|
|
152
|
+
start: node.start,
|
|
153
|
+
children: node.children
|
|
154
|
+
});
|
|
155
|
+
case "BlockQuote":
|
|
156
|
+
return yield* serializeBlockQuote({ children: node.children });
|
|
157
|
+
case "UnsupportedBlock": {
|
|
158
|
+
const raw = node.rawHtml || node.rawMarkdown || "";
|
|
159
|
+
// Check for comment-encoded decision list
|
|
160
|
+
const decisionMatch = raw.match(/<!--cf:decision:(.*)-->/);
|
|
161
|
+
if (decisionMatch) {
|
|
162
|
+
const itemsStr = decisionMatch[1] ?? "";
|
|
163
|
+
const items = itemsStr.split("|").map((item) => {
|
|
164
|
+
const parts = item.split(";");
|
|
165
|
+
return {
|
|
166
|
+
localId: decodeURIComponent(parts[0] ?? ""),
|
|
167
|
+
state: decodeURIComponent(parts[1] ?? ""),
|
|
168
|
+
content: decodeURIComponent(parts[2] ?? "")
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
const decisionItems = items.map((item) => `<ac:adf-node type="decision-item"><ac:adf-attribute key="local-id">${escapeHtml(item.localId)}</ac:adf-attribute><ac:adf-attribute key="state">${escapeHtml(item.state)}</ac:adf-attribute><ac:adf-content>${escapeHtml(item.content)}</ac:adf-content></ac:adf-node>`).join("");
|
|
172
|
+
const fallbackItems = items.map((item) => `<li>${escapeHtml(item.content)}</li>`).join("");
|
|
173
|
+
return `<ac:adf-extension><ac:adf-node type="decision-list">${decisionItems}</ac:adf-node><ac:adf-fallback><ul class="decision-list">${fallbackItems}</ul></ac:adf-fallback></ac:adf-extension>`;
|
|
174
|
+
}
|
|
175
|
+
// Layout markers are passed through - reconstructLayouts will process them
|
|
176
|
+
return raw;
|
|
177
|
+
}
|
|
178
|
+
// Macro nodes - serialize to Confluence macros
|
|
179
|
+
case "InfoPanel":
|
|
180
|
+
return yield* serializeInfoPanel({
|
|
181
|
+
panelType: node.panelType,
|
|
182
|
+
title: node.title,
|
|
183
|
+
children: node.children
|
|
184
|
+
});
|
|
185
|
+
case "ExpandMacro":
|
|
186
|
+
return yield* serializeExpandMacro({
|
|
187
|
+
title: node.title,
|
|
188
|
+
children: node.children
|
|
189
|
+
});
|
|
190
|
+
case "TocMacro":
|
|
191
|
+
return serializeTocMacro({ minLevel: node.minLevel, maxLevel: node.maxLevel });
|
|
192
|
+
case "CodeMacro":
|
|
193
|
+
return serializeCodeMacro({
|
|
194
|
+
language: node.language,
|
|
195
|
+
title: node.title,
|
|
196
|
+
code: node.code,
|
|
197
|
+
lineNumbers: node.lineNumbers,
|
|
198
|
+
collapse: node.collapse,
|
|
199
|
+
firstLine: node.firstLine
|
|
200
|
+
});
|
|
201
|
+
case "StatusMacro":
|
|
202
|
+
return serializeStatusMacro({ text: node.text, color: node.color });
|
|
203
|
+
case "TaskList":
|
|
204
|
+
return yield* serializeTaskList(node.children);
|
|
205
|
+
default:
|
|
206
|
+
return "";
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
/**
|
|
210
|
+
* Serialize heading.
|
|
211
|
+
*/
|
|
212
|
+
const serializeHeading = (node) => Effect.gen(function* () {
|
|
213
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
214
|
+
return `<h${node.level}>${content}</h${node.level}>`;
|
|
215
|
+
});
|
|
216
|
+
/**
|
|
217
|
+
* Serialize paragraph (with optional alignment and indent).
|
|
218
|
+
*/
|
|
219
|
+
const serializeParagraph = (node) => Effect.gen(function* () {
|
|
220
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
221
|
+
const styles = [];
|
|
222
|
+
if (node.alignment) {
|
|
223
|
+
styles.push(`text-align: ${node.alignment};`);
|
|
224
|
+
}
|
|
225
|
+
if (node.indent) {
|
|
226
|
+
styles.push(`margin-left: ${node.indent}px;`);
|
|
227
|
+
}
|
|
228
|
+
const styleAttr = styles.length > 0 ? ` style="${styles.join(" ")}"` : "";
|
|
229
|
+
return `<p${styleAttr}>${content}</p>`;
|
|
230
|
+
});
|
|
231
|
+
/**
|
|
232
|
+
* Serialize code block as Confluence code macro.
|
|
233
|
+
*/
|
|
234
|
+
const serializeCodeBlock = (node) => {
|
|
235
|
+
const lang = node.language ? `<ac:parameter ac:name="language">${escapeHtml(node.language)}</ac:parameter>` : "";
|
|
236
|
+
return `<ac:structured-macro ac:name="code">${lang}<ac:plain-text-body><![CDATA[${node.code}]]></ac:plain-text-body></ac:structured-macro>`;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Serialize image (supports both URL and Confluence attachments).
|
|
240
|
+
*/
|
|
241
|
+
const serializeImage = (node) => {
|
|
242
|
+
// Confluence attachment
|
|
243
|
+
if (node.attachment) {
|
|
244
|
+
const alignAttr = node.align ? ` ac:align="${node.align}"` : "";
|
|
245
|
+
const widthAttr = node.width ? ` ac:width="${node.width}"` : "";
|
|
246
|
+
const altAttr = node.alt ? ` ac:alt="${escapeHtml(node.alt)}"` : "";
|
|
247
|
+
const versionAttr = node.attachment.version ? ` ri:version-at-save="${node.attachment.version}"` : "";
|
|
248
|
+
return `<ac:image${alignAttr}${widthAttr}${altAttr}><ri:attachment ri:filename="${escapeHtml(node.attachment.filename)}"${versionAttr}/></ac:image>`;
|
|
249
|
+
}
|
|
250
|
+
// URL-based image
|
|
251
|
+
const src = node.src ?? "";
|
|
252
|
+
const alt = node.alt ? ` alt="${escapeHtml(node.alt)}"` : "";
|
|
253
|
+
const title = node.title ? ` title="${escapeHtml(node.title)}"` : "";
|
|
254
|
+
return `<img src="${escapeHtml(src)}"${alt}${title}/>`;
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* Serialize table.
|
|
258
|
+
*/
|
|
259
|
+
const serializeTable = (node) => Effect.gen(function* () {
|
|
260
|
+
const parts = ["<table>"];
|
|
261
|
+
// Header
|
|
262
|
+
if (node.header) {
|
|
263
|
+
parts.push("<thead><tr>");
|
|
264
|
+
for (const cell of node.header.cells) {
|
|
265
|
+
const content = yield* serializeInlineNodes(cell.children);
|
|
266
|
+
parts.push(`<th>${content}</th>`);
|
|
267
|
+
}
|
|
268
|
+
parts.push("</tr></thead>");
|
|
269
|
+
}
|
|
270
|
+
// Body
|
|
271
|
+
if (node.rows.length > 0) {
|
|
272
|
+
parts.push("<tbody>");
|
|
273
|
+
for (const row of node.rows) {
|
|
274
|
+
parts.push("<tr>");
|
|
275
|
+
for (const cell of row.cells) {
|
|
276
|
+
const tag = cell.isHeader ? "th" : "td";
|
|
277
|
+
const content = yield* serializeInlineNodes(cell.children);
|
|
278
|
+
parts.push(`<${tag}>${content}</${tag}>`);
|
|
279
|
+
}
|
|
280
|
+
parts.push("</tr>");
|
|
281
|
+
}
|
|
282
|
+
parts.push("</tbody>");
|
|
283
|
+
}
|
|
284
|
+
parts.push("</table>");
|
|
285
|
+
return parts.join("");
|
|
286
|
+
});
|
|
287
|
+
/**
|
|
288
|
+
* Serialize list.
|
|
289
|
+
*/
|
|
290
|
+
const serializeList = (node) => Effect.gen(function* () {
|
|
291
|
+
const tag = node.ordered ? "ol" : "ul";
|
|
292
|
+
const startAttr = node.ordered && node.start && node.start !== 1 ? ` start="${node.start}"` : "";
|
|
293
|
+
const parts = [`<${tag}${startAttr}>`];
|
|
294
|
+
for (const item of node.children) {
|
|
295
|
+
parts.push("<li>");
|
|
296
|
+
if (item.checked !== undefined) {
|
|
297
|
+
const checked = item.checked ? " checked" : "";
|
|
298
|
+
parts.push(`<input type="checkbox"${checked}/>`);
|
|
299
|
+
}
|
|
300
|
+
for (const child of item.children) {
|
|
301
|
+
parts.push(yield* serializeSimpleBlock(child));
|
|
302
|
+
}
|
|
303
|
+
parts.push("</li>");
|
|
304
|
+
}
|
|
305
|
+
parts.push(`</${tag}>`);
|
|
306
|
+
return parts.join("");
|
|
307
|
+
});
|
|
308
|
+
/**
|
|
309
|
+
* Serialize simple block.
|
|
310
|
+
*/
|
|
311
|
+
const serializeSimpleBlock = (node) => Effect.gen(function* () {
|
|
312
|
+
switch (node._tag) {
|
|
313
|
+
case "Heading":
|
|
314
|
+
return yield* serializeHeading(node);
|
|
315
|
+
case "Paragraph":
|
|
316
|
+
return yield* serializeParagraph(node);
|
|
317
|
+
case "CodeBlock":
|
|
318
|
+
return serializeCodeBlock(node);
|
|
319
|
+
case "ThematicBreak":
|
|
320
|
+
return "<hr/>";
|
|
321
|
+
case "Image":
|
|
322
|
+
return serializeImage(node);
|
|
323
|
+
case "Table":
|
|
324
|
+
return yield* serializeTable(node);
|
|
325
|
+
case "UnsupportedBlock": {
|
|
326
|
+
const unsupported = node;
|
|
327
|
+
return unsupported.rawHtml || unsupported.rawMarkdown || "";
|
|
328
|
+
}
|
|
329
|
+
default:
|
|
330
|
+
return "";
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
/**
|
|
334
|
+
* Serialize block quote.
|
|
335
|
+
*/
|
|
336
|
+
const serializeBlockQuote = (node) => Effect.gen(function* () {
|
|
337
|
+
const parts = ["<blockquote>"];
|
|
338
|
+
for (const child of node.children) {
|
|
339
|
+
parts.push(yield* serializeSimpleBlock(child));
|
|
340
|
+
}
|
|
341
|
+
parts.push("</blockquote>");
|
|
342
|
+
return parts.join("");
|
|
343
|
+
});
|
|
344
|
+
/**
|
|
345
|
+
* Serialize info panel as Confluence macro.
|
|
346
|
+
*/
|
|
347
|
+
const serializeInfoPanel = (node) => Effect.gen(function* () {
|
|
348
|
+
const titleParam = node.title
|
|
349
|
+
? `<ac:parameter ac:name="title">${escapeHtml(node.title)}</ac:parameter>`
|
|
350
|
+
: "";
|
|
351
|
+
const parts = [
|
|
352
|
+
`<ac:structured-macro ac:name="${node.panelType}">`,
|
|
353
|
+
titleParam,
|
|
354
|
+
"<ac:rich-text-body>"
|
|
355
|
+
];
|
|
356
|
+
for (const child of node.children) {
|
|
357
|
+
parts.push(yield* serializeSimpleBlock(child));
|
|
358
|
+
}
|
|
359
|
+
parts.push("</ac:rich-text-body>");
|
|
360
|
+
parts.push("</ac:structured-macro>");
|
|
361
|
+
return parts.join("");
|
|
362
|
+
});
|
|
363
|
+
/**
|
|
364
|
+
* Serialize expand macro as Confluence macro.
|
|
365
|
+
*/
|
|
366
|
+
const serializeExpandMacro = (node) => Effect.gen(function* () {
|
|
367
|
+
const titleParam = node.title
|
|
368
|
+
? `<ac:parameter ac:name="title">${escapeHtml(node.title)}</ac:parameter>`
|
|
369
|
+
: "";
|
|
370
|
+
const parts = [
|
|
371
|
+
`<ac:structured-macro ac:name="expand">`,
|
|
372
|
+
titleParam,
|
|
373
|
+
"<ac:rich-text-body>"
|
|
374
|
+
];
|
|
375
|
+
for (const child of node.children) {
|
|
376
|
+
parts.push(yield* serializeSimpleBlock(child));
|
|
377
|
+
}
|
|
378
|
+
parts.push("</ac:rich-text-body>");
|
|
379
|
+
parts.push("</ac:structured-macro>");
|
|
380
|
+
return parts.join("");
|
|
381
|
+
});
|
|
382
|
+
/**
|
|
383
|
+
* Serialize TOC macro.
|
|
384
|
+
*/
|
|
385
|
+
const serializeTocMacro = (node) => {
|
|
386
|
+
const params = [];
|
|
387
|
+
if (node.minLevel) {
|
|
388
|
+
params.push(`<ac:parameter ac:name="minLevel">${node.minLevel}</ac:parameter>`);
|
|
389
|
+
}
|
|
390
|
+
if (node.maxLevel) {
|
|
391
|
+
params.push(`<ac:parameter ac:name="maxLevel">${node.maxLevel}</ac:parameter>`);
|
|
392
|
+
}
|
|
393
|
+
return `<ac:structured-macro ac:name="toc">${params.join("")}</ac:structured-macro>`;
|
|
394
|
+
};
|
|
395
|
+
/**
|
|
396
|
+
* Serialize code macro with full options.
|
|
397
|
+
*/
|
|
398
|
+
const serializeCodeMacro = (node) => {
|
|
399
|
+
const params = [];
|
|
400
|
+
if (node.language) {
|
|
401
|
+
params.push(`<ac:parameter ac:name="language">${escapeHtml(node.language)}</ac:parameter>`);
|
|
402
|
+
}
|
|
403
|
+
if (node.title) {
|
|
404
|
+
params.push(`<ac:parameter ac:name="title">${escapeHtml(node.title)}</ac:parameter>`);
|
|
405
|
+
}
|
|
406
|
+
if (node.lineNumbers) {
|
|
407
|
+
params.push(`<ac:parameter ac:name="linenumbers">true</ac:parameter>`);
|
|
408
|
+
}
|
|
409
|
+
if (node.collapse) {
|
|
410
|
+
params.push(`<ac:parameter ac:name="collapse">true</ac:parameter>`);
|
|
411
|
+
}
|
|
412
|
+
if (node.firstLine) {
|
|
413
|
+
params.push(`<ac:parameter ac:name="firstline">${node.firstLine}</ac:parameter>`);
|
|
414
|
+
}
|
|
415
|
+
return `<ac:structured-macro ac:name="code">${params.join("")}<ac:plain-text-body><![CDATA[${node.code}]]></ac:plain-text-body></ac:structured-macro>`;
|
|
416
|
+
};
|
|
417
|
+
/**
|
|
418
|
+
* Serialize status macro.
|
|
419
|
+
*/
|
|
420
|
+
const serializeStatusMacro = (node) => {
|
|
421
|
+
return `<ac:structured-macro ac:name="status"><ac:parameter ac:name="colour">${escapeHtml(node.color)}</ac:parameter><ac:parameter ac:name="title">${escapeHtml(node.text)}</ac:parameter></ac:structured-macro>`;
|
|
422
|
+
};
|
|
423
|
+
/**
|
|
424
|
+
* Serialize task list to Confluence storage format.
|
|
425
|
+
*/
|
|
426
|
+
const serializeTaskList = (children) => Effect.gen(function* () {
|
|
427
|
+
const parts = [`<ac:task-list>`];
|
|
428
|
+
for (const item of children) {
|
|
429
|
+
const body = yield* serializeInlineNodes(item.body);
|
|
430
|
+
parts.push(`<ac:task>` +
|
|
431
|
+
`<ac:task-id>${item.id}</ac:task-id>` +
|
|
432
|
+
`<ac:task-uuid>${item.uuid}</ac:task-uuid>` +
|
|
433
|
+
`<ac:task-status>${item.status}</ac:task-status>` +
|
|
434
|
+
`<ac:task-body><span class="placeholder-inline-tasks">${body}</span></ac:task-body>` +
|
|
435
|
+
`</ac:task>`);
|
|
436
|
+
}
|
|
437
|
+
parts.push(`</ac:task-list>`);
|
|
438
|
+
return parts.join("\n");
|
|
439
|
+
});
|
|
440
|
+
/**
|
|
441
|
+
* Serialize inline nodes to HTML.
|
|
442
|
+
*/
|
|
443
|
+
const serializeInlineNodes = (nodes) => Effect.gen(function* () {
|
|
444
|
+
const parts = [];
|
|
445
|
+
for (const node of nodes) {
|
|
446
|
+
parts.push(yield* serializeInlineNode(node));
|
|
447
|
+
}
|
|
448
|
+
return parts.join("");
|
|
449
|
+
});
|
|
450
|
+
/**
|
|
451
|
+
* Serialize inline node to HTML.
|
|
452
|
+
*/
|
|
453
|
+
const serializeInlineNode = (node) => Effect.gen(function* () {
|
|
454
|
+
switch (node._tag) {
|
|
455
|
+
case "Text":
|
|
456
|
+
return escapeHtml(node.value);
|
|
457
|
+
case "Strong": {
|
|
458
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
459
|
+
return `<strong>${content}</strong>`;
|
|
460
|
+
}
|
|
461
|
+
case "Emphasis": {
|
|
462
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
463
|
+
return `<em>${content}</em>`;
|
|
464
|
+
}
|
|
465
|
+
case "Underline": {
|
|
466
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
467
|
+
return `<u>${content}</u>`;
|
|
468
|
+
}
|
|
469
|
+
case "Strikethrough": {
|
|
470
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
471
|
+
return `<del>${content}</del>`;
|
|
472
|
+
}
|
|
473
|
+
case "Subscript": {
|
|
474
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
475
|
+
return `<sub>${content}</sub>`;
|
|
476
|
+
}
|
|
477
|
+
case "Superscript": {
|
|
478
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
479
|
+
return `<sup>${content}</sup>`;
|
|
480
|
+
}
|
|
481
|
+
case "InlineCode":
|
|
482
|
+
return `<code>${escapeHtml(node.value)}</code>`;
|
|
483
|
+
case "Link": {
|
|
484
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
485
|
+
const title = node.title ? ` title="${escapeHtml(node.title)}"` : "";
|
|
486
|
+
return `<a href="${escapeHtml(node.href)}"${title}>${content}</a>`;
|
|
487
|
+
}
|
|
488
|
+
case "LineBreak":
|
|
489
|
+
return "<br/>";
|
|
490
|
+
case "Emoticon":
|
|
491
|
+
return `<ac:emoticon ac:emoji-shortname="${escapeHtml(node.shortname)}" ac:emoji-id="${escapeHtml(node.emojiId)}" ac:emoji-fallback="${escapeHtml(node.fallback)}"/>`;
|
|
492
|
+
case "UserMention":
|
|
493
|
+
return `<ac:link><ri:user ri:account-id="${escapeHtml(node.accountId)}"/></ac:link>`;
|
|
494
|
+
case "DateTime":
|
|
495
|
+
return `<time datetime="${escapeHtml(node.datetime)}"/>`;
|
|
496
|
+
case "ColoredText": {
|
|
497
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
498
|
+
return `<span style="color: ${escapeHtml(node.color)};">${content}</span>`;
|
|
499
|
+
}
|
|
500
|
+
case "Highlight": {
|
|
501
|
+
const content = yield* serializeInlineNodes(node.children);
|
|
502
|
+
return `<span style="background-color: ${escapeHtml(node.backgroundColor)};">${content}</span>`;
|
|
503
|
+
}
|
|
504
|
+
case "UnsupportedInline": {
|
|
505
|
+
// Check for comment-encoded TOC and convert back to Confluence macro
|
|
506
|
+
const tocMatch = node.raw.match(/<!--cf:toc:([^;]*);([^;]*)-->/);
|
|
507
|
+
if (tocMatch) {
|
|
508
|
+
const minLevel = tocMatch[1];
|
|
509
|
+
const maxLevel = tocMatch[2];
|
|
510
|
+
let params = "";
|
|
511
|
+
if (minLevel)
|
|
512
|
+
params += `<ac:parameter ac:name="minLevel">${minLevel}</ac:parameter>`;
|
|
513
|
+
if (maxLevel)
|
|
514
|
+
params += `<ac:parameter ac:name="maxLevel">${maxLevel}</ac:parameter>`;
|
|
515
|
+
return `<ac:structured-macro ac:name="toc">${params}</ac:structured-macro>`;
|
|
516
|
+
}
|
|
517
|
+
// Check for comment-encoded Status macro
|
|
518
|
+
const statusMatch = node.raw.match(/<!--cf:status:([^;]*);([^;]*)-->/);
|
|
519
|
+
if (statusMatch) {
|
|
520
|
+
const title = decodeURIComponent(statusMatch[1] ?? "");
|
|
521
|
+
const color = decodeURIComponent(statusMatch[2] ?? "");
|
|
522
|
+
let params = "";
|
|
523
|
+
if (title)
|
|
524
|
+
params += `<ac:parameter ac:name="title">${escapeHtml(title)}</ac:parameter>`;
|
|
525
|
+
if (color)
|
|
526
|
+
params += `<ac:parameter ac:name="colour">${escapeHtml(color)}</ac:parameter>`;
|
|
527
|
+
return `<ac:structured-macro ac:name="status">${params}</ac:structured-macro>`;
|
|
528
|
+
}
|
|
529
|
+
// Check for comment-encoded Smart link (Jira, etc.)
|
|
530
|
+
const smartLinkMatch = node.raw.match(/<!--cf:smartlink:([^;]*);([^;]*);(.*)-->/);
|
|
531
|
+
if (smartLinkMatch) {
|
|
532
|
+
const href = decodeURIComponent(smartLinkMatch[1] ?? "");
|
|
533
|
+
const appearance = decodeURIComponent(smartLinkMatch[2] ?? "");
|
|
534
|
+
const datasource = decodeURIComponent(smartLinkMatch[3] ?? "");
|
|
535
|
+
return `<a href="${escapeHtml(href)}" data-card-appearance="${escapeHtml(appearance)}" data-datasource="${escapeHtml(datasource)}">${escapeHtml(href)}</a>`;
|
|
536
|
+
}
|
|
537
|
+
return node.raw;
|
|
538
|
+
}
|
|
539
|
+
default:
|
|
540
|
+
return "";
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
/**
|
|
544
|
+
* Escape HTML special characters.
|
|
545
|
+
*/
|
|
546
|
+
const escapeHtml = (str) => str
|
|
547
|
+
.replace(/&/g, "&")
|
|
548
|
+
.replace(/</g, "<")
|
|
549
|
+
.replace(/>/g, ">")
|
|
550
|
+
.replace(/"/g, """);
|
|
551
|
+
//# sourceMappingURL=ConfluenceSerializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfluenceSerializer.js","sourceRoot":"","sources":["../../src/serializers/ConfluenceSerializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializer for AST to Markdown.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import type { Document } from "../ast/Document.js";
|
|
8
|
+
import type { SerializeError } from "../SchemaConverterError.js";
|
|
9
|
+
/**
|
|
10
|
+
* Serialize Document AST to Markdown.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { serializeToMarkdown } from "@knpkv/confluence-to-markdown/serializers/MarkdownSerializer"
|
|
15
|
+
* import { makeDocument, Heading, Text } from "@knpkv/confluence-to-markdown/ast"
|
|
16
|
+
* import { Effect } from "effect"
|
|
17
|
+
*
|
|
18
|
+
* Effect.gen(function* () {
|
|
19
|
+
* const doc = makeDocument([
|
|
20
|
+
* new Heading({ level: 1, children: [new Text({ value: "Title" })] })
|
|
21
|
+
* ])
|
|
22
|
+
* const md = yield* serializeToMarkdown(doc)
|
|
23
|
+
* console.log(md) // # Title
|
|
24
|
+
* })
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @category Serializers
|
|
28
|
+
*/
|
|
29
|
+
export interface SerializeOptions {
|
|
30
|
+
/** Include raw Confluence HTML for lossless roundtrip. Default: true */
|
|
31
|
+
readonly includeRawSource?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare const serializeToMarkdown: (doc: Document, options?: SerializeOptions) => Effect.Effect<string, SerializeError>;
|
|
34
|
+
//# sourceMappingURL=MarkdownSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownSerializer.d.ts","sourceRoot":"","sources":["../../src/serializers/MarkdownSerializer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAA;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CACpC;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,QAAQ,EACb,UAAS,gBAAqB,KAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAmBnC,CAAA"}
|