@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.
Files changed (336) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +21 -0
  3. package/README.md +282 -14
  4. package/dist/ConfluenceAuth.d.ts +76 -0
  5. package/dist/ConfluenceAuth.d.ts.map +1 -0
  6. package/dist/ConfluenceAuth.js +356 -0
  7. package/dist/ConfluenceAuth.js.map +1 -0
  8. package/dist/ConfluenceClient.d.ts +26 -2
  9. package/dist/ConfluenceClient.d.ts.map +1 -1
  10. package/dist/ConfluenceClient.js +98 -92
  11. package/dist/ConfluenceClient.js.map +1 -1
  12. package/dist/ConfluenceConfig.d.ts +4 -24
  13. package/dist/ConfluenceConfig.d.ts.map +1 -1
  14. package/dist/ConfluenceConfig.js +45 -7
  15. package/dist/ConfluenceConfig.js.map +1 -1
  16. package/dist/ConfluenceError.d.ts +89 -6
  17. package/dist/ConfluenceError.d.ts.map +1 -1
  18. package/dist/ConfluenceError.js +88 -5
  19. package/dist/ConfluenceError.js.map +1 -1
  20. package/dist/GitError.d.ts +103 -0
  21. package/dist/GitError.d.ts.map +1 -0
  22. package/dist/GitError.js +85 -0
  23. package/dist/GitError.js.map +1 -0
  24. package/dist/GitService.d.ts +175 -0
  25. package/dist/GitService.d.ts.map +1 -0
  26. package/dist/GitService.js +431 -0
  27. package/dist/GitService.js.map +1 -0
  28. package/dist/LocalFileSystem.d.ts +29 -4
  29. package/dist/LocalFileSystem.d.ts.map +1 -1
  30. package/dist/LocalFileSystem.js +80 -6
  31. package/dist/LocalFileSystem.js.map +1 -1
  32. package/dist/MarkdownConverter.d.ts +49 -2
  33. package/dist/MarkdownConverter.d.ts.map +1 -1
  34. package/dist/MarkdownConverter.js +73 -111
  35. package/dist/MarkdownConverter.js.map +1 -1
  36. package/dist/SchemaConverterError.d.ts +108 -0
  37. package/dist/SchemaConverterError.d.ts.map +1 -0
  38. package/dist/SchemaConverterError.js +84 -0
  39. package/dist/SchemaConverterError.js.map +1 -0
  40. package/dist/Schemas.d.ts +225 -1
  41. package/dist/Schemas.d.ts.map +1 -1
  42. package/dist/Schemas.js +155 -6
  43. package/dist/Schemas.js.map +1 -1
  44. package/dist/SyncEngine.d.ts +30 -20
  45. package/dist/SyncEngine.d.ts.map +1 -1
  46. package/dist/SyncEngine.js +566 -117
  47. package/dist/SyncEngine.js.map +1 -1
  48. package/dist/ast/BlockNode.d.ts +468 -0
  49. package/dist/ast/BlockNode.d.ts.map +1 -0
  50. package/dist/ast/BlockNode.js +319 -0
  51. package/dist/ast/BlockNode.js.map +1 -0
  52. package/dist/ast/Document.d.ts +244 -0
  53. package/dist/ast/Document.d.ts.map +1 -0
  54. package/dist/ast/Document.js +69 -0
  55. package/dist/ast/Document.js.map +1 -0
  56. package/dist/ast/InlineNode.d.ts +477 -0
  57. package/dist/ast/InlineNode.d.ts.map +1 -0
  58. package/dist/ast/InlineNode.js +263 -0
  59. package/dist/ast/InlineNode.js.map +1 -0
  60. package/dist/ast/MacroNode.d.ts +267 -0
  61. package/dist/ast/MacroNode.d.ts.map +1 -0
  62. package/dist/ast/MacroNode.js +164 -0
  63. package/dist/ast/MacroNode.js.map +1 -0
  64. package/dist/ast/index.d.ts +10 -0
  65. package/dist/ast/index.d.ts.map +1 -0
  66. package/dist/ast/index.js +14 -0
  67. package/dist/ast/index.js.map +1 -0
  68. package/dist/bin.js +33 -149
  69. package/dist/bin.js.map +1 -1
  70. package/dist/commands/auth.d.ts +15 -0
  71. package/dist/commands/auth.d.ts.map +1 -0
  72. package/dist/commands/auth.js +86 -0
  73. package/dist/commands/auth.js.map +1 -0
  74. package/dist/commands/clone.d.ts +12 -0
  75. package/dist/commands/clone.d.ts.map +1 -0
  76. package/dist/commands/clone.js +93 -0
  77. package/dist/commands/clone.js.map +1 -0
  78. package/dist/commands/delete.d.ts +13 -0
  79. package/dist/commands/delete.d.ts.map +1 -0
  80. package/dist/commands/delete.js +48 -0
  81. package/dist/commands/delete.js.map +1 -0
  82. package/dist/commands/errorHandler.d.ts +14 -0
  83. package/dist/commands/errorHandler.d.ts.map +1 -0
  84. package/dist/commands/errorHandler.js +33 -0
  85. package/dist/commands/errorHandler.js.map +1 -0
  86. package/dist/commands/git.d.ts +22 -0
  87. package/dist/commands/git.d.ts.map +1 -0
  88. package/dist/commands/git.js +72 -0
  89. package/dist/commands/git.js.map +1 -0
  90. package/dist/commands/index.d.ts +11 -0
  91. package/dist/commands/index.d.ts.map +1 -0
  92. package/dist/commands/index.js +11 -0
  93. package/dist/commands/index.js.map +1 -0
  94. package/dist/commands/layers.d.ts +31 -0
  95. package/dist/commands/layers.d.ts.map +1 -0
  96. package/dist/commands/layers.js +137 -0
  97. package/dist/commands/layers.js.map +1 -0
  98. package/dist/commands/new.d.ts +9 -0
  99. package/dist/commands/new.d.ts.map +1 -0
  100. package/dist/commands/new.js +80 -0
  101. package/dist/commands/new.js.map +1 -0
  102. package/dist/commands/pageTree.d.ts +18 -0
  103. package/dist/commands/pageTree.d.ts.map +1 -0
  104. package/dist/commands/pageTree.js +20 -0
  105. package/dist/commands/pageTree.js.map +1 -0
  106. package/dist/commands/shared.d.ts +15 -0
  107. package/dist/commands/shared.d.ts.map +1 -0
  108. package/dist/commands/shared.js +27 -0
  109. package/dist/commands/shared.js.map +1 -0
  110. package/dist/commands/sync.d.ts +15 -0
  111. package/dist/commands/sync.d.ts.map +1 -0
  112. package/dist/commands/sync.js +101 -0
  113. package/dist/commands/sync.js.map +1 -0
  114. package/dist/index.d.ts +10 -1
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +14 -0
  117. package/dist/index.js.map +1 -1
  118. package/dist/internal/NodeLayers.d.ts +7 -0
  119. package/dist/internal/NodeLayers.d.ts.map +1 -0
  120. package/dist/internal/NodeLayers.js +19 -0
  121. package/dist/internal/NodeLayers.js.map +1 -0
  122. package/dist/internal/frontmatter.d.ts +10 -0
  123. package/dist/internal/frontmatter.d.ts.map +1 -1
  124. package/dist/internal/frontmatter.js +16 -0
  125. package/dist/internal/frontmatter.js.map +1 -1
  126. package/dist/internal/gitCommands.d.ts +78 -0
  127. package/dist/internal/gitCommands.d.ts.map +1 -0
  128. package/dist/internal/gitCommands.js +156 -0
  129. package/dist/internal/gitCommands.js.map +1 -0
  130. package/dist/internal/hashUtils.d.ts +42 -1
  131. package/dist/internal/hashUtils.d.ts.map +1 -1
  132. package/dist/internal/hashUtils.js +38 -2
  133. package/dist/internal/hashUtils.js.map +1 -1
  134. package/dist/internal/oauthServer.d.ts +55 -0
  135. package/dist/internal/oauthServer.d.ts.map +1 -0
  136. package/dist/internal/oauthServer.js +110 -0
  137. package/dist/internal/oauthServer.js.map +1 -0
  138. package/dist/internal/pathUtils.d.ts +21 -4
  139. package/dist/internal/pathUtils.d.ts.map +1 -1
  140. package/dist/internal/pathUtils.js +24 -13
  141. package/dist/internal/pathUtils.js.map +1 -1
  142. package/dist/internal/tokenStorage.d.ts +75 -0
  143. package/dist/internal/tokenStorage.d.ts.map +1 -0
  144. package/dist/internal/tokenStorage.js +149 -0
  145. package/dist/internal/tokenStorage.js.map +1 -0
  146. package/dist/internal/userCache.d.ts +42 -0
  147. package/dist/internal/userCache.d.ts.map +1 -0
  148. package/dist/internal/userCache.js +51 -0
  149. package/dist/internal/userCache.js.map +1 -0
  150. package/dist/parsers/ConfluenceParser.d.ts +26 -0
  151. package/dist/parsers/ConfluenceParser.d.ts.map +1 -0
  152. package/dist/parsers/ConfluenceParser.js +792 -0
  153. package/dist/parsers/ConfluenceParser.js.map +1 -0
  154. package/dist/parsers/MarkdownParser.d.ts +26 -0
  155. package/dist/parsers/MarkdownParser.d.ts.map +1 -0
  156. package/dist/parsers/MarkdownParser.js +873 -0
  157. package/dist/parsers/MarkdownParser.js.map +1 -0
  158. package/dist/parsers/index.d.ts +8 -0
  159. package/dist/parsers/index.d.ts.map +1 -0
  160. package/dist/parsers/index.js +8 -0
  161. package/dist/parsers/index.js.map +1 -0
  162. package/dist/schemas/ConfluenceSchema.d.ts +21 -0
  163. package/dist/schemas/ConfluenceSchema.d.ts.map +1 -0
  164. package/dist/schemas/ConfluenceSchema.js +38 -0
  165. package/dist/schemas/ConfluenceSchema.js.map +1 -0
  166. package/dist/schemas/ConversionSchema.d.ts +35 -0
  167. package/dist/schemas/ConversionSchema.d.ts.map +1 -0
  168. package/dist/schemas/ConversionSchema.js +208 -0
  169. package/dist/schemas/ConversionSchema.js.map +1 -0
  170. package/dist/schemas/MarkdownSchema.d.ts +21 -0
  171. package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
  172. package/dist/schemas/MarkdownSchema.js +38 -0
  173. package/dist/schemas/MarkdownSchema.js.map +1 -0
  174. package/dist/schemas/hast/HastFromHtml.d.ts +27 -0
  175. package/dist/schemas/hast/HastFromHtml.d.ts.map +1 -0
  176. package/dist/schemas/hast/HastFromHtml.js +107 -0
  177. package/dist/schemas/hast/HastFromHtml.js.map +1 -0
  178. package/dist/schemas/hast/HastSchema.d.ts +195 -0
  179. package/dist/schemas/hast/HastSchema.d.ts.map +1 -0
  180. package/dist/schemas/hast/HastSchema.js +183 -0
  181. package/dist/schemas/hast/HastSchema.js.map +1 -0
  182. package/dist/schemas/hast/index.d.ts +9 -0
  183. package/dist/schemas/hast/index.d.ts.map +1 -0
  184. package/dist/schemas/hast/index.js +3 -0
  185. package/dist/schemas/hast/index.js.map +1 -0
  186. package/dist/schemas/index.d.ts +14 -0
  187. package/dist/schemas/index.d.ts.map +1 -0
  188. package/dist/schemas/index.js +16 -0
  189. package/dist/schemas/index.js.map +1 -0
  190. package/dist/schemas/mdast/MdastFromMarkdown.d.ts +30 -0
  191. package/dist/schemas/mdast/MdastFromMarkdown.d.ts.map +1 -0
  192. package/dist/schemas/mdast/MdastFromMarkdown.js +79 -0
  193. package/dist/schemas/mdast/MdastFromMarkdown.js.map +1 -0
  194. package/dist/schemas/mdast/MdastSchema.d.ts +385 -0
  195. package/dist/schemas/mdast/MdastSchema.d.ts.map +1 -0
  196. package/dist/schemas/mdast/MdastSchema.js +266 -0
  197. package/dist/schemas/mdast/MdastSchema.js.map +1 -0
  198. package/dist/schemas/mdast/index.d.ts +10 -0
  199. package/dist/schemas/mdast/index.d.ts.map +1 -0
  200. package/dist/schemas/mdast/index.js +4 -0
  201. package/dist/schemas/mdast/index.js.map +1 -0
  202. package/dist/schemas/mdast/mdastToString.d.ts +13 -0
  203. package/dist/schemas/mdast/mdastToString.d.ts.map +1 -0
  204. package/dist/schemas/mdast/mdastToString.js +85 -0
  205. package/dist/schemas/mdast/mdastToString.js.map +1 -0
  206. package/dist/schemas/nodes/block/BlockSchema.d.ts +43 -0
  207. package/dist/schemas/nodes/block/BlockSchema.d.ts.map +1 -0
  208. package/dist/schemas/nodes/block/BlockSchema.js +634 -0
  209. package/dist/schemas/nodes/block/BlockSchema.js.map +1 -0
  210. package/dist/schemas/nodes/block/index.d.ts +7 -0
  211. package/dist/schemas/nodes/block/index.d.ts.map +1 -0
  212. package/dist/schemas/nodes/block/index.js +7 -0
  213. package/dist/schemas/nodes/block/index.js.map +1 -0
  214. package/dist/schemas/nodes/index.d.ts +9 -0
  215. package/dist/schemas/nodes/index.d.ts.map +1 -0
  216. package/dist/schemas/nodes/index.js +12 -0
  217. package/dist/schemas/nodes/index.js.map +1 -0
  218. package/dist/schemas/nodes/inline/InlineSchema.d.ts +48 -0
  219. package/dist/schemas/nodes/inline/InlineSchema.d.ts.map +1 -0
  220. package/dist/schemas/nodes/inline/InlineSchema.js +436 -0
  221. package/dist/schemas/nodes/inline/InlineSchema.js.map +1 -0
  222. package/dist/schemas/nodes/inline/index.d.ts +7 -0
  223. package/dist/schemas/nodes/inline/index.d.ts.map +1 -0
  224. package/dist/schemas/nodes/inline/index.js +7 -0
  225. package/dist/schemas/nodes/inline/index.js.map +1 -0
  226. package/dist/schemas/nodes/macro/MacroSchema.d.ts +27 -0
  227. package/dist/schemas/nodes/macro/MacroSchema.d.ts.map +1 -0
  228. package/dist/schemas/nodes/macro/MacroSchema.js +162 -0
  229. package/dist/schemas/nodes/macro/MacroSchema.js.map +1 -0
  230. package/dist/schemas/nodes/macro/index.d.ts +7 -0
  231. package/dist/schemas/nodes/macro/index.d.ts.map +1 -0
  232. package/dist/schemas/nodes/macro/index.js +7 -0
  233. package/dist/schemas/nodes/macro/index.js.map +1 -0
  234. package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts +24 -0
  235. package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts.map +1 -0
  236. package/dist/schemas/preprocessing/ConfluencePreprocessor.js +351 -0
  237. package/dist/schemas/preprocessing/ConfluencePreprocessor.js.map +1 -0
  238. package/dist/schemas/preprocessing/index.d.ts +8 -0
  239. package/dist/schemas/preprocessing/index.d.ts.map +1 -0
  240. package/dist/schemas/preprocessing/index.js +2 -0
  241. package/dist/schemas/preprocessing/index.js.map +1 -0
  242. package/dist/serializers/ConfluenceSerializer.d.ts +30 -0
  243. package/dist/serializers/ConfluenceSerializer.d.ts.map +1 -0
  244. package/dist/serializers/ConfluenceSerializer.js +551 -0
  245. package/dist/serializers/ConfluenceSerializer.js.map +1 -0
  246. package/dist/serializers/MarkdownSerializer.d.ts +34 -0
  247. package/dist/serializers/MarkdownSerializer.d.ts.map +1 -0
  248. package/dist/serializers/MarkdownSerializer.js +355 -0
  249. package/dist/serializers/MarkdownSerializer.js.map +1 -0
  250. package/dist/serializers/index.d.ts +8 -0
  251. package/dist/serializers/index.d.ts.map +1 -0
  252. package/dist/serializers/index.js +8 -0
  253. package/dist/serializers/index.js.map +1 -0
  254. package/package.json +27 -16
  255. package/src/ConfluenceAuth.ts +571 -0
  256. package/src/ConfluenceClient.ts +188 -156
  257. package/src/ConfluenceConfig.ts +63 -7
  258. package/src/ConfluenceError.ts +110 -14
  259. package/src/GitError.ts +92 -0
  260. package/src/GitService.ts +859 -0
  261. package/src/LocalFileSystem.ts +179 -9
  262. package/src/MarkdownConverter.ts +126 -122
  263. package/src/SchemaConverterError.ts +108 -0
  264. package/src/Schemas.ts +223 -6
  265. package/src/SyncEngine.ts +745 -162
  266. package/src/ast/BlockNode.ts +425 -0
  267. package/src/ast/Document.ts +90 -0
  268. package/src/ast/InlineNode.ts +323 -0
  269. package/src/ast/MacroNode.ts +245 -0
  270. package/src/ast/index.ts +83 -0
  271. package/src/bin.ts +50 -249
  272. package/src/commands/auth.ts +117 -0
  273. package/src/commands/clone.ts +145 -0
  274. package/src/commands/delete.ts +57 -0
  275. package/src/commands/errorHandler.ts +32 -0
  276. package/src/commands/git.ts +114 -0
  277. package/src/commands/index.ts +10 -0
  278. package/src/commands/layers.ts +211 -0
  279. package/src/commands/new.ts +99 -0
  280. package/src/commands/pageTree.ts +40 -0
  281. package/src/commands/shared.ts +35 -0
  282. package/src/commands/sync.ts +129 -0
  283. package/src/index.ts +21 -1
  284. package/src/internal/NodeLayers.ts +21 -0
  285. package/src/internal/frontmatter.ts +21 -0
  286. package/src/internal/gitCommands.ts +229 -0
  287. package/src/internal/hashUtils.ts +65 -3
  288. package/src/internal/oauthServer.ts +199 -0
  289. package/src/internal/pathUtils.ts +34 -17
  290. package/src/internal/tokenStorage.ts +240 -0
  291. package/src/internal/userCache.ts +90 -0
  292. package/src/parsers/ConfluenceParser.ts +950 -0
  293. package/src/parsers/MarkdownParser.ts +1198 -0
  294. package/src/parsers/index.ts +8 -0
  295. package/src/schemas/ConfluenceSchema.ts +56 -0
  296. package/src/schemas/ConversionSchema.ts +318 -0
  297. package/src/schemas/MarkdownSchema.ts +56 -0
  298. package/src/schemas/hast/HastFromHtml.ts +153 -0
  299. package/src/schemas/hast/HastSchema.ts +274 -0
  300. package/src/schemas/hast/index.ts +35 -0
  301. package/src/schemas/index.ts +20 -0
  302. package/src/schemas/mdast/MdastFromMarkdown.ts +118 -0
  303. package/src/schemas/mdast/MdastSchema.ts +566 -0
  304. package/src/schemas/mdast/index.ts +59 -0
  305. package/src/schemas/mdast/mdastToString.ts +102 -0
  306. package/src/schemas/nodes/block/BlockSchema.ts +773 -0
  307. package/src/schemas/nodes/block/index.ts +13 -0
  308. package/src/schemas/nodes/index.ts +20 -0
  309. package/src/schemas/nodes/inline/InlineSchema.ts +523 -0
  310. package/src/schemas/nodes/inline/index.ts +14 -0
  311. package/src/schemas/nodes/macro/MacroSchema.ts +226 -0
  312. package/src/schemas/nodes/macro/index.ts +6 -0
  313. package/src/schemas/preprocessing/ConfluencePreprocessor.ts +446 -0
  314. package/src/schemas/preprocessing/index.ts +8 -0
  315. package/src/serializers/ConfluenceSerializer.ts +717 -0
  316. package/src/serializers/MarkdownSerializer.ts +493 -0
  317. package/src/serializers/index.ts +8 -0
  318. package/test/GitService.test.ts +209 -0
  319. package/test/MarkdownConverter.test.ts +37 -3
  320. package/test/Schemas.test.ts +97 -2
  321. package/test/ast/BlockNode.test.ts +265 -0
  322. package/test/ast/Document.test.ts +126 -0
  323. package/test/ast/InlineNode.test.ts +161 -0
  324. package/test/fixtures/integration-test.html.fixture +103 -0
  325. package/test/fixtures/integration-test.md.expected +257 -0
  326. package/test/integration.test.ts +269 -0
  327. package/test/oauthServer.test.ts +50 -0
  328. package/test/parsers/ConfluenceParser.test.ts +283 -0
  329. package/test/schemas/ConfluencePreprocessor.test.ts +180 -0
  330. package/test/schemas/ConversionSchema.test.ts +159 -0
  331. package/test/schemas/HastSchema.test.ts +138 -0
  332. package/test/schemas/MdastSchema.test.ts +145 -0
  333. package/test/schemas/nodes/block/BlockSchema.test.ts +173 -0
  334. package/test/schemas/nodes/inline/InlineSchema.test.ts +198 -0
  335. package/test/schemas/nodes/macro/MacroSchema.test.ts +142 -0
  336. 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,7 @@
1
+ /**
2
+ * Macro node transform schemas.
3
+ *
4
+ * @module
5
+ */
6
+ export { macroNodeFromHastElement, macroNodeToHast, macroNodeToMdast } from "./MacroSchema.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Macro node transform schemas.
3
+ *
4
+ * @module
5
+ */
6
+ export { macroNodeFromHastElement, macroNodeToHast, macroNodeToMdast } from "./MacroSchema.js";
7
+ //# sourceMappingURL=index.js.map
@@ -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, "&amp;")
348
+ .replace(/</g, "&lt;")
349
+ .replace(/>/g, "&gt;")
350
+ .replace(/"/g, "&quot;");
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,2 @@
1
+ export { PreprocessedHtmlFromConfluence, PreprocessedHtmlSchema } from "./ConfluencePreprocessor.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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"}