@knpkv/confluence-to-markdown 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/LICENSE +21 -0
  3. package/README.md +22 -13
  4. package/dist/AdfPlaceholders.d.ts +42 -0
  5. package/dist/AdfPlaceholders.d.ts.map +1 -0
  6. package/dist/AdfPlaceholders.js +547 -0
  7. package/dist/AdfPlaceholders.js.map +1 -0
  8. package/dist/AdfSchemaValidator.d.ts +37 -0
  9. package/dist/AdfSchemaValidator.d.ts.map +1 -0
  10. package/dist/AdfSchemaValidator.js +37 -0
  11. package/dist/AdfSchemaValidator.js.map +1 -0
  12. package/dist/AdfWalker.d.ts +39 -0
  13. package/dist/AdfWalker.d.ts.map +1 -0
  14. package/dist/AdfWalker.js +527 -0
  15. package/dist/AdfWalker.js.map +1 -0
  16. package/dist/AtlaskitTransformers.d.ts +35 -0
  17. package/dist/AtlaskitTransformers.d.ts.map +1 -0
  18. package/dist/AtlaskitTransformers.js +48 -0
  19. package/dist/AtlaskitTransformers.js.map +1 -0
  20. package/dist/Brand.d.ts +6 -6
  21. package/dist/Brand.d.ts.map +1 -1
  22. package/dist/Brand.js +8 -6
  23. package/dist/Brand.js.map +1 -1
  24. package/dist/ConfluenceAuth.d.ts +4 -4
  25. package/dist/ConfluenceAuth.d.ts.map +1 -1
  26. package/dist/ConfluenceAuth.js +37 -39
  27. package/dist/ConfluenceAuth.js.map +1 -1
  28. package/dist/ConfluenceClient.d.ts +7 -17
  29. package/dist/ConfluenceClient.d.ts.map +1 -1
  30. package/dist/ConfluenceClient.js +81 -38
  31. package/dist/ConfluenceClient.js.map +1 -1
  32. package/dist/ConfluenceConfig.d.ts +3 -3
  33. package/dist/ConfluenceConfig.d.ts.map +1 -1
  34. package/dist/ConfluenceConfig.js +13 -11
  35. package/dist/ConfluenceConfig.js.map +1 -1
  36. package/dist/ConfluenceError.d.ts +68 -16
  37. package/dist/ConfluenceError.d.ts.map +1 -1
  38. package/dist/ConfluenceError.js +30 -1
  39. package/dist/ConfluenceError.js.map +1 -1
  40. package/dist/GitError.d.ts +5 -5
  41. package/dist/GitService.d.ts +11 -3
  42. package/dist/GitService.d.ts.map +1 -1
  43. package/dist/GitService.js +22 -27
  44. package/dist/GitService.js.map +1 -1
  45. package/dist/LocalFileSystem.d.ts +3 -3
  46. package/dist/LocalFileSystem.d.ts.map +1 -1
  47. package/dist/LocalFileSystem.js +6 -6
  48. package/dist/LocalFileSystem.js.map +1 -1
  49. package/dist/MarkdownConverter.d.ts +16 -65
  50. package/dist/MarkdownConverter.d.ts.map +1 -1
  51. package/dist/MarkdownConverter.js +64 -85
  52. package/dist/MarkdownConverter.js.map +1 -1
  53. package/dist/Schemas.d.ts +128 -141
  54. package/dist/Schemas.d.ts.map +1 -1
  55. package/dist/Schemas.js +21 -23
  56. package/dist/Schemas.js.map +1 -1
  57. package/dist/SyncEngine.d.ts +8 -5
  58. package/dist/SyncEngine.d.ts.map +1 -1
  59. package/dist/SyncEngine.js +189 -113
  60. package/dist/SyncEngine.js.map +1 -1
  61. package/dist/bin.js +23 -35
  62. package/dist/bin.js.map +1 -1
  63. package/dist/commands/auth.d.ts +2 -14
  64. package/dist/commands/auth.d.ts.map +1 -1
  65. package/dist/commands/auth.js +11 -16
  66. package/dist/commands/auth.js.map +1 -1
  67. package/dist/commands/clone.d.ts +4 -6
  68. package/dist/commands/clone.d.ts.map +1 -1
  69. package/dist/commands/clone.js +34 -32
  70. package/dist/commands/clone.js.map +1 -1
  71. package/dist/commands/delete.d.ts +2 -10
  72. package/dist/commands/delete.d.ts.map +1 -1
  73. package/dist/commands/delete.js +5 -4
  74. package/dist/commands/delete.js.map +1 -1
  75. package/dist/commands/errorHandler.d.ts +2 -1
  76. package/dist/commands/errorHandler.d.ts.map +1 -1
  77. package/dist/commands/errorHandler.js +22 -15
  78. package/dist/commands/errorHandler.js.map +1 -1
  79. package/dist/commands/fetch.d.ts +27 -0
  80. package/dist/commands/fetch.d.ts.map +1 -0
  81. package/dist/commands/fetch.js +48 -0
  82. package/dist/commands/fetch.js.map +1 -0
  83. package/dist/commands/git.d.ts +7 -10
  84. package/dist/commands/git.d.ts.map +1 -1
  85. package/dist/commands/git.js +6 -6
  86. package/dist/commands/git.js.map +1 -1
  87. package/dist/commands/index.d.ts +1 -0
  88. package/dist/commands/index.d.ts.map +1 -1
  89. package/dist/commands/index.js +1 -0
  90. package/dist/commands/index.js.map +1 -1
  91. package/dist/commands/layers.d.ts +10 -9
  92. package/dist/commands/layers.d.ts.map +1 -1
  93. package/dist/commands/layers.js +41 -30
  94. package/dist/commands/layers.js.map +1 -1
  95. package/dist/commands/new.d.ts +2 -6
  96. package/dist/commands/new.d.ts.map +1 -1
  97. package/dist/commands/new.js +5 -4
  98. package/dist/commands/new.js.map +1 -1
  99. package/dist/commands/pageInput.d.ts +19 -0
  100. package/dist/commands/pageInput.d.ts.map +1 -0
  101. package/dist/commands/pageInput.js +68 -0
  102. package/dist/commands/pageInput.js.map +1 -0
  103. package/dist/commands/root.d.ts +8 -0
  104. package/dist/commands/root.d.ts.map +1 -0
  105. package/dist/commands/root.js +29 -0
  106. package/dist/commands/root.js.map +1 -0
  107. package/dist/commands/sync.d.ts +6 -9
  108. package/dist/commands/sync.d.ts.map +1 -1
  109. package/dist/commands/sync.js +5 -6
  110. package/dist/commands/sync.js.map +1 -1
  111. package/dist/index.d.ts +3 -8
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +2 -13
  114. package/dist/index.js.map +1 -1
  115. package/dist/internal/NodeLayers.d.ts.map +1 -1
  116. package/dist/internal/NodeLayers.js +1 -2
  117. package/dist/internal/NodeLayers.js.map +1 -1
  118. package/dist/internal/adfMetadata.d.ts +30 -0
  119. package/dist/internal/adfMetadata.d.ts.map +1 -0
  120. package/dist/internal/adfMetadata.js +126 -0
  121. package/dist/internal/adfMetadata.js.map +1 -0
  122. package/dist/internal/cleanMarkdown.d.ts +5 -0
  123. package/dist/internal/cleanMarkdown.d.ts.map +1 -0
  124. package/dist/internal/cleanMarkdown.js +13 -0
  125. package/dist/internal/cleanMarkdown.js.map +1 -0
  126. package/dist/internal/frontmatter.d.ts.map +1 -1
  127. package/dist/internal/frontmatter.js +41 -8
  128. package/dist/internal/frontmatter.js.map +1 -1
  129. package/dist/internal/gitCommands.d.ts +9 -3
  130. package/dist/internal/gitCommands.d.ts.map +1 -1
  131. package/dist/internal/gitCommands.js +18 -9
  132. package/dist/internal/gitCommands.js.map +1 -1
  133. package/dist/internal/hashUtils.d.ts +1 -1
  134. package/dist/internal/hashUtils.d.ts.map +1 -1
  135. package/dist/internal/hashUtils.js +1 -1
  136. package/dist/internal/hashUtils.js.map +1 -1
  137. package/dist/internal/oauthServer.d.ts +10 -5
  138. package/dist/internal/oauthServer.d.ts.map +1 -1
  139. package/dist/internal/oauthServer.js +19 -40
  140. package/dist/internal/oauthServer.js.map +1 -1
  141. package/dist/internal/pathUtils.d.ts +1 -1
  142. package/dist/internal/pathUtils.d.ts.map +1 -1
  143. package/dist/internal/pathUtils.js +1 -1
  144. package/dist/internal/pathUtils.js.map +1 -1
  145. package/dist/internal/process.d.ts +15 -0
  146. package/dist/internal/process.d.ts.map +1 -0
  147. package/dist/internal/process.js +10 -0
  148. package/dist/internal/process.js.map +1 -0
  149. package/dist/internal/stdio.d.ts +6 -0
  150. package/dist/internal/stdio.d.ts.map +1 -0
  151. package/dist/internal/stdio.js +15 -0
  152. package/dist/internal/stdio.js.map +1 -0
  153. package/dist/internal/tokenStorage.d.ts +3 -13
  154. package/dist/internal/tokenStorage.d.ts.map +1 -1
  155. package/dist/internal/tokenStorage.js +26 -24
  156. package/dist/internal/tokenStorage.js.map +1 -1
  157. package/dist/internal/userCache.d.ts +1 -1
  158. package/dist/internal/userCache.d.ts.map +1 -1
  159. package/dist/internal/userCache.js +1 -1
  160. package/dist/internal/userCache.js.map +1 -1
  161. package/package.json +30 -30
  162. package/skills/confluence/SKILL.md +143 -0
  163. package/skills/confluence/agents/openai.yaml +4 -0
  164. package/src/AdfPlaceholders.ts +310 -13
  165. package/src/AdfSchemaValidator.ts +2 -4
  166. package/src/AdfWalker.ts +122 -42
  167. package/src/AtlaskitTransformers.ts +2 -4
  168. package/src/Brand.ts +11 -16
  169. package/src/ConfluenceAuth.ts +22 -30
  170. package/src/ConfluenceClient.ts +24 -20
  171. package/src/ConfluenceConfig.ts +14 -14
  172. package/src/GitService.ts +39 -49
  173. package/src/LocalFileSystem.ts +7 -9
  174. package/src/MarkdownConverter.ts +2 -4
  175. package/src/Schemas.ts +13 -12
  176. package/src/SyncEngine.ts +151 -53
  177. package/src/bin.ts +30 -56
  178. package/src/commands/auth.ts +21 -18
  179. package/src/commands/clone.ts +38 -37
  180. package/src/commands/delete.ts +5 -4
  181. package/src/commands/errorHandler.ts +25 -18
  182. package/src/commands/fetch.ts +90 -0
  183. package/src/commands/git.ts +6 -6
  184. package/src/commands/index.ts +1 -0
  185. package/src/commands/layers.ts +53 -33
  186. package/src/commands/new.ts +5 -4
  187. package/src/commands/pageInput.ts +103 -0
  188. package/src/commands/root.ts +59 -0
  189. package/src/commands/sync.ts +7 -6
  190. package/src/internal/NodeLayers.ts +1 -2
  191. package/src/internal/adfMetadata.ts +145 -0
  192. package/src/internal/cleanMarkdown.ts +15 -0
  193. package/src/internal/frontmatter.ts +45 -8
  194. package/src/internal/gitCommands.ts +23 -17
  195. package/src/internal/hashUtils.ts +2 -2
  196. package/src/internal/oauthServer.ts +84 -105
  197. package/src/internal/pathUtils.ts +1 -1
  198. package/src/internal/process.ts +15 -0
  199. package/src/internal/stdio.ts +22 -0
  200. package/src/internal/tokenStorage.ts +39 -29
  201. package/src/internal/userCache.ts +2 -2
  202. package/test/AdfPlaceholders.test.ts +213 -0
  203. package/test/AdfSchemaValidator.test.ts +6 -6
  204. package/test/AdfWalker.test.ts +167 -21
  205. package/test/AtlaskitTransformers.test.ts +4 -4
  206. package/test/Brand.test.ts +11 -11
  207. package/test/GitService.test.ts +6 -2
  208. package/test/MarkdownConverter.test.ts +12 -11
  209. package/test/RoundTrip.test.ts +258 -3
  210. package/test/Schemas.test.ts +40 -40
  211. package/test/adfMetadata.test.ts +110 -0
  212. package/test/cleanMarkdown.test.ts +36 -0
  213. package/test/commandHarness.test.ts +79 -0
  214. package/test/commandHarness.ts +147 -0
  215. package/test/fetch.test.ts +61 -0
  216. package/test/frontmatter.test.ts +41 -0
  217. package/test/integration.test.ts +569 -156
  218. package/test/layers.test.ts +12 -0
  219. package/test/oauthServer.test.ts +4 -5
  220. package/test/pageInput.test.ts +83 -0
  221. package/test/tokenStorage.test.ts +17 -17
  222. package/dist/SchemaConverterError.d.ts +0 -108
  223. package/dist/SchemaConverterError.d.ts.map +0 -1
  224. package/dist/SchemaConverterError.js +0 -84
  225. package/dist/SchemaConverterError.js.map +0 -1
  226. package/dist/ast/BlockNode.d.ts +0 -468
  227. package/dist/ast/BlockNode.d.ts.map +0 -1
  228. package/dist/ast/BlockNode.js +0 -319
  229. package/dist/ast/BlockNode.js.map +0 -1
  230. package/dist/ast/Document.d.ts +0 -244
  231. package/dist/ast/Document.d.ts.map +0 -1
  232. package/dist/ast/Document.js +0 -69
  233. package/dist/ast/Document.js.map +0 -1
  234. package/dist/ast/InlineNode.d.ts +0 -477
  235. package/dist/ast/InlineNode.d.ts.map +0 -1
  236. package/dist/ast/InlineNode.js +0 -263
  237. package/dist/ast/InlineNode.js.map +0 -1
  238. package/dist/ast/MacroNode.d.ts +0 -267
  239. package/dist/ast/MacroNode.d.ts.map +0 -1
  240. package/dist/ast/MacroNode.js +0 -164
  241. package/dist/ast/MacroNode.js.map +0 -1
  242. package/dist/ast/index.d.ts +0 -10
  243. package/dist/ast/index.d.ts.map +0 -1
  244. package/dist/ast/index.js +0 -14
  245. package/dist/ast/index.js.map +0 -1
  246. package/dist/parsers/ConfluenceParser.d.ts +0 -26
  247. package/dist/parsers/ConfluenceParser.d.ts.map +0 -1
  248. package/dist/parsers/ConfluenceParser.js +0 -792
  249. package/dist/parsers/ConfluenceParser.js.map +0 -1
  250. package/dist/parsers/MarkdownParser.d.ts +0 -26
  251. package/dist/parsers/MarkdownParser.d.ts.map +0 -1
  252. package/dist/parsers/MarkdownParser.js +0 -873
  253. package/dist/parsers/MarkdownParser.js.map +0 -1
  254. package/dist/parsers/index.d.ts +0 -8
  255. package/dist/parsers/index.d.ts.map +0 -1
  256. package/dist/parsers/index.js +0 -8
  257. package/dist/parsers/index.js.map +0 -1
  258. package/dist/parsers/preprocessing/ConfluencePreprocessing.d.ts +0 -23
  259. package/dist/parsers/preprocessing/ConfluencePreprocessing.d.ts.map +0 -1
  260. package/dist/parsers/preprocessing/ConfluencePreprocessing.js +0 -323
  261. package/dist/parsers/preprocessing/ConfluencePreprocessing.js.map +0 -1
  262. package/dist/parsers/preprocessing/index.d.ts +0 -7
  263. package/dist/parsers/preprocessing/index.d.ts.map +0 -1
  264. package/dist/parsers/preprocessing/index.js +0 -7
  265. package/dist/parsers/preprocessing/index.js.map +0 -1
  266. package/dist/schemas/ConfluenceSchema.d.ts +0 -21
  267. package/dist/schemas/ConfluenceSchema.d.ts.map +0 -1
  268. package/dist/schemas/ConfluenceSchema.js +0 -38
  269. package/dist/schemas/ConfluenceSchema.js.map +0 -1
  270. package/dist/schemas/ConversionSchema.d.ts +0 -35
  271. package/dist/schemas/ConversionSchema.d.ts.map +0 -1
  272. package/dist/schemas/ConversionSchema.js +0 -208
  273. package/dist/schemas/ConversionSchema.js.map +0 -1
  274. package/dist/schemas/MarkdownSchema.d.ts +0 -21
  275. package/dist/schemas/MarkdownSchema.d.ts.map +0 -1
  276. package/dist/schemas/MarkdownSchema.js +0 -38
  277. package/dist/schemas/MarkdownSchema.js.map +0 -1
  278. package/dist/schemas/hast/HastFromHtml.d.ts +0 -27
  279. package/dist/schemas/hast/HastFromHtml.d.ts.map +0 -1
  280. package/dist/schemas/hast/HastFromHtml.js +0 -107
  281. package/dist/schemas/hast/HastFromHtml.js.map +0 -1
  282. package/dist/schemas/hast/HastSchema.d.ts +0 -195
  283. package/dist/schemas/hast/HastSchema.d.ts.map +0 -1
  284. package/dist/schemas/hast/HastSchema.js +0 -183
  285. package/dist/schemas/hast/HastSchema.js.map +0 -1
  286. package/dist/schemas/hast/index.d.ts +0 -9
  287. package/dist/schemas/hast/index.d.ts.map +0 -1
  288. package/dist/schemas/hast/index.js +0 -3
  289. package/dist/schemas/hast/index.js.map +0 -1
  290. package/dist/schemas/index.d.ts +0 -14
  291. package/dist/schemas/index.d.ts.map +0 -1
  292. package/dist/schemas/index.js +0 -16
  293. package/dist/schemas/index.js.map +0 -1
  294. package/dist/schemas/mdast/MdastFromMarkdown.d.ts +0 -30
  295. package/dist/schemas/mdast/MdastFromMarkdown.d.ts.map +0 -1
  296. package/dist/schemas/mdast/MdastFromMarkdown.js +0 -79
  297. package/dist/schemas/mdast/MdastFromMarkdown.js.map +0 -1
  298. package/dist/schemas/mdast/MdastSchema.d.ts +0 -385
  299. package/dist/schemas/mdast/MdastSchema.d.ts.map +0 -1
  300. package/dist/schemas/mdast/MdastSchema.js +0 -266
  301. package/dist/schemas/mdast/MdastSchema.js.map +0 -1
  302. package/dist/schemas/mdast/index.d.ts +0 -10
  303. package/dist/schemas/mdast/index.d.ts.map +0 -1
  304. package/dist/schemas/mdast/index.js +0 -4
  305. package/dist/schemas/mdast/index.js.map +0 -1
  306. package/dist/schemas/mdast/mdastToString.d.ts +0 -13
  307. package/dist/schemas/mdast/mdastToString.d.ts.map +0 -1
  308. package/dist/schemas/mdast/mdastToString.js +0 -85
  309. package/dist/schemas/mdast/mdastToString.js.map +0 -1
  310. package/dist/schemas/nodes/block/BlockSchema.d.ts +0 -43
  311. package/dist/schemas/nodes/block/BlockSchema.d.ts.map +0 -1
  312. package/dist/schemas/nodes/block/BlockSchema.js +0 -634
  313. package/dist/schemas/nodes/block/BlockSchema.js.map +0 -1
  314. package/dist/schemas/nodes/block/index.d.ts +0 -7
  315. package/dist/schemas/nodes/block/index.d.ts.map +0 -1
  316. package/dist/schemas/nodes/block/index.js +0 -7
  317. package/dist/schemas/nodes/block/index.js.map +0 -1
  318. package/dist/schemas/nodes/index.d.ts +0 -9
  319. package/dist/schemas/nodes/index.d.ts.map +0 -1
  320. package/dist/schemas/nodes/index.js +0 -12
  321. package/dist/schemas/nodes/index.js.map +0 -1
  322. package/dist/schemas/nodes/inline/InlineSchema.d.ts +0 -48
  323. package/dist/schemas/nodes/inline/InlineSchema.d.ts.map +0 -1
  324. package/dist/schemas/nodes/inline/InlineSchema.js +0 -436
  325. package/dist/schemas/nodes/inline/InlineSchema.js.map +0 -1
  326. package/dist/schemas/nodes/inline/index.d.ts +0 -7
  327. package/dist/schemas/nodes/inline/index.d.ts.map +0 -1
  328. package/dist/schemas/nodes/inline/index.js +0 -7
  329. package/dist/schemas/nodes/inline/index.js.map +0 -1
  330. package/dist/schemas/nodes/macro/MacroSchema.d.ts +0 -27
  331. package/dist/schemas/nodes/macro/MacroSchema.d.ts.map +0 -1
  332. package/dist/schemas/nodes/macro/MacroSchema.js +0 -162
  333. package/dist/schemas/nodes/macro/MacroSchema.js.map +0 -1
  334. package/dist/schemas/nodes/macro/index.d.ts +0 -7
  335. package/dist/schemas/nodes/macro/index.d.ts.map +0 -1
  336. package/dist/schemas/nodes/macro/index.js +0 -7
  337. package/dist/schemas/nodes/macro/index.js.map +0 -1
  338. package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts +0 -53
  339. package/dist/schemas/preprocessing/ConfluencePreprocessor.d.ts.map +0 -1
  340. package/dist/schemas/preprocessing/ConfluencePreprocessor.js +0 -349
  341. package/dist/schemas/preprocessing/ConfluencePreprocessor.js.map +0 -1
  342. package/dist/schemas/preprocessing/index.d.ts +0 -8
  343. package/dist/schemas/preprocessing/index.d.ts.map +0 -1
  344. package/dist/schemas/preprocessing/index.js +0 -2
  345. package/dist/schemas/preprocessing/index.js.map +0 -1
  346. package/dist/serializers/ConfluenceSerializer.d.ts +0 -30
  347. package/dist/serializers/ConfluenceSerializer.d.ts.map +0 -1
  348. package/dist/serializers/ConfluenceSerializer.js +0 -551
  349. package/dist/serializers/ConfluenceSerializer.js.map +0 -1
  350. package/dist/serializers/MarkdownSerializer.d.ts +0 -34
  351. package/dist/serializers/MarkdownSerializer.d.ts.map +0 -1
  352. package/dist/serializers/MarkdownSerializer.js +0 -355
  353. package/dist/serializers/MarkdownSerializer.js.map +0 -1
  354. package/dist/serializers/index.d.ts +0 -8
  355. package/dist/serializers/index.d.ts.map +0 -1
  356. package/dist/serializers/index.js +0 -8
  357. package/dist/serializers/index.js.map +0 -1
