@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,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform schemas for macro nodes (Hast <-> AST).
|
|
3
|
+
*
|
|
4
|
+
* Provides transforms for Confluence-specific macro elements like info panels,
|
|
5
|
+
* expand sections, TOC, and status badges.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import { PanelTypes } from "../../../ast/MacroNode.js";
|
|
11
|
+
import { getTextContent, isHastElement, makeHastElement, makeHastText } from "../../hast/index.js";
|
|
12
|
+
import { makeMdastCode, makeMdastParagraph, makeMdastText, mdastToString } from "../../mdast/index.js";
|
|
13
|
+
import { blockNodeToHast, blockNodeToMdast } from "../block/index.js";
|
|
14
|
+
/**
|
|
15
|
+
* Convert HAST element to AST macro node.
|
|
16
|
+
*/
|
|
17
|
+
export const macroNodeFromHastElement = (element, parseBlockChildren) => Effect.gen(function* () {
|
|
18
|
+
const tagName = element.tagName.toLowerCase();
|
|
19
|
+
// Info/warning/note panels
|
|
20
|
+
if (tagName === "div" && element.properties?.["dataMacro"]) {
|
|
21
|
+
const macro = element.properties["dataMacro"];
|
|
22
|
+
if (PanelTypes.includes(macro)) {
|
|
23
|
+
const children = yield* parseBlockChildren(element.children);
|
|
24
|
+
// Cast to SimpleBlock[] - at runtime only simple blocks are parsed for panel children
|
|
25
|
+
return {
|
|
26
|
+
_tag: "InfoPanel",
|
|
27
|
+
version: 1,
|
|
28
|
+
panelType: macro,
|
|
29
|
+
title: element.properties["dataTitle"] || undefined,
|
|
30
|
+
children: children
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Expand/details
|
|
35
|
+
if (tagName === "details") {
|
|
36
|
+
const summary = element.children.find((c) => isHastElement(c) && c.tagName === "summary");
|
|
37
|
+
const title = summary ? getTextContent(summary) : undefined;
|
|
38
|
+
const contentChildren = element.children.filter((c) => !(isHastElement(c) && c.tagName === "summary"));
|
|
39
|
+
const children = yield* parseBlockChildren(contentChildren);
|
|
40
|
+
// Cast to SimpleBlock[] - at runtime only simple blocks are parsed for expand children
|
|
41
|
+
return {
|
|
42
|
+
_tag: "ExpandMacro",
|
|
43
|
+
version: 1,
|
|
44
|
+
title,
|
|
45
|
+
children: children
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// TOC
|
|
49
|
+
if (tagName === "nav" && element.properties?.["dataMacro"] === "toc") {
|
|
50
|
+
const minStr = element.properties["dataMin"];
|
|
51
|
+
const maxStr = element.properties["dataMax"];
|
|
52
|
+
return {
|
|
53
|
+
_tag: "TocMacro",
|
|
54
|
+
version: 1,
|
|
55
|
+
minLevel: minStr ? parseInt(minStr) : undefined,
|
|
56
|
+
maxLevel: maxStr ? parseInt(maxStr) : undefined
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Code macro (from preprocessed data)
|
|
60
|
+
if (tagName === "pre" && element.properties?.["dataMacro"] === "code") {
|
|
61
|
+
const codeEl = element.children.find((c) => isHastElement(c) && c.tagName === "code");
|
|
62
|
+
const code = codeEl ? getTextContent(codeEl) : getTextContent(element);
|
|
63
|
+
const language = element.properties["dataLanguage"] || undefined;
|
|
64
|
+
return {
|
|
65
|
+
_tag: "CodeMacro",
|
|
66
|
+
version: 1,
|
|
67
|
+
language,
|
|
68
|
+
code,
|
|
69
|
+
lineNumbers: false,
|
|
70
|
+
collapse: false
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Status macro
|
|
74
|
+
if (tagName === "span" && element.properties?.["dataMacro"] === "status") {
|
|
75
|
+
const color = element.properties["dataColor"] || "Grey";
|
|
76
|
+
const text = getTextContent(element);
|
|
77
|
+
return {
|
|
78
|
+
_tag: "StatusMacro",
|
|
79
|
+
version: 1,
|
|
80
|
+
text,
|
|
81
|
+
color: normalizeStatusColor(color)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Normalize status color to allowed values.
|
|
88
|
+
*/
|
|
89
|
+
const normalizeStatusColor = (color) => {
|
|
90
|
+
const normalized = color.toLowerCase();
|
|
91
|
+
switch (normalized) {
|
|
92
|
+
case "red":
|
|
93
|
+
return "Red";
|
|
94
|
+
case "yellow":
|
|
95
|
+
return "Yellow";
|
|
96
|
+
case "green":
|
|
97
|
+
return "Green";
|
|
98
|
+
case "blue":
|
|
99
|
+
return "Blue";
|
|
100
|
+
default:
|
|
101
|
+
return "Grey";
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Convert AST macro node to HAST element.
|
|
106
|
+
*/
|
|
107
|
+
export const macroNodeToHast = (node) => {
|
|
108
|
+
switch (node._tag) {
|
|
109
|
+
case "InfoPanel":
|
|
110
|
+
return makeHastElement("div", {
|
|
111
|
+
dataMacro: node.panelType,
|
|
112
|
+
...(node.title ? { dataTitle: node.title } : {})
|
|
113
|
+
}, node.children.map(blockNodeToHast));
|
|
114
|
+
case "ExpandMacro":
|
|
115
|
+
return makeHastElement("details", { dataMacro: "expand" }, [
|
|
116
|
+
...(node.title ? [makeHastElement("summary", {}, [makeHastText(node.title)])] : []),
|
|
117
|
+
...node.children.map(blockNodeToHast)
|
|
118
|
+
]);
|
|
119
|
+
case "TocMacro":
|
|
120
|
+
return makeHastElement("nav", {
|
|
121
|
+
dataMacro: "toc",
|
|
122
|
+
...(node.minLevel !== undefined ? { dataMin: String(node.minLevel) } : {}),
|
|
123
|
+
...(node.maxLevel !== undefined ? { dataMax: String(node.maxLevel) } : {})
|
|
124
|
+
});
|
|
125
|
+
case "CodeMacro":
|
|
126
|
+
return makeHastElement("pre", {
|
|
127
|
+
dataMacro: "code",
|
|
128
|
+
...(node.language ? { dataLanguage: node.language } : {})
|
|
129
|
+
}, [makeHastElement("code", {}, [makeHastText(node.code)])]);
|
|
130
|
+
case "StatusMacro":
|
|
131
|
+
return makeHastElement("span", { dataMacro: "status", dataColor: node.color }, [makeHastText(node.text)]);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Convert AST macro node to MDAST block content.
|
|
136
|
+
*/
|
|
137
|
+
export const macroNodeToMdast = (node) => {
|
|
138
|
+
switch (node._tag) {
|
|
139
|
+
case "InfoPanel":
|
|
140
|
+
// Render as container syntax with children
|
|
141
|
+
return {
|
|
142
|
+
type: "html",
|
|
143
|
+
value: `:::${node.panelType}${node.title ? ` ${node.title}` : ""}\n${node.children.map((c) => mdastToString(blockNodeToMdast(c))).join("\n")}\n:::`
|
|
144
|
+
};
|
|
145
|
+
case "ExpandMacro":
|
|
146
|
+
return {
|
|
147
|
+
type: "html",
|
|
148
|
+
value: `<details>\n<summary>${node.title ?? ""}</summary>\n${node.children.map((c) => mdastToString(blockNodeToMdast(c))).join("\n")}\n</details>`
|
|
149
|
+
};
|
|
150
|
+
case "TocMacro":
|
|
151
|
+
return {
|
|
152
|
+
type: "html",
|
|
153
|
+
value: "[[toc]]"
|
|
154
|
+
};
|
|
155
|
+
case "CodeMacro":
|
|
156
|
+
return makeMdastCode(node.code, node.language);
|
|
157
|
+
case "StatusMacro":
|
|
158
|
+
// Render as badge-like text
|
|
159
|
+
return makeMdastParagraph([makeMdastText(`[${node.text}]`)]);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=MacroSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MacroSchema.js","sourceRoot":"","sources":["../../../../src/schemas/nodes/macro/MacroSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/schemas/nodes/macro/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/schemas/nodes/macro/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-based Confluence HTML preprocessing.
|
|
3
|
+
*
|
|
4
|
+
* Transforms raw Confluence storage format into parseable HTML by expanding
|
|
5
|
+
* macros, converting task lists, and normalizing Confluence-specific markup.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type * as Brand from "effect/Brand";
|
|
10
|
+
import * as Schema from "effect/Schema";
|
|
11
|
+
/**
|
|
12
|
+
* Branded type for preprocessed Confluence HTML.
|
|
13
|
+
*
|
|
14
|
+
* @category Types
|
|
15
|
+
*/
|
|
16
|
+
export type PreprocessedHtml = string & Brand.Brand<"PreprocessedHtml">;
|
|
17
|
+
/**
|
|
18
|
+
* Schema for preprocessed HTML brand.
|
|
19
|
+
*
|
|
20
|
+
* @category Schemas
|
|
21
|
+
*/
|
|
22
|
+
export declare const PreprocessedHtmlSchema: Schema.brand<typeof Schema.String, "PreprocessedHtml">;
|
|
23
|
+
export declare const PreprocessedHtmlFromConfluence: Schema.transformOrFail<typeof Schema.String, Schema.brand<typeof Schema.String, "PreprocessedHtml">, never>;
|
|
24
|
+
//# sourceMappingURL=ConfluencePreprocessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfluencePreprocessor.d.ts","sourceRoot":"","sources":["../../../src/schemas/preprocessing/ConfluencePreprocessor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAI1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAMvC;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAEvE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,wDAElC,CAAA;AAiCD,eAAO,MAAM,8BAA8B,6GAsB1C,CAAA"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { pipe } from "effect/Function";
|
|
3
|
+
import * as ParseResult from "effect/ParseResult";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import { PanelTypes } from "../../ast/MacroNode.js";
|
|
6
|
+
/** Maximum HTML input size (1MB) to prevent ReDoS attacks */
|
|
7
|
+
const MAX_HTML_SIZE = 1024 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* Schema for preprocessed HTML brand.
|
|
10
|
+
*
|
|
11
|
+
* @category Schemas
|
|
12
|
+
*/
|
|
13
|
+
export const PreprocessedHtmlSchema = Schema.String.pipe(Schema.brand("PreprocessedHtml"));
|
|
14
|
+
/**
|
|
15
|
+
* Transform raw Confluence HTML to preprocessed HTML.
|
|
16
|
+
*
|
|
17
|
+
* Applies the following transformations:
|
|
18
|
+
* - Layout section extraction with markers
|
|
19
|
+
* - Structured macro expansion (code, info panels, expand, TOC, status)
|
|
20
|
+
* - Task list normalization
|
|
21
|
+
* - Image attachment processing
|
|
22
|
+
* - Emoticon conversion
|
|
23
|
+
* - User mention extraction
|
|
24
|
+
* - ADF extension handling
|
|
25
|
+
* - Namespace stripping (ac:, ri: tags)
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { PreprocessedHtmlFromConfluence } from "@knpkv/confluence-to-markdown/schemas/preprocessing"
|
|
30
|
+
* import * as Schema from "effect/Schema"
|
|
31
|
+
* import { Effect } from "effect"
|
|
32
|
+
*
|
|
33
|
+
* const program = Effect.gen(function* () {
|
|
34
|
+
* const html = yield* Schema.decode(PreprocessedHtmlFromConfluence)(
|
|
35
|
+
* '<ac:structured-macro ac:name="info"><ac:rich-text-body>Content</ac:rich-text-body></ac:structured-macro>'
|
|
36
|
+
* )
|
|
37
|
+
* // html contains: <div data-macro="info">Content</div>
|
|
38
|
+
* })
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @category Schemas
|
|
42
|
+
*/
|
|
43
|
+
const makePreprocessedHtml = Schema.decodeSync(PreprocessedHtmlSchema);
|
|
44
|
+
export const PreprocessedHtmlFromConfluence = Schema.transformOrFail(Schema.String, PreprocessedHtmlSchema, {
|
|
45
|
+
strict: true,
|
|
46
|
+
decode: (html, _options, ast) => Effect.gen(function* () {
|
|
47
|
+
if (html.length > MAX_HTML_SIZE) {
|
|
48
|
+
return yield* Effect.fail(new ParseResult.Type(ast, html, `HTML input too large: ${html.length} bytes (max ${MAX_HTML_SIZE})`));
|
|
49
|
+
}
|
|
50
|
+
return pipe(html, preprocessConfluenceHtml, makePreprocessedHtml);
|
|
51
|
+
}),
|
|
52
|
+
encode: (preprocessed) =>
|
|
53
|
+
// Identity - branded string is already a string
|
|
54
|
+
Effect.succeed(preprocessed)
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* Main preprocessing pipeline.
|
|
58
|
+
*/
|
|
59
|
+
const preprocessConfluenceHtml = (html) => {
|
|
60
|
+
let result = html;
|
|
61
|
+
// 1. Process layouts FIRST - before any other preprocessing
|
|
62
|
+
result = preprocessLayouts(result);
|
|
63
|
+
// 2. Process structured macros iteratively
|
|
64
|
+
result = processStructuredMacros(result);
|
|
65
|
+
// 3. Process task lists BEFORE stripping ac: tags
|
|
66
|
+
result = preprocessTaskLists(result);
|
|
67
|
+
// 4. Process images with attachments
|
|
68
|
+
result = preprocessImages(result);
|
|
69
|
+
// 5. Process emoticons
|
|
70
|
+
result = preprocessEmoticons(result);
|
|
71
|
+
// 6. Process user mentions
|
|
72
|
+
result = preprocessUserMentions(result);
|
|
73
|
+
// 7. Process Confluence links with link-body
|
|
74
|
+
result = preprocessConfluenceLinks(result);
|
|
75
|
+
// 8. Process ADF extensions (decision lists)
|
|
76
|
+
result = preprocessAdfExtensions(result);
|
|
77
|
+
// 9. Strip remaining ac/ri namespace tags
|
|
78
|
+
result = stripNamespaces(result);
|
|
79
|
+
return result;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Process Confluence layouts.
|
|
83
|
+
* Inserts markers for roundtrip preservation.
|
|
84
|
+
*/
|
|
85
|
+
const preprocessLayouts = (html) => {
|
|
86
|
+
return html.replace(/<ac:layout>([\s\S]*?)<\/ac:layout>/gi, (_, layoutContent) => {
|
|
87
|
+
let result = "<div data-cf-marker><!--cf:layout-start--></div>";
|
|
88
|
+
let sectionIndex = 0;
|
|
89
|
+
const sectionRegex = /<ac:layout-section([^>]*)>([\s\S]*?)<\/ac:layout-section>/gi;
|
|
90
|
+
let sectionMatch;
|
|
91
|
+
while ((sectionMatch = sectionRegex.exec(layoutContent)) !== null) {
|
|
92
|
+
const sectionAttrs = sectionMatch[1] ?? "";
|
|
93
|
+
const sectionContent = sectionMatch[2] ?? "";
|
|
94
|
+
const typeMatch = sectionAttrs.match(/ac:type="([^"]*)"/);
|
|
95
|
+
const sectionType = typeMatch?.[1] ?? "fixed-width";
|
|
96
|
+
const breakoutModeMatch = sectionAttrs.match(/ac:breakout-mode="([^"]*)"/);
|
|
97
|
+
const breakoutWidthMatch = sectionAttrs.match(/ac:breakout-width="([^"]*)"/);
|
|
98
|
+
const breakoutMode = breakoutModeMatch?.[1] ?? "";
|
|
99
|
+
const breakoutWidth = breakoutWidthMatch?.[1] ?? "";
|
|
100
|
+
const cellContents = [];
|
|
101
|
+
const cellRegex = /<ac:layout-cell[^>]*>([\s\S]*?)<\/ac:layout-cell>/gi;
|
|
102
|
+
let cellMatch;
|
|
103
|
+
while ((cellMatch = cellRegex.exec(sectionContent)) !== null) {
|
|
104
|
+
cellContents.push(cellMatch[1] ?? "");
|
|
105
|
+
}
|
|
106
|
+
result += `<div data-cf-marker><!--cf:section:${sectionIndex};${encodeURIComponent(sectionType)};${encodeURIComponent(breakoutMode)};${encodeURIComponent(breakoutWidth)};${cellContents.length}--></div>`;
|
|
107
|
+
cellContents.forEach((cellContent, cellIndex) => {
|
|
108
|
+
result += `<div data-cf-marker><!--cf:cell:${sectionIndex};${cellIndex}--></div>${cellContent}`;
|
|
109
|
+
});
|
|
110
|
+
result += `<div data-cf-marker><!--cf:section-end:${sectionIndex}--></div>`;
|
|
111
|
+
sectionIndex++;
|
|
112
|
+
}
|
|
113
|
+
result += "<div data-cf-marker><!--cf:layout-end--></div>";
|
|
114
|
+
return result;
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Process structured macros iteratively.
|
|
119
|
+
*/
|
|
120
|
+
const processStructuredMacros = (html) => {
|
|
121
|
+
let result = html;
|
|
122
|
+
let iterations = 0;
|
|
123
|
+
const maxIterations = 100;
|
|
124
|
+
while (iterations < maxIterations) {
|
|
125
|
+
const macroStart = result.indexOf("<ac:structured-macro");
|
|
126
|
+
if (macroStart === -1)
|
|
127
|
+
break;
|
|
128
|
+
// First, find the end of the opening tag to check if self-closing
|
|
129
|
+
const openingTagEnd = result.indexOf(">", macroStart);
|
|
130
|
+
if (openingTagEnd === -1)
|
|
131
|
+
break;
|
|
132
|
+
// Check if self-closing (ends with />)
|
|
133
|
+
const isSelfClosing = result[openingTagEnd - 1] === "/";
|
|
134
|
+
let endPos;
|
|
135
|
+
if (isSelfClosing) {
|
|
136
|
+
// Self-closing macro: <ac:structured-macro ... />
|
|
137
|
+
endPos = openingTagEnd + 1;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Regular macro with body: find matching closing tag
|
|
141
|
+
let depth = 1;
|
|
142
|
+
let pos = openingTagEnd + 1;
|
|
143
|
+
endPos = -1;
|
|
144
|
+
while (pos < result.length && depth > 0) {
|
|
145
|
+
if (result.slice(pos, pos + 20) === "<ac:structured-macro") {
|
|
146
|
+
// Check if this nested opening is also self-closing
|
|
147
|
+
const nestedEnd = result.indexOf(">", pos);
|
|
148
|
+
if (nestedEnd !== -1 && result[nestedEnd - 1] === "/") {
|
|
149
|
+
// Self-closing nested macro - don't change depth
|
|
150
|
+
pos = nestedEnd + 1;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
depth++;
|
|
154
|
+
pos += 20;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (result.slice(pos, pos + 21) === "</ac:structured-macro") {
|
|
158
|
+
depth--;
|
|
159
|
+
if (depth === 0) {
|
|
160
|
+
endPos = result.indexOf(">", pos) + 1;
|
|
161
|
+
}
|
|
162
|
+
pos += 21;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
pos++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (endPos === -1)
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
const macroContent = result.slice(macroStart, endPos);
|
|
172
|
+
const replacement = processSingleMacro(macroContent);
|
|
173
|
+
result = result.slice(0, macroStart) + replacement + result.slice(endPos);
|
|
174
|
+
iterations++;
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Process a single Confluence macro to HTML.
|
|
180
|
+
*/
|
|
181
|
+
const processSingleMacro = (macroContent) => {
|
|
182
|
+
const nameMatch = macroContent.match(/ac:name="([^"]+)"/);
|
|
183
|
+
const macroName = nameMatch?.[1] ?? "";
|
|
184
|
+
// Plain-text body (for code macros)
|
|
185
|
+
const plainBodyStart = macroContent.indexOf("<ac:plain-text-body><![CDATA[");
|
|
186
|
+
const plainBodyEnd = macroContent.indexOf("]]></ac:plain-text-body>");
|
|
187
|
+
if (plainBodyStart !== -1 && plainBodyEnd !== -1) {
|
|
188
|
+
const content = macroContent.slice(plainBodyStart + 29, plainBodyEnd);
|
|
189
|
+
const langMatch = macroContent.match(/ac:name="code".*?<ac:parameter[^>]*ac:name="language"[^>]*>([^<]+)/);
|
|
190
|
+
const language = langMatch?.[1] ?? "";
|
|
191
|
+
return `<pre data-macro="code" data-language="${language}"><code>${escapeHtml(content)}</code></pre>`;
|
|
192
|
+
}
|
|
193
|
+
// Rich-text body
|
|
194
|
+
const richBodyStart = macroContent.indexOf("<ac:rich-text-body>");
|
|
195
|
+
const richBodyEnd = macroContent.indexOf("</ac:rich-text-body>");
|
|
196
|
+
if (richBodyStart !== -1 && richBodyEnd !== -1) {
|
|
197
|
+
const content = macroContent.slice(richBodyStart + 19, richBodyEnd);
|
|
198
|
+
// Info/warning/note panels
|
|
199
|
+
if (PanelTypes.includes(macroName)) {
|
|
200
|
+
const titleMatch = macroContent.match(/<ac:parameter[^>]*ac:name="title"[^>]*>([^<]+)/);
|
|
201
|
+
const title = titleMatch?.[1] ?? "";
|
|
202
|
+
return `<div data-macro="${macroName}" data-title="${escapeHtml(title)}">${content}</div>`;
|
|
203
|
+
}
|
|
204
|
+
// Expand macro
|
|
205
|
+
if (macroName === "expand") {
|
|
206
|
+
const titleMatch = macroContent.match(/<ac:parameter[^>]*ac:name="title"[^>]*>([^<]+)/);
|
|
207
|
+
const title = titleMatch?.[1] ?? "";
|
|
208
|
+
return `<details data-macro="expand"><summary>${escapeHtml(title)}</summary>${content}</details>`;
|
|
209
|
+
}
|
|
210
|
+
return content;
|
|
211
|
+
}
|
|
212
|
+
// TOC macro
|
|
213
|
+
if (macroName === "toc") {
|
|
214
|
+
const minMatch = macroContent.match(/<ac:parameter[^>]*ac:name="minLevel"[^>]*>(\d+)/);
|
|
215
|
+
const maxMatch = macroContent.match(/<ac:parameter[^>]*ac:name="maxLevel"[^>]*>(\d+)/);
|
|
216
|
+
return `<nav data-macro="toc" data-min="${minMatch?.[1] ?? ""}" data-max="${maxMatch?.[1] ?? ""}"></nav>`;
|
|
217
|
+
}
|
|
218
|
+
// Status macro
|
|
219
|
+
if (macroName === "status") {
|
|
220
|
+
const colorMatch = macroContent.match(/<ac:parameter[^>]*ac:name="colour"[^>]*>([^<]+)/);
|
|
221
|
+
const titleMatch = macroContent.match(/<ac:parameter[^>]*ac:name="title"[^>]*>([^<]+)/);
|
|
222
|
+
return `<span data-macro="status" data-color="${colorMatch?.[1] ?? ""}">${escapeHtml(titleMatch?.[1] ?? "")}</span>`;
|
|
223
|
+
}
|
|
224
|
+
// Unknown macro - preserve as unsupported
|
|
225
|
+
return `<div data-unsupported-macro="${macroName}">${macroContent}</div>`;
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Preprocess task lists.
|
|
229
|
+
*/
|
|
230
|
+
const preprocessTaskLists = (html) => {
|
|
231
|
+
let result = html;
|
|
232
|
+
const taskRegex = /<ac:task>([\s\S]*?)<\/ac:task>/gi;
|
|
233
|
+
result = result.replace(taskRegex, (_, taskContent) => {
|
|
234
|
+
const idMatch = taskContent.match(/<ac:task-id>([^<]*)<\/ac:task-id>/);
|
|
235
|
+
const uuidMatch = taskContent.match(/<ac:task-uuid>([^<]*)<\/ac:task-uuid>/);
|
|
236
|
+
const statusMatch = taskContent.match(/<ac:task-status>([^<]*)<\/ac:task-status>/);
|
|
237
|
+
const bodyMatch = taskContent.match(/<ac:task-body>([\s\S]*?)<\/ac:task-body>/);
|
|
238
|
+
const id = idMatch?.[1] ?? "";
|
|
239
|
+
const uuid = uuidMatch?.[1] ?? "";
|
|
240
|
+
const status = statusMatch?.[1] ?? "incomplete";
|
|
241
|
+
const body = bodyMatch?.[1] ?? "";
|
|
242
|
+
const cleanBody = body.replace(/<[^>]+>/g, "").trim();
|
|
243
|
+
return `<li data-task-id="${id}" data-task-uuid="${uuid}" data-task-status="${status}">${cleanBody}</li>`;
|
|
244
|
+
});
|
|
245
|
+
result = result.replace(/<ac:task-list[^>]*>/gi, "<ul data-macro=\"task-list\">");
|
|
246
|
+
result = result.replace(/<\/ac:task-list>/gi, "</ul>");
|
|
247
|
+
return result;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Preprocess images with attachments.
|
|
251
|
+
*/
|
|
252
|
+
const preprocessImages = (html) => {
|
|
253
|
+
return html.replace(/<ac:image([^>]*)>[\s\S]*?<ri:attachment([^>]*)\/>[\s\S]*?<\/ac:image>/gi, (_, imageAttrs, attachmentAttrs) => {
|
|
254
|
+
const filename = attachmentAttrs.match(/ri:filename="([^"]*)"/)?.[1] ?? "";
|
|
255
|
+
const align = imageAttrs.match(/ac:align="([^"]*)"/)?.[1] ?? "";
|
|
256
|
+
const width = imageAttrs.match(/ac:width="([^"]*)"/)?.[1] ?? "";
|
|
257
|
+
const alt = imageAttrs.match(/ac:alt="([^"]*)"/)?.[1] ?? "";
|
|
258
|
+
const attrs = [
|
|
259
|
+
`data-attachment="${escapeHtml(filename)}"`,
|
|
260
|
+
align && `data-align="${align}"`,
|
|
261
|
+
width && `data-width="${width}"`,
|
|
262
|
+
alt && `alt="${escapeHtml(alt)}"`
|
|
263
|
+
].filter(Boolean).join(" ");
|
|
264
|
+
return `<img ${attrs}>`;
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* Preprocess emoticons.
|
|
269
|
+
*/
|
|
270
|
+
const preprocessEmoticons = (html) => {
|
|
271
|
+
return html.replace(/<ac:emoticon([^>]*)\/?>/gi, (_, attrs) => {
|
|
272
|
+
const shortname = attrs.match(/ac:emoji-shortname="([^"]*)"/)?.[1] ?? "";
|
|
273
|
+
const emojiId = attrs.match(/ac:emoji-id="([^"]*)"/)?.[1] ?? "";
|
|
274
|
+
const fallback = attrs.match(/ac:emoji-fallback="([^"]*)"/)?.[1] ?? "";
|
|
275
|
+
return `<span data-emoji="${escapeHtml(shortname)}" data-emoji-id="${emojiId}">${fallback}</span>`;
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* Preprocess user mentions.
|
|
280
|
+
*/
|
|
281
|
+
const preprocessUserMentions = (html) => {
|
|
282
|
+
return html.replace(/<ac:link>\s*<ri:user([^>]*)\/?>\s*<\/ac:link>/gi, (_, attrs) => {
|
|
283
|
+
const accountId = attrs.match(/ri:account-id="([^"]*)"/)?.[1] ?? "";
|
|
284
|
+
return `<span data-user-mention="${escapeHtml(accountId)}"></span>`;
|
|
285
|
+
});
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Preprocess Confluence links with link-body.
|
|
289
|
+
* <ac:link><ac:link-body>Link text</ac:link-body></ac:link>
|
|
290
|
+
* -> <span data-confluence-link>Link text</span>
|
|
291
|
+
*/
|
|
292
|
+
const preprocessConfluenceLinks = (html) => {
|
|
293
|
+
return html.replace(/<ac:link>\s*<ac:link-body>([\s\S]*?)<\/ac:link-body>\s*<\/ac:link>/gi, (_, linkText) => {
|
|
294
|
+
return `<span data-confluence-link>${linkText}</span>`;
|
|
295
|
+
});
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* Preprocess ADF extensions (decision lists).
|
|
299
|
+
*/
|
|
300
|
+
const preprocessAdfExtensions = (html) => {
|
|
301
|
+
return html.replace(/<ac:adf-extension>([\s\S]*?)<\/ac:adf-extension>/gi, (_, content) => {
|
|
302
|
+
if (content.includes("type=\"decision-list\"")) {
|
|
303
|
+
const items = [];
|
|
304
|
+
const itemRegex = /<ac:adf-node\s+type="decision-item">([\s\S]*?)<\/ac:adf-node>/gi;
|
|
305
|
+
let itemMatch;
|
|
306
|
+
while ((itemMatch = itemRegex.exec(content)) !== null) {
|
|
307
|
+
const itemContent = itemMatch[1] ?? "";
|
|
308
|
+
const localIdMatch = itemContent.match(/<ac:adf-attribute\s+key="local-id">([^<]*)<\/ac:adf-attribute>/);
|
|
309
|
+
const stateMatch = itemContent.match(/<ac:adf-attribute\s+key="state">([^<]*)<\/ac:adf-attribute>/);
|
|
310
|
+
const textMatch = itemContent.match(/<ac:adf-content>([^<]*)<\/ac:adf-content>/);
|
|
311
|
+
items.push({
|
|
312
|
+
localId: localIdMatch?.[1] ?? "",
|
|
313
|
+
state: stateMatch?.[1] ?? "UNDECIDED",
|
|
314
|
+
content: textMatch?.[1] ?? ""
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
if (items.length > 0) {
|
|
318
|
+
const encoded = items.map((item) => `${encodeURIComponent(item.localId)};${encodeURIComponent(item.state)};${encodeURIComponent(item.content)}`).join("|");
|
|
319
|
+
return `<!--cf:decision:${encoded}-->`;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Check if it's an ADF panel (note, info, warning, etc.)
|
|
323
|
+
if (content.includes("type=\"panel\"")) {
|
|
324
|
+
const panelTypeMatch = content.match(/<ac:adf-attribute\s+key="panel-type">([^<]*)<\/ac:adf-attribute>/);
|
|
325
|
+
const panelType = panelTypeMatch?.[1] ?? "info";
|
|
326
|
+
const contentMatch = content.match(/<ac:adf-content>([\s\S]*?)<\/ac:adf-content>/);
|
|
327
|
+
const innerContent = contentMatch?.[1] ?? "";
|
|
328
|
+
return `<div data-macro="${panelType}" data-title="">${innerContent}</div>`;
|
|
329
|
+
}
|
|
330
|
+
const fallbackMatch = content.match(/<ac:adf-fallback>([\s\S]*?)<\/ac:adf-fallback>/);
|
|
331
|
+
if (fallbackMatch) {
|
|
332
|
+
return fallbackMatch[1] ?? "";
|
|
333
|
+
}
|
|
334
|
+
return "";
|
|
335
|
+
});
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Strip remaining ac/ri namespace tags.
|
|
339
|
+
*/
|
|
340
|
+
const stripNamespaces = (html) => {
|
|
341
|
+
return html
|
|
342
|
+
.replace(/<ac:parameter[^>]{0,1000}>[^<]{0,10000}<\/ac:parameter>/gi, "")
|
|
343
|
+
.replace(/<\/?ac:[a-z-]{1,50}[^>]{0,1000}>/gi, "")
|
|
344
|
+
.replace(/<\/?ri:[a-z-]{1,50}[^>]{0,1000}\/?>/gi, "");
|
|
345
|
+
};
|
|
346
|
+
const escapeHtml = (str) => str
|
|
347
|
+
.replace(/&/g, "&")
|
|
348
|
+
.replace(/</g, "<")
|
|
349
|
+
.replace(/>/g, ">")
|
|
350
|
+
.replace(/"/g, """);
|
|
351
|
+
//# sourceMappingURL=ConfluencePreprocessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfluencePreprocessor.js","sourceRoot":"","sources":["../../../src/schemas/preprocessing/ConfluencePreprocessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confluence HTML preprocessing schemas.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
export type { PreprocessedHtml } from "./ConfluencePreprocessor.js";
|
|
7
|
+
export { PreprocessedHtmlFromConfluence, PreprocessedHtmlSchema } from "./ConfluencePreprocessor.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schemas/preprocessing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/schemas/preprocessing/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
|