@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,323 @@
1
+ /**
2
+ * Inline AST node types for text-level content.
3
+ *
4
+ * @module
5
+ */
6
+ import * as Schema from "effect/Schema"
7
+
8
+ /**
9
+ * Optional raw Confluence HTML for exact roundtrip preservation.
10
+ * When present, the Confluence serializer will output this instead of reconstructing.
11
+ *
12
+ * @category InlineNode
13
+ */
14
+ export const RawConfluence = Schema.optional(Schema.String)
15
+
16
+ /**
17
+ * Plain text content.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { Text } from "@knpkv/confluence-to-markdown/ast"
22
+ *
23
+ * const text = new Text({ value: "Hello world" })
24
+ * ```
25
+ *
26
+ * @category InlineNode
27
+ */
28
+ export class Text extends Schema.TaggedClass<Text>()("Text", {
29
+ value: Schema.String
30
+ }) {}
31
+
32
+ /**
33
+ * Inline code span.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * import { InlineCode } from "@knpkv/confluence-to-markdown/ast"
38
+ *
39
+ * const code = new InlineCode({ value: "const x = 1" })
40
+ * ```
41
+ *
42
+ * @category InlineNode
43
+ */
44
+ export class InlineCode extends Schema.TaggedClass<InlineCode>()("InlineCode", {
45
+ value: Schema.String
46
+ }) {}
47
+
48
+ /**
49
+ * Line break element.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * import { LineBreak } from "@knpkv/confluence-to-markdown/ast"
54
+ *
55
+ * const br = new LineBreak({})
56
+ * ```
57
+ *
58
+ * @category InlineNode
59
+ */
60
+ export class LineBreak extends Schema.TaggedClass<LineBreak>()("LineBreak", {}) {}
61
+
62
+ /**
63
+ * Unsupported inline element - preserves raw content for round-tripping.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * import { UnsupportedInline } from "@knpkv/confluence-to-markdown/ast"
68
+ *
69
+ * const unknown = new UnsupportedInline({
70
+ * raw: "<custom-tag>content</custom-tag>",
71
+ * source: "confluence"
72
+ * })
73
+ * ```
74
+ *
75
+ * @category InlineNode
76
+ */
77
+ export class UnsupportedInline extends Schema.TaggedClass<UnsupportedInline>()("UnsupportedInline", {
78
+ raw: Schema.String,
79
+ source: Schema.Literal("confluence", "markdown")
80
+ }) {}
81
+
82
+ /**
83
+ * Emoticon/emoji element.
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * import { Emoticon } from "@knpkv/confluence-to-markdown/ast"
88
+ *
89
+ * const emoji = new Emoticon({
90
+ * shortname: ":grinning:",
91
+ * emojiId: "1f600",
92
+ * fallback: "😀"
93
+ * })
94
+ * ```
95
+ *
96
+ * @category InlineNode
97
+ */
98
+ export class Emoticon extends Schema.TaggedClass<Emoticon>()("Emoticon", {
99
+ shortname: Schema.String,
100
+ emojiId: Schema.String,
101
+ fallback: Schema.String,
102
+ rawConfluence: RawConfluence
103
+ }) {}
104
+
105
+ /**
106
+ * User mention element.
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * import { UserMention } from "@knpkv/confluence-to-markdown/ast"
111
+ *
112
+ * const mention = new UserMention({ accountId: "557058:..." })
113
+ * ```
114
+ *
115
+ * @category InlineNode
116
+ */
117
+ export class UserMention extends Schema.TaggedClass<UserMention>()("UserMention", {
118
+ accountId: Schema.String,
119
+ rawConfluence: RawConfluence
120
+ }) {}
121
+
122
+ /**
123
+ * Date/time element.
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * import { DateTime } from "@knpkv/confluence-to-markdown/ast"
128
+ *
129
+ * const date = new DateTime({ datetime: "2026-01-01" })
130
+ * ```
131
+ *
132
+ * @category InlineNode
133
+ */
134
+ export class DateTime extends Schema.TaggedClass<DateTime>()("DateTime", {
135
+ datetime: Schema.String,
136
+ rawConfluence: RawConfluence
137
+ }) {}
138
+
139
+ /**
140
+ * Underlined text.
141
+ *
142
+ * @category InlineNode
143
+ */
144
+ export class Underline extends Schema.TaggedClass<Underline>()("Underline", {
145
+ children: Schema.suspend(() => Schema.Array(InlineNodeBase))
146
+ }) {}
147
+
148
+ /**
149
+ * Subscript text.
150
+ *
151
+ * @category InlineNode
152
+ */
153
+ export class Subscript extends Schema.TaggedClass<Subscript>()("Subscript", {
154
+ children: Schema.suspend(() => Schema.Array(InlineNodeBase))
155
+ }) {}
156
+
157
+ /**
158
+ * Superscript text.
159
+ *
160
+ * @category InlineNode
161
+ */
162
+ export class Superscript extends Schema.TaggedClass<Superscript>()("Superscript", {
163
+ children: Schema.suspend(() => Schema.Array(InlineNodeBase))
164
+ }) {}
165
+
166
+ /**
167
+ * Strikethrough text.
168
+ *
169
+ * @category InlineNode
170
+ */
171
+ export class Strikethrough extends Schema.TaggedClass<Strikethrough>()("Strikethrough", {
172
+ children: Schema.suspend(() => Schema.Array(InlineNodeBase))
173
+ }) {}
174
+
175
+ /**
176
+ * Colored text with CSS color value.
177
+ *
178
+ * @category InlineNode
179
+ */
180
+ export class ColoredText extends Schema.TaggedClass<ColoredText>()("ColoredText", {
181
+ color: Schema.String,
182
+ children: Schema.suspend(() => Schema.Array(InlineNodeBase))
183
+ }) {}
184
+
185
+ /**
186
+ * Highlighted text with background color.
187
+ *
188
+ * @category InlineNode
189
+ */
190
+ export class Highlight extends Schema.TaggedClass<Highlight>()("Highlight", {
191
+ backgroundColor: Schema.String,
192
+ children: Schema.suspend(() => Schema.Array(InlineNodeBase))
193
+ }) {}
194
+
195
+ // Forward declaration for recursive types
196
+ // Define InlineNode union schema first (without recursive types)
197
+ const InlineNodeBase = Schema.Union(
198
+ Text,
199
+ InlineCode,
200
+ LineBreak,
201
+ Emoticon,
202
+ UserMention,
203
+ DateTime,
204
+ UnsupportedInline
205
+ )
206
+
207
+ /**
208
+ * Inline node children schema - use this for recursive inline content.
209
+ *
210
+ * @category InlineNode
211
+ */
212
+ export const InlineNodeChildren: Schema.Schema<ReadonlyArray<InlineNode>> = Schema.suspend(
213
+ () => Schema.Array(InlineNode)
214
+ )
215
+
216
+ /**
217
+ * Strong/bold text.
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * import { Strong, Text } from "@knpkv/confluence-to-markdown/ast"
222
+ *
223
+ * const bold = new Strong({ children: [new Text({ value: "important" })] })
224
+ * ```
225
+ *
226
+ * @category InlineNode
227
+ */
228
+ export class Strong extends Schema.TaggedClass<Strong>()("Strong", {
229
+ children: Schema.Array(InlineNodeBase)
230
+ }) {}
231
+
232
+ /**
233
+ * Emphasized/italic text.
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * import { Emphasis, Text } from "@knpkv/confluence-to-markdown/ast"
238
+ *
239
+ * const italic = new Emphasis({ children: [new Text({ value: "emphasized" })] })
240
+ * ```
241
+ *
242
+ * @category InlineNode
243
+ */
244
+ export class Emphasis extends Schema.TaggedClass<Emphasis>()("Emphasis", {
245
+ children: Schema.Array(InlineNodeBase)
246
+ }) {}
247
+
248
+ /**
249
+ * Hyperlink with optional title.
250
+ *
251
+ * @example
252
+ * ```typescript
253
+ * import { Link, Text } from "@knpkv/confluence-to-markdown/ast"
254
+ *
255
+ * const link = new Link({
256
+ * href: "https://example.com",
257
+ * title: "Example",
258
+ * children: [new Text({ value: "Click here" })]
259
+ * })
260
+ * ```
261
+ *
262
+ * @category InlineNode
263
+ */
264
+ export class Link extends Schema.TaggedClass<Link>()("Link", {
265
+ href: Schema.String,
266
+ title: Schema.optional(Schema.String),
267
+ children: Schema.Array(InlineNodeBase),
268
+ rawConfluence: RawConfluence
269
+ }) {}
270
+
271
+ /**
272
+ * Union of all inline node types.
273
+ *
274
+ * @category InlineNode
275
+ */
276
+ export const InlineNode = Schema.Union(
277
+ Text,
278
+ Strong,
279
+ Emphasis,
280
+ InlineCode,
281
+ Link,
282
+ LineBreak,
283
+ Emoticon,
284
+ UserMention,
285
+ DateTime,
286
+ Underline,
287
+ Subscript,
288
+ Superscript,
289
+ Strikethrough,
290
+ ColoredText,
291
+ Highlight,
292
+ UnsupportedInline
293
+ )
294
+
295
+ /**
296
+ * Type for inline nodes.
297
+ *
298
+ * @category Types
299
+ */
300
+ export type InlineNode =
301
+ | Text
302
+ | Strong
303
+ | Emphasis
304
+ | InlineCode
305
+ | Link
306
+ | LineBreak
307
+ | Emoticon
308
+ | UserMention
309
+ | DateTime
310
+ | Underline
311
+ | Subscript
312
+ | Superscript
313
+ | Strikethrough
314
+ | ColoredText
315
+ | Highlight
316
+ | UnsupportedInline
317
+
318
+ /**
319
+ * Schema type helper for InlineNode.
320
+ *
321
+ * @category Types
322
+ */
323
+ export type InlineNodeSchema = typeof InlineNode
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Confluence macro AST node types.
3
+ *
4
+ * @module
5
+ */
6
+ import * as Schema from "effect/Schema"
7
+ import {
8
+ CodeBlock,
9
+ Heading,
10
+ Image,
11
+ Paragraph,
12
+ RawConfluence,
13
+ SchemaVersion,
14
+ Table,
15
+ ThematicBreak,
16
+ UnsupportedBlock
17
+ } from "./BlockNode.js"
18
+
19
+ // Reuse SimpleBlockNode for macro children
20
+ const SimpleBlockNode = Schema.Union(
21
+ Heading,
22
+ Paragraph,
23
+ CodeBlock,
24
+ ThematicBreak,
25
+ Image,
26
+ Table,
27
+ UnsupportedBlock
28
+ )
29
+
30
+ /**
31
+ * Supported panel type names.
32
+ * Single source of truth for all panel macros.
33
+ *
34
+ * @category MacroNode
35
+ */
36
+ export const PanelTypes = ["info", "warning", "note", "tip", "error", "panel"] as const
37
+
38
+ /**
39
+ * Panel type for info/warning/note macros.
40
+ *
41
+ * @category MacroNode
42
+ */
43
+ export const PanelType = Schema.Literal(...PanelTypes)
44
+
45
+ /**
46
+ * Type for panel type.
47
+ *
48
+ * @category Types
49
+ */
50
+ export type PanelType = Schema.Schema.Type<typeof PanelType>
51
+
52
+ /**
53
+ * Info/Warning/Note panel macro.
54
+ *
55
+ * Represents Confluence info, warning, note, tip, and error panels.
56
+ * In Markdown, rendered as `:::info`, `:::warning`, etc. container syntax.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * import { InfoPanel, Paragraph, Text } from "@knpkv/confluence-to-markdown/ast"
61
+ *
62
+ * const panel = {
63
+ * _tag: "InfoPanel" as const,
64
+ * panelType: "warning" as const,
65
+ * title: "Important",
66
+ * children: [new Paragraph({ children: [new Text({ value: "Be careful!" })] })]
67
+ * }
68
+ * ```
69
+ *
70
+ * @category MacroNode
71
+ */
72
+ export const InfoPanel = Schema.Struct({
73
+ _tag: Schema.Literal("InfoPanel"),
74
+ version: SchemaVersion,
75
+ panelType: PanelType,
76
+ title: Schema.optional(Schema.String),
77
+ children: Schema.Array(SimpleBlockNode),
78
+ rawConfluence: RawConfluence
79
+ })
80
+
81
+ /**
82
+ * Type for InfoPanel.
83
+ *
84
+ * @category Types
85
+ */
86
+ export type InfoPanel = Schema.Schema.Type<typeof InfoPanel>
87
+
88
+ /**
89
+ * Expand/collapse macro.
90
+ *
91
+ * Represents Confluence expand macro for collapsible content.
92
+ * In Markdown, rendered as `:::details` container syntax.
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * import { ExpandMacro, Paragraph, Text } from "@knpkv/confluence-to-markdown/ast"
97
+ *
98
+ * const expand = {
99
+ * _tag: "ExpandMacro" as const,
100
+ * title: "Click to expand",
101
+ * children: [new Paragraph({ children: [new Text({ value: "Hidden content" })] })]
102
+ * }
103
+ * ```
104
+ *
105
+ * @category MacroNode
106
+ */
107
+ export const ExpandMacro = Schema.Struct({
108
+ _tag: Schema.Literal("ExpandMacro"),
109
+ version: SchemaVersion,
110
+ title: Schema.optional(Schema.String),
111
+ children: Schema.Array(SimpleBlockNode),
112
+ rawConfluence: RawConfluence
113
+ })
114
+
115
+ /**
116
+ * Type for ExpandMacro.
117
+ *
118
+ * @category Types
119
+ */
120
+ export type ExpandMacro = Schema.Schema.Type<typeof ExpandMacro>
121
+
122
+ /**
123
+ * Table of contents macro.
124
+ *
125
+ * Represents Confluence TOC macro for auto-generated table of contents.
126
+ * In Markdown, rendered as `[[toc]]` or similar marker.
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * import { TocMacro } from "@knpkv/confluence-to-markdown/ast"
131
+ *
132
+ * const toc = {
133
+ * _tag: "TocMacro" as const,
134
+ * minLevel: 2,
135
+ * maxLevel: 4
136
+ * }
137
+ * ```
138
+ *
139
+ * @category MacroNode
140
+ */
141
+ export const TocMacro = Schema.Struct({
142
+ _tag: Schema.Literal("TocMacro"),
143
+ version: SchemaVersion,
144
+ minLevel: Schema.optional(Schema.Number),
145
+ maxLevel: Schema.optional(Schema.Number),
146
+ rawConfluence: RawConfluence
147
+ })
148
+
149
+ /**
150
+ * Type for TocMacro.
151
+ *
152
+ * @category Types
153
+ */
154
+ export type TocMacro = Schema.Schema.Type<typeof TocMacro>
155
+
156
+ /**
157
+ * Code macro with syntax highlighting.
158
+ *
159
+ * Represents Confluence code macro with language and options.
160
+ * Different from CodeBlock in that it preserves Confluence-specific options.
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * import { CodeMacro } from "@knpkv/confluence-to-markdown/ast"
165
+ *
166
+ * const code = {
167
+ * _tag: "CodeMacro" as const,
168
+ * language: "typescript",
169
+ * title: "Example",
170
+ * code: "const x = 1",
171
+ * lineNumbers: true
172
+ * }
173
+ * ```
174
+ *
175
+ * @category MacroNode
176
+ */
177
+ export const CodeMacro = Schema.Struct({
178
+ _tag: Schema.Literal("CodeMacro"),
179
+ version: SchemaVersion,
180
+ language: Schema.optional(Schema.String),
181
+ title: Schema.optional(Schema.String),
182
+ code: Schema.String,
183
+ lineNumbers: Schema.optionalWith(Schema.Boolean, { default: () => false }),
184
+ collapse: Schema.optionalWith(Schema.Boolean, { default: () => false }),
185
+ firstLine: Schema.optional(Schema.Number),
186
+ rawConfluence: RawConfluence
187
+ })
188
+
189
+ /**
190
+ * Type for CodeMacro.
191
+ *
192
+ * @category Types
193
+ */
194
+ export type CodeMacro = Schema.Schema.Type<typeof CodeMacro>
195
+
196
+ /**
197
+ * Status macro (colored label).
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * import { StatusMacro } from "@knpkv/confluence-to-markdown/ast"
202
+ *
203
+ * const status = {
204
+ * _tag: "StatusMacro" as const,
205
+ * text: "In Progress",
206
+ * color: "Blue"
207
+ * }
208
+ * ```
209
+ *
210
+ * @category MacroNode
211
+ */
212
+ export const StatusMacro = Schema.Struct({
213
+ _tag: Schema.Literal("StatusMacro"),
214
+ version: SchemaVersion,
215
+ text: Schema.String,
216
+ color: Schema.Literal("Grey", "Red", "Yellow", "Green", "Blue"),
217
+ rawConfluence: RawConfluence
218
+ })
219
+
220
+ /**
221
+ * Type for StatusMacro.
222
+ *
223
+ * @category Types
224
+ */
225
+ export type StatusMacro = Schema.Schema.Type<typeof StatusMacro>
226
+
227
+ /**
228
+ * Union of all macro node types.
229
+ *
230
+ * @category MacroNode
231
+ */
232
+ export const MacroNode = Schema.Union(
233
+ InfoPanel,
234
+ ExpandMacro,
235
+ TocMacro,
236
+ CodeMacro,
237
+ StatusMacro
238
+ )
239
+
240
+ /**
241
+ * Type for macro nodes.
242
+ *
243
+ * @category Types
244
+ */
245
+ export type MacroNode = InfoPanel | ExpandMacro | TocMacro | CodeMacro | StatusMacro
@@ -0,0 +1,83 @@
1
+ /**
2
+ * AST node types for Confluence <-> Markdown conversion.
3
+ *
4
+ * @module
5
+ */
6
+
7
+ // Inline nodes
8
+ export {
9
+ ColoredText,
10
+ DateTime,
11
+ Emoticon,
12
+ Emphasis,
13
+ Highlight,
14
+ InlineCode,
15
+ InlineNode,
16
+ type InlineNode as InlineNodeType,
17
+ LineBreak,
18
+ Link,
19
+ Strikethrough,
20
+ Strong,
21
+ Subscript,
22
+ Superscript,
23
+ Text,
24
+ Underline,
25
+ UnsupportedInline,
26
+ UserMention
27
+ } from "./InlineNode.js"
28
+
29
+ // Block nodes
30
+ export {
31
+ BlockNode,
32
+ type BlockNode as BlockNodeType,
33
+ BlockQuote,
34
+ CodeBlock,
35
+ Heading,
36
+ Image,
37
+ ImageAttachment,
38
+ type ImageAttachment as ImageAttachmentType,
39
+ List,
40
+ ListItem,
41
+ Paragraph,
42
+ SchemaVersion,
43
+ Table,
44
+ TableCell,
45
+ TableRow,
46
+ TaskItem,
47
+ type TaskItem as TaskItemType,
48
+ TaskList,
49
+ type TaskList as TaskListType,
50
+ TextAlignment,
51
+ type TextAlignment as TextAlignmentValue,
52
+ ThematicBreak,
53
+ UnsupportedBlock
54
+ } from "./BlockNode.js"
55
+
56
+ // Macro nodes
57
+ export {
58
+ CodeMacro,
59
+ type CodeMacro as CodeMacroType,
60
+ ExpandMacro,
61
+ type ExpandMacro as ExpandMacroType,
62
+ InfoPanel,
63
+ type InfoPanel as InfoPanelType,
64
+ MacroNode,
65
+ type MacroNode as MacroNodeType,
66
+ PanelType,
67
+ type PanelType as PanelTypeValue,
68
+ PanelTypes,
69
+ StatusMacro,
70
+ type StatusMacro as StatusMacroType,
71
+ TocMacro,
72
+ type TocMacro as TocMacroType
73
+ } from "./MacroNode.js"
74
+
75
+ // Document
76
+ export {
77
+ Document,
78
+ type Document as DocumentType,
79
+ DocumentNode,
80
+ type DocumentNode as DocumentNodeType,
81
+ isDocument,
82
+ makeDocument
83
+ } from "./Document.js"