@@ -0,0 +1,12 @@
1
+ import { describe, expect, it } from "@effect/vitest"
2
+ import { getLayerType } from "../src/commands/layers.js"
3
+
4
+ describe("getLayerType", () => {
5
+ it("routes fetch to the config-free fetch layer", () => {
6
+ expect(getLayerType(["fetch"])).toBe("fetch")
7
+ })
8
+
9
+ it("keeps clone on the clone layer", () => {
10
+ expect(getLayerType(["clone"])).toBe("clone")
11
+ })
12
+ })
@@ -1,14 +1,13 @@
1
1
  import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient"
2
- import * as HttpClient from "@effect/platform/HttpClient"
3
- import * as HttpClientRequest from "@effect/platform/HttpClientRequest"
4
2
  import { describe, expect, it } from "@effect/vitest"
5
3
  import * as Effect from "effect/Effect"
6
4
  import * as Fiber from "effect/Fiber"
7
5
  import * as Layer from "effect/Layer"
6
+ import { HttpClient, HttpClientRequest } from "effect/unstable/http"
8
7
  import { HttpServerFactoryLive } from "../src/internal/NodeLayers.js"
9
8
  import { startCallbackServer } from "../src/internal/oauthServer.js"
10
9
 
11
- const HttpClientLive = NodeHttpClient.layer
10
+ const HttpClientLive = NodeHttpClient.layerUndici
12
11
 
13
12
  describe("oauthServer", () => {
14
13
  describe("startCallbackServer", () => {
@@ -17,7 +16,7 @@ describe("oauthServer", () => {
17
16
  const expectedState = "test-state-123"
18
17
  const result = yield* startCallbackServer(expectedState)
19
18
 
20
- expect(result.port).toBeGreaterThanOrEqual(8585)
19
+ expect(result.port).toBe(8585)
21
20
  expect(typeof result.codePromise).toBe("object")
22
21
  expect(typeof result.shutdown).toBe("object")
23
22
 
@@ -31,7 +30,7 @@ describe("oauthServer", () => {
31
30
  const { codePromise, port, shutdown } = yield* startCallbackServer(expectedState)
32
31
 
33
32
  // Make callback request in background
34
- const codeReceiver = yield* Effect.fork(codePromise)
33
+ const codeReceiver = yield* Effect.forkChild(codePromise)
35
34
 
36
35
  // Simulate OAuth callback using Effect HttpClient
37
36
  const client = yield* HttpClient.HttpClient
@@ -0,0 +1,83 @@
1
+ import { describe, expect, it } from "@effect/vitest"
2
+ import * as Effect from "effect/Effect"
3
+ import { parseConfluencePageUrl, resolvePageInput } from "../src/commands/pageInput.js"
4
+
5
+ describe("page input", () => {
6
+ it.effect("parses shorthand Atlassian URLs", () =>
7
+ Effect.gen(function*() {
8
+ const result = yield* parseConfluencePageUrl("https://example.atlassian.com/2333334354")
9
+
10
+ expect(result).toEqual({
11
+ baseUrl: "https://example.atlassian.com",
12
+ pageId: "2333334354"
13
+ })
14
+ }))
15
+
16
+ it.effect("parses space page URLs", () =>
17
+ Effect.gen(function*() {
18
+ const result = yield* parseConfluencePageUrl(
19
+ "https://example.atlassian.net/wiki/spaces/DEV/pages/2333334354/Page+Title"
20
+ )
21
+
22
+ expect(result).toEqual({
23
+ baseUrl: "https://example.atlassian.net",
24
+ pageId: "2333334354"
25
+ })
26
+ }))
27
+
28
+ it.effect("parses wiki page URLs", () =>
29
+ Effect.gen(function*() {
30
+ const result = yield* parseConfluencePageUrl("https://example.atlassian.net/wiki/pages/2333334354")
31
+
32
+ expect(result).toEqual({
33
+ baseUrl: "https://example.atlassian.net",
34
+ pageId: "2333334354"
35
+ })
36
+ }))
37
+
38
+ it.effect("rejects unsupported hosts", () =>
39
+ Effect.gen(function*() {
40
+ const result = yield* Effect.result(parseConfluencePageUrl("https://example.com/wiki/pages/2333334354"))
41
+
42
+ expect(result._tag).toBe("Failure")
43
+ }))
44
+
45
+ it.effect("rejects URLs without a page ID", () =>
46
+ Effect.gen(function*() {
47
+ const result = yield* Effect.result(parseConfluencePageUrl("https://example.atlassian.net/wiki/spaces/DEV"))
48
+
49
+ expect(result._tag).toBe("Failure")
50
+ }))
51
+
52
+ it.effect("rejects page URLs when the segment after pages is not numeric", () =>
53
+ Effect.gen(function*() {
54
+ const result = yield* Effect.result(
55
+ parseConfluencePageUrl("https://example.atlassian.net/wiki/spaces/DEV/pages/not-a-page-id/2333334354")
56
+ )
57
+
58
+ expect(result._tag).toBe("Failure")
59
+ }))
60
+
61
+ it.effect("resolves separate page ID and base URL", () =>
62
+ Effect.gen(function*() {
63
+ const result = yield* resolvePageInput({
64
+ pageId: "2333334354",
65
+ baseUrl: "https://example.atlassian.net"
66
+ })
67
+
68
+ expect(result).toEqual({
69
+ baseUrl: "https://example.atlassian.net",
70
+ pageId: "2333334354"
71
+ })
72
+ }))
73
+
74
+ it.effect("rejects mixed URL and separate flags", () =>
75
+ Effect.gen(function*() {
76
+ const result = yield* Effect.result(resolvePageInput({
77
+ url: "https://example.atlassian.net/wiki/pages/2333334354",
78
+ pageId: "2333334354"
79
+ }))
80
+
81
+ expect(result._tag).toBe("Failure")
82
+ }))
83
+ })
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "@effect/vitest"
2
- import * as Either from "effect/Either"
2
+ import * as Result from "effect/Result"
3
3
  import * as Schema from "effect/Schema"
4
4
  import { OAuthConfigSchema, OAuthTokenSchema } from "../src/Schemas.js"
5
5
 
@@ -18,8 +18,8 @@ describe("tokenStorage schemas", () => {
18
18
  cloud_id: "test_cloud_id",
19
19
  site_url: "https://test.atlassian.net"
20
20
  }
21
- const result = Schema.decodeUnknownEither(OAuthTokenSchema)(token)
22
- expect(Either.isRight(result)).toBe(true)
21
+ const result = Schema.decodeUnknownResult(OAuthTokenSchema)(token)
22
+ expect(Result.isSuccess(result)).toBe(true)
23
23
  })
24
24
 
25
25
  it("validates token with user info", () => {
@@ -36,10 +36,10 @@ describe("tokenStorage schemas", () => {
36
36
  email: "test@example.com"
37
37
  }
38
38
  }
39
- const result = Schema.decodeUnknownEither(OAuthTokenSchema)(token)
40
- expect(Either.isRight(result)).toBe(true)
41
- if (Either.isRight(result)) {
42
- expect(result.right.user?.name).toBe("Test User")
39
+ const result = Schema.decodeUnknownResult(OAuthTokenSchema)(token)
40
+ expect(Result.isSuccess(result)).toBe(true)
41
+ if (Result.isSuccess(result)) {
42
+ expect(result.success.user?.name).toBe("Test User")
43
43
  }
44
44
  })
45
45
 
@@ -52,8 +52,8 @@ describe("tokenStorage schemas", () => {
52
52
  cloud_id: "test",
53
53
  site_url: "https://test.atlassian.net"
54
54
  }
55
- const result = Schema.decodeUnknownEither(OAuthTokenSchema)(token)
56
- expect(Either.isLeft(result)).toBe(true)
55
+ const result = Schema.decodeUnknownResult(OAuthTokenSchema)(token)
56
+ expect(Result.isFailure(result)).toBe(true)
57
57
  })
58
58
 
59
59
  it("rejects token with invalid expires_at type", () => {
@@ -65,8 +65,8 @@ describe("tokenStorage schemas", () => {
65
65
  cloud_id: "test",
66
66
  site_url: "https://test.atlassian.net"
67
67
  }
68
- const result = Schema.decodeUnknownEither(OAuthTokenSchema)(token)
69
- expect(Either.isLeft(result)).toBe(true)
68
+ const result = Schema.decodeUnknownResult(OAuthTokenSchema)(token)
69
+ expect(Result.isFailure(result)).toBe(true)
70
70
  })
71
71
  })
72
72
 
@@ -76,24 +76,24 @@ describe("tokenStorage schemas", () => {
76
76
  clientId: "test_client_id",
77
77
  clientSecret: "test_client_secret"
78
78
  }
79
- const result = Schema.decodeUnknownEither(OAuthConfigSchema)(config)
80
- expect(Either.isRight(result)).toBe(true)
79
+ const result = Schema.decodeUnknownResult(OAuthConfigSchema)(config)
80
+ expect(Result.isSuccess(result)).toBe(true)
81
81
  })
82
82
 
83
83
  it("rejects config missing clientSecret", () => {
84
84
  const config = {
85
85
  clientId: "test_client_id"
86
86
  }
87
- const result = Schema.decodeUnknownEither(OAuthConfigSchema)(config)
88
- expect(Either.isLeft(result)).toBe(true)
87
+ const result = Schema.decodeUnknownResult(OAuthConfigSchema)(config)
88
+ expect(Result.isFailure(result)).toBe(true)
89
89
  })
90
90
 
91
91
  it("rejects config missing clientId", () => {
92
92
  const config = {
93
93
  clientSecret: "test_client_secret"
94
94
  }
95
- const result = Schema.decodeUnknownEither(OAuthConfigSchema)(config)
96
- expect(Either.isLeft(result)).toBe(true)
95
+ const result = Schema.decodeUnknownResult(OAuthConfigSchema)(config)
96
+ expect(Result.isFailure(result)).toBe(true)
97
97
  })
98
98
  })
99
99
  })
@@ -1,108 +0,0 @@
1
- declare const ParseError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
2
- readonly _tag: "ParseError";
3
- } & Readonly<A>;
4
- /**
5
- * Error thrown when parsing HTML or Markdown fails.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { Effect } from "effect"
10
- * import { ParseError } from "@knpkv/confluence-to-markdown/SchemaConverterError"
11
- *
12
- * Effect.gen(function* () {
13
- * // ... parsing operation
14
- * }).pipe(
15
- * Effect.catchTag("ParseError", (error) =>
16
- * Effect.sync(() => console.error(`Parse error: ${error.message}`))
17
- * )
18
- * )
19
- * ```
20
- *
21
- * @category Errors
22
- */
23
- export declare class ParseError extends ParseError_base<{
24
- readonly source: "confluence" | "markdown";
25
- readonly message: string;
26
- readonly position?: {
27
- readonly line: number;
28
- readonly column: number;
29
- };
30
- readonly rawContent?: string;
31
- }> {
32
- }
33
- declare const SerializeError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
34
- readonly _tag: "SerializeError";
35
- } & Readonly<A>;
36
- /**
37
- * Error thrown when serializing AST to HTML or Markdown fails.
38
- *
39
- * @example
40
- * ```typescript
41
- * import { Effect } from "effect"
42
- * import { SerializeError } from "@knpkv/confluence-to-markdown/SchemaConverterError"
43
- *
44
- * Effect.gen(function* () {
45
- * // ... serialization operation
46
- * }).pipe(
47
- * Effect.catchTag("SerializeError", (error) =>
48
- * Effect.sync(() => console.error(`Serialize error: ${error.message}`))
49
- * )
50
- * )
51
- * ```
52
- *
53
- * @category Errors
54
- */
55
- export declare class SerializeError extends SerializeError_base<{
56
- readonly target: "confluence" | "markdown";
57
- readonly nodeType: string;
58
- readonly message: string;
59
- }> {
60
- }
61
- declare const MigrationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
62
- readonly _tag: "MigrationError";
63
- } & Readonly<A>;
64
- /**
65
- * Error thrown when migrating between schema versions fails.
66
- *
67
- * @example
68
- * ```typescript
69
- * import { Effect } from "effect"
70
- * import { MigrationError } from "@knpkv/confluence-to-markdown/SchemaConverterError"
71
- *
72
- * Effect.gen(function* () {
73
- * // ... migration operation
74
- * }).pipe(
75
- * Effect.catchTag("MigrationError", (error) =>
76
- * Effect.sync(() =>
77
- * console.error(`Migration error: ${error.nodeType} v${error.fromVersion} -> v${error.toVersion}`)
78
- * )
79
- * )
80
- * )
81
- * ```
82
- *
83
- * @category Errors
84
- */
85
- export declare class MigrationError extends MigrationError_base<{
86
- readonly nodeType: string;
87
- readonly fromVersion: number;
88
- readonly toVersion: number;
89
- readonly message: string;
90
- }> {
91
- }
92
- /**
93
- * Union of all schema converter errors.
94
- *
95
- * @category Errors
96
- */
97
- export type SchemaConverterError = ParseError | SerializeError | MigrationError;
98
- /**
99
- * Type guard to check if error is a SchemaConverterError.
100
- *
101
- * @param error - The error to check
102
- * @returns True if error is a SchemaConverterError
103
- *
104
- * @category Utilities
105
- */
106
- export declare const isSchemaConverterError: (error: unknown) => error is SchemaConverterError;
107
- export {};
108
- //# sourceMappingURL=SchemaConverterError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaConverterError.d.ts","sourceRoot":"","sources":["../src/SchemaConverterError.ts"],"names":[],"mappings":";;;AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,gBAA+B;IAC7D,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAA;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAC;CAAG;;;;AAEL;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAe,SAAQ,oBAAmC;IACrE,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAA;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAC;CAAG;;;;AAEL;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,SAAQ,oBAAmC;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAC;CAAG;AAEL;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAA;AAE/E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,oBAM9D,CAAA"}
@@ -1,84 +0,0 @@
1
- /**
2
- * Error types for schema-based conversion.
3
- *
4
- * @module
5
- */
6
- import * as Data from "effect/Data";
7
- /**
8
- * Error thrown when parsing HTML or Markdown fails.
9
- *
10
- * @example
11
- * ```typescript
12
- * import { Effect } from "effect"
13
- * import { ParseError } from "@knpkv/confluence-to-markdown/SchemaConverterError"
14
- *
15
- * Effect.gen(function* () {
16
- * // ... parsing operation
17
- * }).pipe(
18
- * Effect.catchTag("ParseError", (error) =>
19
- * Effect.sync(() => console.error(`Parse error: ${error.message}`))
20
- * )
21
- * )
22
- * ```
23
- *
24
- * @category Errors
25
- */
26
- export class ParseError extends Data.TaggedError("ParseError") {
27
- }
28
- /**
29
- * Error thrown when serializing AST to HTML or Markdown fails.
30
- *
31
- * @example
32
- * ```typescript
33
- * import { Effect } from "effect"
34
- * import { SerializeError } from "@knpkv/confluence-to-markdown/SchemaConverterError"
35
- *
36
- * Effect.gen(function* () {
37
- * // ... serialization operation
38
- * }).pipe(
39
- * Effect.catchTag("SerializeError", (error) =>
40
- * Effect.sync(() => console.error(`Serialize error: ${error.message}`))
41
- * )
42
- * )
43
- * ```
44
- *
45
- * @category Errors
46
- */
47
- export class SerializeError extends Data.TaggedError("SerializeError") {
48
- }
49
- /**
50
- * Error thrown when migrating between schema versions fails.
51
- *
52
- * @example
53
- * ```typescript
54
- * import { Effect } from "effect"
55
- * import { MigrationError } from "@knpkv/confluence-to-markdown/SchemaConverterError"
56
- *
57
- * Effect.gen(function* () {
58
- * // ... migration operation
59
- * }).pipe(
60
- * Effect.catchTag("MigrationError", (error) =>
61
- * Effect.sync(() =>
62
- * console.error(`Migration error: ${error.nodeType} v${error.fromVersion} -> v${error.toVersion}`)
63
- * )
64
- * )
65
- * )
66
- * ```
67
- *
68
- * @category Errors
69
- */
70
- export class MigrationError extends Data.TaggedError("MigrationError") {
71
- }
72
- /**
73
- * Type guard to check if error is a SchemaConverterError.
74
- *
75
- * @param error - The error to check
76
- * @returns True if error is a SchemaConverterError
77
- *
78
- * @category Utilities
79
- */
80
- export const isSchemaConverterError = (error) => typeof error === "object" &&
81
- error !== null &&
82
- "_tag" in error &&
83
- ["ParseError", "SerializeError", "MigrationError"].includes(error._tag);
84
- //# sourceMappingURL=SchemaConverterError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaConverterError.js","sourceRoot":"","sources":["../src/SchemaConverterError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,UAAW,SAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAK3D;CAAG;AAEL;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,cAAe,SAAQ,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAInE;CAAG;AAEL;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,cAAe,SAAQ,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAKnE;CAAG;AASL;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAc,EAAiC,EAAE,CACtF,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,MAAM,IAAI,KAAK;IACf,CAAC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CACxD,KAA0B,CAAC,IAAI,CACjC,CAAA"}